| // Copyright (c) 2017, 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:convert" show JsonDecoder, JsonEncoder; | |
| const JsonEncoder json = const JsonEncoder.withIndent(" "); | |
| List<IncrementalExpectation> extractJsonExpectations(String source) { | |
| return new List<IncrementalExpectation>.from( | |
| source | |
| .split("\n") | |
| .where((l) => l.startsWith("<<<< ") || l.startsWith("==== ")) | |
| .map((l) => l.substring("<<<< ".length)) | |
| .map((l) => new IncrementalExpectation.fromJson(l)), | |
| ); | |
| } | |
| class IncrementalExpectation { | |
| final List<String> messages; | |
| final bool commitChangesShouldFail; | |
| final bool hasCompileTimeError; | |
| const new( | |
| this.messages, { | |
| this.commitChangesShouldFail = false, | |
| this.hasCompileTimeError = false, | |
| }); | |
| factory fromJson(String json) { | |
| var data = const JsonDecoder().convert(json); | |
| if (data is String) { | |
| data = <String>[data]; | |
| } | |
| if (data is List) { | |
| return new IncrementalExpectation(data.cast<String>()); | |
| } | |
| return new IncrementalExpectation( | |
| extractMessages(data), | |
| commitChangesShouldFail: extractCommitChangesShouldFail(data), | |
| hasCompileTimeError: extractHasCompileTimeError(data), | |
| ); | |
| } | |
| dynamic toJson() { | |
| if (!commitChangesShouldFail && !hasCompileTimeError) { | |
| return messages.length == 1 ? messages.first : messages; | |
| } | |
| Map<String, dynamic> result = <String, dynamic>{"messages": messages}; | |
| if (commitChangesShouldFail) { | |
| result['commitChangesShouldFail'] = 1; | |
| } | |
| if (hasCompileTimeError) { | |
| result['hasCompileTimeError'] = 1; | |
| } | |
| return result; | |
| } | |
| @override | |
| String toString() { | |
| return """ | |
| IncrementalExpectation( | |
| ${json.convert(messages)}, | |
| commitChangesShouldFail: $commitChangesShouldFail, | |
| hasCompileTimeError: $hasCompileTimeError)"""; | |
| } | |
| static List<String> extractMessages(Map<String, dynamic> json) { | |
| return new List<String>.from(json["messages"]); | |
| } | |
| static bool extractCommitChangesShouldFail(Map<String, dynamic> json) { | |
| return json["commitChangesShouldFail"] == 1; | |
| } | |
| static bool extractHasCompileTimeError(Map<String, dynamic> json) { | |
| return json["hasCompileTimeError"] == 1; | |
| } | |
| } |