Index: pkg/analyzer/test/dart/element/builder_test.dart |
diff --git a/pkg/analyzer/test/generated/all_the_rest_test.dart b/pkg/analyzer/test/dart/element/builder_test.dart |
similarity index 56% |
copy from pkg/analyzer/test/generated/all_the_rest_test.dart |
copy to pkg/analyzer/test/dart/element/builder_test.dart |
index 5ca63f86645a33f37d3c0894a63faace8fd014a2..1b19b30a6494cc2e6b8becedc4806c59e85600b3 100644 |
--- a/pkg/analyzer/test/generated/all_the_rest_test.dart |
+++ b/pkg/analyzer/test/dart/element/builder_test.dart |
@@ -2,355 +2,33 @@ |
// for details. All rights reserved. Use of this source code is governed by a |
// BSD-style license that can be found in the LICENSE file. |
-library analyzer.test.generated.all_the_rest_test; |
+library analyzer.test.dart.element.builder_test; |
import 'package:analyzer/dart/ast/ast.dart'; |
import 'package:analyzer/dart/ast/token.dart'; |
import 'package:analyzer/dart/element/element.dart'; |
-import 'package:analyzer/dart/element/type.dart'; |
-import 'package:analyzer/error/error.dart'; |
-import 'package:analyzer/error/listener.dart'; |
-import 'package:analyzer/file_system/file_system.dart'; |
-import 'package:analyzer/file_system/memory_file_system.dart'; |
-import 'package:analyzer/file_system/physical_file_system.dart'; |
import 'package:analyzer/src/dart/ast/ast.dart'; |
-import 'package:analyzer/src/dart/ast/utilities.dart' hide ConstantEvaluator; |
import 'package:analyzer/src/dart/element/builder.dart'; |
import 'package:analyzer/src/dart/element/element.dart'; |
-import 'package:analyzer/src/dart/sdk/sdk.dart' hide SdkLibrariesReader; |
-import 'package:analyzer/src/error/codes.dart'; |
import 'package:analyzer/src/generated/engine.dart'; |
-import 'package:analyzer/src/generated/java_engine_io.dart'; |
-import 'package:analyzer/src/generated/java_io.dart'; |
import 'package:analyzer/src/generated/resolver.dart'; |
-import 'package:analyzer/src/generated/sdk.dart'; |
-import 'package:analyzer/src/generated/sdk_io.dart'; |
import 'package:analyzer/src/generated/source.dart'; |
-import 'package:analyzer/src/generated/source_io.dart'; |
import 'package:analyzer/src/generated/testing/ast_factory.dart'; |
import 'package:analyzer/src/generated/testing/element_factory.dart'; |
-import 'package:analyzer/src/generated/testing/test_type_provider.dart'; |
import 'package:analyzer/src/generated/testing/token_factory.dart'; |
import 'package:analyzer/src/generated/utilities_dart.dart'; |
-import 'package:analyzer/src/source/source_resource.dart'; |
-import 'package:path/path.dart' as path; |
-import 'package:source_span/source_span.dart'; |
import 'package:test/test.dart'; |
import 'package:test_reflective_loader/test_reflective_loader.dart'; |
-import 'parser_test.dart'; |
-import 'resolver_test_case.dart'; |
-import 'test_support.dart'; |
+import '../../generated/parser_test.dart'; |
+import '../../generated/test_support.dart'; |
main() { |
defineReflectiveSuite(() { |
- defineReflectiveTests(ContentCacheTest); |
- // ignore: deprecated_member_use |
- defineReflectiveTests(CustomUriResolverTest); |
- defineReflectiveTests(DartUriResolverTest); |
- // ignore: deprecated_member_use |
- defineReflectiveTests(DirectoryBasedDartSdkTest); |
- // ignore: deprecated_member_use |
- defineReflectiveTests(DirectoryBasedSourceContainerTest); |
defineReflectiveTests(ElementBuilderTest); |
- defineReflectiveTests(ElementLocatorTest); |
- defineReflectiveTests(EnumMemberBuilderTest); |
- defineReflectiveTests(ErrorReporterTest); |
- defineReflectiveTests(ErrorSeverityTest); |
- defineReflectiveTests(ExitDetectorTest); |
- defineReflectiveTests(ExitDetectorTest2); |
- defineReflectiveTests(FileBasedSourceTest); |
- defineReflectiveTests(ResolveRelativeUriTest); |
- // ignore: deprecated_member_use |
- defineReflectiveTests(SDKLibrariesReaderTest); |
- defineReflectiveTests(UriKindTest); |
}); |
} |
-/** |
- * Create a tiny mock SDK for use in URI resolution tests. |
- */ |
-DartSdk _createSdk() { |
- MemoryResourceProvider resourceProvider = new MemoryResourceProvider(); |
- String sdkFolderName = |
- resourceProvider.pathContext.separator == '/' ? '/sdk' : r'C:\sdk'; |
- Folder sdkFolder = resourceProvider.newFolder(sdkFolderName); |
- expect(sdkFolder, isNotNull); |
- resourceProvider.newFile( |
- resourceProvider.pathContext.join(sdkFolderName, 'lib', '_internal', |
- 'sdk_library_metadata', 'lib', 'libraries.dart'), |
- ''' |
-const Map<String, LibraryInfo> libraries = const { |
- "core": const LibraryInfo("core/core.dart") |
-}; |
-'''); |
- resourceProvider.newFile( |
- resourceProvider.pathContext |
- .join(sdkFolderName, 'lib', 'core', 'core.dart'), |
- ''' |
-library dart.core; |
-'''); |
- return new FolderBasedDartSdk(resourceProvider, sdkFolder); |
-} |
- |
-@reflectiveTest |
-class ContentCacheTest { |
- void test_setContents() { |
- Source source = new TestSource(); |
- ContentCache cache = new ContentCache(); |
- expect(cache.getContents(source), isNull); |
- expect(cache.getModificationStamp(source), isNull); |
- String contents = "library lib;"; |
- expect(cache.setContents(source, contents), isNull); |
- expect(cache.getContents(source), contents); |
- expect(cache.getModificationStamp(source), isNotNull); |
- expect(cache.setContents(source, contents), contents); |
- expect(cache.setContents(source, null), contents); |
- expect(cache.getContents(source), isNull); |
- expect(cache.getModificationStamp(source), isNull); |
- expect(cache.setContents(source, null), isNull); |
- } |
-} |
- |
-@deprecated |
-@reflectiveTest |
-class CustomUriResolverTest { |
- void test_creation() { |
- expect(new CustomUriResolver({}), isNotNull); |
- } |
- |
- void test_resolve_unknown_uri() { |
- UriResolver resolver = new CustomUriResolver({ |
- 'custom:library': '/path/to/library.dart', |
- }); |
- Source result = resolver.resolveAbsolute(Uri.parse("custom:non_library")); |
- expect(result, isNull); |
- } |
- |
- void test_resolve_uri() { |
- String filePath = |
- FileUtilities2.createFile("/path/to/library.dart").getAbsolutePath(); |
- UriResolver resolver = new CustomUriResolver({ |
- 'custom:library': filePath, |
- }); |
- Source result = resolver.resolveAbsolute(Uri.parse("custom:library")); |
- expect(result, isNotNull); |
- expect(result.fullName, filePath); |
- } |
-} |
- |
-@reflectiveTest |
-class DartUriResolverTest { |
- void test_creation() { |
- DartSdk sdk = _createSdk(); |
- expect(new DartUriResolver(sdk), isNotNull); |
- } |
- |
- void test_isDartUri_null_scheme() { |
- Uri uri = Uri.parse("foo.dart"); |
- expect('', uri.scheme); |
- expect(DartUriResolver.isDartUri(uri), isFalse); |
- } |
- |
- void test_resolve_dart() { |
- DartSdk sdk = _createSdk(); |
- UriResolver resolver = new DartUriResolver(sdk); |
- Source result = resolver.resolveAbsolute(Uri.parse("dart:core")); |
- expect(result, isNotNull); |
- } |
- |
- void test_resolve_dart_nonExistingLibrary() { |
- DartSdk sdk = _createSdk(); |
- UriResolver resolver = new DartUriResolver(sdk); |
- Source result = resolver.resolveAbsolute(Uri.parse("dart:cor")); |
- expect(result, isNull); |
- } |
- |
- void test_resolve_nonDart() { |
- DartSdk sdk = _createSdk(); |
- UriResolver resolver = new DartUriResolver(sdk); |
- Source result = |
- resolver.resolveAbsolute(Uri.parse("package:some/file.dart")); |
- expect(result, isNull); |
- } |
-} |
- |
-@deprecated |
-@reflectiveTest |
-class DirectoryBasedDartSdkTest { |
- void fail_getDocFileFor() { |
- DirectoryBasedDartSdk sdk = _createDartSdk(); |
- JavaFile docFile = sdk.getDocFileFor("html"); |
- expect(docFile, isNotNull); |
- } |
- |
- void test_analysisOptions_afterContextCreation() { |
- DirectoryBasedDartSdk sdk = _createDartSdk(); |
- sdk.context; |
- expect(() { |
- sdk.analysisOptions = new AnalysisOptionsImpl(); |
- }, throwsStateError); |
- } |
- |
- void test_analysisOptions_beforeContextCreation() { |
- DirectoryBasedDartSdk sdk = _createDartSdk(); |
- sdk.analysisOptions = new AnalysisOptionsImpl(); |
- sdk.context; |
- // cannot change "analysisOptions" in the context |
- expect(() { |
- sdk.context.analysisOptions = new AnalysisOptionsImpl(); |
- }, throwsStateError); |
- } |
- |
- void test_creation() { |
- DirectoryBasedDartSdk sdk = _createDartSdk(); |
- expect(sdk, isNotNull); |
- } |
- |
- void test_fromFile_invalid() { |
- DirectoryBasedDartSdk sdk = _createDartSdk(); |
- expect( |
- sdk.fromFileUri(new JavaFile("/not/in/the/sdk.dart").toURI()), isNull); |
- } |
- |
- void test_fromFile_library() { |
- DirectoryBasedDartSdk sdk = _createDartSdk(); |
- Source source = sdk.fromFileUri(new JavaFile.relative( |
- new JavaFile.relative(sdk.libraryDirectory, "core"), "core.dart") |
- .toURI()); |
- expect(source, isNotNull); |
- expect(source.isInSystemLibrary, isTrue); |
- expect(source.uri.toString(), "dart:core"); |
- } |
- |
- void test_fromFile_library_firstExact() { |
- DirectoryBasedDartSdk sdk = _createDartSdk(); |
- JavaFile dirHtml = new JavaFile.relative(sdk.libraryDirectory, "html"); |
- JavaFile dirDartium = new JavaFile.relative(dirHtml, "dartium"); |
- JavaFile file = new JavaFile.relative(dirDartium, "html_dartium.dart"); |
- expect(file.isFile(), isTrue); |
- Source source = sdk.fromFileUri(file.toURI()); |
- expect(source, isNotNull); |
- expect(source.isInSystemLibrary, isTrue); |
- expect(source.uri.toString(), "dart:html"); |
- } |
- |
- void test_fromFile_library_html_common_dart2js() { |
- DirectoryBasedDartSdk sdk = _createDartSdk(); |
- JavaFile dirHtml = new JavaFile.relative(sdk.libraryDirectory, "html"); |
- JavaFile dirCommon = new JavaFile.relative(dirHtml, "html_common"); |
- JavaFile file = |
- new JavaFile.relative(dirCommon, "html_common_dart2js.dart"); |
- expect(file.isFile(), isTrue); |
- Source source = sdk.fromFileUri(file.toURI()); |
- expect(source, isNotNull); |
- expect(source.isInSystemLibrary, isTrue); |
- expect(source.uri.toString(), "dart:html_common/html_common_dart2js.dart"); |
- } |
- |
- void test_fromFile_part() { |
- DirectoryBasedDartSdk sdk = _createDartSdk(); |
- Source source = sdk.fromFileUri(new JavaFile.relative( |
- new JavaFile.relative(sdk.libraryDirectory, "core"), "num.dart") |
- .toURI()); |
- expect(source, isNotNull); |
- expect(source.isInSystemLibrary, isTrue); |
- expect(source.uri.toString(), "dart:core/num.dart"); |
- } |
- |
- void test_getDart2JsExecutable() { |
- DirectoryBasedDartSdk sdk = _createDartSdk(); |
- JavaFile executable = sdk.dart2JsExecutable; |
- expect(executable, isNotNull); |
- expect(executable.exists(), isTrue); |
- expect(executable.isExecutable(), isTrue); |
- } |
- |
- void test_getDirectory() { |
- DirectoryBasedDartSdk sdk = _createDartSdk(); |
- JavaFile directory = sdk.directory; |
- expect(directory, isNotNull); |
- expect(directory.exists(), isTrue); |
- } |
- |
- void test_getDocDirectory() { |
- DirectoryBasedDartSdk sdk = _createDartSdk(); |
- JavaFile directory = sdk.docDirectory; |
- expect(directory, isNotNull); |
- } |
- |
- void test_getLibraryDirectory() { |
- DirectoryBasedDartSdk sdk = _createDartSdk(); |
- JavaFile directory = sdk.libraryDirectory; |
- expect(directory, isNotNull); |
- expect(directory.exists(), isTrue); |
- } |
- |
- void test_getPubExecutable() { |
- DirectoryBasedDartSdk sdk = _createDartSdk(); |
- JavaFile executable = sdk.pubExecutable; |
- expect(executable, isNotNull); |
- expect(executable.exists(), isTrue); |
- expect(executable.isExecutable(), isTrue); |
- } |
- |
- void test_getSdkVersion() { |
- DirectoryBasedDartSdk sdk = _createDartSdk(); |
- String version = sdk.sdkVersion; |
- expect(version, isNotNull); |
- expect(version.length > 0, isTrue); |
- } |
- |
- void test_getVmExecutable() { |
- DirectoryBasedDartSdk sdk = _createDartSdk(); |
- JavaFile executable = sdk.vmExecutable; |
- expect(executable, isNotNull); |
- expect(executable.exists(), isTrue); |
- expect(executable.isExecutable(), isTrue); |
- } |
- |
- void test_useSummary_afterContextCreation() { |
- DirectoryBasedDartSdk sdk = _createDartSdk(); |
- sdk.context; |
- expect(() { |
- sdk.useSummary = true; |
- }, throwsStateError); |
- } |
- |
- void test_useSummary_beforeContextCreation() { |
- DirectoryBasedDartSdk sdk = _createDartSdk(); |
- sdk.useSummary = true; |
- sdk.context; |
- } |
- |
- DirectoryBasedDartSdk _createDartSdk() { |
- JavaFile sdkDirectory = DirectoryBasedDartSdk.defaultSdkDirectory; |
- expect(sdkDirectory, isNotNull, |
- reason: |
- "No SDK configured; set the property 'com.google.dart.sdk' on the command line"); |
- return new DirectoryBasedDartSdk(sdkDirectory); |
- } |
-} |
- |
-@deprecated |
-@reflectiveTest |
-class DirectoryBasedSourceContainerTest { |
- void test_contains() { |
- MemoryResourceProvider resourceProvider = new MemoryResourceProvider(); |
- File file1 = resourceProvider.getFile('/does/not/exist/some.dart'); |
- File file2 = resourceProvider.getFile('/does/not/exist/folder/some2.dart'); |
- File file3 = resourceProvider.getFile('/does/not/exist3/some3.dart'); |
- Source source1 = new FileSource(file1); |
- Source source2 = new FileSource(file2); |
- Source source3 = new FileSource(file3); |
- DirectoryBasedSourceContainer container = |
- new DirectoryBasedSourceContainer.con2('/does/not/exist'); |
- expect(container.contains(source1), isTrue); |
- expect(container.contains(source2), isTrue); |
- expect(container.contains(source3), isFalse); |
- } |
-} |
- |
@reflectiveTest |
class ElementBuilderTest extends ParserTestCase { |
CompilationUnitElement compilationUnitElement; |
@@ -2547,1931 +2225,3 @@ class A { |
body); |
} |
} |
- |
-@reflectiveTest |
-class ElementLocatorTest extends ResolverTestCase { |
- void fail_locate_Identifier_partOfDirective() { |
- // Can't resolve the library element without the library declaration. |
- // AstNode id = findNodeIn("foo", "part of foo.bar;"); |
- // Element element = ElementLocator.locate(id); |
- // assertInstanceOf(LibraryElement.class, element); |
- fail("Test this case"); |
- } |
- |
- @override |
- void reset() { |
- AnalysisOptionsImpl analysisOptions = new AnalysisOptionsImpl(); |
- analysisOptions.hint = false; |
- resetWithOptions(analysisOptions); |
- } |
- |
- void test_locate_AssignmentExpression() { |
- AstNode id = _findNodeIn( |
- "+=", |
- r''' |
-int x = 0; |
-void main() { |
- x += 1; |
-}'''); |
- Element element = ElementLocator.locate(id); |
- EngineTestCase.assertInstanceOf( |
- (obj) => obj is MethodElement, MethodElement, element); |
- } |
- |
- void test_locate_BinaryExpression() { |
- AstNode id = _findNodeIn("+", "var x = 3 + 4;"); |
- Element element = ElementLocator.locate(id); |
- EngineTestCase.assertInstanceOf( |
- (obj) => obj is MethodElement, MethodElement, element); |
- } |
- |
- void test_locate_ClassDeclaration() { |
- AstNode id = _findNodeIn("class", "class A { }"); |
- Element element = ElementLocator.locate(id); |
- EngineTestCase.assertInstanceOf( |
- (obj) => obj is ClassElement, ClassElement, element); |
- } |
- |
- void test_locate_CompilationUnit() { |
- CompilationUnit cu = _resolveContents("// only comment"); |
- expect(cu.element, isNotNull); |
- Element element = ElementLocator.locate(cu); |
- expect(element, same(cu.element)); |
- } |
- |
- void test_locate_ConstructorDeclaration() { |
- AstNode id = _findNodeIndexedIn( |
- "bar", |
- 0, |
- r''' |
-class A { |
- A.bar() {} |
-}'''); |
- ConstructorDeclaration declaration = |
- id.getAncestor((node) => node is ConstructorDeclaration); |
- Element element = ElementLocator.locate(declaration); |
- EngineTestCase.assertInstanceOf( |
- (obj) => obj is ConstructorElement, ConstructorElement, element); |
- } |
- |
- void test_locate_ExportDirective() { |
- AstNode id = _findNodeIn("export", "export 'dart:core';"); |
- Element element = ElementLocator.locate(id); |
- EngineTestCase.assertInstanceOf( |
- (obj) => obj is ExportElement, ExportElement, element); |
- } |
- |
- void test_locate_FunctionDeclaration() { |
- AstNode id = _findNodeIn("f", "int f() => 3;"); |
- FunctionDeclaration declaration = |
- id.getAncestor((node) => node is FunctionDeclaration); |
- Element element = ElementLocator.locate(declaration); |
- EngineTestCase.assertInstanceOf( |
- (obj) => obj is FunctionElement, FunctionElement, element); |
- } |
- |
- void |
- test_locate_Identifier_annotationClass_namedConstructor_forSimpleFormalParameter() { |
- AstNode id = _findNodeIndexedIn( |
- "Class", |
- 2, |
- r''' |
-class Class { |
- const Class.name(); |
-} |
-void main(@Class.name() parameter) { |
-}'''); |
- Element element = ElementLocator.locate(id); |
- EngineTestCase.assertInstanceOf( |
- (obj) => obj is ClassElement, ClassElement, element); |
- } |
- |
- void |
- test_locate_Identifier_annotationClass_unnamedConstructor_forSimpleFormalParameter() { |
- AstNode id = _findNodeIndexedIn( |
- "Class", |
- 2, |
- r''' |
-class Class { |
- const Class(); |
-} |
-void main(@Class() parameter) { |
-}'''); |
- Element element = ElementLocator.locate(id); |
- EngineTestCase.assertInstanceOf( |
- (obj) => obj is ConstructorElement, ConstructorElement, element); |
- } |
- |
- void test_locate_Identifier_className() { |
- AstNode id = _findNodeIn("A", "class A { }"); |
- Element element = ElementLocator.locate(id); |
- EngineTestCase.assertInstanceOf( |
- (obj) => obj is ClassElement, ClassElement, element); |
- } |
- |
- void test_locate_Identifier_constructor_named() { |
- AstNode id = _findNodeIndexedIn( |
- "bar", |
- 0, |
- r''' |
-class A { |
- A.bar() {} |
-}'''); |
- Element element = ElementLocator.locate(id); |
- EngineTestCase.assertInstanceOf( |
- (obj) => obj is ConstructorElement, ConstructorElement, element); |
- } |
- |
- void test_locate_Identifier_constructor_unnamed() { |
- AstNode id = _findNodeIndexedIn( |
- "A", |
- 1, |
- r''' |
-class A { |
- A() {} |
-}'''); |
- Element element = ElementLocator.locate(id); |
- EngineTestCase.assertInstanceOf( |
- (obj) => obj is ConstructorElement, ConstructorElement, element); |
- } |
- |
- void test_locate_Identifier_fieldName() { |
- AstNode id = _findNodeIn("x", "class A { var x; }"); |
- Element element = ElementLocator.locate(id); |
- EngineTestCase.assertInstanceOf( |
- (obj) => obj is FieldElement, FieldElement, element); |
- } |
- |
- void test_locate_Identifier_libraryDirective() { |
- AstNode id = _findNodeIn("foo", "library foo.bar;"); |
- Element element = ElementLocator.locate(id); |
- EngineTestCase.assertInstanceOf( |
- (obj) => obj is LibraryElement, LibraryElement, element); |
- } |
- |
- void test_locate_Identifier_propertyAccess() { |
- AstNode id = _findNodeIn( |
- "length", |
- r''' |
-void main() { |
- int x = 'foo'.length; |
-}'''); |
- Element element = ElementLocator.locate(id); |
- EngineTestCase.assertInstanceOf((obj) => obj is PropertyAccessorElement, |
- PropertyAccessorElement, element); |
- } |
- |
- void test_locate_ImportDirective() { |
- AstNode id = _findNodeIn("import", "import 'dart:core';"); |
- Element element = ElementLocator.locate(id); |
- EngineTestCase.assertInstanceOf( |
- (obj) => obj is ImportElement, ImportElement, element); |
- } |
- |
- void test_locate_IndexExpression() { |
- AstNode id = _findNodeIndexedIn( |
- "\\[", |
- 1, |
- r''' |
-void main() { |
- List x = [1, 2]; |
- var y = x[0]; |
-}'''); |
- Element element = ElementLocator.locate(id); |
- EngineTestCase.assertInstanceOf( |
- (obj) => obj is MethodElement, MethodElement, element); |
- } |
- |
- void test_locate_InstanceCreationExpression() { |
- AstNode node = _findNodeIndexedIn( |
- "A(", |
- 0, |
- r''' |
-class A {} |
-void main() { |
- new A(); |
-}'''); |
- Element element = ElementLocator.locate(node); |
- EngineTestCase.assertInstanceOf( |
- (obj) => obj is ConstructorElement, ConstructorElement, element); |
- } |
- |
- void test_locate_InstanceCreationExpression_type_prefixedIdentifier() { |
- // prepare: new pref.A() |
- SimpleIdentifier identifier = AstFactory.identifier3("A"); |
- PrefixedIdentifier prefixedIdentifier = |
- AstFactory.identifier4("pref", identifier); |
- InstanceCreationExpression creation = |
- AstFactory.instanceCreationExpression2( |
- Keyword.NEW, AstFactory.typeName3(prefixedIdentifier)); |
- // set ClassElement |
- ClassElement classElement = ElementFactory.classElement2("A"); |
- identifier.staticElement = classElement; |
- // set ConstructorElement |
- ConstructorElement constructorElement = |
- ElementFactory.constructorElement2(classElement, null); |
- creation.constructorName.staticElement = constructorElement; |
- // verify that "A" is resolved to ConstructorElement |
- Element element = ElementLocator.locate(identifier); |
- expect(element, same(classElement)); |
- } |
- |
- void test_locate_InstanceCreationExpression_type_simpleIdentifier() { |
- // prepare: new A() |
- SimpleIdentifier identifier = AstFactory.identifier3("A"); |
- InstanceCreationExpression creation = |
- AstFactory.instanceCreationExpression2( |
- Keyword.NEW, AstFactory.typeName3(identifier)); |
- // set ClassElement |
- ClassElement classElement = ElementFactory.classElement2("A"); |
- identifier.staticElement = classElement; |
- // set ConstructorElement |
- ConstructorElement constructorElement = |
- ElementFactory.constructorElement2(classElement, null); |
- creation.constructorName.staticElement = constructorElement; |
- // verify that "A" is resolved to ConstructorElement |
- Element element = ElementLocator.locate(identifier); |
- expect(element, same(classElement)); |
- } |
- |
- void test_locate_LibraryDirective() { |
- AstNode id = _findNodeIn("library", "library foo;"); |
- Element element = ElementLocator.locate(id); |
- EngineTestCase.assertInstanceOf( |
- (obj) => obj is LibraryElement, LibraryElement, element); |
- } |
- |
- void test_locate_MethodDeclaration() { |
- AstNode id = _findNodeIn( |
- "m", |
- r''' |
-class A { |
- void m() {} |
-}'''); |
- MethodDeclaration declaration = |
- id.getAncestor((node) => node is MethodDeclaration); |
- Element element = ElementLocator.locate(declaration); |
- EngineTestCase.assertInstanceOf( |
- (obj) => obj is MethodElement, MethodElement, element); |
- } |
- |
- void test_locate_MethodInvocation_method() { |
- AstNode id = _findNodeIndexedIn( |
- "bar", |
- 1, |
- r''' |
-class A { |
- int bar() => 42; |
-} |
-void main() { |
- var f = new A().bar(); |
-}'''); |
- Element element = ElementLocator.locate(id); |
- EngineTestCase.assertInstanceOf( |
- (obj) => obj is MethodElement, MethodElement, element); |
- } |
- |
- void test_locate_MethodInvocation_topLevel() { |
- String code = r''' |
-foo(x) {} |
-void main() { |
- foo(0); |
-}'''; |
- CompilationUnit cu = _resolveContents(code); |
- int offset = code.indexOf('foo(0)'); |
- AstNode node = new NodeLocator(offset).searchWithin(cu); |
- MethodInvocation invocation = |
- node.getAncestor((n) => n is MethodInvocation); |
- Element element = ElementLocator.locate(invocation); |
- EngineTestCase.assertInstanceOf( |
- (obj) => obj is FunctionElement, FunctionElement, element); |
- } |
- |
- void test_locate_PartOfDirective() { |
- Source librarySource = addNamedSource( |
- '/lib.dart', |
- ''' |
-library my.lib; |
-part 'part.dart'; |
-'''); |
- Source unitSource = addNamedSource( |
- '/part.dart', |
- ''' |
-part of my.lib; |
-'''); |
- CompilationUnit unit = |
- analysisContext.resolveCompilationUnit2(unitSource, librarySource); |
- PartOfDirective partOf = unit.directives.first; |
- Element element = ElementLocator.locate(partOf); |
- EngineTestCase.assertInstanceOf( |
- (obj) => obj is LibraryElement, LibraryElement, element); |
- } |
- |
- void test_locate_PostfixExpression() { |
- AstNode id = _findNodeIn("++", "int addOne(int x) => x++;"); |
- Element element = ElementLocator.locate(id); |
- EngineTestCase.assertInstanceOf( |
- (obj) => obj is MethodElement, MethodElement, element); |
- } |
- |
- void test_locate_PrefixedIdentifier() { |
- AstNode id = _findNodeIn( |
- "int", |
- r''' |
-import 'dart:core' as core; |
-core.int value;'''); |
- PrefixedIdentifier identifier = |
- id.getAncestor((node) => node is PrefixedIdentifier); |
- Element element = ElementLocator.locate(identifier); |
- EngineTestCase.assertInstanceOf( |
- (obj) => obj is ClassElement, ClassElement, element); |
- } |
- |
- void test_locate_PrefixExpression() { |
- AstNode id = _findNodeIn("++", "int addOne(int x) => ++x;"); |
- Element element = ElementLocator.locate(id); |
- EngineTestCase.assertInstanceOf( |
- (obj) => obj is MethodElement, MethodElement, element); |
- } |
- |
- void test_locate_StringLiteral_exportUri() { |
- addNamedSource("/foo.dart", "library foo;"); |
- AstNode id = _findNodeIn("'foo.dart'", "export 'foo.dart';"); |
- Element element = ElementLocator.locate(id); |
- EngineTestCase.assertInstanceOf( |
- (obj) => obj is LibraryElement, LibraryElement, element); |
- } |
- |
- void test_locate_StringLiteral_expression() { |
- AstNode id = _findNodeIn("abc", "var x = 'abc';"); |
- Element element = ElementLocator.locate(id); |
- expect(element, isNull); |
- } |
- |
- void test_locate_StringLiteral_importUri() { |
- addNamedSource("/foo.dart", "library foo; class A {}"); |
- AstNode id = |
- _findNodeIn("'foo.dart'", "import 'foo.dart'; class B extends A {}"); |
- Element element = ElementLocator.locate(id); |
- EngineTestCase.assertInstanceOf( |
- (obj) => obj is LibraryElement, LibraryElement, element); |
- } |
- |
- void test_locate_StringLiteral_partUri() { |
- addNamedSource("/foo.dart", "part of app;"); |
- AstNode id = _findNodeIn("'foo.dart'", "library app; part 'foo.dart';"); |
- Element element = ElementLocator.locate(id); |
- EngineTestCase.assertInstanceOf((obj) => obj is CompilationUnitElement, |
- CompilationUnitElement, element); |
- } |
- |
- void test_locate_VariableDeclaration() { |
- AstNode id = _findNodeIn("x", "var x = 'abc';"); |
- VariableDeclaration declaration = |
- id.getAncestor((node) => node is VariableDeclaration); |
- Element element = ElementLocator.locate(declaration); |
- EngineTestCase.assertInstanceOf((obj) => obj is TopLevelVariableElement, |
- TopLevelVariableElement, element); |
- } |
- |
- /** |
- * Find the first AST node matching a pattern in the resolved AST for the given source. |
- * |
- * [nodePattern] the (unique) pattern used to identify the node of interest. |
- * [code] the code to resolve. |
- * Returns the matched node in the resolved AST for the given source lines. |
- */ |
- AstNode _findNodeIn(String nodePattern, String code) { |
- return _findNodeIndexedIn(nodePattern, 0, code); |
- } |
- |
- /** |
- * Find the AST node matching the given indexed occurrence of a pattern in the resolved AST for |
- * the given source. |
- * |
- * [nodePattern] the pattern used to identify the node of interest. |
- * [index] the index of the pattern match of interest. |
- * [code] the code to resolve. |
- * Returns the matched node in the resolved AST for the given source lines |
- */ |
- AstNode _findNodeIndexedIn(String nodePattern, int index, String code) { |
- CompilationUnit cu = _resolveContents(code); |
- int start = _getOffsetOfMatch(code, nodePattern, index); |
- int end = start + nodePattern.length; |
- return new NodeLocator(start, end).searchWithin(cu); |
- } |
- |
- int _getOffsetOfMatch(String contents, String pattern, int matchIndex) { |
- if (matchIndex == 0) { |
- return contents.indexOf(pattern); |
- } |
- Iterable<Match> matches = new RegExp(pattern).allMatches(contents); |
- Match match = matches.toList()[matchIndex]; |
- return match.start; |
- } |
- |
- /** |
- * Parse, resolve and verify the given source lines to produce a fully |
- * resolved AST. |
- * |
- * [code] the code to resolve. |
- * |
- * Returns the result of resolving the AST structure representing the content |
- * of the source. |
- * |
- * Throws if source cannot be verified. |
- */ |
- CompilationUnit _resolveContents(String code) { |
- Source source = addSource(code); |
- LibraryElement library = resolve2(source); |
- assertNoErrors(source); |
- verify([source]); |
- return analysisContext.resolveCompilationUnit(source, library); |
- } |
-} |
- |
-@reflectiveTest |
-class EnumMemberBuilderTest extends EngineTestCase { |
- void test_visitEnumDeclaration_multiple() { |
- String firstName = "ONE"; |
- String secondName = "TWO"; |
- String thirdName = "THREE"; |
- EnumDeclaration enumDeclaration = |
- AstFactory.enumDeclaration2("E", [firstName, secondName, thirdName]); |
- |
- ClassElement enumElement = _buildElement(enumDeclaration); |
- List<FieldElement> fields = enumElement.fields; |
- expect(fields, hasLength(5)); |
- |
- FieldElement constant = fields[2]; |
- expect(constant, isNotNull); |
- expect(constant.name, firstName); |
- expect(constant.isStatic, isTrue); |
- expect((constant as FieldElementImpl).evaluationResult, isNotNull); |
- _assertGetter(constant); |
- |
- constant = fields[3]; |
- expect(constant, isNotNull); |
- expect(constant.name, secondName); |
- expect(constant.isStatic, isTrue); |
- expect((constant as FieldElementImpl).evaluationResult, isNotNull); |
- _assertGetter(constant); |
- |
- constant = fields[4]; |
- expect(constant, isNotNull); |
- expect(constant.name, thirdName); |
- expect(constant.isStatic, isTrue); |
- expect((constant as FieldElementImpl).evaluationResult, isNotNull); |
- _assertGetter(constant); |
- } |
- |
- void test_visitEnumDeclaration_single() { |
- String firstName = "ONE"; |
- EnumDeclaration enumDeclaration = |
- AstFactory.enumDeclaration2("E", [firstName]); |
- enumDeclaration.constants[0].documentationComment = AstFactory |
- .documentationComment( |
- [TokenFactory.tokenFromString('/// aaa')..offset = 50], []); |
- |
- ClassElement enumElement = _buildElement(enumDeclaration); |
- List<FieldElement> fields = enumElement.fields; |
- expect(fields, hasLength(3)); |
- |
- FieldElement field = fields[0]; |
- expect(field, isNotNull); |
- expect(field.name, "index"); |
- expect(field.isStatic, isFalse); |
- expect(field.isSynthetic, isTrue); |
- _assertGetter(field); |
- |
- field = fields[1]; |
- expect(field, isNotNull); |
- expect(field.name, "values"); |
- expect(field.isStatic, isTrue); |
- expect(field.isSynthetic, isTrue); |
- expect((field as FieldElementImpl).evaluationResult, isNotNull); |
- _assertGetter(field); |
- |
- FieldElement constant = fields[2]; |
- expect(constant, isNotNull); |
- expect(constant.name, firstName); |
- expect(constant.isStatic, isTrue); |
- expect((constant as FieldElementImpl).evaluationResult, isNotNull); |
- expect(constant.documentationComment, '/// aaa'); |
- _assertGetter(constant); |
- } |
- |
- void _assertGetter(FieldElement field) { |
- PropertyAccessorElement getter = field.getter; |
- expect(getter, isNotNull); |
- expect(getter.variable, same(field)); |
- expect(getter.type, isNotNull); |
- } |
- |
- ClassElement _buildElement(EnumDeclaration enumDeclaration) { |
- ElementHolder holder = new ElementHolder(); |
- ElementBuilder elementBuilder = _makeBuilder(holder); |
- enumDeclaration.accept(elementBuilder); |
- EnumMemberBuilder memberBuilder = |
- new EnumMemberBuilder(new TestTypeProvider()); |
- enumDeclaration.accept(memberBuilder); |
- List<ClassElement> enums = holder.enums; |
- expect(enums, hasLength(1)); |
- return enums[0]; |
- } |
- |
- ElementBuilder _makeBuilder(ElementHolder holder) => |
- new ElementBuilder(holder, new CompilationUnitElementImpl('test.dart')); |
-} |
- |
-@reflectiveTest |
-class ErrorReporterTest extends EngineTestCase { |
- /** |
- * Create a type with the given name in a compilation unit with the given name. |
- * |
- * @param fileName the name of the compilation unit containing the class |
- * @param typeName the name of the type to be created |
- * @return the type that was created |
- */ |
- InterfaceType createType(String fileName, String typeName) { |
- CompilationUnitElementImpl unit = ElementFactory.compilationUnit(fileName); |
- ClassElementImpl element = ElementFactory.classElement2(typeName); |
- unit.types = <ClassElement>[element]; |
- return element.type; |
- } |
- |
- void test_creation() { |
- GatheringErrorListener listener = new GatheringErrorListener(); |
- TestSource source = new TestSource(); |
- expect(new ErrorReporter(listener, source), isNotNull); |
- } |
- |
- void test_reportErrorForElement_named() { |
- DartType type = createType("/test1.dart", "A"); |
- ClassElement element = type.element; |
- GatheringErrorListener listener = new GatheringErrorListener(); |
- ErrorReporter reporter = new ErrorReporter(listener, element.source); |
- reporter.reportErrorForElement( |
- StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPERCLASS_MEMBER, |
- element, |
- ['A']); |
- AnalysisError error = listener.errors[0]; |
- expect(error.offset, element.nameOffset); |
- } |
- |
- void test_reportErrorForElement_unnamed() { |
- ImportElementImpl element = |
- ElementFactory.importFor(ElementFactory.library(null, ''), null); |
- GatheringErrorListener listener = new GatheringErrorListener(); |
- ErrorReporter reporter = new ErrorReporter( |
- listener, |
- new NonExistingSource( |
- '/test.dart', path.toUri('/test.dart'), UriKind.FILE_URI)); |
- reporter.reportErrorForElement( |
- StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPERCLASS_MEMBER, |
- element, |
- ['A']); |
- AnalysisError error = listener.errors[0]; |
- expect(error.offset, element.nameOffset); |
- } |
- |
- void test_reportErrorForSpan() { |
- GatheringErrorListener listener = new GatheringErrorListener(); |
- ErrorReporter reporter = new ErrorReporter(listener, new TestSource()); |
- |
- var src = ''' |
-foo: bar |
-zap: baz |
-'''; |
- |
- int offset = src.indexOf('baz'); |
- int length = 'baz'.length; |
- |
- SourceSpan span = new SourceFile(src).span(offset, offset + length); |
- |
- reporter.reportErrorForSpan( |
- AnalysisOptionsWarningCode.UNSUPPORTED_OPTION_WITH_LEGAL_VALUE, |
- span, |
- ['test', 'zip', 'zap']); |
- expect(listener.errors, hasLength(1)); |
- expect(listener.errors.first.offset, offset); |
- expect(listener.errors.first.length, length); |
- } |
- |
- void test_reportTypeErrorForNode_differentNames() { |
- DartType firstType = createType("/test1.dart", "A"); |
- DartType secondType = createType("/test2.dart", "B"); |
- GatheringErrorListener listener = new GatheringErrorListener(); |
- ErrorReporter reporter = |
- new ErrorReporter(listener, firstType.element.source); |
- reporter.reportTypeErrorForNode( |
- StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, |
- AstFactory.identifier3("x"), |
- [firstType, secondType]); |
- AnalysisError error = listener.errors[0]; |
- expect(error.message.indexOf("(") < 0, isTrue); |
- } |
- |
- void test_reportTypeErrorForNode_sameName() { |
- String typeName = "A"; |
- DartType firstType = createType("/test1.dart", typeName); |
- DartType secondType = createType("/test2.dart", typeName); |
- GatheringErrorListener listener = new GatheringErrorListener(); |
- ErrorReporter reporter = |
- new ErrorReporter(listener, firstType.element.source); |
- reporter.reportTypeErrorForNode( |
- StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, |
- AstFactory.identifier3("x"), |
- [firstType, secondType]); |
- AnalysisError error = listener.errors[0]; |
- expect(error.message.indexOf("(") >= 0, isTrue); |
- } |
-} |
- |
-@reflectiveTest |
-class ErrorSeverityTest extends EngineTestCase { |
- void test_max_error_error() { |
- expect(ErrorSeverity.ERROR.max(ErrorSeverity.ERROR), |
- same(ErrorSeverity.ERROR)); |
- } |
- |
- void test_max_error_none() { |
- expect( |
- ErrorSeverity.ERROR.max(ErrorSeverity.NONE), same(ErrorSeverity.ERROR)); |
- } |
- |
- void test_max_error_warning() { |
- expect(ErrorSeverity.ERROR.max(ErrorSeverity.WARNING), |
- same(ErrorSeverity.ERROR)); |
- } |
- |
- void test_max_none_error() { |
- expect( |
- ErrorSeverity.NONE.max(ErrorSeverity.ERROR), same(ErrorSeverity.ERROR)); |
- } |
- |
- void test_max_none_none() { |
- expect( |
- ErrorSeverity.NONE.max(ErrorSeverity.NONE), same(ErrorSeverity.NONE)); |
- } |
- |
- void test_max_none_warning() { |
- expect(ErrorSeverity.NONE.max(ErrorSeverity.WARNING), |
- same(ErrorSeverity.WARNING)); |
- } |
- |
- void test_max_warning_error() { |
- expect(ErrorSeverity.WARNING.max(ErrorSeverity.ERROR), |
- same(ErrorSeverity.ERROR)); |
- } |
- |
- void test_max_warning_none() { |
- expect(ErrorSeverity.WARNING.max(ErrorSeverity.NONE), |
- same(ErrorSeverity.WARNING)); |
- } |
- |
- void test_max_warning_warning() { |
- expect(ErrorSeverity.WARNING.max(ErrorSeverity.WARNING), |
- same(ErrorSeverity.WARNING)); |
- } |
-} |
- |
-/** |
- * Tests for the [ExitDetector] that do not require that the AST be resolved. |
- * |
- * See [ExitDetectorTest2] for tests that require the AST to be resolved. |
- */ |
-@reflectiveTest |
-class ExitDetectorTest extends ParserTestCase { |
- void test_asExpression() { |
- _assertFalse("a as Object;"); |
- } |
- |
- void test_asExpression_throw() { |
- _assertTrue("throw '' as Object;"); |
- } |
- |
- void test_assertStatement() { |
- _assertFalse("assert(a);"); |
- } |
- |
- void test_assertStatement_throw() { |
- _assertFalse("assert((throw 0));"); |
- } |
- |
- void test_assignmentExpression() { |
- _assertFalse("v = 1;"); |
- } |
- |
- void test_assignmentExpression_compound_lazy() { |
- enableLazyAssignmentOperators = true; |
- _assertFalse("v ||= false;"); |
- } |
- |
- void test_assignmentExpression_lhs_throw() { |
- _assertTrue("a[throw ''] = 0;"); |
- } |
- |
- void test_assignmentExpression_rhs_throw() { |
- _assertTrue("v = throw '';"); |
- } |
- |
- void test_await_false() { |
- _assertFalse("await x;"); |
- } |
- |
- void test_await_throw_true() { |
- _assertTrue("bool b = await (throw '' || true);"); |
- } |
- |
- void test_binaryExpression_and() { |
- _assertFalse("a && b;"); |
- } |
- |
- void test_binaryExpression_and_lhs() { |
- _assertTrue("throw '' && b;"); |
- } |
- |
- void test_binaryExpression_and_rhs() { |
- _assertFalse("a && (throw '');"); |
- } |
- |
- void test_binaryExpression_and_rhs2() { |
- _assertFalse("false && (throw '');"); |
- } |
- |
- void test_binaryExpression_and_rhs3() { |
- _assertTrue("true && (throw '');"); |
- } |
- |
- void test_binaryExpression_ifNull() { |
- _assertFalse("a ?? b;"); |
- } |
- |
- void test_binaryExpression_ifNull_lhs() { |
- _assertTrue("throw '' ?? b;"); |
- } |
- |
- void test_binaryExpression_ifNull_rhs() { |
- _assertFalse("a ?? (throw '');"); |
- } |
- |
- void test_binaryExpression_ifNull_rhs2() { |
- _assertFalse("null ?? (throw '');"); |
- } |
- |
- void test_binaryExpression_or() { |
- _assertFalse("a || b;"); |
- } |
- |
- void test_binaryExpression_or_lhs() { |
- _assertTrue("throw '' || b;"); |
- } |
- |
- void test_binaryExpression_or_rhs() { |
- _assertFalse("a || (throw '');"); |
- } |
- |
- void test_binaryExpression_or_rhs2() { |
- _assertFalse("true || (throw '');"); |
- } |
- |
- void test_binaryExpression_or_rhs3() { |
- _assertTrue("false || (throw '');"); |
- } |
- |
- void test_block_empty() { |
- _assertFalse("{}"); |
- } |
- |
- void test_block_noReturn() { |
- _assertFalse("{ int i = 0; }"); |
- } |
- |
- void test_block_return() { |
- _assertTrue("{ return 0; }"); |
- } |
- |
- void test_block_returnNotLast() { |
- _assertTrue("{ return 0; throw 'a'; }"); |
- } |
- |
- void test_block_throwNotLast() { |
- _assertTrue("{ throw 0; x = null; }"); |
- } |
- |
- void test_cascadeExpression_argument() { |
- _assertTrue("a..b(throw '');"); |
- } |
- |
- void test_cascadeExpression_index() { |
- _assertTrue("a..[throw ''];"); |
- } |
- |
- void test_cascadeExpression_target() { |
- _assertTrue("throw ''..b();"); |
- } |
- |
- void test_conditional_ifElse_bothThrows() { |
- _assertTrue("c ? throw '' : throw '';"); |
- } |
- |
- void test_conditional_ifElse_elseThrows() { |
- _assertFalse("c ? i : throw '';"); |
- } |
- |
- void test_conditional_ifElse_noThrow() { |
- _assertFalse("c ? i : j;"); |
- } |
- |
- void test_conditional_ifElse_thenThrow() { |
- _assertFalse("c ? throw '' : j;"); |
- } |
- |
- void test_conditionalAccess() { |
- _assertFalse("a?.b;"); |
- } |
- |
- void test_conditionalAccess_lhs() { |
- _assertTrue("(throw '')?.b;"); |
- } |
- |
- void test_conditionalAccessAssign() { |
- _assertFalse("a?.b = c;"); |
- } |
- |
- void test_conditionalAccessAssign_lhs() { |
- _assertTrue("(throw '')?.b = c;"); |
- } |
- |
- void test_conditionalAccessAssign_rhs() { |
- _assertFalse("a?.b = throw '';"); |
- } |
- |
- void test_conditionalAccessAssign_rhs2() { |
- _assertFalse("null?.b = throw '';"); |
- } |
- |
- void test_conditionalAccessIfNullAssign() { |
- _assertFalse("a?.b ??= c;"); |
- } |
- |
- void test_conditionalAccessIfNullAssign_lhs() { |
- _assertTrue("(throw '')?.b ??= c;"); |
- } |
- |
- void test_conditionalAccessIfNullAssign_rhs() { |
- _assertFalse("a?.b ??= throw '';"); |
- } |
- |
- void test_conditionalAccessIfNullAssign_rhs2() { |
- _assertFalse("null?.b ??= throw '';"); |
- } |
- |
- void test_conditionalCall() { |
- _assertFalse("a?.b(c);"); |
- } |
- |
- void test_conditionalCall_lhs() { |
- _assertTrue("(throw '')?.b(c);"); |
- } |
- |
- void test_conditionalCall_rhs() { |
- _assertFalse("a?.b(throw '');"); |
- } |
- |
- void test_conditionalCall_rhs2() { |
- _assertFalse("null?.b(throw '');"); |
- } |
- |
- void test_creation() { |
- expect(new ExitDetector(), isNotNull); |
- } |
- |
- void test_doStatement_break_and_throw() { |
- _assertFalse("{ do { if (1==1) break; throw 'T'; } while (0==1); }"); |
- } |
- |
- void test_doStatement_continue_and_throw() { |
- _assertFalse("{ do { if (1==1) continue; throw 'T'; } while (0==1); }"); |
- } |
- |
- void test_doStatement_continueDoInSwitch_and_throw() { |
- _assertFalse(''' |
-{ |
- D: do { |
- switch (1) { |
- L: case 0: continue D; |
- M: case 1: break; |
- } |
- throw 'T'; |
- } while (0 == 1); |
-}'''); |
- } |
- |
- void test_doStatement_continueInSwitch_and_throw() { |
- _assertFalse(''' |
-{ |
- do { |
- switch (1) { |
- L: case 0: continue; |
- M: case 1: break; |
- } |
- throw 'T'; |
- } while (0 == 1); |
-}'''); |
- } |
- |
- void test_doStatement_return() { |
- _assertTrue("{ do { return null; } while (1 == 2); }"); |
- } |
- |
- void test_doStatement_throwCondition() { |
- _assertTrue("{ do {} while (throw ''); }"); |
- } |
- |
- void test_doStatement_true_break() { |
- _assertFalse("{ do { break; } while (true); }"); |
- } |
- |
- void test_doStatement_true_continue() { |
- _assertTrue("{ do { continue; } while (true); }"); |
- } |
- |
- void test_doStatement_true_continueWithLabel() { |
- _assertTrue("{ x: do { continue x; } while (true); }"); |
- } |
- |
- void test_doStatement_true_if_return() { |
- _assertTrue("{ do { if (true) {return null;} } while (true); }"); |
- } |
- |
- void test_doStatement_true_noBreak() { |
- _assertTrue("{ do {} while (true); }"); |
- } |
- |
- void test_doStatement_true_return() { |
- _assertTrue("{ do { return null; } while (true); }"); |
- } |
- |
- void test_emptyStatement() { |
- _assertFalse(";"); |
- } |
- |
- void test_forEachStatement() { |
- _assertFalse("for (element in list) {}"); |
- } |
- |
- void test_forEachStatement_throw() { |
- _assertTrue("for (element in throw '') {}"); |
- } |
- |
- void test_forStatement_condition() { |
- _assertTrue("for (; throw 0;) {}"); |
- } |
- |
- void test_forStatement_implicitTrue() { |
- _assertTrue("for (;;) {}"); |
- } |
- |
- void test_forStatement_implicitTrue_break() { |
- _assertFalse("for (;;) { break; }"); |
- } |
- |
- void test_forStatement_implicitTrue_if_break() { |
- _assertFalse("{ for (;;) { if (1==2) { var a = 1; } else { break; } } }"); |
- } |
- |
- void test_forStatement_initialization() { |
- _assertTrue("for (i = throw 0;;) {}"); |
- } |
- |
- void test_forStatement_true() { |
- _assertTrue("for (; true; ) {}"); |
- } |
- |
- void test_forStatement_true_break() { |
- _assertFalse("{ for (; true; ) { break; } }"); |
- } |
- |
- void test_forStatement_true_continue() { |
- _assertTrue("{ for (; true; ) { continue; } }"); |
- } |
- |
- void test_forStatement_true_if_return() { |
- _assertTrue("{ for (; true; ) { if (true) {return null;} } }"); |
- } |
- |
- void test_forStatement_true_noBreak() { |
- _assertTrue("{ for (; true; ) {} }"); |
- } |
- |
- void test_forStatement_updaters() { |
- _assertTrue("for (;; i++, throw 0) {}"); |
- } |
- |
- void test_forStatement_variableDeclaration() { |
- _assertTrue("for (int i = throw 0;;) {}"); |
- } |
- |
- void test_functionExpression() { |
- _assertFalse("(){};"); |
- } |
- |
- void test_functionExpression_bodyThrows() { |
- _assertFalse("(int i) => throw '';"); |
- } |
- |
- void test_functionExpressionInvocation() { |
- _assertFalse("f(g);"); |
- } |
- |
- void test_functionExpressionInvocation_argumentThrows() { |
- _assertTrue("f(throw '');"); |
- } |
- |
- void test_functionExpressionInvocation_targetThrows() { |
- _assertTrue("throw ''(g);"); |
- } |
- |
- void test_identifier_prefixedIdentifier() { |
- _assertFalse("a.b;"); |
- } |
- |
- void test_identifier_simpleIdentifier() { |
- _assertFalse("a;"); |
- } |
- |
- void test_if_false_else_return() { |
- _assertTrue("if (false) {} else { return 0; }"); |
- } |
- |
- void test_if_false_noReturn() { |
- _assertFalse("if (false) {}"); |
- } |
- |
- void test_if_false_return() { |
- _assertFalse("if (false) { return 0; }"); |
- } |
- |
- void test_if_noReturn() { |
- _assertFalse("if (c) i++;"); |
- } |
- |
- void test_if_return() { |
- _assertFalse("if (c) return 0;"); |
- } |
- |
- void test_if_true_noReturn() { |
- _assertFalse("if (true) {}"); |
- } |
- |
- void test_if_true_return() { |
- _assertTrue("if (true) { return 0; }"); |
- } |
- |
- void test_ifElse_bothReturn() { |
- _assertTrue("if (c) return 0; else return 1;"); |
- } |
- |
- void test_ifElse_elseReturn() { |
- _assertFalse("if (c) i++; else return 1;"); |
- } |
- |
- void test_ifElse_noReturn() { |
- _assertFalse("if (c) i++; else j++;"); |
- } |
- |
- void test_ifElse_thenReturn() { |
- _assertFalse("if (c) return 0; else j++;"); |
- } |
- |
- void test_ifNullAssign() { |
- _assertFalse("a ??= b;"); |
- } |
- |
- void test_ifNullAssign_rhs() { |
- _assertFalse("a ??= throw '';"); |
- } |
- |
- void test_indexExpression() { |
- _assertFalse("a[b];"); |
- } |
- |
- void test_indexExpression_index() { |
- _assertTrue("a[throw ''];"); |
- } |
- |
- void test_indexExpression_target() { |
- _assertTrue("throw ''[b];"); |
- } |
- |
- void test_instanceCreationExpression() { |
- _assertFalse("new A(b);"); |
- } |
- |
- void test_instanceCreationExpression_argumentThrows() { |
- _assertTrue("new A(throw '');"); |
- } |
- |
- void test_isExpression() { |
- _assertFalse("A is B;"); |
- } |
- |
- void test_isExpression_throws() { |
- _assertTrue("throw '' is B;"); |
- } |
- |
- void test_labeledStatement() { |
- _assertFalse("label: a;"); |
- } |
- |
- void test_labeledStatement_throws() { |
- _assertTrue("label: throw '';"); |
- } |
- |
- void test_literal_boolean() { |
- _assertFalse("true;"); |
- } |
- |
- void test_literal_double() { |
- _assertFalse("1.1;"); |
- } |
- |
- void test_literal_integer() { |
- _assertFalse("1;"); |
- } |
- |
- void test_literal_null() { |
- _assertFalse("null;"); |
- } |
- |
- void test_literal_String() { |
- _assertFalse("'str';"); |
- } |
- |
- void test_methodInvocation() { |
- _assertFalse("a.b(c);"); |
- } |
- |
- void test_methodInvocation_argument() { |
- _assertTrue("a.b(throw '');"); |
- } |
- |
- void test_methodInvocation_target() { |
- _assertTrue("throw ''.b(c);"); |
- } |
- |
- void test_parenthesizedExpression() { |
- _assertFalse("(a);"); |
- } |
- |
- void test_parenthesizedExpression_throw() { |
- _assertTrue("(throw '');"); |
- } |
- |
- void test_propertyAccess() { |
- _assertFalse("new Object().a;"); |
- } |
- |
- void test_propertyAccess_throws() { |
- _assertTrue("(throw '').a;"); |
- } |
- |
- void test_rethrow() { |
- _assertTrue("rethrow;"); |
- } |
- |
- void test_return() { |
- _assertTrue("return 0;"); |
- } |
- |
- void test_superExpression() { |
- _assertFalse("super.a;"); |
- } |
- |
- void test_switch_allReturn() { |
- _assertTrue("switch (i) { case 0: return 0; default: return 1; }"); |
- } |
- |
- void test_switch_defaultWithNoStatements() { |
- _assertFalse("switch (i) { case 0: return 0; default: }"); |
- } |
- |
- void test_switch_fallThroughToNotReturn() { |
- _assertFalse("switch (i) { case 0: case 1: break; default: return 1; }"); |
- } |
- |
- void test_switch_fallThroughToReturn() { |
- _assertTrue("switch (i) { case 0: case 1: return 0; default: return 1; }"); |
- } |
- |
- // The ExitDetector could conceivably follow switch continue labels and |
- // determine that `case 0` exits, `case 1` continues to an exiting case, and |
- // `default` exits, so the switch exits. |
- @failingTest |
- void test_switch_includesContinue() { |
- _assertTrue(''' |
-switch (i) { |
- zero: case 0: return 0; |
- case 1: continue zero; |
- default: return 1; |
-}'''); |
- } |
- |
- void test_switch_noDefault() { |
- _assertFalse("switch (i) { case 0: return 0; }"); |
- } |
- |
- void test_switch_nonReturn() { |
- _assertFalse("switch (i) { case 0: i++; default: return 1; }"); |
- } |
- |
- void test_thisExpression() { |
- _assertFalse("this.a;"); |
- } |
- |
- void test_throwExpression() { |
- _assertTrue("throw new Object();"); |
- } |
- |
- void test_tryStatement_noReturn() { |
- _assertFalse("try {} catch (e, s) {} finally {}"); |
- } |
- |
- void test_tryStatement_noReturn_noFinally() { |
- _assertFalse("try {} catch (e, s) {}"); |
- } |
- |
- void test_tryStatement_return_catch() { |
- _assertFalse("try {} catch (e, s) { return 1; } finally {}"); |
- } |
- |
- void test_tryStatement_return_catch_noFinally() { |
- _assertFalse("try {} catch (e, s) { return 1; }"); |
- } |
- |
- void test_tryStatement_return_finally() { |
- _assertTrue("try {} catch (e, s) {} finally { return 1; }"); |
- } |
- |
- void test_tryStatement_return_try_noCatch() { |
- _assertTrue("try { return 1; } finally {}"); |
- } |
- |
- void test_tryStatement_return_try_oneCatchDoesNotExit() { |
- _assertFalse("try { return 1; } catch (e, s) {} finally {}"); |
- } |
- |
- void test_tryStatement_return_try_oneCatchDoesNotExit_noFinally() { |
- _assertFalse("try { return 1; } catch (e, s) {}"); |
- } |
- |
- void test_tryStatement_return_try_oneCatchExits() { |
- _assertTrue("try { return 1; } catch (e, s) { return 1; } finally {}"); |
- } |
- |
- void test_tryStatement_return_try_oneCatchExits_noFinally() { |
- _assertTrue("try { return 1; } catch (e, s) { return 1; }"); |
- } |
- |
- void test_tryStatement_return_try_twoCatchesDoExit() { |
- _assertTrue(''' |
-try { return 1; } |
-on int catch (e, s) { return 1; } |
-on String catch (e, s) { return 1; } |
-finally {}'''); |
- } |
- |
- void test_tryStatement_return_try_twoCatchesDoExit_noFinally() { |
- _assertTrue(''' |
-try { return 1; } |
-on int catch (e, s) { return 1; } |
-on String catch (e, s) { return 1; }'''); |
- } |
- |
- void test_tryStatement_return_try_twoCatchesDoNotExit() { |
- _assertFalse(''' |
-try { return 1; } |
-on int catch (e, s) {} |
-on String catch (e, s) {} |
-finally {}'''); |
- } |
- |
- void test_tryStatement_return_try_twoCatchesDoNotExit_noFinally() { |
- _assertFalse(''' |
-try { return 1; } |
-on int catch (e, s) {} |
-on String catch (e, s) {}'''); |
- } |
- |
- void test_tryStatement_return_try_twoCatchesMixed() { |
- _assertFalse(''' |
-try { return 1; } |
-on int catch (e, s) {} |
-on String catch (e, s) { return 1; } |
-finally {}'''); |
- } |
- |
- void test_tryStatement_return_try_twoCatchesMixed_noFinally() { |
- _assertFalse(''' |
-try { return 1; } |
-on int catch (e, s) {} |
-on String catch (e, s) { return 1; }'''); |
- } |
- |
- void test_variableDeclarationStatement_noInitializer() { |
- _assertFalse("int i;"); |
- } |
- |
- void test_variableDeclarationStatement_noThrow() { |
- _assertFalse("int i = 0;"); |
- } |
- |
- void test_variableDeclarationStatement_throw() { |
- _assertTrue("int i = throw new Object();"); |
- } |
- |
- void test_whileStatement_false_nonReturn() { |
- _assertFalse("{ while (false) {} }"); |
- } |
- |
- void test_whileStatement_throwCondition() { |
- _assertTrue("{ while (throw '') {} }"); |
- } |
- |
- void test_whileStatement_true_break() { |
- _assertFalse("{ while (true) { break; } }"); |
- } |
- |
- void test_whileStatement_true_break_and_throw() { |
- _assertFalse("{ while (true) { if (1==1) break; throw 'T'; } }"); |
- } |
- |
- void test_whileStatement_true_continue() { |
- _assertTrue("{ while (true) { continue; } }"); |
- } |
- |
- void test_whileStatement_true_continueWithLabel() { |
- _assertTrue("{ x: while (true) { continue x; } }"); |
- } |
- |
- void test_whileStatement_true_doStatement_scopeRequired() { |
- _assertTrue("{ while (true) { x: do { continue x; } while (true); } }"); |
- } |
- |
- void test_whileStatement_true_if_return() { |
- _assertTrue("{ while (true) { if (true) {return null;} } }"); |
- } |
- |
- void test_whileStatement_true_noBreak() { |
- _assertTrue("{ while (true) {} }"); |
- } |
- |
- void test_whileStatement_true_return() { |
- _assertTrue("{ while (true) { return null; } }"); |
- } |
- |
- void test_whileStatement_true_throw() { |
- _assertTrue("{ while (true) { throw ''; } }"); |
- } |
- |
- void _assertFalse(String source) { |
- _assertHasReturn(false, source); |
- } |
- |
- void _assertHasReturn(bool expectedResult, String source) { |
- Statement statement = ParserTestCase.parseStatement( |
- source, [], enableLazyAssignmentOperators); |
- expect(ExitDetector.exits(statement), expectedResult); |
- } |
- |
- void _assertTrue(String source) { |
- _assertHasReturn(true, source); |
- } |
-} |
- |
-/** |
- * Tests for the [ExitDetector] that require that the AST be resolved. |
- * |
- * See [ExitDetectorTest] for tests that do not require the AST to be resolved. |
- */ |
-@reflectiveTest |
-class ExitDetectorTest2 extends ResolverTestCase { |
- void test_forStatement_implicitTrue_breakWithLabel() { |
- Source source = addSource(r''' |
-void f() { |
- x: for (;;) { |
- if (1 < 2) { |
- break x; |
- } |
- return; |
- } |
-} |
-'''); |
- _assertNthStatementDoesNotExit(source, 0); |
- } |
- |
- void test_switch_withEnum_false_noDefault() { |
- Source source = addSource(r''' |
-enum E { A, B } |
-String f(E e) { |
- var x; |
- switch (e) { |
- case A: |
- x = 'A'; |
- case B: |
- x = 'B'; |
- } |
- return x; |
-} |
-'''); |
- _assertNthStatementDoesNotExit(source, 1); |
- } |
- |
- void test_switch_withEnum_false_withDefault() { |
- Source source = addSource(r''' |
-enum E { A, B } |
-String f(E e) { |
- var x; |
- switch (e) { |
- case A: |
- x = 'A'; |
- default: |
- x = '?'; |
- } |
- return x; |
-} |
-'''); |
- _assertNthStatementDoesNotExit(source, 1); |
- } |
- |
- void test_switch_withEnum_true_noDefault() { |
- Source source = addSource(r''' |
-enum E { A, B } |
-String f(E e) { |
- switch (e) { |
- case A: |
- return 'A'; |
- case B: |
- return 'B'; |
- } |
-} |
-'''); |
- _assertNthStatementDoesNotExit(source, 0); |
- } |
- |
- void test_switch_withEnum_true_withExitingDefault() { |
- Source source = addSource(r''' |
-enum E { A, B } |
-String f(E e) { |
- switch (e) { |
- case A: |
- return 'A'; |
- default: |
- return '?'; |
- } |
-} |
-'''); |
- _assertNthStatementExits(source, 0); |
- } |
- |
- void test_switch_withEnum_true_withNonExitingDefault() { |
- Source source = addSource(r''' |
-enum E { A, B } |
-String f(E e) { |
- var x; |
- switch (e) { |
- case A: |
- return 'A'; |
- default: |
- x = '?'; |
- } |
-} |
-'''); |
- _assertNthStatementDoesNotExit(source, 1); |
- } |
- |
- void test_whileStatement_breakWithLabel() { |
- Source source = addSource(r''' |
-void f() { |
- x: while (true) { |
- if (1 < 2) { |
- break x; |
- } |
- return; |
- } |
-} |
-'''); |
- _assertNthStatementDoesNotExit(source, 0); |
- } |
- |
- void test_whileStatement_breakWithLabel_afterExiting() { |
- Source source = addSource(r''' |
-void f() { |
- x: while (true) { |
- return; |
- if (1 < 2) { |
- break x; |
- } |
- } |
-} |
-'''); |
- _assertNthStatementExits(source, 0); |
- } |
- |
- void test_whileStatement_switchWithBreakWithLabel() { |
- Source source = addSource(r''' |
-void f() { |
- x: while (true) { |
- switch (true) { |
- case false: break; |
- case true: break x; |
- } |
- } |
-} |
-'''); |
- _assertNthStatementDoesNotExit(source, 0); |
- } |
- |
- void test_yieldStatement_plain() { |
- Source source = addSource(r''' |
-void f() sync* { |
- yield 1; |
-} |
-'''); |
- _assertNthStatementDoesNotExit(source, 0); |
- } |
- |
- void test_yieldStatement_star_plain() { |
- Source source = addSource(r''' |
-void f() sync* { |
- yield* 1; |
-} |
-'''); |
- _assertNthStatementDoesNotExit(source, 0); |
- } |
- |
- void test_yieldStatement_star_throw() { |
- Source source = addSource(r''' |
-void f() sync* { |
- yield* throw ''; |
-} |
-'''); |
- _assertNthStatementExits(source, 0); |
- } |
- |
- void test_yieldStatement_throw() { |
- Source source = addSource(r''' |
-void f() sync* { |
- yield throw ''; |
-} |
-'''); |
- _assertNthStatementExits(source, 0); |
- } |
- |
- void _assertHasReturn(bool expectedResult, Source source, int n) { |
- LibraryElement element = resolve2(source); |
- CompilationUnit unit = resolveCompilationUnit(source, element); |
- FunctionDeclaration function = unit.declarations.last; |
- BlockFunctionBody body = function.functionExpression.body; |
- Statement statement = body.block.statements[n]; |
- expect(ExitDetector.exits(statement), expectedResult); |
- } |
- |
- // Assert that the [n]th statement in the last function declaration of |
- // [source] exits. |
- void _assertNthStatementDoesNotExit(Source source, int n) { |
- _assertHasReturn(false, source, n); |
- } |
- |
- // Assert that the [n]th statement in the last function declaration of |
- // [source] does not exit. |
- void _assertNthStatementExits(Source source, int n) { |
- _assertHasReturn(true, source, n); |
- } |
-} |
- |
-@reflectiveTest |
-class FileBasedSourceTest { |
- void test_equals_false_differentFiles() { |
- JavaFile file1 = FileUtilities2.createFile("/does/not/exist1.dart"); |
- JavaFile file2 = FileUtilities2.createFile("/does/not/exist2.dart"); |
- FileBasedSource source1 = new FileBasedSource(file1); |
- FileBasedSource source2 = new FileBasedSource(file2); |
- expect(source1 == source2, isFalse); |
- } |
- |
- void test_equals_false_null() { |
- JavaFile file = FileUtilities2.createFile("/does/not/exist1.dart"); |
- FileBasedSource source1 = new FileBasedSource(file); |
- expect(source1 == null, isFalse); |
- } |
- |
- void test_equals_true() { |
- JavaFile file1 = FileUtilities2.createFile("/does/not/exist.dart"); |
- JavaFile file2 = FileUtilities2.createFile("/does/not/exist.dart"); |
- FileBasedSource source1 = new FileBasedSource(file1); |
- FileBasedSource source2 = new FileBasedSource(file2); |
- expect(source1 == source2, isTrue); |
- } |
- |
- void test_fileReadMode() { |
- expect(FileBasedSource.fileReadMode('a'), 'a'); |
- expect(FileBasedSource.fileReadMode('a\n'), 'a\n'); |
- expect(FileBasedSource.fileReadMode('ab'), 'ab'); |
- expect(FileBasedSource.fileReadMode('abc'), 'abc'); |
- expect(FileBasedSource.fileReadMode('a\nb'), 'a\nb'); |
- expect(FileBasedSource.fileReadMode('a\rb'), 'a\rb'); |
- expect(FileBasedSource.fileReadMode('a\r\nb'), 'a\r\nb'); |
- } |
- |
- void test_fileReadMode_changed() { |
- FileBasedSource.fileReadMode = (String s) => s + 'xyz'; |
- expect(FileBasedSource.fileReadMode('a'), 'axyz'); |
- expect(FileBasedSource.fileReadMode('a\n'), 'a\nxyz'); |
- expect(FileBasedSource.fileReadMode('ab'), 'abxyz'); |
- expect(FileBasedSource.fileReadMode('abc'), 'abcxyz'); |
- FileBasedSource.fileReadMode = (String s) => s; |
- } |
- |
- void test_fileReadMode_normalize_eol_always() { |
- FileBasedSource.fileReadMode = |
- PhysicalResourceProvider.NORMALIZE_EOL_ALWAYS; |
- expect(FileBasedSource.fileReadMode('a'), 'a'); |
- |
- // '\n' -> '\n' as first, last and only character |
- expect(FileBasedSource.fileReadMode('\n'), '\n'); |
- expect(FileBasedSource.fileReadMode('a\n'), 'a\n'); |
- expect(FileBasedSource.fileReadMode('\na'), '\na'); |
- |
- // '\r\n' -> '\n' as first, last and only character |
- expect(FileBasedSource.fileReadMode('\r\n'), '\n'); |
- expect(FileBasedSource.fileReadMode('a\r\n'), 'a\n'); |
- expect(FileBasedSource.fileReadMode('\r\na'), '\na'); |
- |
- // '\r' -> '\n' as first, last and only character |
- expect(FileBasedSource.fileReadMode('\r'), '\n'); |
- expect(FileBasedSource.fileReadMode('a\r'), 'a\n'); |
- expect(FileBasedSource.fileReadMode('\ra'), '\na'); |
- |
- FileBasedSource.fileReadMode = (String s) => s; |
- } |
- |
- void test_getEncoding() { |
- SourceFactory factory = new SourceFactory( |
- [new ResourceUriResolver(PhysicalResourceProvider.INSTANCE)]); |
- String fullPath = "/does/not/exist.dart"; |
- JavaFile file = FileUtilities2.createFile(fullPath); |
- FileBasedSource source = new FileBasedSource(file); |
- expect(factory.fromEncoding(source.encoding), source); |
- } |
- |
- void test_getFullName() { |
- String fullPath = "/does/not/exist.dart"; |
- JavaFile file = FileUtilities2.createFile(fullPath); |
- FileBasedSource source = new FileBasedSource(file); |
- expect(source.fullName, file.getAbsolutePath()); |
- } |
- |
- void test_getShortName() { |
- JavaFile file = FileUtilities2.createFile("/does/not/exist.dart"); |
- FileBasedSource source = new FileBasedSource(file); |
- expect(source.shortName, "exist.dart"); |
- } |
- |
- void test_hashCode() { |
- JavaFile file1 = FileUtilities2.createFile("/does/not/exist.dart"); |
- JavaFile file2 = FileUtilities2.createFile("/does/not/exist.dart"); |
- FileBasedSource source1 = new FileBasedSource(file1); |
- FileBasedSource source2 = new FileBasedSource(file2); |
- expect(source2.hashCode, source1.hashCode); |
- } |
- |
- void test_isInSystemLibrary_contagious() { |
- DartSdk sdk = _createSdk(); |
- UriResolver resolver = new DartUriResolver(sdk); |
- SourceFactory factory = new SourceFactory([resolver]); |
- // resolve dart:core |
- Source result = resolver.resolveAbsolute(Uri.parse("dart:core")); |
- expect(result, isNotNull); |
- expect(result.isInSystemLibrary, isTrue); |
- // system libraries reference only other system libraries |
- Source partSource = factory.resolveUri(result, "num.dart"); |
- expect(partSource, isNotNull); |
- expect(partSource.isInSystemLibrary, isTrue); |
- } |
- |
- void test_isInSystemLibrary_false() { |
- JavaFile file = FileUtilities2.createFile("/does/not/exist.dart"); |
- FileBasedSource source = new FileBasedSource(file); |
- expect(source, isNotNull); |
- expect(source.fullName, file.getAbsolutePath()); |
- expect(source.isInSystemLibrary, isFalse); |
- } |
- |
- void test_issue14500() { |
- // see https://code.google.com/p/dart/issues/detail?id=14500 |
- FileBasedSource source = new FileBasedSource( |
- FileUtilities2.createFile("/some/packages/foo:bar.dart")); |
- expect(source, isNotNull); |
- expect(source.exists(), isFalse); |
- } |
- |
- void test_resolveRelative_file_fileName() { |
- if (OSUtilities.isWindows()) { |
- // On Windows, the URI that is produced includes a drive letter, |
- // which I believe is not consistent across all machines that might run |
- // this test. |
- return; |
- } |
- JavaFile file = FileUtilities2.createFile("/a/b/test.dart"); |
- FileBasedSource source = new FileBasedSource(file); |
- expect(source, isNotNull); |
- Uri relative = resolveRelativeUri(source.uri, Uri.parse("lib.dart")); |
- expect(relative, isNotNull); |
- expect(relative.toString(), "file:///a/b/lib.dart"); |
- } |
- |
- void test_resolveRelative_file_filePath() { |
- if (OSUtilities.isWindows()) { |
- // On Windows, the URI that is produced includes a drive letter, |
- // which I believe is not consistent across all machines that might run |
- // this test. |
- return; |
- } |
- JavaFile file = FileUtilities2.createFile("/a/b/test.dart"); |
- FileBasedSource source = new FileBasedSource(file); |
- expect(source, isNotNull); |
- Uri relative = resolveRelativeUri(source.uri, Uri.parse("c/lib.dart")); |
- expect(relative, isNotNull); |
- expect(relative.toString(), "file:///a/b/c/lib.dart"); |
- } |
- |
- void test_resolveRelative_file_filePathWithParent() { |
- if (OSUtilities.isWindows()) { |
- // On Windows, the URI that is produced includes a drive letter, which I |
- // believe is not consistent across all machines that might run this test. |
- return; |
- } |
- JavaFile file = FileUtilities2.createFile("/a/b/test.dart"); |
- FileBasedSource source = new FileBasedSource(file); |
- expect(source, isNotNull); |
- Uri relative = resolveRelativeUri(source.uri, Uri.parse("../c/lib.dart")); |
- expect(relative, isNotNull); |
- expect(relative.toString(), "file:///a/c/lib.dart"); |
- } |
- |
- void test_system() { |
- JavaFile file = FileUtilities2.createFile("/does/not/exist.dart"); |
- FileBasedSource source = new FileBasedSource(file, Uri.parse("dart:core")); |
- expect(source, isNotNull); |
- expect(source.fullName, file.getAbsolutePath()); |
- expect(source.isInSystemLibrary, isTrue); |
- } |
-} |
- |
-@reflectiveTest |
-class ResolveRelativeUriTest { |
- void test_resolveRelative_dart_dartUri() { |
- _assertResolve('dart:foo', 'dart:bar', 'dart:bar'); |
- } |
- |
- void test_resolveRelative_dart_fileName() { |
- _assertResolve('dart:test', 'lib.dart', 'dart:test/lib.dart'); |
- } |
- |
- void test_resolveRelative_dart_filePath() { |
- _assertResolve('dart:test', 'c/lib.dart', 'dart:test/c/lib.dart'); |
- } |
- |
- void test_resolveRelative_dart_filePathWithParent() { |
- _assertResolve( |
- 'dart:test/b/test.dart', '../c/lib.dart', 'dart:test/c/lib.dart'); |
- } |
- |
- void test_resolveRelative_package_dartUri() { |
- _assertResolve('package:foo/bar.dart', 'dart:test', 'dart:test'); |
- } |
- |
- void test_resolveRelative_package_emptyPath() { |
- _assertResolve('package:foo/bar.dart', '', 'package:foo/bar.dart'); |
- } |
- |
- void test_resolveRelative_package_fileName() { |
- _assertResolve('package:b/test.dart', 'lib.dart', 'package:b/lib.dart'); |
- } |
- |
- void test_resolveRelative_package_fileNameWithoutPackageName() { |
- _assertResolve('package:test.dart', 'lib.dart', 'package:lib.dart'); |
- } |
- |
- void test_resolveRelative_package_filePath() { |
- _assertResolve('package:b/test.dart', 'c/lib.dart', 'package:b/c/lib.dart'); |
- } |
- |
- void test_resolveRelative_package_filePathWithParent() { |
- _assertResolve( |
- 'package:a/b/test.dart', '../c/lib.dart', 'package:a/c/lib.dart'); |
- } |
- |
- void _assertResolve(String baseStr, String containedStr, String expectedStr) { |
- Uri base = Uri.parse(baseStr); |
- Uri contained = Uri.parse(containedStr); |
- Uri result = resolveRelativeUri(base, contained); |
- expect(result, isNotNull); |
- expect(result.toString(), expectedStr); |
- } |
-} |
- |
-@deprecated |
-@reflectiveTest |
-class SDKLibrariesReaderTest extends EngineTestCase { |
- void test_readFrom_dart2js() { |
- LibraryMap libraryMap = new SdkLibrariesReader(true).readFromFile( |
- FileUtilities2.createFile("/libs.dart"), |
- r''' |
-final Map<String, LibraryInfo> LIBRARIES = const <String, LibraryInfo> { |
- 'first' : const LibraryInfo( |
- 'first/first.dart', |
- categories: 'Client', |
- documented: true, |
- platforms: VM_PLATFORM, |
- dart2jsPath: 'first/first_dart2js.dart'), |
-};'''); |
- expect(libraryMap, isNotNull); |
- expect(libraryMap.size(), 1); |
- SdkLibrary first = libraryMap.getLibrary("dart:first"); |
- expect(first, isNotNull); |
- expect(first.category, "Client"); |
- expect(first.path, "first/first_dart2js.dart"); |
- expect(first.shortName, "dart:first"); |
- expect(first.isDart2JsLibrary, false); |
- expect(first.isDocumented, true); |
- expect(first.isImplementation, false); |
- expect(first.isVmLibrary, true); |
- } |
- |
- void test_readFrom_empty() { |
- LibraryMap libraryMap = new SdkLibrariesReader(false) |
- .readFromFile(FileUtilities2.createFile("/libs.dart"), ""); |
- expect(libraryMap, isNotNull); |
- expect(libraryMap.size(), 0); |
- } |
- |
- void test_readFrom_normal() { |
- LibraryMap libraryMap = new SdkLibrariesReader(false).readFromFile( |
- FileUtilities2.createFile("/libs.dart"), |
- r''' |
-final Map<String, LibraryInfo> LIBRARIES = const <String, LibraryInfo> { |
- 'first' : const LibraryInfo( |
- 'first/first.dart', |
- categories: 'Client', |
- documented: true, |
- platforms: VM_PLATFORM), |
- |
- 'second' : const LibraryInfo( |
- 'second/second.dart', |
- categories: 'Server', |
- documented: false, |
- implementation: true, |
- platforms: 0), |
-};'''); |
- expect(libraryMap, isNotNull); |
- expect(libraryMap.size(), 2); |
- SdkLibrary first = libraryMap.getLibrary("dart:first"); |
- expect(first, isNotNull); |
- expect(first.category, "Client"); |
- expect(first.path, "first/first.dart"); |
- expect(first.shortName, "dart:first"); |
- expect(first.isDart2JsLibrary, false); |
- expect(first.isDocumented, true); |
- expect(first.isImplementation, false); |
- expect(first.isVmLibrary, true); |
- SdkLibrary second = libraryMap.getLibrary("dart:second"); |
- expect(second, isNotNull); |
- expect(second.category, "Server"); |
- expect(second.path, "second/second.dart"); |
- expect(second.shortName, "dart:second"); |
- expect(second.isDart2JsLibrary, false); |
- expect(second.isDocumented, false); |
- expect(second.isImplementation, true); |
- expect(second.isVmLibrary, false); |
- } |
-} |
- |
-@reflectiveTest |
-class UriKindTest { |
- void test_fromEncoding() { |
- expect(UriKind.fromEncoding(0x64), same(UriKind.DART_URI)); |
- expect(UriKind.fromEncoding(0x66), same(UriKind.FILE_URI)); |
- expect(UriKind.fromEncoding(0x70), same(UriKind.PACKAGE_URI)); |
- expect(UriKind.fromEncoding(0x58), same(null)); |
- } |
- |
- void test_getEncoding() { |
- expect(UriKind.DART_URI.encoding, 0x64); |
- expect(UriKind.FILE_URI.encoding, 0x66); |
- expect(UriKind.PACKAGE_URI.encoding, 0x70); |
- } |
-} |