diff --git a/webdev/test/e2e_test.dart b/webdev/test/e2e_test.dart index 6c6d09248..9a574010d 100644 --- a/webdev/test/e2e_test.dart +++ b/webdev/test/e2e_test.dart @@ -368,6 +368,10 @@ void main() { var process = await testRunner.runWebDev(args, workingDirectory: soundNullSafety ? soundExampleDirectory : exampleDirectory); + + process.stdoutStream().listen(Logger.root.fine); + process.stderrStream().listen(Logger.root.warning); + VmService? vmService; try { @@ -412,6 +416,74 @@ void main() { await process.shouldExit(); } }, timeout: const Timeout.factor(2)); + + test('evaluate and get objects', () async { + var openPort = await findUnusedPort(); + // running daemon command that starts dwds without keyboard input + var args = [ + 'daemon', + 'web:$openPort', + '--enable-expression-evaluation', + '--verbose', + ]; + var process = await testRunner.runWebDev(args, + workingDirectory: + soundNullSafety ? soundExampleDirectory : exampleDirectory); + + process.stdoutStream().listen(Logger.root.fine); + process.stderrStream().listen(Logger.root.warning); + + VmService? vmService; + + try { + // Wait for debug service Uri + String? wsUri; + await expectLater(process.stdout, emitsThrough((message) { + wsUri = getDebugServiceUri(message as String); + return wsUri != null; + })); + expect(wsUri, isNotNull); + + vmService = await vmServiceConnectUri(wsUri!); + var vm = await vmService.getVM(); + var isolateId = vm.isolates!.first.id!; + var isolate = await vmService.getIsolate(isolateId); + var libraryId = isolate.rootLib!.id!; + + await vmService.streamListen('Debug'); + + final result = await vmService.evaluate( + isolateId, libraryId, '[true, false]'); + expect( + result, + const TypeMatcher().having( + (instance) => instance.classRef?.name, + 'class name', + 'List')); + + final instanceRef = result as InstanceRef; + final list = + await vmService.getObject(isolateId, instanceRef.id!); + expect( + list, + const TypeMatcher().having( + (instance) => instance.classRef?.name, + 'class name', + 'List')); + + final elements = (list as Instance).elements; + expect(elements, [ + const TypeMatcher().having( + (instance) => instance.valueAsString, 'value', 'true'), + const TypeMatcher().having( + (instance) => instance.valueAsString, 'value', 'false'), + ]); + } finally { + await vmService?.dispose(); + await exitWebdev(process); + await process.shouldExit(); + } + }, timeout: const Timeout.factor(2)); }); group('and --no-enable-expression-evaluation:', () {