1 /*
2 * Angkor Web Framework
3 *
4 * Distributable under LGPL license.
5 * See terms of license at gnu.org.
6 */
7
8 package com.tirsen.angkor.test.unit.beans;
9
10 import junit.framework.TestCase;
11 import com.tirsen.angkor.*;
12 import com.tirsen.angkor.table.Table;
13 import com.tirsen.angkor.table.TableModel;
14 import com.tirsen.angkor.beans.*;
15 import com.tirsen.angkor.widget.*;
16
17 import java.beans.PropertyEditor;
18 import java.util.*;
19
20 /***
21 * <!-- $Id: BeanModelsTest.java,v 1.1 2002/10/07 19:49:23 tirsen Exp $ -->
22 *
23 * @author $Author: tirsen $
24 * @version $Revision: 1.1 $
25 */
26 public class BeanModelsTest extends TestCase
27 {
28 private int number;
29 private JavaBean bean;
30 private JavaBean nested;
31
32 public static class JavaBean
33 {
34 private int number;
35 private String text;
36 private JavaBean nested;
37 private JavaBean[] nestedArray;
38
39 public int getNumber()
40 {
41 return number;
42 }
43
44 public void setNumber(int number)
45 {
46 this.number = number;
47 }
48
49 public String getText()
50 {
51 return text;
52 }
53
54 public void setText(String text)
55 {
56 this.text = text;
57 }
58
59 public JavaBean getNested()
60 {
61 return nested;
62 }
63
64 public void setNested(JavaBean nested)
65 {
66 this.nested = nested;
67 }
68
69 public JavaBean[] getNestedArray()
70 {
71 return nestedArray;
72 }
73
74 public void setNestedArray(JavaBean[] nestedArray)
75 {
76 this.nestedArray = nestedArray;
77 }
78
79 public List getNestedList()
80 {
81 return Arrays.asList(getNestedArray());
82 }
83
84 public Collection getNestedCollection()
85 {
86 return getNestedList();
87 }
88
89 public Iterator getNestedIterator()
90 {
91 return getNestedList().iterator();
92 }
93
94 public JavaBean getIndexed(int i)
95 {
96 return (JavaBean) getNestedArray()[i];
97 }
98 }
99
100 public BeanModelsTest(String s)
101 {
102 super(s);
103 }
104
105 public void setUp()
106 {
107 number = 42;
108 bean = new JavaBean();
109 bean.setNumber(number);
110 nested = new JavaBean();
111 nested.setNumber(number);
112 bean.setNested(nested);
113 }
114
115 /***
116 * Tests the following functionality:
117 * <li> ability to extract a property value.
118 * <li> change the value via a property editor.
119 */
120 public void testPropertyValueModel()
121 {
122 ValueModel model = new BeanModel(bean).getValue("number");
123
124 assertTrue("model did not extract correct value", ((Integer) model.getValue()).intValue() == number);
125
126 // change value
127 int newnumber = number * 4711;
128 PropertyEditor editor = model.getPropertyEditor();
129 editor.setAsText("" + newnumber);
130 model.setValue(editor.getValue());
131
132 assertTrue("model did not change value correctly", ((Integer) model.getValue()).intValue() == newnumber);
133 }
134
135 public void testNested()
136 {
137 ValueModel value = new BeanModel(bean).getValue("nested.number");
138 bean.setNested(new JavaBean());
139 bean.getNested().setNumber(4711);
140 assertTrue("model did not extract correct value", ((Integer) value.getValue()).intValue() == 4711);
141
142 BeanTableModel table = new BeanModel(bean).getTable("nested.nestedArray");
143 table.addColumn("Number", "number");
144 bean.getNested().setNestedArray(new JavaBean[] { new JavaBean() });
145 value = table.getValueAt(0, 0);
146 value.setValue(new Integer(4711));
147 assertTrue("model did not extract correct value", ((Integer) value.getValue()).intValue() == 4711);
148 }
149
150 /***
151 * Tests the following functionality:
152 * <li> build the models to beans which does not yet exists, create the beans and use the models.
153 */
154 public void testModelProxy()
155 {
156 // create some models with no object backing them up
157 BeanModel proxy = new BeanModel(JavaBean.class);
158 BeanModel propertyProxy = proxy.getBean("nested");
159 ValueModel property = propertyProxy.getValue("number");
160
161 // create the objects and bind the proxy
162 proxy.setBean(bean);
163
164 // check that the property is correct
165 assertTrue("model did not fetch value correctly", number == ((Integer) property.getValue()).intValue());
166 }
167
168 public void testArrayTable() throws Exception
169 {
170 checkTableModel(null, "nestedArray");
171 }
172
173 public void testListTable() throws Exception
174 {
175 checkTableModel(JavaBean.class, "nestedList");
176 }
177
178 public void testIteratorTable() throws Exception
179 {
180 checkTableModel(JavaBean.class, "nestedIterator");
181 }
182
183 public void testCollectionTable() throws Exception
184 {
185 checkTableModel(JavaBean.class, "nestedCollection");
186 }
187
188 public void testIndexedTable() throws Exception
189 {
190 checkTableModel(JavaBean.class, "indexed");
191 }
192
193 private void checkTableModel(Class propertyClass, String property)
194 {
195 BeanModel model = new BeanModel(JavaBean.class);
196 BeanTableModel tableModel = model.getTable(property, propertyClass);
197 tableModel.addColumn("Number", "number");
198 tableModel.addColumn("Text", "text");
199
200 bean.setNestedArray(new JavaBean[0]);
201 model.setBean(bean);
202
203 assertTrue("doesn't handle empty rows", tableModel.getRowCount() == 0);
204
205 JavaBean bean1 = new JavaBean();
206 bean1.setNumber(1);
207 JavaBean bean2 = new JavaBean();
208 bean2.setNumber(2);
209 bean.setNestedArray(new JavaBean[] { bean1, bean2 });
210
211 System.out.println("tableModel.getRowCount() = " + tableModel.getRowCount());
212 assertTrue("incorrect number of rows", tableModel.getRowCount() == 2);
213 assertTrue("didn't access column correctly", ((Number) tableModel.getValueAt(0, 0).getValue()).intValue() == 1);
214
215 tableModel.getValueAt(0, 0).setValue(new Integer(4711));
216 assertTrue("didn't modify column correctly", ((Number) tableModel.getValueAt(0, 0).getValue()).intValue() == 4711);
217 }
218 }
This page was automatically generated by Maven