| // 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. |
| |
| // @dart = 2.9 |
| |
| library fasta.test.incremental_expectations; |
| |
| 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 IncrementalExpectation(this.messages, |
| {this.commitChangesShouldFail: false, this.hasCompileTimeError: false}); |
| |
| factory IncrementalExpectation.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)); |
| } |
| |
| 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; |
| } |
| |
| 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; |
| } |
| } |