// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file // 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. import 'package:analyzer/file_system/memory_file_system.dart'; import 'package:analyzer/src/generated/bazel.dart'; import 'package:analyzer/src/generated/source.dart'; import 'package:test/test.dart'; import 'package:test_reflective_loader/test_reflective_loader.dart'; main() { defineReflectiveSuite(() { defineReflectiveTests(BazelFileUriResolverTest); defineReflectiveTests(BazelPackageUriResolverTest); defineReflectiveTests(BazelWorkspaceTest); }); } @reflectiveTest class BazelFileUriResolverTest extends _BaseTest { BazelWorkspace workspace; BazelFileUriResolver resolver; void setUp() { provider.newFile(_p('/workspace/WORKSPACE'), ''); provider.newFolder(_p('/workspace/bazel-genfiles')); workspace = BazelWorkspace.find(provider, _p('/workspace')); resolver = new BazelFileUriResolver(workspace); provider.newFile(_p('/workspace/test.dart'), ''); provider.newFile(_p('/workspace/bazel-bin/gen1.dart'), ''); provider.newFile(_p('/workspace/bazel-genfiles/gen2.dart'), ''); } void test_resolveAbsolute_doesNotExist() { Source source = _resolvePath('/workspace/foo.dart'); expect(source, isNotNull); expect(source.exists(), isFalse); expect(source.fullName, _p('/workspace/foo.dart')); } void test_resolveAbsolute_file() { Source source = _resolvePath('/workspace/test.dart'); expect(source, isNotNull); expect(source.exists(), isTrue); expect(source.fullName, _p('/workspace/test.dart')); } void test_resolveAbsolute_folder() { Source source = _resolvePath('/workspace'); expect(source, isNotNull); expect(source.exists(), isFalse); expect(source.fullName, _p('/workspace')); } void test_resolveAbsolute_generated_file_exists_one() { Source source = _resolvePath('/workspace/gen1.dart'); expect(source, isNotNull); expect(source.exists(), isTrue); expect(source.fullName, _p('/workspace/bazel-bin/gen1.dart')); } void test_resolveAbsolute_generated_file_exists_two() { Source source = _resolvePath('/workspace/gen2.dart'); expect(source, isNotNull); expect(source.exists(), isTrue); expect(source.fullName, _p('/workspace/bazel-genfiles/gen2.dart')); } void test_resolveAbsolute_notFile_dartUri() { Uri uri = new Uri(scheme: 'dart', path: 'core'); Source source = resolver.resolveAbsolute(uri); expect(source, isNull); } void test_resolveAbsolute_notFile_httpsUri() { Uri uri = new Uri(scheme: 'https', path: '127.0.0.1/test.dart'); Source source = resolver.resolveAbsolute(uri); expect(source, isNull); } void test_restoreAbsolute() { Uri uri = provider.pathContext.toUri(_p('/workspace/test.dart')); Source source = resolver.resolveAbsolute(uri); expect(source, isNotNull); expect(resolver.restoreAbsolute(source), uri); expect( resolver.restoreAbsolute( new NonExistingSource(source.fullName, null, null)), uri); } Source _resolvePath(String absolutePosixPath) { String absolutePath = provider.convertPath(absolutePosixPath); Uri uri = provider.pathContext.toUri(absolutePath); return resolver.resolveAbsolute(uri); } } @reflectiveTest class BazelPackageUriResolverTest extends _BaseTest { BazelWorkspace workspace; BazelPackageUriResolver resolver; void test_resolveAbsolute_bin() { _addResources([ '/workspace/WORKSPACE', '/workspace/bazel-genfiles/', '/workspace/my/foo/lib/foo1.dart', '/workspace/bazel-bin/my/foo/lib/foo1.dart' ]); _assertResolve( 'package:my.foo/foo1.dart', '/workspace/bazel-bin/my/foo/lib/foo1.dart', exists: true); } void test_resolveAbsolute_bin_notInWorkspace() { _addResources([ '/workspace/WORKSPACE', '/workspace/bazel-genfiles/', '/workspace/bazel-bin/my/foo/lib/foo1.dart' ]); _assertResolve( 'package:my.foo/foo1.dart', '/workspace/bazel-bin/my/foo/lib/foo1.dart', exists: true); } void test_resolveAbsolute_genfiles() { _addResources([ '/workspace/WORKSPACE', '/workspace/bazel-genfiles/', '/workspace/my/foo/lib/foo1.dart', '/workspace/bazel-genfiles/my/foo/lib/foo1.dart' ]); _assertResolve('package:my.foo/foo1.dart', '/workspace/bazel-genfiles/my/foo/lib/foo1.dart', exists: true); } void test_resolveAbsolute_genfiles_notInWorkspace() { _addResources([ '/workspace/WORKSPACE', '/workspace/bazel-genfiles/', '/workspace/bazel-genfiles/my/foo/lib/foo1.dart' ]); _assertResolve('package:my.foo/foo1.dart', '/workspace/bazel-genfiles/my/foo/lib/foo1.dart', exists: true); } void test_resolveAbsolute_null_noSlash() { _addResources([ '/workspace/WORKSPACE', '/workspace/bazel-genfiles/', ]); Source source = resolver.resolveAbsolute(Uri.parse('package:foo')); expect(source, isNull); } void test_resolveAbsolute_null_notPackage() { _addResources([ '/workspace/WORKSPACE', '/workspace/bazel-genfiles/', ]); Source source = resolver.resolveAbsolute(Uri.parse('dart:async')); expect(source, isNull); } void test_resolveAbsolute_null_startsWithSlash() { _addResources([ '/workspace/WORKSPACE', '/workspace/bazel-genfiles/', '/workspace/my/foo/lib/bar.dart', ]); Source source = resolver.resolveAbsolute(Uri.parse('package:/foo/bar.dart')); expect(source, isNull); } void test_resolveAbsolute_readonly_bin() { _addResources([ '/Users/user/test/READONLY/prime/', '/Users/user/test/READONLY/prime/my/foo/lib/foo1.dart', '/Users/user/test/prime/bazel-genfiles/', '/Users/user/test/prime/my/module/', '/Users/user/test/prime/bazel-bin/my/foo/lib/foo1.dart', ], workspacePath: '/Users/user/test/prime/my/module'); _assertResolve('package:my.foo/foo1.dart', '/Users/user/test/prime/bazel-bin/my/foo/lib/foo1.dart', exists: true); } void test_resolveAbsolute_readonly_bin_notInWorkspace() { _addResources([ '/Users/user/test/READONLY/prime/', '/Users/user/test/prime/bazel-genfiles/', '/Users/user/test/prime/my/module/', '/Users/user/test/prime/bazel-bin/my/foo/lib/foo1.dart', ], workspacePath: '/Users/user/test/prime/my/module'); _assertResolve('package:my.foo/foo1.dart', '/Users/user/test/prime/bazel-bin/my/foo/lib/foo1.dart', exists: true); } void test_resolveAbsolute_readonly_genfiles() { _addResources([ '/Users/user/test/READONLY/prime/', '/Users/user/test/READONLY/prime/my/foo/lib/foo1.dart', '/Users/user/test/prime/bazel-genfiles/', '/Users/user/test/prime/my/module/', '/Users/user/test/prime/bazel-genfiles/my/foo/lib/foo1.dart', ], workspacePath: '/Users/user/test/prime/my/module'); _assertResolve('package:my.foo/foo1.dart', '/Users/user/test/prime/bazel-genfiles/my/foo/lib/foo1.dart', exists: true); } void test_resolveAbsolute_readonly_genfiles_notInWorkspace() { _addResources([ '/Users/user/test/READONLY/prime/', '/Users/user/test/prime/bazel-genfiles/', '/Users/user/test/prime/my/module/', '/Users/user/test/prime/bazel-genfiles/my/foo/lib/foo1.dart', ], workspacePath: '/Users/user/test/prime/my/module'); _assertResolve('package:my.foo/foo1.dart', '/Users/user/test/prime/bazel-genfiles/my/foo/lib/foo1.dart', exists: true); } void test_resolveAbsolute_readonly_thirdParty_bin() { _addResources([ '/Users/user/test/READONLY/prime/', '/Users/user/test/READONLY/prime/third_party/dart/foo/lib/foo1.dart', '/Users/user/test/prime/bazel-genfiles/', '/Users/user/test/prime/my/module/', '/Users/user/test/prime/bazel-bin/third_party/dart/foo/lib/foo1.dart', ], workspacePath: '/Users/user/test/prime/my/module'); _assertResolve('package:foo/foo1.dart', '/Users/user/test/prime/bazel-bin/third_party/dart/foo/lib/foo1.dart', exists: true); } void test_resolveAbsolute_readonly_thirdParty_genfiles() { _addResources([ '/Users/user/test/READONLY/prime/', '/Users/user/test/READONLY/prime/third_party/dart/foo/lib/foo1.dart', '/Users/user/test/prime/bazel-genfiles/', '/Users/user/test/prime/my/module/', '/Users/user/test/prime/bazel-genfiles/third_party/dart/foo/lib/foo1.dart', ], workspacePath: '/Users/user/test/prime/my/module'); _assertResolve('package:foo/foo1.dart', '/Users/user/test/prime/bazel-genfiles/third_party/dart/foo/lib/foo1.dart', exists: true); } void test_resolveAbsolute_readonly_thirdParty_workspace_doesNotExist() { _addResources([ '/Users/user/test/READONLY/prime/', '/Users/user/test/READONLY/prime/third_party/dart/foo/lib/foo1.dart', '/Users/user/test/prime/bazel-genfiles/', '/Users/user/test/prime/my/module/', ], workspacePath: '/Users/user/test/prime/my/module'); _assertResolve('package:foo/foo2.dart', '/Users/user/test/prime/third_party/dart/foo/lib/foo2.dart', exists: false); } void test_resolveAbsolute_readonly_thirdParty_workspace_exists() { _addResources([ '/Users/user/test/READONLY/prime/', '/Users/user/test/READONLY/prime/third_party/dart/foo/lib/foo1.dart', '/Users/user/test/prime/bazel-genfiles/', '/Users/user/test/prime/my/module/', ], workspacePath: '/Users/user/test/prime/my/module'); _assertResolve('package:foo/foo1.dart', '/Users/user/test/READONLY/prime/third_party/dart/foo/lib/foo1.dart', exists: true); } void test_resolveAbsolute_readonly_workspace_doesNotExist() { _addResources([ '/Users/user/test/READONLY/prime/', '/Users/user/test/prime/bazel-genfiles/', '/Users/user/test/prime/my/module/', ], workspacePath: '/Users/user/test/prime/my/module'); _assertResolve('package:my.foo/foo1.dart', '/Users/user/test/prime/my/foo/lib/foo1.dart', exists: false); } void test_resolveAbsolute_readonly_workspace_exists() { _addResources([ '/Users/user/test/READONLY/prime/', '/Users/user/test/READONLY/prime/my/foo/lib/foo1.dart', '/Users/user/test/prime/bazel-genfiles/', '/Users/user/test/prime/my/module/', ], workspacePath: '/Users/user/test/prime/my/module'); _assertResolve('package:my.foo/foo1.dart', '/Users/user/test/READONLY/prime/my/foo/lib/foo1.dart', exists: true); } void test_resolveAbsolute_thirdParty_bin() { _addResources([ '/workspace/WORKSPACE', '/workspace/bazel-genfiles/', '/workspace/third_party/dart/foo/lib/foo1.dart', '/workspace/bazel-bin/third_party/dart/foo/lib/foo1.dart', ]); _assertResolve('package:foo/foo1.dart', '/workspace/bazel-bin/third_party/dart/foo/lib/foo1.dart', exists: true); } void test_resolveAbsolute_thirdParty_bin_notInWorkspace() { _addResources([ '/workspace/WORKSPACE', '/workspace/bazel-genfiles/', '/workspace/bazel-bin/third_party/dart/foo/lib/foo1.dart', ]); _assertResolve('package:foo/foo1.dart', '/workspace/bazel-bin/third_party/dart/foo/lib/foo1.dart', exists: true); } void test_resolveAbsolute_thirdParty_doesNotExist() { _addResources([ '/workspace/WORKSPACE', '/workspace/bazel-genfiles/', '/workspace/third_party/dart/foo/lib/foo1.dart', ]); _assertResolve('package:foo/foo2.dart', '/workspace/third_party/dart/foo/lib/foo2.dart', exists: false); } void test_resolveAbsolute_thirdParty_exists() { _addResources([ '/workspace/WORKSPACE', '/workspace/bazel-genfiles/', '/workspace/third_party/dart/foo/lib/foo1.dart', ]); _assertResolve('package:foo/foo1.dart', '/workspace/third_party/dart/foo/lib/foo1.dart', exists: true); } void test_resolveAbsolute_thirdParty_genfiles() { _addResources([ '/workspace/WORKSPACE', '/workspace/bazel-genfiles/', '/workspace/third_party/dart/foo/lib/foo1.dart', '/workspace/bazel-genfiles/third_party/dart/foo/lib/foo1.dart', ]); _assertResolve('package:foo/foo1.dart', '/workspace/bazel-genfiles/third_party/dart/foo/lib/foo1.dart', exists: true); } void test_resolveAbsolute_thirdParty_genfiles_notInWorkspace() { _addResources([ '/workspace/WORKSPACE', '/workspace/bazel-genfiles/', '/workspace/bazel-genfiles/third_party/dart/foo/lib/foo1.dart', ]); _assertResolve('package:foo/foo1.dart', '/workspace/bazel-genfiles/third_party/dart/foo/lib/foo1.dart', exists: true); } void test_resolveAbsolute_workspace_doesNotExist() { _addResources([ '/workspace/WORKSPACE', '/workspace/bazel-genfiles/', ]); _assertResolve('package:my.foo/doesNotExist.dart', '/workspace/my/foo/lib/doesNotExist.dart', exists: false); } void test_resolveAbsolute_workspace_exists() { _addResources([ '/workspace/WORKSPACE', '/workspace/bazel-genfiles/', '/workspace/my/foo/lib/foo1.dart', ]); _assertResolve( 'package:my.foo/foo1.dart', '/workspace/my/foo/lib/foo1.dart', exists: true); } void test_restoreAbsolute_noPackageName_workspace() { _addResources([ '/workspace/WORKSPACE', '/workspace/bazel-genfiles/', '/workspace/lib/foo1.dart', '/workspace/foo/lib/foo2.dart', ]); _assertRestore('/workspace/lib/foo1.dart', null); _assertRestore('/workspace/foo/lib/foo2.dart', null); } void test_restoreAbsolute_noPathInLib_bin() { _addResources([ '/workspace/WORKSPACE', '/workspace/bazel-genfiles/', '/workspace/bazel-bin/my/foo/lib/foo1.dart', ]); _assertRestore('/workspace/bazel-bin', null); _assertRestore('/workspace/bazel-bin/my', null); _assertRestore('/workspace/bazel-bin/my/foo', null); _assertRestore('/workspace/bazel-bin/my/foo/lib', null); } void test_restoreAbsolute_noPathInLib_genfiles() { _addResources([ '/workspace/WORKSPACE', '/workspace/bazel-genfiles/', '/workspace/bazel-genfiles/my/foo/lib/foo1.dart', ]); _assertRestore('/workspace/bazel-genfiles', null); _assertRestore('/workspace/bazel-genfiles/my', null); _assertRestore('/workspace/bazel-genfiles/my/foo', null); _assertRestore('/workspace/bazel-genfiles/my/foo/lib', null); } void test_restoreAbsolute_noPathInLib_workspace() { _addResources([ '/workspace/WORKSPACE', '/workspace/bazel-genfiles/', '/workspace/my/foo/lib/foo1.dart', ]); _assertRestore('/workspace', null); _assertRestore('/workspace/my', null); _assertRestore('/workspace/my/foo', null); _assertRestore('/workspace/my/foo/lib', null); } void test_restoreAbsolute_thirdPartyNotDart_workspace() { _addResources([ '/workspace/WORKSPACE', '/workspace/bazel-genfiles/', '/workspace/third_party/something/lib/foo.dart', ]); _assertRestore('/workspace/third_party/something/lib/foo.dart', 'package:third_party.something/foo.dart'); } void _addResources(List paths, {String workspacePath: '/workspace'}) { for (String path in paths) { if (path.endsWith('/')) { provider.newFolder(_p(path.substring(0, path.length - 1))); } else { provider.newFile(_p(path), ''); } } workspace = BazelWorkspace.find(provider, _p(workspacePath)); resolver = new BazelPackageUriResolver(workspace); } void _assertResolve(String uriStr, String posixPath, {bool exists: true, bool restore: true}) { Uri uri = Uri.parse(uriStr); Source source = resolver.resolveAbsolute(uri); expect(source, isNotNull); expect(source.fullName, _p(posixPath)); expect(source.uri, uri); expect(source.exists(), exists); // If enabled, test also "restoreAbsolute". if (restore) { Uri uri = resolver.restoreAbsolute(source); expect(uri.toString(), uriStr); } } void _assertRestore(String posixPath, String expectedUri) { String path = _p(posixPath); _MockSource source = new _MockSource(path); Uri uri = resolver.restoreAbsolute(source); expect(uri?.toString(), expectedUri); } } @reflectiveTest class BazelWorkspaceTest extends _BaseTest { void test_find_fail_notAbsolute() { expect(() => BazelWorkspace.find(provider, _p('not_absolute')), throwsArgumentError); } void test_find_hasReadonlyFolder() { provider.newFolder(_p('/Users/user/test/READONLY/prime')); provider.newFolder(_p('/Users/user/test/prime')); provider.newFolder(_p('/Users/user/test/prime/bazel-genfiles')); BazelWorkspace workspace = BazelWorkspace.find(provider, _p('/Users/user/test/prime/my/module')); expect(workspace.root, _p('/Users/user/test/prime')); expect(workspace.readonly, _p('/Users/user/test/READONLY/prime')); expect(workspace.bin, _p('/Users/user/test/prime/bazel-bin')); expect(workspace.genfiles, _p('/Users/user/test/prime/bazel-genfiles')); } void test_find_hasReadonlyFolder_bad_actuallyHasWorkspaceFile() { provider.newFolder(_p('/Users/user/test/READONLY')); provider.newFile(_p('/Users/user/test/prime/WORKSPACE'), ''); provider.newFolder(_p('/Users/user/test/prime/bazel-genfiles')); BazelWorkspace workspace = BazelWorkspace.find(provider, _p('/Users/user/test/prime/my/module')); expect(workspace.root, _p('/Users/user/test/prime')); expect(workspace.readonly, isNull); expect(workspace.bin, _p('/Users/user/test/prime/bazel-bin')); expect(workspace.genfiles, _p('/Users/user/test/prime/bazel-genfiles')); } void test_find_hasReadonlyFolder_blaze() { provider.newFolder(_p('/Users/user/test/READONLY/prime')); provider.newFolder(_p('/Users/user/test/prime')); provider.newFolder(_p('/Users/user/test/prime/blaze-genfiles')); BazelWorkspace workspace = BazelWorkspace.find(provider, _p('/Users/user/test/prime/my/module')); expect(workspace.root, _p('/Users/user/test/prime')); expect(workspace.readonly, _p('/Users/user/test/READONLY/prime')); expect(workspace.bin, _p('/Users/user/test/prime/blaze-bin')); expect(workspace.genfiles, _p('/Users/user/test/prime/blaze-genfiles')); } void test_find_hasWorkspaceFile() { provider.newFile(_p('/workspace/WORKSPACE'), ''); provider.newFolder(_p('/workspace/bazel-genfiles')); BazelWorkspace workspace = BazelWorkspace.find(provider, _p('/workspace/my/module')); expect(workspace.root, _p('/workspace')); expect(workspace.readonly, isNull); expect(workspace.bin, _p('/workspace/bazel-bin')); expect(workspace.genfiles, _p('/workspace/bazel-genfiles')); } void test_find_hasWorkspaceFile_forModuleInWorkspace() { provider.newFile(_p('/workspace/WORKSPACE'), ''); provider.newFolder(_p('/workspace/bazel-genfiles')); BazelWorkspace workspace = BazelWorkspace.find(provider, _p('/workspace/my/module')); expect(workspace.root, _p('/workspace')); expect(workspace.readonly, isNull); expect(workspace.bin, _p('/workspace/bazel-bin')); expect(workspace.genfiles, _p('/workspace/bazel-genfiles')); } void test_find_hasWorkspaceFile_forWorkspace() { provider.newFile(_p('/workspace/WORKSPACE'), ''); provider.newFolder(_p('/workspace/bazel-genfiles')); BazelWorkspace workspace = BazelWorkspace.find(provider, _p('/workspace')); expect(workspace.root, _p('/workspace')); expect(workspace.readonly, isNull); expect(workspace.bin, _p('/workspace/bazel-bin')); expect(workspace.genfiles, _p('/workspace/bazel-genfiles')); } void test_find_hasWorkspaceFile_forWorkspace_blaze() { provider.newFile(_p('/workspace/WORKSPACE'), ''); provider.newFolder(_p('/workspace/blaze-genfiles')); BazelWorkspace workspace = BazelWorkspace.find(provider, _p('/workspace')); expect(workspace.root, _p('/workspace')); expect(workspace.readonly, isNull); expect(workspace.bin, _p('/workspace/blaze-bin')); expect(workspace.genfiles, _p('/workspace/blaze-genfiles')); } void test_find_null_noWorkspaceMarkers() { BazelWorkspace workspace = BazelWorkspace.find(provider, _p('/workspace/my/module')); expect(workspace, isNull); } void test_find_null_noWorkspaceMarkers_inRoot() { BazelWorkspace workspace = BazelWorkspace.find(provider, _p('/')); expect(workspace, isNull); } void test_find_null_symlinkPrefix() { String prefix = BazelWorkspace.defaultSymlinkPrefix; provider.newFile(_p('/workspace/WORKSPACE'), ''); BazelWorkspace workspace = BazelWorkspace.find(provider, _p('/workspace/my/module')); expect(workspace.root, _p('/workspace')); expect(workspace.readonly, isNull); expect(workspace.bin, _p('/workspace/$prefix-bin')); expect(workspace.genfiles, _p('/workspace/$prefix-genfiles')); } void test_findFile_hasReadonlyFolder() { provider.newFolder(_p('/Users/user/test/READONLY/prime')); provider.newFolder(_p('/Users/user/test/prime')); provider.newFile(_p('/Users/user/test/prime/my/module/test1.dart'), ''); provider.newFile(_p('/Users/user/test/prime/my/module/test2.dart'), ''); provider.newFile(_p('/Users/user/test/prime/my/module/test3.dart'), ''); provider.newFile( _p('/Users/user/test/prime/bazel-bin/my/module/test2.dart'), ''); provider.newFile( _p('/Users/user/test/prime/bazel-genfiles/my/module/test3.dart'), ''); provider.newFile( _p('/Users/user/test/READONLY/prime/other/module/test4.dart'), ''); BazelWorkspace workspace = BazelWorkspace.find(provider, _p('/Users/user/test/prime/my/module')); expect( workspace .findFile(_p('/Users/user/test/prime/my/module/test1.dart')) .path, _p('/Users/user/test/prime/my/module/test1.dart')); expect( workspace .findFile(_p('/Users/user/test/prime/my/module/test2.dart')) .path, _p('/Users/user/test/prime/bazel-bin/my/module/test2.dart')); expect( workspace .findFile(_p('/Users/user/test/prime/my/module/test3.dart')) .path, _p('/Users/user/test/prime/bazel-genfiles/my/module/test3.dart')); expect( workspace .findFile(_p('/Users/user/test/prime/other/module/test4.dart')) .path, _p('/Users/user/test/READONLY/prime/other/module/test4.dart')); } void test_findFile_main_overrides_readonly() { provider.newFolder(_p('/Users/user/test/READONLY/prime')); provider.newFolder(_p('/Users/user/test/prime')); provider.newFolder(_p('/Users/user/test/prime/bazel-genfiles')); provider.newFile(_p('/Users/user/test/prime/my/module/test.dart'), ''); provider.newFile( _p('/Users/user/test/READONLY/prime/my/module/test.dart'), ''); BazelWorkspace workspace = BazelWorkspace.find(provider, _p('/Users/user/test/prime/my/module')); expect( workspace .findFile(_p('/Users/user/test/prime/my/module/test.dart')) .path, _p('/Users/user/test/prime/my/module/test.dart')); } void test_findFile_noReadOnly() { provider.newFile(_p('/workspace/WORKSPACE'), ''); provider.newFile(_p('/workspace/my/module/test1.dart'), ''); provider.newFile(_p('/workspace/my/module/test2.dart'), ''); provider.newFile(_p('/workspace/my/module/test3.dart'), ''); provider.newFile(_p('/workspace/bazel-bin/my/module/test2.dart'), ''); provider.newFile(_p('/workspace/bazel-genfiles/my/module/test3.dart'), ''); BazelWorkspace workspace = BazelWorkspace.find(provider, _p('/workspace/my/module')); expect(workspace.findFile(_p('/workspace/my/module/test1.dart')).path, _p('/workspace/my/module/test1.dart')); expect(workspace.findFile(_p('/workspace/my/module/test2.dart')).path, _p('/workspace/bazel-bin/my/module/test2.dart')); expect(workspace.findFile(_p('/workspace/my/module/test3.dart')).path, _p('/workspace/bazel-genfiles/my/module/test3.dart')); } } class _BaseTest { final MemoryResourceProvider provider = new MemoryResourceProvider(); /** * Return the [provider] specific path for the given Posix [path]. */ String _p(String path) => provider.convertPath(path); } class _MockSource implements Source { @override final String fullName; _MockSource(this.fullName); @override noSuchMethod(Invocation invocation) { throw new StateError('Unexpected invocation of ${invocation.memberName}'); } }