diff --git a/frontend_server/lib/server.dart b/frontend_server/lib/server.dart index 2e0d27c14718d7ea9c50c30a17dafe3f7e8c1ccf..e301757e1f4503f81afb6d29a89f3e3a70a57dd7 100644 --- a/frontend_server/lib/server.dart +++ b/frontend_server/lib/server.dart @@ -82,6 +82,10 @@ abstract class CompilerInterface { /// This let's compiler know that source file identifed by `uri` was changed. void invalidate(Uri uri); + + /// Resets incremental compiler accept/reject status so that next time + /// recompile is requested, complete kernel file is produced. + void resetIncrementalCompiler(); } /// Class that for test mocking purposes encapsulates creation of [BinaryPrinter]. @@ -191,6 +195,11 @@ class _FrontendCompiler implements CompilerInterface { _generator.invalidate(uri); } + @override + void resetIncrementalCompiler() { + _generator.reset(); + } + Uri _ensureFolderPath(String path) { // This is a URI, not a file path, so the forward slash is correct even // on Windows. @@ -257,6 +266,8 @@ Future starter(List args, { compiler.acceptLastDelta(); else if (string == 'reject') compiler.rejectLastDelta(); + else if (string == 'reset') + compiler.resetIncrementalCompiler(); else if (string == 'quit') exit(0); break; diff --git a/frontend_server/test/server_test.dart b/frontend_server/test/server_test.dart index 40b1882821429910a7d99a0a3806575a5bf6e235..078fdd7a3f6d29558b6203a0630f4d258c427680 100644 --- a/frontend_server/test/server_test.dart +++ b/frontend_server/test/server_test.dart @@ -59,7 +59,7 @@ Future main() async { test('compile one file', () async { final StreamController> inputStreamController = - new StreamController>(); + new StreamController>(); final ReceivePort compileCalled = new ReceivePort(); when(compiler.compile(any, any, generator: any)).thenAnswer( (Invocation invocation) { @@ -80,7 +80,7 @@ Future main() async { test('compile few files', () async { final StreamController> streamController = - new StreamController>(); + new StreamController>(); final ReceivePort compileCalled = new ReceivePort(); int counter = 1; when(compiler.compile(any, any, generator: any)).thenAnswer( @@ -154,7 +154,7 @@ Future main() async { test('reject', () async { final StreamController> inputStreamController = - new StreamController>(); + new StreamController>(); final ReceivePort rejectCalled = new ReceivePort(); when(compiler.rejectLastDelta()).thenAnswer((Invocation invocation) { rejectCalled.sendPort.send(true); @@ -168,9 +168,25 @@ Future main() async { inputStreamController.close(); }); + test('reset', () async { + final StreamController> inputStreamController = + new StreamController>(); + final ReceivePort resetCalled = new ReceivePort(); + when(compiler.resetIncrementalCompiler()).thenAnswer((Invocation invocation) { + resetCalled.sendPort.send(true); + }); + final int exitcode = await starter(args, compiler: compiler, + input: inputStreamController.stream, + ); + expect(exitcode, equals(0)); + inputStreamController.add('reset\n'.codeUnits); + await resetCalled.first; + inputStreamController.close(); + }); + test('compile then recompile', () async { final StreamController> streamController = - new StreamController>(); + new StreamController>(); final ReceivePort recompileCalled = new ReceivePort(); when(compiler.recompileDelta()).thenAnswer((Invocation invocation) {