From dcd50eb4402dbd5b75a8fa1eaeb0304e500acdd3 Mon Sep 17 00:00:00 2001 From: Elliott Brooks <21270878+elliette@users.noreply.github.com> Date: Thu, 21 Jul 2022 17:42:47 -0700 Subject: [PATCH 1/6] Migrate the inspector fake to null safety --- dwds/test/fixtures/fakes.dart | 58 --------------------- dwds/test/fixtures/migrated_fakes.dart | 70 ++++++++++++++++++++++++++ 2 files changed, 70 insertions(+), 58 deletions(-) diff --git a/dwds/test/fixtures/fakes.dart b/dwds/test/fixtures/fakes.dart index 60fea34cc..fabb2f8ae 100644 --- a/dwds/test/fixtures/fakes.dart +++ b/dwds/test/fixtures/fakes.dart @@ -25,64 +25,6 @@ import 'package:webkit_inspection_protocol/webkit_inspection_protocol.dart'; import 'debugger_data.dart'; -/// Constructs a trivial Isolate we can use when we need to provide one but -/// don't want go through initialization. -Isolate get simpleIsolate => Isolate( - id: '1', - number: '1', - name: 'fake', - libraries: [], - exceptionPauseMode: 'abc', - breakpoints: [], - pauseOnExit: false, - pauseEvent: null, - startTime: 0, - livePorts: 0, - runnable: false, - isSystemIsolate: false, - isolateFlags: [], - ); - -class FakeInspector implements AppInspector { - FakeInspector({this.fakeIsolate}); - - Isolate fakeIsolate; - - final _instanceHelper = InstanceHelper(null, null); - - @override - Object noSuchMethod(Invocation invocation) { - throw UnsupportedError('This is a fake'); - } - - @override - Future initialize(LibraryHelper libraryHelper, ClassHelper classHelper, - InstanceHelper instanceHelper) => - null; - - @override - Future instanceRefFor(Object value) => - _instanceHelper.instanceRefFor(value); - - @override - Future getObject(String objectId, {int offset, int count}) => null; - - @override - Future getScripts() => null; - - @override - Future scriptRefFor(String uri) => - Future.value(ScriptRef(id: 'fake', uri: 'fake://uri')); - - @override - ScriptRef scriptWithId(String scriptId) => null; - - @override - Isolate get isolate => fakeIsolate; - - @override - IsolateRef get isolateRef => null; -} class FakeSseConnection implements SseSocketConnection { /// A [StreamController] for incoming messages on SSE connection. diff --git a/dwds/test/fixtures/migrated_fakes.dart b/dwds/test/fixtures/migrated_fakes.dart index 19eb5140c..722013cef 100644 --- a/dwds/test/fixtures/migrated_fakes.dart +++ b/dwds/test/fixtures/migrated_fakes.dart @@ -9,6 +9,12 @@ 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'; +import 'package:dwds/src/debugging/classes.dart'; +import 'package:dwds/src/debugging/inspector.dart'; +import 'package:dwds/src/debugging/instance.dart'; +import 'package:dwds/src/debugging/libraries.dart'; +import 'package:vm_service/vm_service.dart'; + class FakeStrategy implements LoadStrategy { @override @@ -106,3 +112,67 @@ class FakeAssetReader implements AssetReader { return Future.value(contents); } } + +/// Constructs a trivial Isolate we can use when we need to provide one but +/// don't want go through initialization. +Isolate get simpleIsolate => Isolate( + id: '1', + number: '1', + name: 'fake', + libraries: [], + exceptionPauseMode: 'abc', + breakpoints: [], + pauseOnExit: false, + pauseEvent: null, + startTime: 0, + livePorts: 0, + runnable: false, + isSystemIsolate: false, + isolateFlags: [], + ); + +class FakeInspector implements AppInspector { + FakeInspector({required this.fakeIsolate}); + + Isolate fakeIsolate; + + + @override + Object noSuchMethod(Invocation invocation) { + throw UnsupportedError('This is a fake'); + } + + @override + Future initialize(LibraryHelper libraryHelper, ClassHelper classHelper, + InstanceHelper instanceHelper) => + Future.value(null); + + @override + Future instanceRefFor(Object value) => + Future.value(InstanceHelper.kNullInstanceRef); + + @override + Future getObject(String objectId, {int? offset, int? count}) => + Future.value(Obj.parse({})); + + @override + Future getScripts() => Future.value(ScriptList(scripts: [])); + + @override + Future scriptRefFor(String uri) => + Future.value(ScriptRef(id: 'fake', uri: 'fake://uri')); + + @override + ScriptRef? scriptWithId(String? scriptId) => null; + + @override + Isolate get isolate => fakeIsolate; + + @override + IsolateRef get isolateRef => IsolateRef( + id: fakeIsolate.id, + number: fakeIsolate.number, + name: fakeIsolate.name, + isSystemIsolate: fakeIsolate.isSystemIsolate, + ); +} From dd560d08367e9137a6fa9e3535f47534d2d2620f Mon Sep 17 00:00:00 2001 From: Elliott Brooks <21270878+elliette@users.noreply.github.com> Date: Thu, 21 Jul 2022 18:02:30 -0700 Subject: [PATCH 2/6] Migrated the FakeWebkitDebugger --- dwds/test/fixtures/fakes.dart | 127 +------------------------ dwds/test/fixtures/migrated_fakes.dart | 127 +++++++++++++++++++++++++ 2 files changed, 130 insertions(+), 124 deletions(-) diff --git a/dwds/test/fixtures/fakes.dart b/dwds/test/fixtures/fakes.dart index fabb2f8ae..19339d8df 100644 --- a/dwds/test/fixtures/fakes.dart +++ b/dwds/test/fixtures/fakes.dart @@ -2,22 +2,19 @@ // 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 'dart:async'; -import 'package:dwds/src/debugging/classes.dart'; +import 'package:dwds/expression_compiler.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:vm_service/vm_service.dart'; /// A library of fake/stub implementations of our classes and their supporting /// classes (e.g. WipConnection) for unit testing. @@ -71,124 +68,6 @@ class FakeModules implements Modules { } } -class FakeWebkitDebugger implements WebkitDebugger { - final Map _scripts; - @override - Future disable() => null; - - @override - Future enable() => null; - - FakeWebkitDebugger({Map scripts}) : _scripts = scripts { - globalLoadStrategy = RequireStrategy( - ReloadConfiguration.none, - (_) async => {}, - (_) async => {}, - (_, __) async => null, - (_, __) async => null, - (_, __) async => null, - null, - (_) async => null, - null); - } - - @override - Stream eventStream(String method, WipEventTransformer transformer) => - null; - - @override - Future getScriptSource(String scriptId) => null; - - Stream get onClosed => null; - - @override - Stream get onGlobalObjectCleared => null; - - @override - Stream onPaused; - - @override - Stream get onResumed => null; - - @override - Stream get onScriptParsed => null; - - @override - Stream get onTargetCrashed => null; - - @override - Future pause() => null; - - @override - Future resume() => null; - - @override - Map get scripts => _scripts; - - List results = variables1; - int resultsReturned = 0; - - @override - Future sendCommand( - String method, { - Map params, - }) async { - // Force the results that we expect for looking up the variables. - if (method == 'Runtime.getProperties') { - return results[resultsReturned++]; - } - return null; - } - - @override - Future setPauseOnExceptions(PauseState state) => null; - - @override - Future removeBreakpoint(String breakpointId) => null; - - @override - Future stepInto({Map params}) => null; - - @override - Future stepOut() => null; - - @override - Future stepOver({Map params}) => null; - - @override - Stream get onConsoleAPICalled => null; - - @override - Stream get onExceptionThrown => null; - - @override - void close() {} - - @override - Stream get onClose => null; - - @override - Future evaluate(String expression, - {bool returnByValue, int contextId}) => - null; - - @override - Future evaluateOnCallFrame( - String callFrameId, String expression) async { - return RemoteObject({}); - } - - @override - Future> getPossibleBreakpoints(WipLocation start) => - null; - - @override - Future enablePage() => null; - - @override - Future pageReload() => null; -} - /// Fake execution context that is needed for id only class FakeExecutionContext extends ExecutionContext { @override diff --git a/dwds/test/fixtures/migrated_fakes.dart b/dwds/test/fixtures/migrated_fakes.dart index 722013cef..19ec024d8 100644 --- a/dwds/test/fixtures/migrated_fakes.dart +++ b/dwds/test/fixtures/migrated_fakes.dart @@ -14,6 +14,12 @@ import 'package:dwds/src/debugging/inspector.dart'; import 'package:dwds/src/debugging/instance.dart'; import 'package:dwds/src/debugging/libraries.dart'; import 'package:vm_service/vm_service.dart'; +import 'package:dwds/src/debugging/remote_debugger.dart'; +import 'package:dwds/src/debugging/webkit_debugger.dart'; +import 'package:dwds/src/loaders/require.dart'; +import 'package:webkit_inspection_protocol/webkit_inspection_protocol.dart'; + +import 'debugger_data.dart'; class FakeStrategy implements LoadStrategy { @@ -176,3 +182,124 @@ class FakeInspector implements AppInspector { isSystemIsolate: fakeIsolate.isSystemIsolate, ); } + +class FakeWebkitDebugger implements WebkitDebugger { + final Map? _scripts; + @override + Future disable() => Future.value(null); + + @override + Future enable() => Future.value(null); + + FakeWebkitDebugger({Map? scripts}) : _scripts = scripts { + globalLoadStrategy = RequireStrategy( + ReloadConfiguration.none, + (_) async => {}, + (_) async => {}, + (_, __) async => null, + (MetadataProvider _, String __) async => Future.value(''), + (MetadataProvider _, String __) async => Future.value(''), + (String _) => '', + (MetadataProvider _) async => Future.value({}), + FakeAssetReader(), + ); + } + + @override + Stream eventStream(String method, WipEventTransformer transformer) => + Stream.empty(); + + @override + Future getScriptSource(String scriptId) => Future.value(''); + + Stream? get onClosed => null; + + @override + Stream get onGlobalObjectCleared => Stream.empty(); + + @override + late Stream onPaused; + + @override + Stream get onResumed => Stream.empty(); + + @override + Stream get onScriptParsed => Stream.empty(); + + @override + Stream get onTargetCrashed => Stream.empty(); + + @override + Future pause() => Future.value(WipResponse({})); + + @override + Future resume() => Future.value(WipResponse({})); + + @override + Map get scripts => _scripts!; + + List results = variables1; + int resultsReturned = 0; + + @override + Future sendCommand(String command, + {Map? params}) async { + // Force the results that we expect for looking up the variables. + if (command == 'Runtime.getProperties') { + return Future.value(results[resultsReturned++]); + } + return Future.value(WipResponse({})); + } + + @override + Future setPauseOnExceptions(PauseState state) => + Future.value(WipResponse({})); + + @override + Future removeBreakpoint(String breakpointId) => + Future.value(WipResponse({})); + + @override + Future stepInto({Map? params}) => + Future.value(WipResponse({})); + + @override + Future stepOut() => Future.value(WipResponse({})); + + @override + Future stepOver({Map? params}) => + Future.value(WipResponse({})); + + @override + Stream get onConsoleAPICalled => Stream.empty(); + + @override + Stream get onExceptionThrown => Stream.empty(); + + @override + void close() {} + + @override + Stream get onClose => Stream.empty(); + + @override + Future evaluate(String expression, + {bool? returnByValue, int? contextId}) => + Future.value(RemoteObject({})); + + @override + Future evaluateOnCallFrame( + String callFrameId, String expression) async { + return RemoteObject({}); + } + + @override + Future> getPossibleBreakpoints(WipLocation start) => + Future.value([]); + + @override + Future enablePage() => Future.value(WipResponse({})); + + @override + Future pageReload() => Future.value(WipResponse({})); +} From c62725a1a63893628134f79e24b079f33e958432 Mon Sep 17 00:00:00 2001 From: Elliott Brooks <21270878+elliette@users.noreply.github.com> Date: Mon, 25 Jul 2022 15:16:45 -0700 Subject: [PATCH 3/6] Finish migration of fakes.dart, and combine with remove migrated_fakes.dart --- dwds/test/dart_uri_test.dart | 2 +- dwds/test/debugger_test.dart | 2 +- dwds/test/fixtures/fakes.dart | 291 ++++++++++++++++++++++- dwds/test/fixtures/migrated_fakes.dart | 305 ------------------------- dwds/test/handlers/injector_test.dart | 2 +- dwds/test/location_test.dart | 2 +- dwds/test/metadata_test.dart | 2 +- dwds/test/skip_list_test.dart | 2 +- 8 files changed, 294 insertions(+), 314 deletions(-) delete mode 100644 dwds/test/fixtures/migrated_fakes.dart diff --git a/dwds/test/dart_uri_test.dart b/dwds/test/dart_uri_test.dart index 90f6a265c..fe2d0ac37 100644 --- a/dwds/test/dart_uri_test.dart +++ b/dwds/test/dart_uri_test.dart @@ -14,7 +14,7 @@ import 'package:path/path.dart' as p; import 'package:test/test.dart'; import 'fixtures/logging.dart'; -import 'fixtures/migrated_fakes.dart'; +import 'fixtures/fakes.dart'; class TestStrategy extends FakeStrategy { @override diff --git a/dwds/test/debugger_test.dart b/dwds/test/debugger_test.dart index b5d883c6b..ce4ec347b 100644 --- a/dwds/test/debugger_test.dart +++ b/dwds/test/debugger_test.dart @@ -21,7 +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'; +import 'fixtures/fakes.dart'; final context = TestContext(); AppInspector inspector; diff --git a/dwds/test/fixtures/fakes.dart b/dwds/test/fixtures/fakes.dart index 19339d8df..4e06dcea6 100644 --- a/dwds/test/fixtures/fakes.dart +++ b/dwds/test/fixtures/fakes.dart @@ -2,12 +2,15 @@ // 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/asset_reader.dart'; 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'; @@ -15,13 +18,77 @@ 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 /// classes (e.g. WipConnection) for unit testing. import 'package:webkit_inspection_protocol/webkit_inspection_protocol.dart'; import 'debugger_data.dart'; +/// Constructs a trivial Isolate we can use when we need to provide one but +/// don't want go through initialization. +Isolate get simpleIsolate => Isolate( + id: '1', + number: '1', + name: 'fake', + libraries: [], + exceptionPauseMode: 'abc', + breakpoints: [], + pauseOnExit: false, + pauseEvent: null, + startTime: 0, + livePorts: 0, + runnable: false, + isSystemIsolate: false, + isolateFlags: [], + ); + +class FakeInspector implements AppInspector { + FakeInspector({required this.fakeIsolate}); + + Isolate fakeIsolate; + + + @override + Object noSuchMethod(Invocation invocation) { + throw UnsupportedError('This is a fake'); + } + + @override + Future initialize(LibraryHelper libraryHelper, ClassHelper classHelper, + InstanceHelper instanceHelper) => + Future.value(null); + + @override + Future instanceRefFor(Object value) => + Future.value(InstanceHelper.kNullInstanceRef); + + @override + Future getObject(String objectId, {int? offset, int? count}) => + Future.value(Obj.parse({})); + + @override + Future getScripts() => Future.value(ScriptList(scripts: [])); + + @override + Future scriptRefFor(String uri) => + Future.value(ScriptRef(id: 'fake', uri: 'fake://uri')); + + @override + ScriptRef? scriptWithId(String? scriptId) => null; + + @override + Isolate get isolate => fakeIsolate; + + @override + IsolateRef get isolateRef => IsolateRef( + id: fakeIsolate.id, + number: fakeIsolate.number, + name: fakeIsolate.name, + isSystemIsolate: fakeIsolate.isSystemIsolate, + ); +} class FakeSseConnection implements SseSocketConnection { /// A [StreamController] for incoming messages on SSE connection. @@ -68,6 +135,127 @@ class FakeModules implements Modules { } } +class FakeWebkitDebugger implements WebkitDebugger { + final Map? _scripts; + @override + Future disable() => Future.value(null); + + @override + Future enable() => Future.value(null); + + FakeWebkitDebugger({Map? scripts}) : _scripts = scripts { + globalLoadStrategy = RequireStrategy( + ReloadConfiguration.none, + (_) async => {}, + (_) async => {}, + (_, __) async => null, + (MetadataProvider _, String __) async => Future.value(''), + (MetadataProvider _, String __) async => Future.value(''), + (String _) => '', + (MetadataProvider _) async => Future.value({}), + FakeAssetReader(), + ); + } + + @override + Stream eventStream(String method, WipEventTransformer transformer) => + Stream.empty(); + + @override + Future getScriptSource(String scriptId) => Future.value(''); + + Stream? get onClosed => null; + + @override + Stream get onGlobalObjectCleared => Stream.empty(); + + @override + late Stream onPaused; + + @override + Stream get onResumed => Stream.empty(); + + @override + Stream get onScriptParsed => Stream.empty(); + + @override + Stream get onTargetCrashed => Stream.empty(); + + @override + Future pause() => Future.value(WipResponse({})); + + @override + Future resume() => Future.value(WipResponse({})); + + @override + Map get scripts => _scripts!; + + List results = variables1; + int resultsReturned = 0; + + @override + Future sendCommand(String command, + {Map? params}) async { + // Force the results that we expect for looking up the variables. + if (command == 'Runtime.getProperties') { + return Future.value(results[resultsReturned++]); + } + return Future.value(WipResponse({})); + } + + @override + Future setPauseOnExceptions(PauseState state) => + Future.value(WipResponse({})); + + @override + Future removeBreakpoint(String breakpointId) => + Future.value(WipResponse({})); + + @override + Future stepInto({Map? params}) => + Future.value(WipResponse({})); + + @override + Future stepOut() => Future.value(WipResponse({})); + + @override + Future stepOver({Map? params}) => + Future.value(WipResponse({})); + + @override + Stream get onConsoleAPICalled => Stream.empty(); + + @override + Stream get onExceptionThrown => Stream.empty(); + + @override + void close() {} + + @override + Stream get onClose => Stream.empty(); + + @override + Future evaluate(String expression, + {bool? returnByValue, int? contextId}) => + Future.value(RemoteObject({})); + + @override + Future evaluateOnCallFrame( + String callFrameId, String expression) async { + return RemoteObject({}); + } + + @override + Future> getPossibleBreakpoints(WipLocation start) => + Future.value([]); + + @override + Future enablePage() => Future.value(WipResponse({})); + + @override + Future pageReload() => Future.value(WipResponse({})); +} + /// Fake execution context that is needed for id only class FakeExecutionContext extends ExecutionContext { @override @@ -77,3 +265,100 @@ 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) => + 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/fixtures/migrated_fakes.dart b/dwds/test/fixtures/migrated_fakes.dart deleted file mode 100644 index 19ec024d8..000000000 --- a/dwds/test/fixtures/migrated_fakes.dart +++ /dev/null @@ -1,305 +0,0 @@ -// 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'; -import 'package:dwds/src/debugging/classes.dart'; -import 'package:dwds/src/debugging/inspector.dart'; -import 'package:dwds/src/debugging/instance.dart'; -import 'package:dwds/src/debugging/libraries.dart'; -import 'package:vm_service/vm_service.dart'; -import 'package:dwds/src/debugging/remote_debugger.dart'; -import 'package:dwds/src/debugging/webkit_debugger.dart'; -import 'package:dwds/src/loaders/require.dart'; -import 'package:webkit_inspection_protocol/webkit_inspection_protocol.dart'; - -import 'debugger_data.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); - } -} - -/// Constructs a trivial Isolate we can use when we need to provide one but -/// don't want go through initialization. -Isolate get simpleIsolate => Isolate( - id: '1', - number: '1', - name: 'fake', - libraries: [], - exceptionPauseMode: 'abc', - breakpoints: [], - pauseOnExit: false, - pauseEvent: null, - startTime: 0, - livePorts: 0, - runnable: false, - isSystemIsolate: false, - isolateFlags: [], - ); - -class FakeInspector implements AppInspector { - FakeInspector({required this.fakeIsolate}); - - Isolate fakeIsolate; - - - @override - Object noSuchMethod(Invocation invocation) { - throw UnsupportedError('This is a fake'); - } - - @override - Future initialize(LibraryHelper libraryHelper, ClassHelper classHelper, - InstanceHelper instanceHelper) => - Future.value(null); - - @override - Future instanceRefFor(Object value) => - Future.value(InstanceHelper.kNullInstanceRef); - - @override - Future getObject(String objectId, {int? offset, int? count}) => - Future.value(Obj.parse({})); - - @override - Future getScripts() => Future.value(ScriptList(scripts: [])); - - @override - Future scriptRefFor(String uri) => - Future.value(ScriptRef(id: 'fake', uri: 'fake://uri')); - - @override - ScriptRef? scriptWithId(String? scriptId) => null; - - @override - Isolate get isolate => fakeIsolate; - - @override - IsolateRef get isolateRef => IsolateRef( - id: fakeIsolate.id, - number: fakeIsolate.number, - name: fakeIsolate.name, - isSystemIsolate: fakeIsolate.isSystemIsolate, - ); -} - -class FakeWebkitDebugger implements WebkitDebugger { - final Map? _scripts; - @override - Future disable() => Future.value(null); - - @override - Future enable() => Future.value(null); - - FakeWebkitDebugger({Map? scripts}) : _scripts = scripts { - globalLoadStrategy = RequireStrategy( - ReloadConfiguration.none, - (_) async => {}, - (_) async => {}, - (_, __) async => null, - (MetadataProvider _, String __) async => Future.value(''), - (MetadataProvider _, String __) async => Future.value(''), - (String _) => '', - (MetadataProvider _) async => Future.value({}), - FakeAssetReader(), - ); - } - - @override - Stream eventStream(String method, WipEventTransformer transformer) => - Stream.empty(); - - @override - Future getScriptSource(String scriptId) => Future.value(''); - - Stream? get onClosed => null; - - @override - Stream get onGlobalObjectCleared => Stream.empty(); - - @override - late Stream onPaused; - - @override - Stream get onResumed => Stream.empty(); - - @override - Stream get onScriptParsed => Stream.empty(); - - @override - Stream get onTargetCrashed => Stream.empty(); - - @override - Future pause() => Future.value(WipResponse({})); - - @override - Future resume() => Future.value(WipResponse({})); - - @override - Map get scripts => _scripts!; - - List results = variables1; - int resultsReturned = 0; - - @override - Future sendCommand(String command, - {Map? params}) async { - // Force the results that we expect for looking up the variables. - if (command == 'Runtime.getProperties') { - return Future.value(results[resultsReturned++]); - } - return Future.value(WipResponse({})); - } - - @override - Future setPauseOnExceptions(PauseState state) => - Future.value(WipResponse({})); - - @override - Future removeBreakpoint(String breakpointId) => - Future.value(WipResponse({})); - - @override - Future stepInto({Map? params}) => - Future.value(WipResponse({})); - - @override - Future stepOut() => Future.value(WipResponse({})); - - @override - Future stepOver({Map? params}) => - Future.value(WipResponse({})); - - @override - Stream get onConsoleAPICalled => Stream.empty(); - - @override - Stream get onExceptionThrown => Stream.empty(); - - @override - void close() {} - - @override - Stream get onClose => Stream.empty(); - - @override - Future evaluate(String expression, - {bool? returnByValue, int? contextId}) => - Future.value(RemoteObject({})); - - @override - Future evaluateOnCallFrame( - String callFrameId, String expression) async { - return RemoteObject({}); - } - - @override - Future> getPossibleBreakpoints(WipLocation start) => - Future.value([]); - - @override - Future enablePage() => Future.value(WipResponse({})); - - @override - Future pageReload() => Future.value(WipResponse({})); -} diff --git a/dwds/test/handlers/injector_test.dart b/dwds/test/handlers/injector_test.dart index e39cf792a..bded69ad7 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/migrated_fakes.dart'; +import '../fixtures/fakes.dart'; void main() { HttpServer server; diff --git a/dwds/test/location_test.dart b/dwds/test/location_test.dart index 194dd7e61..721746d0b 100644 --- a/dwds/test/location_test.dart +++ b/dwds/test/location_test.dart @@ -13,7 +13,7 @@ import 'package:dwds/src/utilities/dart_uri.dart'; import 'package:shelf/shelf.dart' as shelf; import 'package:test/test.dart'; -import 'fixtures/migrated_fakes.dart'; +import 'fixtures/fakes.dart'; final sourceMapContents = '{"version":3,"sourceRoot":"","sources":["main.dart"],"names":[],' diff --git a/dwds/test/metadata_test.dart b/dwds/test/metadata_test.dart index 499a6ed62..aa4b10c09 100644 --- a/dwds/test/metadata_test.dart +++ b/dwds/test/metadata_test.dart @@ -6,7 +6,7 @@ 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'; +import 'fixtures/fakes.dart'; const _emptySourceMetadata = '{"version":"1.0.0","name":"web/main","closureName":"load__web__main",' diff --git a/dwds/test/skip_list_test.dart b/dwds/test/skip_list_test.dart index 66ce9aa60..06c6b2717 100644 --- a/dwds/test/skip_list_test.dart +++ b/dwds/test/skip_list_test.dart @@ -9,7 +9,7 @@ import 'package:dwds/src/utilities/dart_uri.dart'; import 'package:source_maps/parser.dart'; import 'package:test/test.dart'; -import 'fixtures/migrated_fakes.dart'; +import 'fixtures/fakes.dart'; class TestStrategy extends FakeStrategy { @override From abf2486df7430eb9b7033d6a27b473855c92e964 Mon Sep 17 00:00:00 2001 From: Elliott Brooks <21270878+elliette@users.noreply.github.com> Date: Mon, 25 Jul 2022 15:20:44 -0700 Subject: [PATCH 4/6] Format and fix lints --- dwds/test/debugger_test.dart | 3 +-- dwds/test/fixtures/fakes.dart | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/dwds/test/debugger_test.dart b/dwds/test/debugger_test.dart index ce4ec347b..b251eb51a 100644 --- a/dwds/test/debugger_test.dart +++ b/dwds/test/debugger_test.dart @@ -21,7 +21,6 @@ import 'package:webkit_inspection_protocol/webkit_inspection_protocol.dart' import 'fixtures/context.dart'; import 'fixtures/debugger_data.dart'; import 'fixtures/fakes.dart'; -import 'fixtures/fakes.dart'; final context = TestContext(); AppInspector inspector; @@ -98,7 +97,7 @@ void main() async { skipLists, root, ); - inspector = FakeInspector(); + inspector = FakeInspector(fakeIsolate: simpleIsolate); debugger.updateInspector(inspector); }); diff --git a/dwds/test/fixtures/fakes.dart b/dwds/test/fixtures/fakes.dart index 4e06dcea6..ba2aabfe8 100644 --- a/dwds/test/fixtures/fakes.dart +++ b/dwds/test/fixtures/fakes.dart @@ -20,6 +20,7 @@ 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 /// classes (e.g. WipConnection) for unit testing. import 'package:webkit_inspection_protocol/webkit_inspection_protocol.dart'; @@ -49,7 +50,6 @@ class FakeInspector implements AppInspector { Isolate fakeIsolate; - @override Object noSuchMethod(Invocation invocation) { throw UnsupportedError('This is a fake'); From 55605f9dcd1c05cc347e7ef666403c849d81db4a Mon Sep 17 00:00:00 2001 From: Elliott Brooks <21270878+elliette@users.noreply.github.com> Date: Wed, 27 Jul 2022 10:58:49 -0700 Subject: [PATCH 5/6] Remove all Future.values --- dwds/test/fixtures/fakes.dart | 85 ++++++++++++++++++----------------- 1 file changed, 43 insertions(+), 42 deletions(-) diff --git a/dwds/test/fixtures/fakes.dart b/dwds/test/fixtures/fakes.dart index ba2aabfe8..562163486 100644 --- a/dwds/test/fixtures/fakes.dart +++ b/dwds/test/fixtures/fakes.dart @@ -57,23 +57,21 @@ class FakeInspector implements AppInspector { @override Future initialize(LibraryHelper libraryHelper, ClassHelper classHelper, - InstanceHelper instanceHelper) => - Future.value(null); + InstanceHelper instanceHelper) async => {}; @override - Future instanceRefFor(Object value) => - Future.value(InstanceHelper.kNullInstanceRef); + Future instanceRefFor(Object value) async => + InstanceHelper.kNullInstanceRef; @override - Future getObject(String objectId, {int? offset, int? count}) => - Future.value(Obj.parse({})); + Future getObject(String objectId, {int? offset, int? count}) async => Obj.parse({})!; @override - Future getScripts() => Future.value(ScriptList(scripts: [])); + Future getScripts() async => ScriptList(scripts: []); @override - Future scriptRefFor(String uri) => - Future.value(ScriptRef(id: 'fake', uri: 'fake://uri')); + Future scriptRefFor(String uri) async => + ScriptRef(id: 'fake', uri: 'fake://uri'); @override ScriptRef? scriptWithId(String? scriptId) => null; @@ -138,10 +136,10 @@ class FakeModules implements Modules { class FakeWebkitDebugger implements WebkitDebugger { final Map? _scripts; @override - Future disable() => Future.value(null); + Future disable() async => null; @override - Future enable() => Future.value(null); + Future enable() async => null; FakeWebkitDebugger({Map? scripts}) : _scripts = scripts { globalLoadStrategy = RequireStrategy( @@ -149,10 +147,10 @@ class FakeWebkitDebugger implements WebkitDebugger { (_) async => {}, (_) async => {}, (_, __) async => null, - (MetadataProvider _, String __) async => Future.value(''), - (MetadataProvider _, String __) async => Future.value(''), + (MetadataProvider _, String __) async => '', + (MetadataProvider _, String __) async => '', (String _) => '', - (MetadataProvider _) async => Future.value({}), + (MetadataProvider _) async => {}, FakeAssetReader(), ); } @@ -162,7 +160,7 @@ class FakeWebkitDebugger implements WebkitDebugger { Stream.empty(); @override - Future getScriptSource(String scriptId) => Future.value(''); + Future getScriptSource(String scriptId) async => ''; Stream? get onClosed => null; @@ -182,10 +180,10 @@ class FakeWebkitDebugger implements WebkitDebugger { Stream get onTargetCrashed => Stream.empty(); @override - Future pause() => Future.value(WipResponse({})); + Future pause() async => WipResponse({}); @override - Future resume() => Future.value(WipResponse({})); + Future resume() async => WipResponse({}); @override Map get scripts => _scripts!; @@ -198,29 +196,29 @@ class FakeWebkitDebugger implements WebkitDebugger { {Map? params}) async { // Force the results that we expect for looking up the variables. if (command == 'Runtime.getProperties') { - return Future.value(results[resultsReturned++]); + return results[resultsReturned++]; } - return Future.value(WipResponse({})); + return WipResponse({}); } @override - Future setPauseOnExceptions(PauseState state) => - Future.value(WipResponse({})); + Future setPauseOnExceptions(PauseState state) async => + WipResponse({}); @override - Future removeBreakpoint(String breakpointId) => - Future.value(WipResponse({})); + Future removeBreakpoint(String breakpointId) async => + WipResponse({}); @override - Future stepInto({Map? params}) => - Future.value(WipResponse({})); + Future stepInto({Map? params}) async => + WipResponse({}); @override - Future stepOut() => Future.value(WipResponse({})); + Future stepOut() async => WipResponse({}); @override - Future stepOver({Map? params}) => - Future.value(WipResponse({})); + Future stepOver({Map? params}) async => + WipResponse({}); @override Stream get onConsoleAPICalled => Stream.empty(); @@ -236,8 +234,8 @@ class FakeWebkitDebugger implements WebkitDebugger { @override Future evaluate(String expression, - {bool? returnByValue, int? contextId}) => - Future.value(RemoteObject({})); + {bool? returnByValue, int? contextId}) async => + RemoteObject({}); @override Future evaluateOnCallFrame( @@ -246,14 +244,15 @@ class FakeWebkitDebugger implements WebkitDebugger { } @override - Future> getPossibleBreakpoints(WipLocation start) => - Future.value([]); + Future> getPossibleBreakpoints( + WipLocation start) async => + []; @override - Future enablePage() => Future.value(WipResponse({})); + Future enablePage() async => WipResponse({}); @override - Future pageReload() => Future.value(WipResponse({})); + Future pageReload() async => WipResponse({}); } /// Fake execution context that is needed for id only @@ -301,16 +300,18 @@ class FakeStrategy implements LoadStrategy { String loadClientSnippet(String clientScript) => 'dummy-load-client-snippet'; @override - Future moduleForServerPath(String entrypoint, String serverPath) => - Future.value(''); + Future moduleForServerPath( + String entrypoint, String serverPath) async => + ''; @override - Future serverPathForModule(String entrypoint, String module) => - Future.value(''); + Future serverPathForModule(String entrypoint, String module) async => + ''; @override - Future sourceMapPathForModule(String entrypoint, String module) => - Future.value(''); + Future sourceMapPathForModule( + String entrypoint, String module) async => + ''; @override String serverPathForAppUri(String appUri) => ''; @@ -357,8 +358,8 @@ class FakeAssetReader implements AssetReader { @override Future close() async {} - Future _throwUnimplementedOrReturnContents(String? contents) { + Future _throwUnimplementedOrReturnContents(String? contents) async { if (contents == null) throw UnimplementedError(); - return Future.value(contents); + return contents; } } From ddd4c96f96182a96f62e9058f6c039d3f48a96a0 Mon Sep 17 00:00:00 2001 From: Elliott Brooks <21270878+elliette@users.noreply.github.com> Date: Wed, 27 Jul 2022 11:05:40 -0700 Subject: [PATCH 6/6] Format --- dwds/test/fixtures/fakes.dart | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/dwds/test/fixtures/fakes.dart b/dwds/test/fixtures/fakes.dart index 562163486..324f5b91f 100644 --- a/dwds/test/fixtures/fakes.dart +++ b/dwds/test/fixtures/fakes.dart @@ -57,14 +57,16 @@ class FakeInspector implements AppInspector { @override Future initialize(LibraryHelper libraryHelper, ClassHelper classHelper, - InstanceHelper instanceHelper) async => {}; + InstanceHelper instanceHelper) async => + {}; @override Future instanceRefFor(Object value) async => InstanceHelper.kNullInstanceRef; @override - Future getObject(String objectId, {int? offset, int? count}) async => Obj.parse({})!; + Future getObject(String objectId, {int? offset, int? count}) async => + Obj.parse({})!; @override Future getScripts() async => ScriptList(scripts: []);