Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(43)

Side by Side Diff: test/backend/metadata_test.dart

Issue 1405633004: feature: tag tests; choose tags on command line Base URL: git@github.com:yjbanov/test.git@tags
Patch Set: address review comments; --exclude-tags Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698