View Javadoc

1   // Copyright (C) 2008 - 2009 Philip Aston
2   // All rights reserved.
3   //
4   // This file is part of The Grinder software distribution. Refer to
5   // the file LICENSE which is part of The Grinder distribution for
6   // licensing details. The Grinder distribution is available on the
7   // Internet at http://grinder.sourceforge.net/
8   //
9   // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
10  // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
11  // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
12  // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
13  // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
14  // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
15  // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
16  // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
17  // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
18  // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
19  // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
20  // OF THE POSSIBILITY OF SUCH DAMAGE.
21  
22  package net.grinder.console.swingui;
23  
24  import java.util.Enumeration;
25  
26  import javax.swing.event.ChangeEvent;
27  import javax.swing.event.ChangeListener;
28  import javax.swing.text.AttributeSet;
29  import javax.swing.text.DefaultStyledDocument;
30  
31  import junit.framework.TestCase;
32  import net.grinder.testutility.RandomStubFactory;
33  
34  
35  /**
36   * Unit tests for {@link IntegerField}.
37   *
38   * @author Philip Aston
39   */
40  public class TestIntegerField extends TestCase {
41  
42    public void testBadConstruction() throws Exception {
43      try {
44        new IntegerField(11, 10);
45        fail("Expected IllegalArgumentException");
46      }
47      catch (IllegalArgumentException e) {
48      }
49  
50      try {
51        new IntegerField(1, 0);
52        fail("Expected IllegalArgumentException");
53      }
54      catch (IllegalArgumentException e) {
55      }
56  
57      try {
58        new IntegerField(3, -1);
59        fail("Expected IllegalArgumentException");
60      }
61      catch (IllegalArgumentException e) {
62      }
63    }
64  
65    public void testGetAndSet() throws Exception {
66      final IntegerField field = new IntegerField(3, 7);
67  
68      assertEquals(3, field.getValue());
69  
70      try {
71        field.setValue(2);
72        fail("Expected IllegalArgumentException");
73      }
74      catch (IllegalArgumentException e) {
75      }
76  
77      try {
78        field.setValue(8);
79        fail("Expected IllegalArgumentException");
80      }
81      catch (IllegalArgumentException e) {
82      }
83  
84  
85      field.setValue(7);
86      assertEquals(7, field.getValue());
87  
88  
89      field.setValue(3);
90      assertEquals(3, field.getValue());
91  
92  
93      field.setValue(4);
94      assertEquals(4, field.getValue());
95  
96  
97      final IntegerField field2 = new IntegerField(-1, 0);
98      assertEquals(-1, field2.getValue());
99    }
100 
101   public void testNumberOfColumns() throws Exception {
102     assertEquals(1, new IntegerField(0, 1).getColumns());
103     assertEquals(1, new IntegerField(0, 9).getColumns());
104     assertEquals(2, new IntegerField(0, 10).getColumns());
105     assertEquals(2, new IntegerField(98, 99).getColumns());
106     assertEquals(3, new IntegerField(98, 100).getColumns());
107     assertEquals(5, new IntegerField(-1010, 1000).getColumns());
108   }
109 
110   public void testSetText() throws Exception {
111     final IntegerField field = new IntegerField(10, 15);
112 
113     field.setText("abc");
114     assertEquals(10, field.getValue());
115 
116 
117     field.setText("14");
118     assertEquals(14, field.getValue());
119     assertEquals("14", field.getText());
120 
121 
122     field.setText("20");
123     assertEquals("", field.getText());
124 
125 
126     field.setText("-");
127     assertEquals("", field.getText());
128     assertEquals(10, field.getValue());
129 
130 
131     final IntegerField field2 = new IntegerField(-10, 10);
132     field2.setText("-");
133     assertEquals("-", field2.getText());
134     assertEquals(-10, field2.getValue());
135 
136     field2.setText("10");
137     assertEquals("10", field2.getText());
138     assertEquals(10, field2.getValue());
139   }
140 
141   public void testChangeListener() throws Exception {
142     final IntegerField field = new IntegerField(0, 15);
143 
144     final RandomStubFactory<ChangeListener> listenerStubFactory =
145       RandomStubFactory.create(ChangeListener.class);
146     field.addChangeListener(listenerStubFactory.getStub());
147 
148 
149     field.setText("10");
150     listenerStubFactory.assertSuccess("stateChanged", ChangeEvent.class);
151     listenerStubFactory.assertNoMoreCalls();
152 
153 
154     field.getDocument().remove(0, 1);
155     listenerStubFactory.assertSuccess("stateChanged", ChangeEvent.class);
156     listenerStubFactory.assertNoMoreCalls();
157 
158 
159     // Can test "changeUpdate" with default document,
160     // never called for text area documents.
161     final IntegerField field2 = new IntegerField(0, 10);
162     final DefaultStyledDocument styledDocument = new DefaultStyledDocument();
163     field2.setDocument(styledDocument);
164     field2.addChangeListener(listenerStubFactory.getStub());
165     listenerStubFactory.assertNoMoreCalls();
166 
167     final RandomStubFactory<AttributeSet> attributeSetStubFactory =
168       RandomStubFactory.create(AttributeSet.class);
169 
170     attributeSetStubFactory.setResult("getAttributeNames",
171       new Enumeration<String>() {
172         public boolean hasMoreElements() { return false; }
173         public String nextElement() { return null; }
174       } );
175 
176     styledDocument.setCharacterAttributes(
177       0, 1, attributeSetStubFactory.getStub(), false);
178     listenerStubFactory.assertSuccess("stateChanged", ChangeEvent.class);
179 
180     listenerStubFactory.assertNoMoreCalls();
181   }
182 }