Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 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. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 import 'package:test/src/backend/metadata.dart'; | 5 import 'package:test/src/backend/metadata.dart'; |
| 6 import 'package:test/src/backend/test_platform.dart'; | 6 import 'package:test/src/backend/test_platform.dart'; |
| 7 import 'package:test/src/frontend/timeout.dart'; | 7 import 'package:test/src/frontend/timeout.dart'; |
| 8 import 'package:test/src/frontend/skip.dart'; | 8 import 'package:test/src/frontend/skip.dart'; |
| 9 import 'package:test/test.dart'; | 9 import 'package:test/test.dart'; |
| 10 | 10 |
| 11 void main() { | 11 void main() { |
| 12 group("Metadata", () { | |
| 13 void expectTags(tags, expected) { | |
| 14 expect(new Metadata.parse(tags: tags).tags, unorderedEquals(expected)); | |
| 15 | |
| 16 if (tags == null || tags is Iterable) { | |
| 17 expect(new Metadata(tags: tags).tags, unorderedEquals(expected)); | |
| 18 } | |
| 19 | |
| 20 if (tags is Iterable) { | |
| 21 var serialized = { | |
| 22 "tags": tags, | |
| 23 "timeout": "none", | |
| 24 "onPlatform": [], | |
| 25 }; | |
| 26 expect(new Metadata.deserialize(serialized).tags, | |
| 27 unorderedEquals(expected)); | |
|
nweiz
2015/11/16 21:59:44
I don't think we should explicitly test the serial
yjbanov
2015/11/26 06:30:27
Done.
| |
| 28 } | |
| 29 } | |
| 30 | |
| 31 void expectArgumentError(ArgumentError error, tags, String message) { | |
|
nweiz
2015/11/16 21:59:44
We usually don't test argument errors' values in t
yjbanov
2015/11/26 06:30:27
Done.
| |
| 32 expect(error.message, message); | |
| 33 expect(error.invalidValue, tags); | |
| 34 expect(error.name, "tags"); | |
| 35 } | |
| 36 | |
| 37 void expectTagsError({tags, String message}) { | |
| 38 [ | |
| 39 () => new Metadata(tags: tags), | |
| 40 () => new Metadata.parse(tags: tags), | |
| 41 ].forEach((fn()) { | |
| 42 try { | |
| 43 fn(); | |
| 44 fail("Expected ArgumentError for $tags"); | |
| 45 } on ArgumentError catch(e) { | |
|
nweiz
2015/11/16 21:59:44
Use the throwsArgumentError matcher here.
yjbanov
2015/11/26 06:30:27
Done.
| |
| 46 expectArgumentError(e, tags, message); | |
| 47 } | |
| 48 }); | |
| 49 } | |
| 50 | |
| 51 test("takes no tags", () { | |
| 52 expectTags(null, []); | |
| 53 expectTags("", []); | |
| 54 expectTags(" ", []); | |
| 55 expectTags([], []); | |
| 56 }); | |
| 57 | |
| 58 test("takes some tags as Iterable", () { | |
| 59 var tags = ["a", "b"]; | |
| 60 expectTags(tags, tags); | |
| 61 expectTags(new Set.from(tags), tags); | |
| 62 }); | |
| 63 | |
| 64 test("takes some tags as String", () { | |
| 65 expectTags("a", ["a"]); | |
| 66 expectTags("a,b", ["a", "b"]); | |
| 67 expectTags(" a,,,b , c\n,d\t", ["a", "b", "c", "d"]); | |
| 68 }); | |
| 69 | |
| 70 test("parse refuses bad tag types", () { | |
| 71 try { | |
| 72 new Metadata.parse(tags: 1); | |
| 73 fail("Expected ArgumentError for 1"); | |
| 74 } on ArgumentError catch(e) { | |
| 75 expectArgumentError(e, 1, | |
| 76 "must be either String or Iterable"); | |
| 77 } | |
| 78 }); | |
| 79 | |
| 80 test("refuses non-String tag names", () { | |
| 81 expectTagsError( | |
| 82 tags: [1], | |
| 83 message: "tag name must be String"); | |
| 84 expectTagsError( | |
| 85 tags: [null], | |
| 86 message: "tag name must be String"); | |
| 87 }); | |
| 88 | |
| 89 test("refuses blank tag names", () { | |
| 90 var errorMsg = "tag name must contain non-whitespace characters"; | |
| 91 expectTagsError( | |
| 92 tags: [""], | |
| 93 message: errorMsg); | |
| 94 expectTagsError( | |
| 95 tags: [" "], | |
| 96 message: errorMsg); | |
| 97 }); | |
| 98 | |
| 99 test("merges tags by computing the union of the two tag sets", () { | |
| 100 var merged = new Metadata(tags: ["a", "b"]) | |
| 101 .merge(new Metadata(tags: ["b", "c"])); | |
| 102 expect(merged.tags, unorderedEquals(["a", "b", "c"])); | |
| 103 }); | |
| 104 | |
| 105 test("serializes tags to a List", () { | |
| 106 var serialized = new Metadata(tags: ["a", "b"]).serialize()['tags']; | |
| 107 expect(serialized, new isInstanceOf<List>()); | |
| 108 expect(serialized, ["a", "b"]); | |
| 109 }); | |
| 110 }); | |
| 111 | |
| 12 group("onPlatform", () { | 112 group("onPlatform", () { |
| 13 test("parses a valid map", () { | 113 test("parses a valid map", () { |
| 14 var metadata = new Metadata.parse(onPlatform: { | 114 var metadata = new Metadata.parse(onPlatform: { |
| 15 "chrome": new Timeout.factor(2), | 115 "chrome": new Timeout.factor(2), |
| 16 "vm": [new Skip(), new Timeout.factor(3)] | 116 "vm": [new Skip(), new Timeout.factor(3)] |
| 17 }); | 117 }); |
| 18 | 118 |
| 19 var key = metadata.onPlatform.keys.first; | 119 var key = metadata.onPlatform.keys.first; |
| 20 expect(key.evaluate(TestPlatform.chrome), isTrue); | 120 expect(key.evaluate(TestPlatform.chrome), isTrue); |
| 21 expect(key.evaluate(TestPlatform.vm), isFalse); | 121 expect(key.evaluate(TestPlatform.vm), isFalse); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 56 }, throwsArgumentError); | 156 }, throwsArgumentError); |
| 57 }); | 157 }); |
| 58 | 158 |
| 59 test("refuses multiple Skips", () { | 159 test("refuses multiple Skips", () { |
| 60 expect(() { | 160 expect(() { |
| 61 new Metadata.parse(onPlatform: {"chrome": [new Skip(), new Skip()]}); | 161 new Metadata.parse(onPlatform: {"chrome": [new Skip(), new Skip()]}); |
| 62 }, throwsArgumentError); | 162 }, throwsArgumentError); |
| 63 }); | 163 }); |
| 64 }); | 164 }); |
| 65 } | 165 } |
| OLD | NEW |