Index: compiler/javatests/com/google/dart/compiler/end2end/inc/IncrementalCompilation2Test.java |
diff --git a/compiler/javatests/com/google/dart/compiler/end2end/inc/IncrementalCompilation2Test.java b/compiler/javatests/com/google/dart/compiler/end2end/inc/IncrementalCompilation2Test.java |
index 277d42ac37cf8a8f2beefbb861cf08cef602f17a..56c5eba8b3e87d36b3243465161aa8e6cf031581 100644 |
--- a/compiler/javatests/com/google/dart/compiler/end2end/inc/IncrementalCompilation2Test.java |
+++ b/compiler/javatests/com/google/dart/compiler/end2end/inc/IncrementalCompilation2Test.java |
@@ -9,6 +9,7 @@ import static com.google.dart.compiler.common.ErrorExpectation.assertErrors; |
import static com.google.dart.compiler.common.ErrorExpectation.errEx; |
import com.google.common.collect.Lists; |
+import com.google.common.collect.Maps; |
import com.google.common.collect.Sets; |
import com.google.dart.compiler.CompilerTestCase; |
import com.google.dart.compiler.DartCompilationError; |
@@ -35,6 +36,7 @@ import java.io.Reader; |
import java.io.Writer; |
import java.net.URI; |
import java.util.List; |
+import java.util.Map; |
import java.util.Set; |
import java.util.concurrent.ConcurrentSkipListSet; |
@@ -68,6 +70,7 @@ public class IncrementalCompilation2Test extends CompilerTestCase { |
private IncMockArtifactProvider provider; |
private MemoryLibrarySource appSource; |
private final List<DartCompilationError> errors = Lists.newArrayList(); |
+ private final Map<String, DartUnit> units = Maps.newHashMap(); |
@Override |
protected void setUp() throws Exception { |
@@ -98,6 +101,8 @@ public class IncrementalCompilation2Test extends CompilerTestCase { |
config = null; |
provider = null; |
appSource = null; |
+ errors.clear(); |
+ units.clear(); |
} |
/** |
@@ -880,6 +885,52 @@ public class IncrementalCompilation2Test extends CompilerTestCase { |
compile(); |
assertErrors(errors, errEx(ResolverErrorCode.CANNOT_HIDE_IMPORT_PREFIX, 5, 7, 3)); |
} |
+ |
+ /** |
+ * <p> |
+ * http://code.google.com/p/dart/issues/detail?id=4238 |
+ */ |
+ public void test_typesPropagation_html_query() throws Exception { |
+ appSource.setContent( |
+ APP, |
+ makeCode( |
+ "// filler filler filler filler filler filler filler filler filler filler filler", |
+ "#library('application');", |
+ "#import('dart:html');", |
+ "main() {", |
+ " var v1 = query('a');", |
+ " var v2 = query('A');", |
+ " var v3 = query('body:active');", |
+ " var v4 = query('button[foo=\"bar\"]');", |
+ " var v5 = query('div.class');", |
+ " var v6 = query('input#id');", |
+ " // invocation of method", |
+ " var m1 = document.query('div');", |
+ " // unsupported currently", |
+ " var b1 = query('noSuchTag');", |
+ " var b2 = query('DART_EDITOR_NO_SUCH_TYPE');", |
+ " var b3 = query('body div');", |
+ "}", |
+ "")); |
+ // do compile, no errors expected |
+ compile(); |
+ assertErrors(errors); |
+ // validate types |
+ DartUnit unit = units.get(APP); |
+ assertNotNull(unit); |
+ assertInferredElementTypeString(unit, "v1", "AnchorElement"); |
+ assertInferredElementTypeString(unit, "v2", "AnchorElement"); |
+ assertInferredElementTypeString(unit, "v3", "BodyElement"); |
+ assertInferredElementTypeString(unit, "v4", "ButtonElement"); |
+ assertInferredElementTypeString(unit, "v5", "DivElement"); |
+ assertInferredElementTypeString(unit, "v6", "InputElement"); |
+ // invocation of method |
+ assertInferredElementTypeString(unit, "m1", "DivElement"); |
+ // bad cases, or unsupported now |
+ assertInferredElementTypeString(unit, "b1", "Element"); |
+ assertInferredElementTypeString(unit, "b2", "Element"); |
+ assertInferredElementTypeString(unit, "b3", "Element"); |
+ } |
/** |
* Libraries "dart:io" and "dart:html" can not be used together in single application. |
@@ -993,6 +1044,7 @@ public class IncrementalCompilation2Test extends CompilerTestCase { |
@Override |
public void unitCompiled(DartUnit unit) { |
compilingUris.remove(unit.getSourceInfo().getSource().getUri()); |
+ units.put(unit.getSourceName(), unit); |
} |
}; |
DartCompiler.compileLib(lib, config, provider, listener); |