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 |