1 package org.netbeans.modules.xml.xam; 2 3 import junit.framework.*; 4 import java.beans.PropertyChangeEvent ; 5 import java.beans.PropertyChangeListener ; 6 import java.util.ArrayList ; 7 import java.util.Collections ; 8 import java.util.List ; 9 import org.netbeans.modules.xml.xam.TestComponent.A; 10 import org.netbeans.modules.xml.xam.TestComponent.B; 11 import org.netbeans.modules.xml.xam.TestComponent.C; 12 import org.netbeans.modules.xml.xam.dom.Utils; 13 import org.openide.util.WeakListeners; 14 15 19 public class AbstractComponentTest extends TestCase { 20 21 TestModel model; 22 TestComponent p; 23 A a1; 24 B b1; 25 C c1; 26 Listener listener; 27 TestComponentListener clistener; 28 29 public AbstractComponentTest(String testName) { 30 super(testName); 31 } 32 33 protected void setUp() throws Exception { 34 } 35 36 37 protected void tearDown() throws Exception { 38 } 39 40 public static Test suite() { 41 TestSuite suite = new TestSuite(AbstractComponentTest.class); 42 43 return suite; 44 } 45 46 static class Listener implements PropertyChangeListener { 47 private String event; 48 private Object old; 49 private Object now; 50 51 public void propertyChange(PropertyChangeEvent evt) { 52 assertNotNull(evt); 53 if (evt.getPropertyName().equals("setup")) { 54 return; 55 } 56 event = evt.getPropertyName(); 57 old = evt.getOldValue(); 58 now = evt.getNewValue(); 59 } 60 61 public String getEvent() { return event; } 62 public Object getOld() { return old; } 63 public Object getNow() { return now; } 64 public void reset() { event = null; old = null; now = null; } 65 66 public void assertEvent(String name, Object old, Object now) { 67 assertEquals(name+".event", name, getEvent()); 68 assertEquals(name+".old", old, getOld()); 69 assertEquals(name+".now", now, getNow()); 70 } 71 } 72 73 static class TestComponentListener implements ComponentListener { 74 List <ComponentEvent> accu = new ArrayList <ComponentEvent>(); 75 public void valueChanged(ComponentEvent evt) { 76 accu.add(evt); 77 } 78 public void childrenAdded(ComponentEvent evt) { 79 accu.add(evt); 80 } 81 public void childrenDeleted(ComponentEvent evt) { 82 accu.add(evt); 83 } 84 public void reset() { accu.clear(); } 85 public int getEventCount() { return accu.size(); } 86 public List <ComponentEvent> getEvents() { return accu; } 87 88 private void assertEvent(ComponentEvent.EventType type, Component source) { 89 for (ComponentEvent e : accu) { 90 if (e.getEventType().equals(type) && 91 e.getSource() == source) { 92 return; 93 } 94 } 95 assertTrue("Expect component change event" + type +" on source " + source, false); 96 } 97 } 98 99 public void testComponentEvents() throws Exception { 100 TestModel model = new TestModel(); 101 TestComponent root = model.getRootComponent(); 102 TestComponentListener listener1 = new TestComponentListener(); 103 TestComponentListener listener2 = new TestComponentListener(); 104 model.addComponentListener((ComponentListener)WeakListeners.create(ComponentListener.class, listener1, model)); 105 model.addComponentListener((ComponentListener)WeakListeners.create(ComponentListener.class, listener2, model)); 106 107 model.startTransaction(); 108 model.addChildComponent(root, new TestComponent.B(model, 1), -1); 109 model.endTransaction(); 110 111 listener1.assertEvent(ComponentEvent.EventType.CHILD_ADDED, root); 112 listener2.assertEvent(ComponentEvent.EventType.CHILD_ADDED, root); 113 114 model.startTransaction(); 115 B b = root.getChild(B.class); 116 b.setValue("test attribute value"); 117 model.endTransaction(); 118 listener1.assertEvent(ComponentEvent.EventType.VALUE_CHANGED, b); 119 listener2.assertEvent(ComponentEvent.EventType.VALUE_CHANGED, b); 120 121 model.startTransaction(); 122 model.removeChildComponent(root.getChild(B.class)); 123 model.endTransaction(); 124 125 listener1.assertEvent(ComponentEvent.EventType.CHILD_REMOVED, root); 126 listener2.assertEvent(ComponentEvent.EventType.CHILD_REMOVED, root); 127 } 128 129 public void testSetSameChild() throws Exception { 130 TestModel model = new TestModel(); 131 TestComponent root = model.getRootComponent(); 132 133 B b1 = new TestComponent.B(model, 1); 134 model.startTransaction(); 135 model.addChildComponent(root, b1, -1); 136 model.endTransaction(); 137 138 model.startTransaction(); 139 root.setChild(B.class, "testSetSameChild", b1, Collections.EMPTY_LIST); 140 model.endTransaction(); 141 142 assertEquals(1, root.getChildren(B.class).size()); 143 } 144 145 public void testAddAlreadyAddedChild() throws Exception { 146 TestModel model = new TestModel(); 147 TestComponent root = model.getRootComponent(); 148 149 B b1 = new TestComponent.B(model, 1); 150 model.startTransaction(); 151 model.addChildComponent(root, b1, -1); 152 model.endTransaction(); 153 154 model.startTransaction(); 155 try { 156 root.appendChild("testSetSameChild", b1); 157 assertFalse("Failed to get IllegalArgumentException", true); 158 } catch(IllegalArgumentException e) { 159 } finally { 161 if (model.isIntransaction()) model.endTransaction(); 162 } 163 164 assertEquals(1, root.getChildren(B.class).size()); 165 } 166 167 public void testRemoveNonExistingChild() throws Exception { 168 TestModel model = new TestModel(); 169 TestComponent root = model.getRootComponent(); 170 171 B b1 = new TestComponent.B(model, 1); 172 model.startTransaction(); 173 try { 174 root.removeChild("testRemove", b1); 175 assertFalse("Failed to get IllegalArgumentException", true); 176 } catch(IllegalArgumentException e) { 177 } finally { 179 if (model.isIntransaction()) model.endTransaction(); 180 } 181 182 model.startTransaction(); 183 model.addChildComponent(root, b1, -1); 184 model.endTransaction(); 185 186 model.startTransaction(); 187 root.removeChild("testRemoveChild", b1); 188 model.endTransaction(); 189 assertEquals(0, root.getChildren(B.class).size()); 190 191 model.startTransaction(); 192 try { 193 root.removeChild("testRemove", b1); 194 assertFalse("Failed to get IllegalArgumentException", true); 195 } catch(IllegalArgumentException e) { 196 } finally { 198 if (model.isIntransaction()) model.endTransaction(); 199 } 200 } 201 202 static char[] basechars = new char[] { 203 0x0041, 0x005A, 0x0061, 0x007A, 0x00C0, 0x00D6, 0x00D8, 0x00F6, 0x00F8, 204 0x00FF, 0x0100, 0x0131, 0x0134, 0x013E, 0x0141, 0x0148, 0x014A, 0x017E, 205 0x0180, 0x01C3, 0x01CD, 0x01F0, 0x01F4, 0x01F5, 0x01FA, 0x0217, 0x0250, 206 0x02A8, 0x02BB, 0x02C1, 0x0386, 0x0388, 0x038A, 0x038C, 0x038E, 0x03A1, 207 0x03A3, 0x03CE, 0x03D0, 0x03D6, 0x03DA, 0x03DC, 0x03DE, 0x03E0, 0x03E2, 208 0x03F3, 0x0401, 0x040C, 0x040E, 0x044F, 0x0451, 0x045C, 0x045E, 0x0481, 209 0x0490, 0x04C4, 0x04C7, 0x04C8, 0x04CB, 0x04CC, 0x04D0, 0x04EB, 0x04EE, 210 0x04F5, 0x04F8, 0x04F9, 0x0531, 0x0556, 0x0559, 0x0561, 0x0586, 0x05D0, 211 0x05EA, 0x05F0, 0x05F2, 0x0621, 0x063A, 0x0641, 0x064A, 0x0671, 0x06B7, 212 0x06BA, 0x06BE, 0x06C0, 0x06CE, 0x06D0, 0x06D3, 0x06D5, 0x06E5, 0x06E6, 213 0x0905, 0x0939, 0x093D, 0x0958, 0x0961, 0x0985, 0x098C, 0x098F, 0x0990, 214 0x0993, 0x09A8, 0x09AA, 0x09B0, 0x09B2, 0x09B6, 0x09B9, 0x09DC, 0x09DD, 215 0x09DF, 0x09E1, 0x09F0, 0x09F1, 0x0A05, 0x0A0A, 0x0A0F, 0x0A10, 0x0A13, 216 0x0A28, 0x0A2A, 0x0A30, 0x0A32, 0x0A33, 0x0A35, 0x0A36, 0x0A38, 0x0A39, 217 0x0A59, 0x0A5C, 0x0A5E, 0x0A72, 0x0A74, 0x0A85, 0x0A8B, 0x0A8D, 0x0A8F, 218 0x0A91, 0x0A93, 0x0AA8, 0x0AAA, 0x0AB0, 0x0AB2, 0x0AB3, 0x0AB5, 0x0AB9, 219 0x0ABD, 0x0AE0, 0x0B05, 0x0B0C, 0x0B0F, 0x0B10, 0x0B13, 0x0B28, 0x0B2A, 220 0x0B30, 0x0B32, 0x0B33, 0x0B36, 0x0B39, 0x0B3D, 0x0B5C, 0x0B5D, 0x0B5F, 221 0x0B61, 0x0B85, 0x0B8A, 0x0B8E, 0x0B90, 0x0B92, 0x0B95, 0x0B99, 0x0B9A, 222 0x0B9C, 0x0B9E, 0x0B9F, 0x0BA3, 0x0BA4, 0x0BA8, 0x0BAA, 0x0BAE, 0x0BB5, 223 0x0BB7, 0x0BB9, 0x0C05, 0x0C0C, 0x0C0E, 0x0C10, 0x0C12, 0x0C28, 0x0C2A, 224 0x0C33, 0x0C35, 0x0C39, 0x0C60, 0x0C61, 0x0C85, 0x0C8C, 0x0C8E, 0x0C90, 225 0x0C92, 0x0CA8, 0x0CAA, 0x0CB3, 0x0CB5, 0x0CB9, 0x0CDE, 0x0CE0, 0x0CE1, 226 0x0D05, 0x0D0C, 0x0D0E, 0x0D10, 0x0D12, 0x0D28, 0x0D2A, 0x0D39, 0x0D60, 227 0x0D61, 0x0E01, 0x0E2E, 0x0E30, 0x0E32, 0x0E33, 0x0E40, 0x0E45, 0x0E81, 228 0x0E82, 0x0E84, 0x0E87, 0x0E88, 0x0E8A, 0x0E8D, 0x0E94, 0x0E97, 0x0E99, 229 0x0E9F, 0x0EA1, 0x0EA3, 0x0EA5, 0x0EA7, 0x0EAA, 0x0EAB, 0x0EAD, 0x0EAE, 230 0x0EB0, 0x0EB2, 0x0EB3, 0x0EBD, 0x0EC0, 0x0EC4, 0x0F40, 0x0F47, 0x0F49, 231 0x0F69, 0x10A0, 0x10C5, 0x10D0, 0x10F6, 0x1100, 0x1102, 0x1103, 0x1105, 232 0x1107, 0x1109, 0x110B, 0x110C, 0x110E, 0x1112, 0x113C, 0x113E, 0x1140, 233 0x114C, 0x114E, 0x1150, 0x1154, 0x1155, 0x1159, 0x115F, 0x1161, 0x1163, 234 0x1165, 0x1167, 0x1169, 0x116D, 0x116E, 0x1172, 0x1173, 0x1175, 0x119E, 235 0x11A8, 0x11AB, 0x11AE, 0x11AF, 0x11B7, 0x11B8, 0x11BA, 0x11BC, 0x11C2, 236 0x11EB, 0x11F0, 0x11F9, 0x1E00, 0x1E9B, 0x1EA0, 0x1EF9, 0x1F00, 0x1F15, 237 0x1F18, 0x1F1D, 0x1F20, 0x1F45, 0x1F48, 0x1F4D, 0x1F50, 0x1F57, 0x1F59, 238 0x1F5B, 0x1F5D, 0x1F5F, 0x1F7D, 0x1F80, 0x1FB4, 0x1FB6, 0x1FBC, 0x1FBE, 239 0x1FC2, 0x1FC4, 0x1FC6, 0x1FCC, 0x1FD0, 0x1FD3, 0x1FD6, 0x1FDB, 0x1FE0, 240 0x1FEC, 0x1FF2, 0x1FF4, 0x1FF6, 0x1FFC, 0x2126, 0x212A, 0x212B, 0x212E, 241 0x2180, 0x2182, 0x3041, 0x3094, 0x30A1, 0x30FA, 0x3105, 0x312C, 0xAC00, 242 0xD7A2, 0xD7A3 243 }; 244 245 static char[] ideographics = new char[] { 246 0x4E00, 0x9FA5, 0x3007, 0x3021, 0x3028, 0x3029 247 }; 248 249 static char[] combiningChars = new char[] { 250 0x4E00, 0x0300, 0x0340, 0x0345, 0x0360, 0x0361, 0x0483, 0x0486, 0x0591, 251 0x05A1, 0x05A0, 0x05A3, 0x05B0, 0x05B9, 0x05BB, 0x05BD, 0x05BF, 0x05C1, 252 0x05C2, 0x05C4, 0x064B, 0x0652, 0x0670, 0x06D6, 0x06DC, 0x06DD, 0x06DF, 253 0x06E0, 0x06E4, 0x06E7, 0x06E8, 0x06EA, 0x06ED, 0x0901, 0x0903, 0x093C, 254 0x093E, 0x094C, 0x094D, 0x0951, 0x0954, 0x0962, 0x0963, 0x0981, 0x0983, 255 0x09BC, 0x09BE, 0x09BF, 0x09C0, 0x09C4, 0x09C7, 0x09C8, 0x09CB, 0x09CD, 256 0x09D7, 0x09E2, 0x09E3, 0x0A02, 0x0A3C, 0x0A3E, 0x0A3F, 0x0A40, 0x0A42, 257 0x0A47, 0x0A48, 0x0A4B, 0x0A4D, 0x0A70, 0x0A71, 0x0A81, 0x0A83, 0x0ABC, 258 0x0ABE, 0x0AC5, 0x0AC7, 0x0AC9, 0x0ACB, 0x0ACD, 0x0B01, 0x0B03, 0x0B3C, 259 0x0B3E, 0x0B43, 0x0B47, 0x0B48, 0x0B4B, 0x0B4D, 0x0B56, 0x0B57, 0x0B82, 260 0x0B83, 0x0BBE, 0x0BC2, 0x0BC6, 0x0BC8, 0x0BCA, 0x0BCD, 0x0BD7, 0x0C01, 261 0x0C03, 0x0C3E, 0x0C44, 0x0C46, 0x0C48, 0x0C4A, 0x0C4D, 0x0C55, 0x0C56, 262 0x0C82, 0x0C83, 0x0CBE, 0x0CC4, 0x0CC6, 0x0CC8, 0x0CCA, 0x0CCD, 0x0CD5, 263 0x0CD6, 0x0D02, 0x0D03, 0x0D3E, 0x0D43, 0x0D46, 0x0D48, 0x0D4A, 0x0D4D, 264 0x0D57, 0x0E31, 0x0E34, 0x0E3A, 0x0E47, 0x0E4E, 0x0EB1, 0x0EB4, 0x0EB9, 265 0x0EBB, 0x0EBC, 0x0EC8, 0x0ECD, 0x0F18, 0x0F19, 0x0F35, 0x0F37, 0x0F39, 266 0x0F3E, 0x0F3F, 0x0F71, 0x0F84, 0x0F86, 0x0F8B, 0x0F90, 0x0F95, 0x0F97, 267 0x0F99, 0x0FAD, 0x0FB1, 0x0FB7, 0x0FB9, 0x20D0, 0x20DC, 0x20E1, 0x302A, 268 0x302F, 0x3099, 0x309A }; 269 270 static char[] digits = new char[] { 271 0x0030, 0x0039, 0x0660, 0x0669, 0x06F0, 0x06F9, 0x0966, 0x096F, 0x09E6, 272 0x09EF, 0x0A66, 0x0A6F, 0x0AE6, 0x0AEF, 0x0B66, 0x0B6F, 0x0BE7, 0x0BEF, 273 0x0C66, 0x0C6F, 0x0CE6, 0x0CEF, 0x0D66, 0x0D6F, 0x0E50, 0x0E59, 0x0ED0, 274 0x0ED9, 0x0F20, 0x0F28, 0x0F29 275 }; 276 277 static char[] extenders = new char[] { 278 0x00B7, 0x02D0, 0x02D1, 0x0387, 0x0640, 0x0E46, 0x0EC6, 0x3005, 0x3031, 279 0x3035, 0x309D, 0x309E, 0x30FC, 0x30FD, 0x30FE 280 }; 281 282 public void testNCNamePattern() throws Exception { 283 assertTrue(Utils.isValidNCName(String.valueOf(basechars))); 284 assertTrue(Utils.isValidNCName(String.valueOf(ideographics))); 285 286 assertTrue(Utils.isValidNCName("_"+String.valueOf(digits))); 287 assertTrue(Utils.isValidNCName("_"+String.valueOf(combiningChars))); 288 assertTrue(Utils.isValidNCName("_"+String.valueOf(extenders))); 289 290 assertTrue(Utils.isValidNCName("ab_C1")); 291 assertTrue(Utils.isValidNCName("_abC1")); 292 assertTrue(Utils.isValidNCName("a.b.C1")); 293 assertTrue(Utils.isValidNCName("a-b-C1")); 294 295 assertFalse(Utils.isValidNCName("2ab_C1")); 296 assertFalse(Utils.isValidNCName("ab:C1")); 297 assertFalse(Utils.isValidNCName("ab!C1")); 298 assertFalse(Utils.isValidNCName("ab@C1")); 299 assertFalse(Utils.isValidNCName("ab#C1")); 300 assertFalse(Utils.isValidNCName("ab$C1")); 301 assertFalse(Utils.isValidNCName("ab%C1")); 302 assertFalse(Utils.isValidNCName("ab^C1")); 303 assertFalse(Utils.isValidNCName("ab&C1")); 304 assertFalse(Utils.isValidNCName("ab*C1")); 305 assertFalse(Utils.isValidNCName("ab(C1")); 306 assertFalse(Utils.isValidNCName("ab)C1")); 307 assertFalse(Utils.isValidNCName("ab+C1")); 308 assertFalse(Utils.isValidNCName("ab=C1")); 309 assertFalse(Utils.isValidNCName("ab C1")); 310 assertFalse(Utils.isValidNCName("ab[C1")); 311 assertFalse(Utils.isValidNCName("ab]C1")); 312 assertFalse(Utils.isValidNCName("ab{C1")); 313 assertFalse(Utils.isValidNCName("ab}C1")); 314 assertFalse(Utils.isValidNCName("ab|C1")); 315 assertFalse(Utils.isValidNCName("ab?C1")); 316 assertFalse(Utils.isValidNCName("ab/C1")); 317 assertFalse(Utils.isValidNCName("ab>C1")); 318 assertFalse(Utils.isValidNCName("ab<C1")); 319 assertFalse(Utils.isValidNCName("ab,C1")); 320 assertFalse(Utils.isValidNCName("ab;C1")); 321 assertFalse(Utils.isValidNCName("ab'C1")); 322 assertFalse(Utils.isValidNCName("ab~C1")); 323 assertFalse(Utils.isValidNCName("ab`C1")); 324 } 325 } 326 327 | Popular Tags |