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

Side by Side Diff: compiler/javatests/com/google/dart/compiler/CompilerTestCase.java

Issue 10825135: Issue 4238. Infer Element subclass from query() parameter (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 4 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 4
5 package com.google.dart.compiler; 5 package com.google.dart.compiler;
6 6
7 import static com.google.dart.compiler.common.ErrorExpectation.assertErrors; 7 import static com.google.dart.compiler.common.ErrorExpectation.assertErrors;
8 8
9 import com.google.common.collect.Lists; 9 import com.google.common.collect.Lists;
10 import com.google.common.collect.Maps; 10 import com.google.common.collect.Maps;
11 import com.google.common.collect.Sets; 11 import com.google.common.collect.Sets;
12 import com.google.dart.compiler.CommandLineOptions.CompilerOptions; 12 import com.google.dart.compiler.CommandLineOptions.CompilerOptions;
13 import com.google.dart.compiler.ast.ASTVisitor; 13 import com.google.dart.compiler.ast.ASTVisitor;
14 import com.google.dart.compiler.ast.DartExpression; 14 import com.google.dart.compiler.ast.DartExpression;
15 import com.google.dart.compiler.ast.DartFunctionTypeAlias; 15 import com.google.dart.compiler.ast.DartFunctionTypeAlias;
16 import com.google.dart.compiler.ast.DartIdentifier;
16 import com.google.dart.compiler.ast.DartNode; 17 import com.google.dart.compiler.ast.DartNode;
17 import com.google.dart.compiler.ast.DartUnit; 18 import com.google.dart.compiler.ast.DartUnit;
18 import com.google.dart.compiler.ast.LibraryUnit; 19 import com.google.dart.compiler.ast.LibraryUnit;
19 import com.google.dart.compiler.common.ErrorExpectation; 20 import com.google.dart.compiler.common.ErrorExpectation;
20 import com.google.dart.compiler.common.SourceInfo; 21 import com.google.dart.compiler.common.SourceInfo;
21 import com.google.dart.compiler.parser.DartParser; 22 import com.google.dart.compiler.parser.DartParser;
22 import com.google.dart.compiler.parser.DartParserRunner; 23 import com.google.dart.compiler.parser.DartParserRunner;
24 import com.google.dart.compiler.resolver.Element;
25 import com.google.dart.compiler.type.Type;
26 import com.google.dart.compiler.type.TypeKind;
23 27
24 import junit.framework.TestCase; 28 import junit.framework.TestCase;
25 29
26 import java.io.IOException; 30 import java.io.IOException;
27 import java.io.InputStreamReader; 31 import java.io.InputStreamReader;
28 import java.io.Reader; 32 import java.io.Reader;
29 import java.net.URI; 33 import java.net.URI;
30 import java.net.URL; 34 import java.net.URL;
31 import java.util.List; 35 import java.util.List;
32 import java.util.Map; 36 import java.util.Map;
33 37
34 /** 38 /**
35 * Base class for compiler tests, with helpful utility methods. 39 * Base class for compiler tests, with helpful utility methods.
36 */ 40 */
37 public abstract class CompilerTestCase extends TestCase { 41 public abstract class CompilerTestCase extends TestCase {
38 42
39 private static final String UTF8 = "UTF-8"; 43 private static final String UTF8 = "UTF-8";
40 protected CompilerConfiguration compilerConfiguration; 44 protected CompilerConfiguration compilerConfiguration;
45 protected DartUnit testUnit;
41 46
42 /** 47 /**
43 * Instance of {@link CompilerConfiguration} for incremental check-only compil ation. 48 * Instance of {@link CompilerConfiguration} for incremental check-only compil ation.
44 */ 49 */
45 protected static final CompilerConfiguration CHECK_ONLY_CONFIGURATION = 50 protected static final CompilerConfiguration CHECK_ONLY_CONFIGURATION =
46 new DefaultCompilerConfiguration(new CompilerOptions()) { 51 new DefaultCompilerConfiguration(new CompilerOptions()) {
47 @Override 52 @Override
48 public boolean incremental() { 53 public boolean incremental() {
49 return true; 54 return true;
50 } 55 }
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 } 169 }
165 return buf.toString(); 170 return buf.toString();
166 } 171 }
167 172
168 @Override 173 @Override
169 protected void setUp() throws Exception { 174 protected void setUp() throws Exception {
170 super.setUp(); 175 super.setUp();
171 compilerConfiguration = CHECK_ONLY_CONFIGURATION; 176 compilerConfiguration = CHECK_ONLY_CONFIGURATION;
172 } 177 }
173 178
179 @Override
180 protected void tearDown() throws Exception {
181 compilerConfiguration = null;
182 testUnit = null;
183 super.tearDown();
184 }
185
174 protected AnalyzeLibraryResult analyzeLibrary(String... lines) throws Exceptio n { 186 protected AnalyzeLibraryResult analyzeLibrary(String... lines) throws Exceptio n {
175 return analyzeLibrary(getName(), makeCode(lines)); 187 String name = getName();
188 AnalyzeLibraryResult libraryResult = analyzeLibrary(name, makeCode(lines));
189 testUnit = libraryResult.getLibraryUnitResult().getUnit(name);
190 return libraryResult;
176 } 191 }
177 192
178 /** 193 /**
179 * Simulate running {@code analyzeLibrary} the way the IDE will. 194 * Simulate running {@code analyzeLibrary} the way the IDE will.
180 * <p> 195 * <p>
181 * <b>Note:</b> if the IDE changes how it calls analyzeLibrary, this should 196 * <b>Note:</b> if the IDE changes how it calls analyzeLibrary, this should
182 * be changed to match. 197 * be changed to match.
183 * 198 *
184 * @param name the name to use for the source file 199 * @param name the name to use for the source file
185 * @param code the Dart code to parse/analyze 200 * @param code the Dart code to parse/analyze
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
394 return null; 409 return null;
395 } 410 }
396 }); 411 });
397 return result[0]; 412 return result[0];
398 } 413 }
399 414
400 public static String getNodeSource(String code, DartNode node) { 415 public static String getNodeSource(String code, DartNode node) {
401 SourceInfo sourceInfo = node.getSourceInfo(); 416 SourceInfo sourceInfo = node.getSourceInfo();
402 return code.substring(sourceInfo.getOffset(), sourceInfo.getEnd()); 417 return code.substring(sourceInfo.getOffset(), sourceInfo.getEnd());
403 } 418 }
419
420
421 /**
422 * Asserts that {@link Element} with given name has expected type.
423 */
424 protected static void assertInferredElementTypeString(
425 DartUnit unit,
426 String variableName,
427 String expectedType) {
428 // find element
429 Element element = getNamedElement(unit, variableName);
430 assertNotNull(element);
431 // check type
432 Type actualType = element.getType();
433 assertEquals(element.getName(), expectedType, actualType.toString());
434 // should be inferred
435 if (TypeKind.of(actualType) != TypeKind.DYNAMIC) {
436 assertTrue("Should be marked as inferred", actualType.isInferred());
437 }
438 }
439
440 /**
441 * @return the {@link Element} with given name, may be <code>null</code>.
442 */
443 private static Element getNamedElement(DartUnit unit, final String name) {
444 final Element[] result = {null};
445 unit.accept(new ASTVisitor<Void>() {
446 @Override
447 public Void visitIdentifier(DartIdentifier node) {
448 Element element = node.getElement();
449 if (element != null && element.getName().equals(name)) {
450 result[0] = element;
451 }
452 return super.visitIdentifier(node);
453 }
454 });
455 return result[0];
456 }
404 } 457 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698