1 33 34 package edu.rice.cs.drjava.model; 35 36 import junit.framework.*; 37 38 import java.io.*; 39 40 import javax.swing.text.BadLocationException ; 41 import javax.swing.text.Position ; 42 43 import edu.rice.cs.drjava.model.compiler.*; 44 45 52 public final class GlobalModelCompileErrorsTest extends GlobalModelTestCase { 53 54 private static final String FOO_MISSING_CLOSE_TEXT = "class DrJavaTestFoo {"; 55 private static final String BAR_MISSING_SEMI_TEXT = "class DrJavaTestBar { int x }"; 56 private static final String FOO_PACKAGE_AFTER_IMPORT = "import java.util.*;\npackage a;\n" + FOO_TEXT; 57 private static final String FOO_PACKAGE_INSIDE_CLASS = "class DrJavaTestFoo { package a; }"; 58 private static final String FOO_PACKAGE_AS_FIELD = "class DrJavaTestFoo { int package; }"; 59 private static final String FOO_PACKAGE_AS_FIELD_2 = "class DrJavaTestFoo { int package = 5; }"; 60 private static final String BAR_MISSING_SEMI_TEXT_MULTIPLE_LINES = 61 "class DrJavaTestFoo {\n int a = 5;\n int x\n }"; 62 63 69 83 86 private String _name() { 87 return "compiler=" + _model.getCompilerModel().getActiveCompiler().getName() + ": "; 88 } 89 90 95 public void testCompileAllFailsDifferentSourceRoots() throws BadLocationException , IOException, InterruptedException { 96 97 File aDir = new File(_tempDir, "a"); 98 File bDir = new File(_tempDir, "b"); 99 aDir.mkdir(); 100 bDir.mkdir(); 101 102 OpenDefinitionsDocument doc = setupDocument(FOO_MISSING_CLOSE_TEXT); 103 final File file = new File(aDir, "DrJavaTestFoo.java"); 104 doc.saveFile(new FileSelector(file)); 105 106 OpenDefinitionsDocument doc2 = setupDocument(BAR_MISSING_SEMI_TEXT); 107 final File file2 = new File(bDir, "DrJavaTestBar.java"); 108 doc2.saveFile(new FileSelector(file2)); 109 110 CompileShouldFailListener listener = new CompileShouldFailListener(); 111 112 _model.addListener(listener); 113 114 CompilerModel cm = _model.getCompilerModel(); 115 cm.compileAll(); 116 listener.waitCompileDone(); 117 118 assertCompileErrorsPresent(_name(), true); 119 assertEquals("Should have 2 compiler errors", 2, _model.getCompilerModel().getNumErrors()); 120 listener.checkCompileOccurred(); 121 122 File compiled = classForJava(file, "DrJavaTestFoo"); 124 assertEquals(_name() + "Class file exists after failing compile (1)", false, compiled.exists()); 125 File compiled2 = classForJava(file2, "DrJavaTestBar"); 126 assertEquals(_name() + "Class file exists after failing compile (2)", false, compiled2.exists()); 127 _model.removeListener(listener); 128 } 129 130 133 public void testCompilePackageAsField() throws BadLocationException , IOException, InterruptedException { 134 OpenDefinitionsDocument doc = setupDocument(FOO_PACKAGE_AS_FIELD); 135 final File file = tempFile(); 136 doc.saveFile(new FileSelector(file)); 137 138 CompileShouldFailListener listener = new CompileShouldFailListener(); 139 _model.addListener(listener); 140 141 doc.startCompile(); 142 listener.waitCompileDone(); 143 listener.checkCompileOccurred(); 144 145 assertCompileErrorsPresent(_name(), true); 147 148 File compiled = classForJava(file, "DrJavaTestFoo"); 149 assertEquals(_name() + "Class file exists after failing compile", false, compiled.exists()); 150 _model.removeListener(listener); 151 } 152 153 156 public void testCompilePackageAsField2() throws BadLocationException , IOException, InterruptedException { 157 OpenDefinitionsDocument doc = setupDocument(FOO_PACKAGE_AS_FIELD_2); 158 final File file = tempFile(); 159 doc.saveFile(new FileSelector(file)); 160 161 CompileShouldFailListener listener = new CompileShouldFailListener(); 162 _model.addListener(listener); 163 164 doc.startCompile(); 165 listener.waitCompileDone(); 166 listener.checkCompileOccurred(); 167 168 assertCompileErrorsPresent(_name(), true); 170 171 File compiled = classForJava(file, "DrJavaTestFoo"); 172 assertEquals(_name() + "Class file exists after failing compile", false, compiled.exists()); 173 _model.removeListener(listener); 174 } 175 176 177 public void testCompileMissingCloseSquiggly() throws BadLocationException , IOException, InterruptedException { 178 OpenDefinitionsDocument doc = setupDocument(FOO_MISSING_CLOSE_TEXT); 179 final File file = tempFile(); 180 doc.saveFile(new FileSelector(file)); 181 182 CompileShouldFailListener listener = new CompileShouldFailListener(); 183 _model.addListener(listener); 184 185 doc.startCompile(); 186 listener.waitCompileDone(); 187 assertCompileErrorsPresent(_name(), true); 188 listener.checkCompileOccurred(); 189 190 File compiled = classForJava(file, "DrJavaTestFoo"); 191 assertTrue(_name() + "Class file exists after compile?!", !compiled.exists()); 192 _model.removeListener(listener); 193 } 194 195 196 public void testCompileWithPackageStatementInsideClass() throws BadLocationException , IOException, 197 InterruptedException { 198 199 File baseTempDir = tempDirectory(); 201 File subdir = new File(baseTempDir, "a"); 202 File fooFile = new File(subdir, "DrJavaTestFoo.java"); 203 File compiled = classForJava(fooFile, "DrJavaTestFoo"); 204 205 subdir.mkdir(); 207 208 OpenDefinitionsDocument doc = setupDocument(FOO_PACKAGE_INSIDE_CLASS); 210 doc.saveFileAs(new FileSelector(fooFile)); 211 212 CompileShouldFailListener listener = new CompileShouldFailListener(); 214 _model.addListener(listener); 215 216 doc.startCompile(); 217 listener.waitCompileDone(); 218 219 listener.checkCompileOccurred(); 220 assertCompileErrorsPresent(_name(), true); 221 assertTrue(_name() + "Class file exists after failed compile", !compiled.exists()); 222 223 _model.getCompilerModel().resetCompilerErrors(); 225 CompilerErrorModel cem = _model.getCompilerModel().getCompilerErrorModel(); 226 assertEquals("CompilerErrorModel has errors after reset", 0, cem.getNumErrors()); 227 _model.removeListener(listener); 228 } 229 230 231 232 235 public void testCompileFailsCorrectLineNumbers() throws BadLocationException , IOException, InterruptedException { 236 File aDir = new File(_tempDir, "a"); 237 File bDir = new File(_tempDir, "b"); 238 aDir.mkdir(); 239 bDir.mkdir(); 240 OpenDefinitionsDocument doc = setupDocument(FOO_PACKAGE_AFTER_IMPORT); 241 final File file = new File(aDir, "DrJavaTestFoo.java"); 242 doc.saveFile(new FileSelector(file)); 243 OpenDefinitionsDocument doc2 = setupDocument(BAR_MISSING_SEMI_TEXT_MULTIPLE_LINES); 244 final File file2 = new File(bDir, "DrJavaTestBar.java"); 245 doc2.saveFile(new FileSelector(file2)); 246 247 248 CompileShouldFailListener listener = new CompileShouldFailListener(); 250 _model.addListener(listener); 251 252 CompilerModel cm = _model.getCompilerModel(); 253 cm.compileAll(); 254 listener.waitCompileDone(); 255 256 assertCompileErrorsPresent(_name(), true); 257 assertEquals("Should have 2 compiler errors", 2, _model.getCompilerModel().getNumErrors()); 258 listener.checkCompileOccurred(); 259 _model.removeListener(listener); 260 261 CompilerErrorModel cme = cm.getCompilerErrorModel(); 262 assertEquals("Should have had two errors", 2, cme.getNumErrors()); 263 264 CompilerError ce1 = cme.getError(0); 265 CompilerError ce2 = cme.getError(1); 266 assertEquals("first doc should have an error", file.getCanonicalFile(), ce1.file().getCanonicalFile()); 267 assertEquals("second doc should have an error", file2.getCanonicalFile(), ce2.file().getCanonicalFile()); 268 269 Position p1 = cme.getPosition(ce1); 270 Position p2 = cme.getPosition(ce2); 271 assertTrue("location of first error should be between 20 and 29 inclusive (line 2), but was " + p1.getOffset(), 272 p1.getOffset() <= 20 && p1.getOffset() <= 29); 273 assertTrue("location of error should be after 34 (line 3 or 4)", p2.getOffset() >= 34); 274 } 275 } 276 | Popular Tags |