| Index: pkg/front_end/test/src/base/libraries_specification_test.dart
|
| diff --git a/pkg/front_end/test/src/base/libraries_specification_test.dart b/pkg/front_end/test/src/base/libraries_specification_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..25c3b4ac2cfd0ab6c3824f9fa18a9ac65d84f369
|
| --- /dev/null
|
| +++ b/pkg/front_end/test/src/base/libraries_specification_test.dart
|
| @@ -0,0 +1,309 @@
|
| +// 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 'package:front_end/src/base/libraries_specification.dart';
|
| +import 'package:test/test.dart';
|
| +
|
| +main() {
|
| + group('parse', () {
|
| + test('top-level must be a map', () async {
|
| + var jsonString = '[]';
|
| + expect(
|
| + () => LibrariesSpecification.parse(
|
| + Uri.parse('org-dartlang-custom:///f.json'), jsonString),
|
| + throwsA((e) => e is LibrariesSpecificationException));
|
| + jsonString = '""';
|
| + expect(
|
| + () => LibrariesSpecification.parse(
|
| + Uri.parse('org-dartlang-custom:///f.json'), jsonString),
|
| + throwsA((e) => e is LibrariesSpecificationException));
|
| + });
|
| +
|
| + test('target entry must be a map', () async {
|
| + var jsonString = '{"vm" : []}';
|
| + expect(
|
| + () => LibrariesSpecification.parse(
|
| + Uri.parse('org-dartlang-custom:///f.json'), jsonString),
|
| + throwsA((e) => e is LibrariesSpecificationException));
|
| + jsonString = '{"vm" : ""}';
|
| + expect(
|
| + () => LibrariesSpecification.parse(
|
| + Uri.parse('org-dartlang-custom:///f.json'), jsonString),
|
| + throwsA((e) => e is LibrariesSpecificationException));
|
| + });
|
| +
|
| + test('library entry must exist', () async {
|
| + var jsonString = '{"vm" : {}}';
|
| + expect(
|
| + () => LibrariesSpecification.parse(
|
| + Uri.parse('org-dartlang-custom:///f.json'), jsonString),
|
| + throwsA((e) => e is LibrariesSpecificationException));
|
| + });
|
| +
|
| + test('library entry must be a map', () async {
|
| + var jsonString = '{"vm" : {"libraries": []}}';
|
| + expect(
|
| + () => LibrariesSpecification.parse(
|
| + Uri.parse('org-dartlang-custom:///f.json'), jsonString),
|
| + throwsA((e) => e is LibrariesSpecificationException));
|
| + });
|
| +
|
| + test('uri must be a string', () async {
|
| + var jsonString = '{"vm" : {"libraries": {"core": {"uri": 3}}}';
|
| + expect(
|
| + () => LibrariesSpecification.parse(
|
| + Uri.parse('org-dartlang-custom:///f.json'), jsonString),
|
| + throwsA((e) => e is LibrariesSpecificationException));
|
| + });
|
| +
|
| + test('patches must be a string or list of string', () async {
|
| + var jsonString = '''
|
| + {
|
| + "none": {
|
| + "libraries": {
|
| + "c" : {
|
| + "uri": "c/main.dart",
|
| + "patches": 3
|
| + }
|
| + }
|
| + }
|
| + }
|
| + ''';
|
| + expect(
|
| + () => LibrariesSpecification.parse(
|
| + Uri.parse('org-dartlang-custom:///f.json'), jsonString),
|
| + throwsA((e) => e is LibrariesSpecificationException));
|
| +
|
| + jsonString = '''
|
| + {
|
| + "none": {
|
| + "libraries": {
|
| + "c" : {
|
| + "uri": "c/main.dart",
|
| + "patches": "a.dart"
|
| + }
|
| + }
|
| + }
|
| + }
|
| + ''';
|
| + var spec = LibrariesSpecification.parse(
|
| + Uri.parse('org-dartlang-custom:///f.json'), jsonString);
|
| + expect(spec.specificationFor("none").libraryInfoFor("c").patches.first,
|
| + Uri.parse('org-dartlang-custom:///a.dart'));
|
| +
|
| + jsonString = '''
|
| + {
|
| + "none": {
|
| + "libraries": {
|
| + "c" : {
|
| + "uri": "c/main.dart",
|
| + "patches": ["a.dart"]
|
| + }
|
| + }
|
| + }
|
| + }
|
| + ''';
|
| + spec = LibrariesSpecification.parse(
|
| + Uri.parse('org-dartlang-custom:///f.json'), jsonString);
|
| + expect(spec.specificationFor("none").libraryInfoFor("c").patches.first,
|
| + Uri.parse('org-dartlang-custom:///a.dart'));
|
| + });
|
| +
|
| + test('patches are optional in the format', () async {
|
| + var jsonString = '''
|
| + { "none": { "libraries": {"c" : { "uri": "c/main.dart" }}}}
|
| + ''';
|
| + var spec = LibrariesSpecification.parse(
|
| + Uri.parse('org-dartlang-custom:///one/two/f.json'), jsonString);
|
| + expect(spec, isNotNull);
|
| + expect(
|
| + spec.specificationFor('none').libraryInfoFor('c').patches, isEmpty);
|
| + });
|
| +
|
| + test('library paths are resolved from spec uri', () async {
|
| + var jsonString = '''
|
| + { "none": { "libraries": {"c" : { "uri": "c/main.dart" }}}}
|
| + ''';
|
| +
|
| + var spec = LibrariesSpecification.parse(
|
| + Uri.parse('org-dartlang-custom:///one/two/f.json'), jsonString);
|
| + expect(spec.specificationFor('none').libraryInfoFor('c').uri,
|
| + Uri.parse('org-dartlang-custom:///one/two/c/main.dart'));
|
| + });
|
| +
|
| + test('patches paths are resolved from spec uri', () async {
|
| + var jsonString = '''
|
| + {
|
| + "none": {
|
| + "libraries": {
|
| + "c" : {
|
| + "uri": "c/main.dart",
|
| + "patches": [
|
| + "../a/p1.dart",
|
| + "../a/p2.dart"
|
| + ]
|
| + }
|
| + }
|
| + }
|
| + }
|
| + ''';
|
| +
|
| + var spec = LibrariesSpecification.parse(
|
| + Uri.parse('org-dartlang-custom:///one/two/f.json'), jsonString);
|
| + expect(spec.specificationFor('none').libraryInfoFor('c').patches[0],
|
| + Uri.parse('org-dartlang-custom:///one/a/p1.dart'));
|
| + expect(spec.specificationFor('none').libraryInfoFor('c').patches[1],
|
| + Uri.parse('org-dartlang-custom:///one/a/p2.dart'));
|
| + });
|
| +
|
| + test('multiple targets are supported', () async {
|
| + var jsonString = '''
|
| + {
|
| + "vm": {
|
| + "libraries": {
|
| + "foo" : {
|
| + "uri": "a/main.dart",
|
| + "patches": [
|
| + "a/p1.dart",
|
| + "a/p2.dart"
|
| + ]
|
| + },
|
| + "bar" : {
|
| + "uri": "b/main.dart",
|
| + "patches": [
|
| + "b/p3.dart"
|
| + ]
|
| + }
|
| + }
|
| + },
|
| + "none": {
|
| + "libraries": {
|
| + "c" : {
|
| + "uri": "c/main.dart"
|
| + }
|
| + }
|
| + }
|
| + }
|
| + ''';
|
| +
|
| + var spec = LibrariesSpecification.parse(
|
| + Uri.parse('org-dartlang-custom:///one/two/f.json'), jsonString);
|
| +
|
| + expect(spec.specificationFor('vm').libraryInfoFor('foo').uri,
|
| + Uri.parse('org-dartlang-custom:///one/two/a/main.dart'));
|
| + expect(spec.specificationFor('vm').libraryInfoFor('bar').uri,
|
| + Uri.parse('org-dartlang-custom:///one/two/b/main.dart'));
|
| + expect(spec.specificationFor('none').libraryInfoFor('c').uri,
|
| + Uri.parse('org-dartlang-custom:///one/two/c/main.dart'));
|
| + });
|
| + });
|
| +
|
| + group('toJson', () {
|
| + test('serialization produces same data that was parsed', () async {
|
| + var jsonString = '''
|
| + {
|
| + "vm": {
|
| + "libraries": {
|
| + "foo" : {
|
| + "uri": "a/main.dart",
|
| + "patches": [
|
| + "a/p1.dart",
|
| + "a/p2.dart"
|
| + ]
|
| + },
|
| + "bar" : {
|
| + "uri": "b/main.dart",
|
| + "patches": [
|
| + "b/p3.dart"
|
| + ]
|
| + }
|
| + }
|
| + },
|
| + "none": {
|
| + "libraries": {
|
| + "c" : {
|
| + "uri": "c/main.dart",
|
| + "patches": []
|
| + }
|
| + }
|
| + }
|
| + }
|
| + ''';
|
| +
|
| + var spec = LibrariesSpecification.parse(
|
| + Uri.parse('org-dartlang-custom:///one/two/f.json'), jsonString);
|
| + var newJson =
|
| + spec.toJsonString(Uri.parse('org-dartlang-custom:///one/two/g.json'));
|
| + expect(jsonString.replaceAll(new RegExp('\\s'), ''), newJson);
|
| + });
|
| +
|
| + test('serialization can adapt to new file location', () async {
|
| + var jsonString = '''
|
| + {
|
| + "vm": {
|
| + "libraries": {
|
| + "foo" : {
|
| + "uri": "a/main.dart",
|
| + "patches": [
|
| + "a/p1.dart",
|
| + "a/p2.dart"
|
| + ]
|
| + },
|
| + "bar" : {
|
| + "uri": "b/main.dart",
|
| + "patches": [
|
| + "b/p3.dart"
|
| + ]
|
| + }
|
| + }
|
| + },
|
| + "none": {
|
| + "libraries": {
|
| + "c" : {
|
| + "uri": "c/main.dart"
|
| + }
|
| + }
|
| + }
|
| + }
|
| + ''';
|
| +
|
| + var spec = LibrariesSpecification.parse(
|
| + Uri.parse('org-dartlang-custom:///one/two/f.json'), jsonString);
|
| + var newJson =
|
| + spec.toJsonString(Uri.parse('org-dartlang-custom:///one/g.json'));
|
| +
|
| + var expected = '''
|
| + {
|
| + "vm": {
|
| + "libraries": {
|
| + "foo" : {
|
| + "uri": "two/a/main.dart",
|
| + "patches": [
|
| + "two/a/p1.dart",
|
| + "two/a/p2.dart"
|
| + ]
|
| + },
|
| + "bar" : {
|
| + "uri": "two/b/main.dart",
|
| + "patches": [
|
| + "two/b/p3.dart"
|
| + ]
|
| + }
|
| + }
|
| + },
|
| + "none": {
|
| + "libraries": {
|
| + "c" : {
|
| + "uri": "two/c/main.dart",
|
| + "patches": []
|
| + }
|
| + }
|
| + }
|
| + }
|
| + ''';
|
| +
|
| + expect(expected.replaceAll(new RegExp('\\s'), ''), newJson);
|
| + });
|
| + });
|
| +}
|
|
|