Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6)

Unified Diff: editor/tools/plugins/com.google.dart.tools.core_test/src/com/google/dart/tools/core/utilities/ast/RefinableTypesFinderTest.java

Issue 10512012: RefinableTypesFinder bootstrap. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: editor/tools/plugins/com.google.dart.tools.core_test/src/com/google/dart/tools/core/utilities/ast/RefinableTypesFinderTest.java
===================================================================
--- editor/tools/plugins/com.google.dart.tools.core_test/src/com/google/dart/tools/core/utilities/ast/RefinableTypesFinderTest.java (revision 0)
+++ editor/tools/plugins/com.google.dart.tools.core_test/src/com/google/dart/tools/core/utilities/ast/RefinableTypesFinderTest.java (revision 0)
@@ -0,0 +1,125 @@
+/*
+ * Copyright (c) 2012, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.google.dart.tools.core.utilities.ast;
+
+import com.google.common.base.Joiner;
+import com.google.common.collect.Lists;
+import com.google.dart.compiler.DartCompilationError;
+import com.google.dart.compiler.ast.DartNode;
+import com.google.dart.compiler.ast.DartUnit;
+import com.google.dart.tools.core.model.CompilationUnit;
+import com.google.dart.tools.core.test.util.TestProject;
+import com.google.dart.tools.core.utilities.compiler.DartCompilerUtilities;
+
+import junit.framework.TestCase;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * Test for {@link RefinableTypesFinder}.
+ */
+public class RefinableTypesFinderTest extends TestCase {
+
+ public void testLocal1() throws Exception {
+ assertMatches(
+ join(
+ "class Foo {",
+ " main() {",
+ " new Foo().foo();",
+ " }",
+ " void foo(){",
+ " var !1x = 'foo';",
+ " }",
+ "}"),
+ "1+x");
+ }
+
+ /**
+ * Assert that the given source has the expected matches (indicating refinable types).
+ *
+ * @param src the source for the test
+ * @param expected expected match results
+ */
+ private void assertMatches(String src, String... expected) throws Exception {
+ Collection<LocationSpec> locationTests = LocationSpec.from(src, expected);
+ assertTrue(
+ "Expected exclamation point ('!') within the source denoting the test location",
+ !locationTests.isEmpty());
+
+ TestProject testProject = new TestProject("Test");
+ CompilationUnit unit = testProject.setUnitContent("Test.dart", removeLocationData(src));
+ List<DartCompilationError> errors = Lists.newArrayList();
+ DartUnit astRoot = DartCompilerUtilities.resolveUnit(unit, errors);
+ if (!errors.isEmpty()) {
+ fail("Parse/resolve errors: " + errors);
+ }
+ RefinableTypesFinder finder = new RefinableTypesFinder();
+ finder.searchWithin(astRoot);
+ Iterable<DartNode> matches = finder.getMatches();
+
+ for (LocationSpec test : locationTests) {
+ try {
+ verifyLocations(test, matches);
+ } finally {
+ testProject.dispose();
+ }
+ }
+
+ }
+
+ private String join(String... lines) {
+ return Joiner.on("\n").join(lines);
+ }
+
+ private String removeLocationData(String src) {
+ //source locations are flagged using !n (e.g., var !1x = 3) and this strips out the !n
+ //in order to make the source parseable
+ return src.replaceAll("![\\d]", "");
+ }
+
+ private void verifyLocations(LocationSpec test, Iterable<DartNode> matches) {
+ for (String result : test.positiveResults) {
+ // verify that result is present in matches
+ int start = test.source.indexOf(result);
+ boolean found = false;
+ for (DartNode match : matches) {
+ if (start == match.getSourceInfo().getOffset()) {
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ fail("No match found for: " + result);
+ }
+ }
+ for (String result : test.negativeResults) {
+ // verify that result is not present in matches
+ int start = test.source.indexOf(result);
+ if (start < 0) {
+ fail("Bad test result: " + result);
+ }
+ boolean found = false;
+ for (DartNode match : matches) {
+ if (start == match.getSourceInfo().getOffset()) {
+ found = true;
+ break;
+ }
+ }
+ if (found) {
+ fail("Invalid match found for: " + result);
+ }
+ }
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698