OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 package com.google.dart.compiler.end2end.inc; | 4 package com.google.dart.compiler.end2end.inc; |
5 | 5 |
6 import static com.google.dart.compiler.DartCompiler.EXTENSION_DEPS; | 6 import static com.google.dart.compiler.DartCompiler.EXTENSION_DEPS; |
7 import static com.google.dart.compiler.DartCompiler.EXTENSION_TIMESTAMP; | 7 import static com.google.dart.compiler.DartCompiler.EXTENSION_TIMESTAMP; |
8 import static com.google.dart.compiler.common.ErrorExpectation.assertErrors; | 8 import static com.google.dart.compiler.common.ErrorExpectation.assertErrors; |
9 import static com.google.dart.compiler.common.ErrorExpectation.errEx; | 9 import static com.google.dart.compiler.common.ErrorExpectation.errEx; |
10 | 10 |
11 import com.google.common.collect.Lists; | 11 import com.google.common.collect.Lists; |
12 import com.google.dart.compiler.CompilerTestCase; | 12 import com.google.dart.compiler.CompilerTestCase; |
13 import com.google.dart.compiler.DartCompilationError; | 13 import com.google.dart.compiler.DartCompilationError; |
14 import com.google.dart.compiler.DartCompiler; | 14 import com.google.dart.compiler.DartCompiler; |
15 import com.google.dart.compiler.DartCompilerErrorCode; | 15 import com.google.dart.compiler.DartCompilerErrorCode; |
16 import com.google.dart.compiler.DartCompilerListener; | 16 import com.google.dart.compiler.DartCompilerListener; |
17 import com.google.dart.compiler.DartSource; | 17 import com.google.dart.compiler.DartSource; |
18 import com.google.dart.compiler.DefaultCompilerConfiguration; | 18 import com.google.dart.compiler.DefaultCompilerConfiguration; |
19 import com.google.dart.compiler.LibrarySource; | 19 import com.google.dart.compiler.LibrarySource; |
20 import com.google.dart.compiler.MockArtifactProvider; | 20 import com.google.dart.compiler.MockArtifactProvider; |
21 import com.google.dart.compiler.Source; | 21 import com.google.dart.compiler.Source; |
22 import com.google.dart.compiler.ast.DartUnit; | 22 import com.google.dart.compiler.ast.DartUnit; |
23 import com.google.dart.compiler.backend.js.JavascriptBackend; | |
24 import com.google.dart.compiler.resolver.ResolverErrorCode; | 23 import com.google.dart.compiler.resolver.ResolverErrorCode; |
25 import com.google.dart.compiler.resolver.TypeErrorCode; | 24 import com.google.dart.compiler.resolver.TypeErrorCode; |
26 | 25 |
27 import junit.framework.AssertionFailedError; | 26 import junit.framework.AssertionFailedError; |
28 | 27 |
29 import java.io.IOException; | 28 import java.io.IOException; |
30 import java.io.Reader; | 29 import java.io.Reader; |
31 import java.io.StringReader; | 30 import java.io.StringReader; |
32 import java.io.Writer; | 31 import java.io.Writer; |
33 import java.util.List; | 32 import java.util.List; |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
68 "// filler filler filler filler filler filler filler filler filler filler
filler", | 67 "// filler filler filler filler filler filler filler filler filler filler
filler", |
69 "#library('application');", | 68 "#library('application');", |
70 "#source('A.dart');", | 69 "#source('A.dart');", |
71 "#source('B.dart');", | 70 "#source('B.dart');", |
72 "#source('C.dart');", | 71 "#source('C.dart');", |
73 ""); | 72 ""); |
74 private final List<DartCompilationError> errors = Lists.newArrayList(); | 73 private final List<DartCompilationError> errors = Lists.newArrayList(); |
75 | 74 |
76 @Override | 75 @Override |
77 protected void setUp() throws Exception { | 76 protected void setUp() throws Exception { |
78 config = new DefaultCompilerConfiguration(new JavascriptBackend()) { | 77 config = new DefaultCompilerConfiguration() { |
79 @Override | 78 @Override |
80 public boolean incremental() { | 79 public boolean incremental() { |
81 return true; | 80 return true; |
82 } | 81 } |
83 }; | 82 }; |
84 provider = new IncMockArtifactProvider(); | 83 provider = new IncMockArtifactProvider(); |
85 appSource = new MemoryLibrarySource(APP, "<not-used>") { | 84 appSource = new MemoryLibrarySource(APP, "<not-used>") { |
86 @Override | 85 @Override |
87 public long getLastModified() { | 86 public long getLastModified() { |
88 return appSourceLastModified; | 87 return appSourceLastModified; |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
178 didWrite("B.dart", EXTENSION_TIMESTAMP); | 177 didWrite("B.dart", EXTENSION_TIMESTAMP); |
179 assertAppBuilt(); | 178 assertAppBuilt(); |
180 // "hole" was filled with top-level field. | 179 // "hole" was filled with top-level field. |
181 assertErrors(errors); | 180 assertErrors(errors); |
182 } | 181 } |
183 | 182 |
184 /** | 183 /** |
185 * Test for "hole" feature. If we use unqualified invocation and add/remove to
p-level method, this | 184 * Test for "hole" feature. If we use unqualified invocation and add/remove to
p-level method, this |
186 * should cause compilation of invocation unit. | 185 * should cause compilation of invocation unit. |
187 */ | 186 */ |
188 public void test_isMethodHole_useUnqualifiedInvocation() { | 187 public void test_isMethodHole_useUnqualifiedInvocation() throws Exception { |
189 appSource.setContent( | 188 appSource.setContent( |
190 "B.dart", | 189 "B.dart", |
191 makeCode( | 190 makeCode( |
192 "// filler filler filler filler filler filler filler filler filler f
iller filler", | 191 "// filler filler filler filler filler filler filler filler filler f
iller filler", |
193 "class A {", | 192 "class A {", |
194 " foo() {}", | 193 " foo() {}", |
195 "}", | 194 "}", |
196 "")); | 195 "")); |
197 appSource.setContent( | 196 appSource.setContent( |
198 "C.dart", | 197 "C.dart", |
(...skipping 16 matching lines...) Expand all Loading... |
215 "foo() {}", | 214 "foo() {}", |
216 "")); | 215 "")); |
217 compile(); | 216 compile(); |
218 // B should be compiled because it also declares foo(), so produces "shado
w" conflict. | 217 // B should be compiled because it also declares foo(), so produces "shado
w" conflict. |
219 // C should be compiled because it has unqualified invocation which was de
clared in A. | 218 // C should be compiled because it has unqualified invocation which was de
clared in A. |
220 didWrite("A.dart", EXTENSION_TIMESTAMP); | 219 didWrite("A.dart", EXTENSION_TIMESTAMP); |
221 didWrite("B.dart", EXTENSION_TIMESTAMP); | 220 didWrite("B.dart", EXTENSION_TIMESTAMP); |
222 didWrite("C.dart", EXTENSION_TIMESTAMP); | 221 didWrite("C.dart", EXTENSION_TIMESTAMP); |
223 assertAppBuilt(); | 222 assertAppBuilt(); |
224 } | 223 } |
| 224 // Wait, because analysis is so fast that may be A will have same time as ol
d artifact. |
| 225 Thread.sleep(5); |
225 // Remove top-level foo(), so invocation of foo() in B should be bound to th
e super class. | 226 // Remove top-level foo(), so invocation of foo() in B should be bound to th
e super class. |
226 { | 227 { |
227 appSource.setContent("A.dart", ""); | 228 appSource.setContent("A.dart", ""); |
228 compile(); | 229 compile(); |
229 // B should be compiled because it also declares foo(), so produces "shado
w" conflict. | 230 // B should be compiled because it also declares foo(), so produces "shado
w" conflict. |
230 // C should be compiled because it has unqualified invocation which was de
clared in A. | 231 // C should be compiled because it has unqualified invocation which was de
clared in A. |
231 didWrite("A.dart", EXTENSION_TIMESTAMP); | 232 didWrite("A.dart", EXTENSION_TIMESTAMP); |
232 didWrite("B.dart", EXTENSION_TIMESTAMP); | 233 didWrite("B.dart", EXTENSION_TIMESTAMP); |
233 didWrite("C.dart", EXTENSION_TIMESTAMP); | 234 didWrite("C.dart", EXTENSION_TIMESTAMP); |
234 } | 235 } |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
274 didWrite("B.dart", EXTENSION_TIMESTAMP); | 275 didWrite("B.dart", EXTENSION_TIMESTAMP); |
275 didNotWrite("C.dart", EXTENSION_TIMESTAMP); | 276 didNotWrite("C.dart", EXTENSION_TIMESTAMP); |
276 assertAppBuilt(); | 277 assertAppBuilt(); |
277 } | 278 } |
278 } | 279 } |
279 | 280 |
280 /** | 281 /** |
281 * Test for "hole" feature. If we use unqualified access and add/remove top-le
vel field, this | 282 * Test for "hole" feature. If we use unqualified access and add/remove top-le
vel field, this |
282 * should cause compilation of invocation unit. | 283 * should cause compilation of invocation unit. |
283 */ | 284 */ |
284 public void test_fieldHole_useUnqualifiedAccess() { | 285 public void test_fieldHole_useUnqualifiedAccess() throws Exception { |
285 appSource.setContent( | 286 appSource.setContent( |
286 "B.dart", | 287 "B.dart", |
287 makeCode( | 288 makeCode( |
288 "// filler filler filler filler filler filler filler filler filler f
iller filler", | 289 "// filler filler filler filler filler filler filler filler filler f
iller filler", |
289 "class A {", | 290 "class A {", |
290 " var foo;", | 291 " var foo;", |
291 "}", | 292 "}", |
292 "")); | 293 "")); |
293 appSource.setContent( | 294 appSource.setContent( |
294 "C.dart", | 295 "C.dart", |
(...skipping 16 matching lines...) Expand all Loading... |
311 "var foo;", | 312 "var foo;", |
312 "")); | 313 "")); |
313 compile(); | 314 compile(); |
314 // B should be compiled because it also declares "foo", so produces "shado
w" conflict. | 315 // B should be compiled because it also declares "foo", so produces "shado
w" conflict. |
315 // C should be compiled because it has unqualified invocation which was de
clared in A. | 316 // C should be compiled because it has unqualified invocation which was de
clared in A. |
316 didWrite("A.dart", EXTENSION_TIMESTAMP); | 317 didWrite("A.dart", EXTENSION_TIMESTAMP); |
317 didWrite("B.dart", EXTENSION_TIMESTAMP); | 318 didWrite("B.dart", EXTENSION_TIMESTAMP); |
318 didWrite("C.dart", EXTENSION_TIMESTAMP); | 319 didWrite("C.dart", EXTENSION_TIMESTAMP); |
319 assertAppBuilt(); | 320 assertAppBuilt(); |
320 } | 321 } |
| 322 // Wait, because analysis is so fast that may be A will have same time as ol
d artifact. |
| 323 Thread.sleep(5); |
321 // Remove top-level "foo", so access to "foo" in B should be bound to the su
per class. | 324 // Remove top-level "foo", so access to "foo" in B should be bound to the su
per class. |
322 { | 325 { |
323 appSource.setContent("A.dart", ""); | 326 appSource.setContent("A.dart", ""); |
324 compile(); | 327 compile(); |
325 // B should be compiled because it also declares "foo", so produces "shado
w" conflict. | 328 // B should be compiled because it also declares "foo", so produces "shado
w" conflict. |
326 // C should be compiled because it has unqualified access which was declar
ed in A. | 329 // C should be compiled because it has unqualified access which was declar
ed in A. |
327 didWrite("A.dart", EXTENSION_TIMESTAMP); | 330 didWrite("A.dart", EXTENSION_TIMESTAMP); |
328 didWrite("B.dart", EXTENSION_TIMESTAMP); | 331 didWrite("B.dart", EXTENSION_TIMESTAMP); |
329 didWrite("C.dart", EXTENSION_TIMESTAMP); | 332 didWrite("C.dart", EXTENSION_TIMESTAMP); |
330 } | 333 } |
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
591 private void didWrite(String sourceName, String extension) { | 594 private void didWrite(String sourceName, String extension) { |
592 String spec = sourceName + "/" + extension; | 595 String spec = sourceName + "/" + extension; |
593 assertTrue("Expected write: " + spec, provider.writes.contains(spec)); | 596 assertTrue("Expected write: " + spec, provider.writes.contains(spec)); |
594 } | 597 } |
595 | 598 |
596 private void didNotWrite(String sourceName, String extension) { | 599 private void didNotWrite(String sourceName, String extension) { |
597 String spec = sourceName + "/" + extension; | 600 String spec = sourceName + "/" + extension; |
598 assertFalse("Didn't expect write: " + spec, provider.writes.contains(spec)); | 601 assertFalse("Didn't expect write: " + spec, provider.writes.contains(spec)); |
599 } | 602 } |
600 } | 603 } |
OLD | NEW |