1 19 20 package org.netbeans.modules.xml.axi.sync; 21 22 import java.beans.PropertyChangeEvent ; 23 import java.beans.PropertyChangeListener ; 24 import javax.swing.text.Document ; 25 import junit.framework.*; 26 import org.netbeans.modules.xml.axi.AXIDocument; 27 import org.netbeans.modules.xml.axi.AXIModel; 28 import org.netbeans.modules.xml.schema.model.SchemaModel; 29 import org.netbeans.modules.xml.xam.Model.State; 30 import org.netbeans.modules.xml.xam.dom.AbstractDocumentModel; 31 import org.openide.util.WeakListeners; 32 33 34 42 public class StateChangeTest extends AbstractSyncTestCase { 43 44 public static final String TEST_XSD = "resources/brokenSchema.xsd"; 45 private Document document; 46 private AXIModel.State expectedState = null; 47 private boolean invalidToValid = false; 48 private boolean validToInvalid = false; 49 50 public StateChangeTest(String testName) { 51 super(testName, TEST_XSD, null); 52 } 53 54 57 protected void setUp() throws Exception { 58 super.setUp(); 59 SchemaModel sm = getSchemaModel(); 60 document = ((AbstractDocumentModel)sm).getBaseDocument(); 61 AXIModel axiModel = getAXIModel(); 62 if (axiModel != null) { 63 ModelStateChangeListener listener = new ModelStateChangeListener(axiModel); 64 axiModel.addPropertyChangeListener(listener); 65 } 66 } 67 68 public static Test suite() { 69 TestSuite suite = new TestSuite(StateChangeTest.class); 70 return suite; 71 } 72 73 public void testStateChange() throws InterruptedException { 74 AXIModel model = getAXIModel(); 75 assert(model.getState() == AXIModel.State.NOT_WELL_FORMED); 77 String replaceFrom = "<xsd:element name=\"address\" type=\"addr:USAddr"; 78 String replaceTo = "<xsd:element name=\"address\" type=\"addr:USAddress\"/>"; 79 replaceInDocument(replaceFrom, replaceTo); 80 expectedState = AXIModel.State.VALID; 81 Thread.sleep(10000); 82 83 replaceInDocument(replaceTo, replaceFrom); 85 expectedState = AXIModel.State.NOT_WELL_FORMED; 86 Thread.sleep(10000); 87 88 assert(invalidToValid); 90 assert(validToInvalid); 91 } 92 93 private void replaceInDocument(String replaceFrom, String replaceTo) { 94 javax.swing.text.AbstractDocument doc = (javax.swing.text.AbstractDocument )document; 95 int len = replaceFrom.length(); 96 try { 97 String content = doc.getText(0,doc.getLength()); 98 int index = content.lastIndexOf(replaceFrom); 99 while (index>=0) { 100 doc.replace(index,len,replaceTo,null); 101 content=content.substring(0,index); 102 index = content.lastIndexOf(replaceFrom); 103 } 104 } catch (javax.swing.text.BadLocationException ex) { 105 ex.printStackTrace(); 106 } 107 } 108 109 112 private class ModelStateChangeListener implements PropertyChangeListener { 113 private AXIModel model; 114 ModelStateChangeListener(AXIModel model) { 115 this.model = model; 116 } 117 public void propertyChange(PropertyChangeEvent evt) { 118 String property = evt.getPropertyName(); 119 if(!AXIModel.STATE_PROPERTY.equals(property)) { 120 return; 121 } 122 123 State newState = (State)evt.getNewValue(); 124 State oldState = (State)evt.getOldValue(); 125 Object source = evt.getSource(); 126 assert(source == model); 127 if(newState == AXIModel.State.VALID) { 128 assert(oldState == AXIModel.State.NOT_WELL_FORMED); 129 assert(expectedState == newState); 130 AXIDocument doc = model.getRoot(); 131 assert(doc.getChildren().size() == 7); 132 assert(doc.getContentModels().size() == 3); 133 assert(doc.getChildElements().size() == 3); 134 invalidToValid = true; 135 return; 136 } 137 138 if(newState != AXIModel.State.VALID) { 139 assert(oldState == AXIModel.State.VALID); 140 assert(expectedState == newState); 141 validToInvalid = true; 142 return; 143 } 144 } 145 } 146 } 147 | Popular Tags |