Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(17)

Unified Diff: pkg/analyzer_cli/test/build_mode_test.dart

Issue 1868663002: Update worker mode to use the bazel protos directly instead of json (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: s/setInputBytes/addInputBytes Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/analyzer_cli/test/all.dart ('k') | pkg/analyzer_cli/test/message_grouper_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analyzer_cli/test/build_mode_test.dart
diff --git a/pkg/analyzer_cli/test/build_mode_test.dart b/pkg/analyzer_cli/test/build_mode_test.dart
index 29c4da679e9360f2b46dca2604a0ec9ef8aeb1ac..dcc242321a4a0aa798dc9b3cf598978acc45ef9d 100644
--- a/pkg/analyzer_cli/test/build_mode_test.dart
+++ b/pkg/analyzer_cli/test/build_mode_test.dart
@@ -4,38 +4,59 @@
library analyzer_cli.test.built_mode;
+import 'dart:collection';
import 'dart:convert';
+import 'dart:io';
import 'package:analyzer_cli/src/build_mode.dart';
import 'package:analyzer_cli/src/driver.dart';
import 'package:analyzer_cli/src/options.dart';
+import 'package:analyzer_cli/src/worker_protocol.pb.dart';
+import 'package:protobuf/protobuf.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
import 'package:typed_mock/typed_mock.dart';
import 'package:unittest/unittest.dart';
+import 'utils.dart';
+
main() {
defineReflectiveTests(WorkerLoopTest);
- defineReflectiveTests(WorkInputTest);
- defineReflectiveTests(WorkRequestTest);
}
typedef void _TestWorkerLoopAnalyze(CommandLineOptions options);
@reflectiveTest
class WorkerLoopTest {
- final _TestWorkerConnection connection = new _TestWorkerConnection();
+ final TestStdinStream stdinStream = new TestStdinStream();
+ final TestStdoutStream stdoutStream = new TestStdoutStream();
+ _TestWorkerConnection connection;
+
+ WorkerLoopTest() {
+ connection = new _TestWorkerConnection(this.stdinStream, this.stdoutStream);
+ }
void setUp() {}
+ List<int> _serializeProto(GeneratedMessage message) {
+ var buffer = message.writeToBuffer();
+
+ var writer = new CodedBufferWriter();
+ writer.writeInt32NoTag(buffer.length);
+ writer.writeRawBytes(buffer);
+
+ return writer.toBuffer();
+ }
+
test_run() {
- _setInputLine(JSON.encode({
- 'arguments': [
- '--build-summary-input=/tmp/1.sum',
- '--build-summary-input=/tmp/2.sum',
- 'package:foo/foo.dart|/inputs/foo/lib/foo.dart',
- 'package:foo/bar.dart|/inputs/foo/lib/bar.dart'
- ],
- }));
+ var request = new WorkRequest();
+ request.arguments.addAll([
+ '--build-summary-input=/tmp/1.sum',
+ '--build-summary-input=/tmp/2.sum',
+ 'package:foo/foo.dart|/inputs/foo/lib/foo.dart',
+ 'package:foo/bar.dart|/inputs/foo/lib/bar.dart',
+ ]);
+ stdinStream.addInputBytes(_serializeProto(request));
+
new _TestWorkerLoop(connection, (CommandLineOptions options) {
expect(options.buildSummaryInputs,
unorderedEquals(['/tmp/1.sum', '/tmp/2.sum']));
@@ -51,235 +72,71 @@ class WorkerLoopTest {
errorSink.writeln('errorSink b');
}).run();
expect(connection.outputList, hasLength(1));
- expect(connection.outputList[0], {
- 'exit_code': WorkerLoop.EXIT_CODE_OK,
- 'output': allOf(contains('errorSink a'), contains('errorSink a'),
- contains('outSink a'), contains('outSink b'))
- });
+
+ var response = connection.outputList[0];
+ expect(response.exitCode, WorkerLoop.EXIT_CODE_OK);
+ expect(
+ response.output,
+ allOf(contains('errorSink a'), contains('errorSink a'),
+ contains('outSink a'), contains('outSink b')));
+
+ // Check that a serialized version was written to std out.
+ expect(stdoutStream.writes, hasLength(1));
+ expect(stdoutStream.writes[0], _serializeProto(response));
}
test_run_invalidOptions() {
- _setInputLine(JSON.encode({
- 'arguments': ['--unknown-option', '/foo.dart', '/bar.dart',],
- }));
+ var request = new WorkRequest();
+ request.arguments.addAll(['--unknown-option', '/foo.dart', '/bar.dart']);
+ stdinStream.addInputBytes(_serializeProto(request));
new _TestWorkerLoop(connection).run();
expect(connection.outputList, hasLength(1));
- expect(connection.outputList[0],
- {'exit_code': WorkerLoop.EXIT_CODE_ERROR, 'output': anything});
+
+ var response = connection.outputList[0];
+ expect(response.exitCode, WorkerLoop.EXIT_CODE_ERROR);
+ expect(response.output, anything);
}
test_run_invalidRequest_noArgumentsInputs() {
- _setInputLine('{}');
+ stdinStream.addInputBytes(_serializeProto(new WorkRequest()));
+
new _TestWorkerLoop(connection).run();
expect(connection.outputList, hasLength(1));
- expect(connection.outputList[0],
- {'exit_code': WorkerLoop.EXIT_CODE_ERROR, 'output': anything});
+
+ var response = connection.outputList[0];
+ expect(response.exitCode, WorkerLoop.EXIT_CODE_ERROR);
+ expect(response.output, anything);
}
- test_run_invalidRequest_notJson() {
- _setInputLine('not a JSON string');
+ test_run_invalidRequest_randomBytes() {
+ stdinStream.addInputBytes([1, 2, 3]);
new _TestWorkerLoop(connection).run();
expect(connection.outputList, hasLength(1));
- expect(connection.outputList[0],
- {'exit_code': WorkerLoop.EXIT_CODE_ERROR, 'output': anything});
+
+ var response = connection.outputList[0];
+ expect(response.exitCode, WorkerLoop.EXIT_CODE_ERROR);
+ expect(response.output, anything);
}
test_run_stopAtEOF() {
- when(connection.readLineSync()).thenReturnList([null]);
+ stdinStream.addInputBytes([-1]);
new _TestWorkerLoop(connection).run();
}
-
- void _setInputLine(String line) {
- when(connection.readLineSync()).thenReturnList([line, null]);
- }
-}
-
-@reflectiveTest
-class WorkInputTest {
- test_fromJson() {
- WorkInput input = new WorkInput.fromJson({
- 'path': '/my/path',
- 'digest': [1, 2, 3, 4, 5]
- });
- expect(input.path, '/my/path');
- expect(input.digest, <int>[1, 2, 3, 4, 5]);
- }
-
- test_fromJson_digest_isMissing() {
- WorkInput input = new WorkInput.fromJson({'path': '/my/path',});
- expect(input.path, '/my/path');
- expect(input.digest, <int>[]);
- }
-
- test_fromJson_digest_isNotList() {
- expect(() {
- new WorkInput.fromJson({'path': '/my/path', 'digest': 0});
- }, throwsArgumentError);
- }
-
- test_fromJson_digest_isNotListOfInt() {
- expect(() {
- new WorkInput.fromJson({
- 'path': '/my/path',
- 'digest': ['a', 'b', 'c']
- });
- }, throwsArgumentError);
- }
-
- test_fromJson_path_isMissing() {
- expect(() {
- new WorkInput.fromJson({
- 'digest': [1, 2, 3, 4, 5]
- });
- }, throwsArgumentError);
- }
-
- test_fromJson_path_isNotString() {
- expect(() {
- new WorkInput.fromJson({
- 'path': 0,
- 'digest': [1, 2, 3, 4, 5]
- });
- }, throwsArgumentError);
- }
-
- test_toJson() {
- WorkInput input = new WorkInput('/my/path', <int>[1, 2, 3, 4, 5]);
- Map<String, Object> json = input.toJson();
- expect(json, {
- 'path': '/my/path',
- 'digest': [1, 2, 3, 4, 5]
- });
- }
-
- test_toJson_withoutDigest() {
- WorkInput input = new WorkInput('/my/path', null);
- Map<String, Object> json = input.toJson();
- expect(json, {'path': '/my/path'});
- }
-}
-
-@reflectiveTest
-class WorkRequestTest {
- test_fromJson() {
- WorkRequest request = new WorkRequest.fromJson({
- 'arguments': ['--arg1', '--arg2', '--arg3'],
- 'inputs': [
- {
- 'path': '/my/path1',
- 'digest': [11, 12, 13]
- },
- {
- 'path': '/my/path2',
- 'digest': [21, 22, 23]
- }
- ]
- });
- expect(request.arguments, ['--arg1', '--arg2', '--arg3']);
- expect(request.inputs, hasLength(2));
- expect(request.inputs[0].path, '/my/path1');
- expect(request.inputs[0].digest, <int>[11, 12, 13]);
- expect(request.inputs[1].path, '/my/path2');
- expect(request.inputs[1].digest, <int>[21, 22, 23]);
- }
-
- test_fromJson_arguments_isMissing() {
- WorkRequest request = new WorkRequest.fromJson({
- 'inputs': [
- {
- 'path': '/my/path1',
- 'digest': [11, 12, 13]
- },
- ]
- });
- expect(request.arguments, isEmpty);
- expect(request.inputs, hasLength(1));
- expect(request.inputs[0].path, '/my/path1');
- expect(request.inputs[0].digest, <int>[11, 12, 13]);
- }
-
- test_fromJson_arguments_isNotList() {
- expect(() {
- new WorkRequest.fromJson({'arguments': 0, 'inputs': []});
- }, throwsArgumentError);
- }
-
- test_fromJson_arguments_isNotListOfString() {
- expect(() {
- new WorkRequest.fromJson({
- 'arguments': [0, 1, 2],
- 'inputs': []
- });
- }, throwsArgumentError);
- }
-
- test_fromJson_inputs_isMissing() {
- WorkRequest request = new WorkRequest.fromJson({
- 'arguments': ['--arg1', '--arg2', '--arg3'],
- });
- expect(request.arguments, ['--arg1', '--arg2', '--arg3']);
- expect(request.inputs, hasLength(0));
- }
-
- test_fromJson_inputs_isNotList() {
- expect(() {
- new WorkRequest.fromJson({
- 'arguments': ['--arg1', '--arg2', '--arg3'],
- 'inputs': 0
- });
- }, throwsArgumentError);
- }
-
- test_fromJson_inputs_isNotListOfObject() {
- expect(() {
- new WorkRequest.fromJson({
- 'arguments': ['--arg1', '--arg2', '--arg3'],
- 'inputs': [0, 1, 2]
- });
- }, throwsArgumentError);
- }
-
- test_fromJson_noArgumentsInputs() {
- expect(() {
- new WorkRequest.fromJson({});
- }, throwsArgumentError);
- }
-
- test_toJson() {
- WorkRequest request = new WorkRequest(<String>[
- '--arg1',
- '--arg2',
- '--arg3'
- ], <WorkInput>[
- new WorkInput('/my/path1', <int>[11, 12, 13]),
- new WorkInput('/my/path2', <int>[21, 22, 23])
- ]);
- Map<String, Object> json = request.toJson();
- expect(json, {
- 'arguments': ['--arg1', '--arg2', '--arg3'],
- 'inputs': [
- {
- 'path': '/my/path1',
- 'digest': [11, 12, 13]
- },
- {
- 'path': '/my/path2',
- 'digest': [21, 22, 23]
- }
- ]
- });
- }
}
/**
- * [WorkerConnection] mock.
+ * A [StdWorkerConnection] which records its responses.
*/
-class _TestWorkerConnection extends TypedMock implements WorkerConnection {
- final outputList = <Map<String, Object>>[];
+class _TestWorkerConnection extends StdWorkerConnection {
+ final outputList = <WorkResponse>[];
+
+ _TestWorkerConnection(Stdin stdinStream, Stdout stdoutStream)
+ : super(stdinStream, stdoutStream);
@override
- void writeJson(Map<String, Object> json) {
- outputList.add(json);
+ void writeResponse(WorkResponse response) {
+ super.writeResponse(response);
+ outputList.add(response);
}
}
« no previous file with comments | « pkg/analyzer_cli/test/all.dart ('k') | pkg/analyzer_cli/test/message_grouper_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698