diff --git a/dwds/test/dart_uri_test.dart b/dwds/test/dart_uri_test.dart index 2dfdbbacf..90f6a265c 100644 --- a/dwds/test/dart_uri_test.dart +++ b/dwds/test/dart_uri_test.dart @@ -13,8 +13,8 @@ import 'package:dwds/src/utilities/sdk_configuration.dart'; import 'package:path/path.dart' as p; import 'package:test/test.dart'; -import 'fixtures/fakes.dart'; import 'fixtures/logging.dart'; +import 'fixtures/migrated_fakes.dart'; class TestStrategy extends FakeStrategy { @override diff --git a/dwds/test/debugger_test.dart b/dwds/test/debugger_test.dart index d2e45ccb6..b5d883c6b 100644 --- a/dwds/test/debugger_test.dart +++ b/dwds/test/debugger_test.dart @@ -7,7 +7,6 @@ @TestOn('vm') import 'dart:async'; -import 'package:dwds/asset_reader.dart'; import 'package:dwds/src/debugging/debugger.dart'; import 'package:dwds/src/debugging/frame_computer.dart'; import 'package:dwds/src/debugging/inspector.dart'; @@ -22,6 +21,7 @@ import 'package:webkit_inspection_protocol/webkit_inspection_protocol.dart' import 'fixtures/context.dart'; import 'fixtures/debugger_data.dart'; import 'fixtures/fakes.dart'; +import 'fixtures/migrated_fakes.dart'; final context = TestContext(); AppInspector inspector; @@ -41,27 +41,13 @@ class TestStrategy extends FakeStrategy { 'foo/ddc'; } -class FakeAssetReader implements AssetReader { - @override - Future dartSourceContents(String serverPath) => - throw UnimplementedError(); - - @override - Future metadataContents(String serverPath) => - throw UnimplementedError(); - - @override - Future sourceMapContents(String serverPath) async => - '{"version":3,"sourceRoot":"","sources":["main.dart"],"names":[],' - '"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUwB,IAAtB,WAAM;AAKJ,' - 'IAHF,4BAAkB,aAAa,SAAC,GAAG;AACb,MAApB,WAAM;AACN,YAAgC,+CAAO,AAAK,oBAAO,' - 'yCAAC,WAAW;IAChE;AAC0D,IAA3D,AAAS,AAAK,0DAAO;AAAe,kBAAO;;;AAEvC,gBAAQ;' - 'AAGV,IAFI,kCAAqC,QAAC;AACX,MAA/B,WAAM,AAAwB,0BAAP,QAAF,AAAE,KAAK,GAAP;' - ';EAEzB","file":"main.ddc.js"}'; - - @override - Future close() async {} -} +final sourceMapContents = + '{"version":3,"sourceRoot":"","sources":["main.dart"],"names":[],' + '"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUwB,IAAtB,WAAM;AAKJ,' + 'IAHF,4BAAkB,aAAa,SAAC,GAAG;AACb,MAApB,WAAM;AACN,YAAgC,+CAAO,AAAK,oBAAO,' + 'yCAAC,WAAW;IAChE;AAC0D,IAA3D,AAAS,AAAK,0DAAO;AAAe,kBAAO;;;AAEvC,gBAAQ;' + 'AAGV,IAFI,kCAAqC,QAAC;AACX,MAA/B,WAAM,AAAwB,0BAAP,QAAF,AAAE,KAAK,GAAP;' + ';EAEzB","file":"main.ddc.js"}'; final sampleSyncFrame = WipCallFrame({ 'callFrameId': '{"ordinal":0,"injectedScriptId":2}', @@ -101,7 +87,8 @@ void main() async { webkitDebugger.onPaused = pausedController.stream; globalLoadStrategy = TestStrategy(); final root = 'fakeRoot'; - locations = Locations(FakeAssetReader(), FakeModules(), root); + locations = Locations( + FakeAssetReader(sourceMap: sourceMapContents), FakeModules(), root); locations.initialize('fake_entrypoint'); skipLists = SkipLists(); debugger = await Debugger.create( diff --git a/dwds/test/fixtures/fakes.dart b/dwds/test/fixtures/fakes.dart index 4e3904caf..60fea34cc 100644 --- a/dwds/test/fixtures/fakes.dart +++ b/dwds/test/fixtures/fakes.dart @@ -6,20 +6,17 @@ import 'dart:async'; -import 'package:dwds/expression_compiler.dart'; import 'package:dwds/src/debugging/classes.dart'; import 'package:dwds/src/debugging/execution_context.dart'; import 'package:dwds/src/debugging/inspector.dart'; import 'package:dwds/src/debugging/instance.dart'; import 'package:dwds/src/debugging/libraries.dart'; -import 'package:dwds/src/debugging/metadata/provider.dart'; import 'package:dwds/src/debugging/modules.dart'; import 'package:dwds/src/debugging/remote_debugger.dart'; import 'package:dwds/src/debugging/webkit_debugger.dart'; import 'package:dwds/src/handlers/socket_connections.dart'; import 'package:dwds/src/loaders/require.dart'; import 'package:dwds/src/loaders/strategy.dart'; -import 'package:shelf/shelf.dart' as shelf; import 'package:vm_service/vm_service.dart'; /// A library of fake/stub implementations of our classes and their supporting @@ -259,62 +256,3 @@ class FakeExecutionContext extends ExecutionContext { FakeExecutionContext(); } - -class FakeStrategy implements LoadStrategy { - @override - Future bootstrapFor(String entrypoint) async => 'dummy_bootstrap'; - - @override - shelf.Handler get handler => - (request) => (request.url.path == 'someDummyPath') - ? shelf.Response.ok('some dummy response') - : shelf.Response.notFound('someDummyPath'); - - @override - String get id => 'dummy-id'; - - @override - String get moduleFormat => 'dummy-format'; - - @override - String get loadLibrariesModule => ''; - - @override - String get loadLibrariesSnippet => ''; - - @override - String loadLibrarySnippet(String libraryUri) => ''; - - @override - String get loadModuleSnippet => ''; - - @override - ReloadConfiguration get reloadConfiguration => ReloadConfiguration.none; - - @override - String loadClientSnippet(String clientScript) => 'dummy-load-client-snippet'; - - @override - Future moduleForServerPath(String entrypoint, String serverPath) => - null; - - @override - Future serverPathForModule(String entrypoint, String module) => null; - - @override - Future sourceMapPathForModule(String entrypoint, String module) => - null; - - @override - String serverPathForAppUri(String appUri) => null; - - @override - MetadataProvider metadataProviderFor(String entrypoint) => null; - - @override - void trackEntrypoint(String entrypoint) {} - - @override - Future> moduleInfoForEntrypoint(String entrypoint) => - throw UnimplementedError(); -} diff --git a/dwds/test/fixtures/migrated_fakes.dart b/dwds/test/fixtures/migrated_fakes.dart new file mode 100644 index 000000000..19eb5140c --- /dev/null +++ b/dwds/test/fixtures/migrated_fakes.dart @@ -0,0 +1,108 @@ +// Copyright (c) 2022, 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 'dart:async'; + +import 'package:dwds/expression_compiler.dart'; +import 'package:dwds/src/debugging/metadata/provider.dart'; +import 'package:dwds/src/loaders/strategy.dart'; +import 'package:shelf/shelf.dart' as shelf; +import 'package:dwds/asset_reader.dart'; + +class FakeStrategy implements LoadStrategy { + @override + Future bootstrapFor(String entrypoint) async => 'dummy_bootstrap'; + + @override + shelf.Handler get handler => + (request) => (request.url.path == 'someDummyPath') + ? shelf.Response.ok('some dummy response') + : shelf.Response.notFound('someDummyPath'); + + @override + String get id => 'dummy-id'; + + @override + String get moduleFormat => 'dummy-format'; + + @override + String get loadLibrariesModule => ''; + + @override + String get loadLibrariesSnippet => ''; + + @override + String loadLibrarySnippet(String libraryUri) => ''; + + @override + String get loadModuleSnippet => ''; + + @override + ReloadConfiguration get reloadConfiguration => ReloadConfiguration.none; + + @override + String loadClientSnippet(String clientScript) => 'dummy-load-client-snippet'; + + @override + Future moduleForServerPath(String entrypoint, String serverPath) => + Future.value(''); + + @override + Future serverPathForModule(String entrypoint, String module) => + Future.value(''); + + @override + Future sourceMapPathForModule(String entrypoint, String module) => + Future.value(''); + + @override + String serverPathForAppUri(String appUri) => ''; + + @override + MetadataProvider metadataProviderFor(String entrypoint) => + MetadataProvider(entrypoint, FakeAssetReader()); + + @override + void trackEntrypoint(String entrypoint) {} + + @override + Future> moduleInfoForEntrypoint(String entrypoint) => + throw UnimplementedError(); +} + +class FakeAssetReader implements AssetReader { + final String? _metadata; + final String? _dartSource; + final String? _sourceMap; + FakeAssetReader({ + metadata, + dartSource, + sourceMap, + }) : _metadata = metadata, + _dartSource = dartSource, + _sourceMap = sourceMap; + + @override + Future dartSourceContents(String serverPath) { + return _throwUnimplementedOrReturnContents(_dartSource); + } + + @override + Future metadataContents(String serverPath) { + return _throwUnimplementedOrReturnContents(_metadata); + } + + @override + Future sourceMapContents(String serverPath) { + return _throwUnimplementedOrReturnContents(_sourceMap); + } + + @override + Future close() async {} + + Future _throwUnimplementedOrReturnContents(String? contents) { + if (contents == null) throw UnimplementedError(); + return Future.value(contents); + } +} diff --git a/dwds/test/handlers/injector_test.dart b/dwds/test/handlers/injector_test.dart index bded69ad7..e39cf792a 100644 --- a/dwds/test/handlers/injector_test.dart +++ b/dwds/test/handlers/injector_test.dart @@ -13,7 +13,7 @@ import 'package:shelf/shelf.dart'; import 'package:shelf/shelf_io.dart' as shelf_io; import 'package:test/test.dart'; -import '../fixtures/fakes.dart'; +import '../fixtures/migrated_fakes.dart'; void main() { HttpServer server; diff --git a/dwds/test/location_test.dart b/dwds/test/location_test.dart index 894fd557d..194dd7e61 100644 --- a/dwds/test/location_test.dart +++ b/dwds/test/location_test.dart @@ -13,7 +13,15 @@ import 'package:dwds/src/utilities/dart_uri.dart'; import 'package:shelf/shelf.dart' as shelf; import 'package:test/test.dart'; -import 'debugger_test.dart'; +import 'fixtures/migrated_fakes.dart'; + +final sourceMapContents = + '{"version":3,"sourceRoot":"","sources":["main.dart"],"names":[],' + '"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUwB,IAAtB,WAAM;AAKJ,' + 'IAHF,4BAAkB,aAAa,SAAC,GAAG;AACb,MAApB,WAAM;AACN,YAAgC,+CAAO,AAAK,oBAAO,' + 'yCAAC,WAAW;IAChE;AAC0D,IAA3D,AAAS,AAAK,0DAAO;AAAe,kBAAO;;;AAEvC,gBAAQ;' + 'AAGV,IAFI,kCAAqC,QAAC;AACX,MAA/B,WAAM,AAAwB,0BAAP,QAAF,AAAE,KAAK,GAAP;' + ';EAEzB","file":"main.ddc.js"}'; void main() { const lines = 100; @@ -22,7 +30,7 @@ void main() { globalLoadStrategy = MockLoadStrategy(); final dartUri = DartUri('org-dartlang://web/main.dart'); - final assetReader = FakeAssetReader(); + final assetReader = FakeAssetReader(sourceMap: sourceMapContents); final modules = MockModules(); final locations = Locations(assetReader, modules, ''); locations.initialize('fake_entrypoint'); diff --git a/dwds/test/metadata_test.dart b/dwds/test/metadata_test.dart index d2b750674..499a6ed62 100644 --- a/dwds/test/metadata_test.dart +++ b/dwds/test/metadata_test.dart @@ -2,13 +2,12 @@ // 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. -// @dart = 2.9 - -import 'package:dwds/asset_reader.dart'; import 'package:dwds/src/debugging/metadata/module_metadata.dart'; import 'package:dwds/src/debugging/metadata/provider.dart'; import 'package:test/test.dart'; +import 'fixtures/migrated_fakes.dart'; + const _emptySourceMetadata = '{"version":"1.0.0","name":"web/main","closureName":"load__web__main",' '"sourceMapUri":"foo/web/main.ddc.js.map",' @@ -38,29 +37,11 @@ const _fileUriMetadata = '"fileUri":"org-dartlang-app:///web/main.dart","partUris":[]}]}\n' '// intentionally empty: package blah has no dart sources'; -class FakeAssetReader implements AssetReader { - final String _metadata; - FakeAssetReader(this._metadata); - @override - Future dartSourceContents(String serverPath) => - throw UnimplementedError(); - - @override - Future metadataContents(String serverPath) async => _metadata; - - @override - Future sourceMapContents(String serverPath) => - throw UnimplementedError(); - - @override - Future close() async {} -} - void main() { test('can parse metadata with empty sources', () async { final provider = MetadataProvider( 'foo.bootstrap.js', - FakeAssetReader(_emptySourceMetadata), + FakeAssetReader(metadata: _emptySourceMetadata), ); expect(await provider.libraries, contains('org-dartlang-app:///web/main.dart')); @@ -70,7 +51,7 @@ void main() { test('can parse metadata with no null safety information', () async { final provider = MetadataProvider( 'foo.bootstrap.js', - FakeAssetReader(_noNullSafetyMetadata), + FakeAssetReader(metadata: _noNullSafetyMetadata), ); expect(await provider.libraries, contains('org-dartlang-app:///web/main.dart')); @@ -80,7 +61,7 @@ void main() { test('throws on metadata with absolute import uris', () async { final provider = MetadataProvider( 'foo.bootstrap.js', - FakeAssetReader(_fileUriMetadata), + FakeAssetReader(metadata: _fileUriMetadata), ); await expectLater(provider.libraries, throwsA(const TypeMatcher())); diff --git a/dwds/test/skip_list_test.dart b/dwds/test/skip_list_test.dart index 4d23f08c0..66ce9aa60 100644 --- a/dwds/test/skip_list_test.dart +++ b/dwds/test/skip_list_test.dart @@ -2,15 +2,27 @@ // 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. -// @dart = 2.9 - +import 'package:dwds/src/loaders/strategy.dart'; import 'package:dwds/src/debugging/location.dart'; import 'package:dwds/src/debugging/skip_list.dart'; +import 'package:dwds/src/utilities/dart_uri.dart'; import 'package:source_maps/parser.dart'; import 'package:test/test.dart'; +import 'fixtures/migrated_fakes.dart'; + +class TestStrategy extends FakeStrategy { + @override + String serverPathForAppUri(String appUri) { + return 'foo'; + } +} + void main() { - SkipLists skipLists; + globalLoadStrategy = TestStrategy(); + + late SkipLists skipLists; + final dartUri = DartUri('org-dartlang-app://web/main.dart'); group('SkipLists', () { setUp(() { skipLists = SkipLists(); @@ -19,9 +31,9 @@ void main() { test('do not include known ranges', () async { final skipList = await skipLists.compute('123', { Location.from( - 'foo', TargetLineEntry(1, []), TargetEntry(2, 0, 0, 0), null), + 'foo', TargetLineEntry(1, []), TargetEntry(2, 0, 0, 0), dartUri), Location.from( - 'foo', TargetLineEntry(10, []), TargetEntry(20, 0, 0, 0), null), + 'foo', TargetLineEntry(10, []), TargetEntry(20, 0, 0, 0), dartUri), }); expect(skipList.length, 3); _validateRange(skipList.first, 0, 0, 1, 1); @@ -32,9 +44,9 @@ void main() { test('do not include start of the file', () async { final skipList = await skipLists.compute('123', { Location.from( - 'foo', TargetLineEntry(0, []), TargetEntry(0, 0, 0, 0), null), + 'foo', TargetLineEntry(0, []), TargetEntry(0, 0, 0, 0), dartUri), Location.from( - 'foo', TargetLineEntry(10, []), TargetEntry(20, 0, 0, 0), null), + 'foo', TargetLineEntry(10, []), TargetEntry(20, 0, 0, 0), dartUri), }); expect(skipList.length, 2); _validateRange(skipList[0], 0, 1, 10, 19); @@ -44,9 +56,9 @@ void main() { test('does not depend on order of locations', () async { final skipList = await skipLists.compute('123', { Location.from( - 'foo', TargetLineEntry(10, []), TargetEntry(20, 0, 0, 0), null), + 'foo', TargetLineEntry(10, []), TargetEntry(20, 0, 0, 0), dartUri), Location.from( - 'foo', TargetLineEntry(0, []), TargetEntry(0, 0, 0, 0), null), + 'foo', TargetLineEntry(0, []), TargetEntry(0, 0, 0, 0), dartUri), }); expect(skipList.length, 2); _validateRange(skipList[0], 0, 1, 10, 19);