| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file | |
| 2 // for details. All rights reserved. Use of this source code is governed by a | |
| 3 // BSD-style license that can be found in the LICENSE file. | |
| 4 | |
| 5 import 'package:front_end/src/base/libraries_specification.dart'; | |
| 6 import 'package:test/test.dart'; | |
| 7 | |
| 8 main() { | |
| 9 group('parse', () { | |
| 10 test('top-level must be a map', () async { | |
| 11 var jsonString = '[]'; | |
| 12 expect( | |
| 13 () => LibrariesSpecification.parse( | |
| 14 Uri.parse('org-dartlang-custom:///f.json'), jsonString), | |
| 15 throwsA((e) => e is LibrariesSpecificationException)); | |
| 16 jsonString = '""'; | |
| 17 expect( | |
| 18 () => LibrariesSpecification.parse( | |
| 19 Uri.parse('org-dartlang-custom:///f.json'), jsonString), | |
| 20 throwsA((e) => e is LibrariesSpecificationException)); | |
| 21 }); | |
| 22 | |
| 23 test('target entry must be a map', () async { | |
| 24 var jsonString = '{"vm" : []}'; | |
| 25 expect( | |
| 26 () => LibrariesSpecification.parse( | |
| 27 Uri.parse('org-dartlang-custom:///f.json'), jsonString), | |
| 28 throwsA((e) => e is LibrariesSpecificationException)); | |
| 29 jsonString = '{"vm" : ""}'; | |
| 30 expect( | |
| 31 () => LibrariesSpecification.parse( | |
| 32 Uri.parse('org-dartlang-custom:///f.json'), jsonString), | |
| 33 throwsA((e) => e is LibrariesSpecificationException)); | |
| 34 }); | |
| 35 | |
| 36 test('library entry must exist', () async { | |
| 37 var jsonString = '{"vm" : {}}'; | |
| 38 expect( | |
| 39 () => LibrariesSpecification.parse( | |
| 40 Uri.parse('org-dartlang-custom:///f.json'), jsonString), | |
| 41 throwsA((e) => e is LibrariesSpecificationException)); | |
| 42 }); | |
| 43 | |
| 44 test('library entry must be a map', () async { | |
| 45 var jsonString = '{"vm" : {"libraries": []}}'; | |
| 46 expect( | |
| 47 () => LibrariesSpecification.parse( | |
| 48 Uri.parse('org-dartlang-custom:///f.json'), jsonString), | |
| 49 throwsA((e) => e is LibrariesSpecificationException)); | |
| 50 }); | |
| 51 | |
| 52 test('uri must be a string', () async { | |
| 53 var jsonString = '{"vm" : {"libraries": {"core": {"uri": 3}}}'; | |
| 54 expect( | |
| 55 () => LibrariesSpecification.parse( | |
| 56 Uri.parse('org-dartlang-custom:///f.json'), jsonString), | |
| 57 throwsA((e) => e is LibrariesSpecificationException)); | |
| 58 }); | |
| 59 | |
| 60 test('patches must be a string or list of string', () async { | |
| 61 var jsonString = ''' | |
| 62 { | |
| 63 "none": { | |
| 64 "libraries": { | |
| 65 "c" : { | |
| 66 "uri": "c/main.dart", | |
| 67 "patches": 3 | |
| 68 } | |
| 69 } | |
| 70 } | |
| 71 } | |
| 72 '''; | |
| 73 expect( | |
| 74 () => LibrariesSpecification.parse( | |
| 75 Uri.parse('org-dartlang-custom:///f.json'), jsonString), | |
| 76 throwsA((e) => e is LibrariesSpecificationException)); | |
| 77 | |
| 78 jsonString = ''' | |
| 79 { | |
| 80 "none": { | |
| 81 "libraries": { | |
| 82 "c" : { | |
| 83 "uri": "c/main.dart", | |
| 84 "patches": "a.dart" | |
| 85 } | |
| 86 } | |
| 87 } | |
| 88 } | |
| 89 '''; | |
| 90 var spec = LibrariesSpecification.parse( | |
| 91 Uri.parse('org-dartlang-custom:///f.json'), jsonString); | |
| 92 expect(spec.specificationFor("none").libraryInfoFor("c").patches.first, | |
| 93 Uri.parse('org-dartlang-custom:///a.dart')); | |
| 94 | |
| 95 jsonString = ''' | |
| 96 { | |
| 97 "none": { | |
| 98 "libraries": { | |
| 99 "c" : { | |
| 100 "uri": "c/main.dart", | |
| 101 "patches": ["a.dart"] | |
| 102 } | |
| 103 } | |
| 104 } | |
| 105 } | |
| 106 '''; | |
| 107 spec = LibrariesSpecification.parse( | |
| 108 Uri.parse('org-dartlang-custom:///f.json'), jsonString); | |
| 109 expect(spec.specificationFor("none").libraryInfoFor("c").patches.first, | |
| 110 Uri.parse('org-dartlang-custom:///a.dart')); | |
| 111 }); | |
| 112 | |
| 113 test('patches are optional in the format', () async { | |
| 114 var jsonString = ''' | |
| 115 { "none": { "libraries": {"c" : { "uri": "c/main.dart" }}}} | |
| 116 '''; | |
| 117 var spec = LibrariesSpecification.parse( | |
| 118 Uri.parse('org-dartlang-custom:///one/two/f.json'), jsonString); | |
| 119 expect(spec, isNotNull); | |
| 120 expect( | |
| 121 spec.specificationFor('none').libraryInfoFor('c').patches, isEmpty); | |
| 122 }); | |
| 123 | |
| 124 test('library paths are resolved from spec uri', () async { | |
| 125 var jsonString = ''' | |
| 126 { "none": { "libraries": {"c" : { "uri": "c/main.dart" }}}} | |
| 127 '''; | |
| 128 | |
| 129 var spec = LibrariesSpecification.parse( | |
| 130 Uri.parse('org-dartlang-custom:///one/two/f.json'), jsonString); | |
| 131 expect(spec.specificationFor('none').libraryInfoFor('c').uri, | |
| 132 Uri.parse('org-dartlang-custom:///one/two/c/main.dart')); | |
| 133 }); | |
| 134 | |
| 135 test('patches paths are resolved from spec uri', () async { | |
| 136 var jsonString = ''' | |
| 137 { | |
| 138 "none": { | |
| 139 "libraries": { | |
| 140 "c" : { | |
| 141 "uri": "c/main.dart", | |
| 142 "patches": [ | |
| 143 "../a/p1.dart", | |
| 144 "../a/p2.dart" | |
| 145 ] | |
| 146 } | |
| 147 } | |
| 148 } | |
| 149 } | |
| 150 '''; | |
| 151 | |
| 152 var spec = LibrariesSpecification.parse( | |
| 153 Uri.parse('org-dartlang-custom:///one/two/f.json'), jsonString); | |
| 154 expect(spec.specificationFor('none').libraryInfoFor('c').patches[0], | |
| 155 Uri.parse('org-dartlang-custom:///one/a/p1.dart')); | |
| 156 expect(spec.specificationFor('none').libraryInfoFor('c').patches[1], | |
| 157 Uri.parse('org-dartlang-custom:///one/a/p2.dart')); | |
| 158 }); | |
| 159 | |
| 160 test('multiple targets are supported', () async { | |
| 161 var jsonString = ''' | |
| 162 { | |
| 163 "vm": { | |
| 164 "libraries": { | |
| 165 "foo" : { | |
| 166 "uri": "a/main.dart", | |
| 167 "patches": [ | |
| 168 "a/p1.dart", | |
| 169 "a/p2.dart" | |
| 170 ] | |
| 171 }, | |
| 172 "bar" : { | |
| 173 "uri": "b/main.dart", | |
| 174 "patches": [ | |
| 175 "b/p3.dart" | |
| 176 ] | |
| 177 } | |
| 178 } | |
| 179 }, | |
| 180 "none": { | |
| 181 "libraries": { | |
| 182 "c" : { | |
| 183 "uri": "c/main.dart" | |
| 184 } | |
| 185 } | |
| 186 } | |
| 187 } | |
| 188 '''; | |
| 189 | |
| 190 var spec = LibrariesSpecification.parse( | |
| 191 Uri.parse('org-dartlang-custom:///one/two/f.json'), jsonString); | |
| 192 | |
| 193 expect(spec.specificationFor('vm').libraryInfoFor('foo').uri, | |
| 194 Uri.parse('org-dartlang-custom:///one/two/a/main.dart')); | |
| 195 expect(spec.specificationFor('vm').libraryInfoFor('bar').uri, | |
| 196 Uri.parse('org-dartlang-custom:///one/two/b/main.dart')); | |
| 197 expect(spec.specificationFor('none').libraryInfoFor('c').uri, | |
| 198 Uri.parse('org-dartlang-custom:///one/two/c/main.dart')); | |
| 199 }); | |
| 200 }); | |
| 201 | |
| 202 group('toJson', () { | |
| 203 test('serialization produces same data that was parsed', () async { | |
| 204 var jsonString = ''' | |
| 205 { | |
| 206 "vm": { | |
| 207 "libraries": { | |
| 208 "foo" : { | |
| 209 "uri": "a/main.dart", | |
| 210 "patches": [ | |
| 211 "a/p1.dart", | |
| 212 "a/p2.dart" | |
| 213 ] | |
| 214 }, | |
| 215 "bar" : { | |
| 216 "uri": "b/main.dart", | |
| 217 "patches": [ | |
| 218 "b/p3.dart" | |
| 219 ] | |
| 220 } | |
| 221 } | |
| 222 }, | |
| 223 "none": { | |
| 224 "libraries": { | |
| 225 "c" : { | |
| 226 "uri": "c/main.dart", | |
| 227 "patches": [] | |
| 228 } | |
| 229 } | |
| 230 } | |
| 231 } | |
| 232 '''; | |
| 233 | |
| 234 var spec = LibrariesSpecification.parse( | |
| 235 Uri.parse('org-dartlang-custom:///one/two/f.json'), jsonString); | |
| 236 var newJson = | |
| 237 spec.toJsonString(Uri.parse('org-dartlang-custom:///one/two/g.json')); | |
| 238 expect(jsonString.replaceAll(new RegExp('\\s'), ''), newJson); | |
| 239 }); | |
| 240 | |
| 241 test('serialization can adapt to new file location', () async { | |
| 242 var jsonString = ''' | |
| 243 { | |
| 244 "vm": { | |
| 245 "libraries": { | |
| 246 "foo" : { | |
| 247 "uri": "a/main.dart", | |
| 248 "patches": [ | |
| 249 "a/p1.dart", | |
| 250 "a/p2.dart" | |
| 251 ] | |
| 252 }, | |
| 253 "bar" : { | |
| 254 "uri": "b/main.dart", | |
| 255 "patches": [ | |
| 256 "b/p3.dart" | |
| 257 ] | |
| 258 } | |
| 259 } | |
| 260 }, | |
| 261 "none": { | |
| 262 "libraries": { | |
| 263 "c" : { | |
| 264 "uri": "c/main.dart" | |
| 265 } | |
| 266 } | |
| 267 } | |
| 268 } | |
| 269 '''; | |
| 270 | |
| 271 var spec = LibrariesSpecification.parse( | |
| 272 Uri.parse('org-dartlang-custom:///one/two/f.json'), jsonString); | |
| 273 var newJson = | |
| 274 spec.toJsonString(Uri.parse('org-dartlang-custom:///one/g.json')); | |
| 275 | |
| 276 var expected = ''' | |
| 277 { | |
| 278 "vm": { | |
| 279 "libraries": { | |
| 280 "foo" : { | |
| 281 "uri": "two/a/main.dart", | |
| 282 "patches": [ | |
| 283 "two/a/p1.dart", | |
| 284 "two/a/p2.dart" | |
| 285 ] | |
| 286 }, | |
| 287 "bar" : { | |
| 288 "uri": "two/b/main.dart", | |
| 289 "patches": [ | |
| 290 "two/b/p3.dart" | |
| 291 ] | |
| 292 } | |
| 293 } | |
| 294 }, | |
| 295 "none": { | |
| 296 "libraries": { | |
| 297 "c" : { | |
| 298 "uri": "two/c/main.dart", | |
| 299 "patches": [] | |
| 300 } | |
| 301 } | |
| 302 } | |
| 303 } | |
| 304 '''; | |
| 305 | |
| 306 expect(expected.replaceAll(new RegExp('\\s'), ''), newJson); | |
| 307 }); | |
| 308 }); | |
| 309 } | |
| OLD | NEW |