| Index: test/backend/metadata_test.dart
|
| diff --git a/test/backend/metadata_test.dart b/test/backend/metadata_test.dart
|
| index ab14a74bde550a52a9b895f5b73e4085b75c0a37..44156feb9eaa60803c800899d6fb0aa888a6b2cc 100644
|
| --- a/test/backend/metadata_test.dart
|
| +++ b/test/backend/metadata_test.dart
|
| @@ -9,6 +9,91 @@ import 'package:test/src/frontend/skip.dart';
|
| import 'package:test/test.dart';
|
|
|
| void main() {
|
| + group("Metadata", () {
|
| + expectTags(tags, expected) {
|
| + expect(new Metadata(tags: tags).tags, unorderedEquals(expected));
|
| + expect(new Metadata.parse(tags: tags).tags, unorderedEquals(expected));
|
| + var serialized = {
|
| + "tags": tags,
|
| + "timeout": "none",
|
| + "onPlatform": [],
|
| + };
|
| + expect(new Metadata.deserialize(serialized).tags,
|
| + unorderedEquals(expected));
|
| + }
|
| +
|
| + expectTagsError({tags, String message}) {
|
| + [
|
| + () => new Metadata(tags: tags),
|
| + () => new Metadata.parse(tags: tags),
|
| + ].forEach((fn()) {
|
| + try {
|
| + fn();
|
| + fail("Expected ArgumentError for $tags");
|
| + } on ArgumentError catch(e) {
|
| + expect(e.message, message);
|
| + expect(e.invalidValue, tags);
|
| + expect(e.name, "tags");
|
| + }
|
| + });
|
| + }
|
| +
|
| + test("takes no tags", () {
|
| + expectTags(null, []);
|
| + expectTags("", []);
|
| + expectTags(" ", []);
|
| + expectTags([], []);
|
| + });
|
| +
|
| + test("takes some tags as Iterable", () {
|
| + var tags = ["a", "b"];
|
| + expectTags(tags, tags);
|
| + expectTags(new Set.from(tags), tags);
|
| + });
|
| +
|
| + test("takes some tags as String", () {
|
| + expectTags("a", ["a"]);
|
| + expectTags("a,b", ["a", "b"]);
|
| + expectTags(" a,,,b , c\n,d\t", ["a", "b", "c", "d"]);
|
| + });
|
| +
|
| + test("refuses bad tag types", () {
|
| + expectTagsError(
|
| + tags: 1,
|
| + message: "must be either String or Iterable");
|
| + });
|
| +
|
| + test("refuses non-String tag names", () {
|
| + expectTagsError(
|
| + tags: [1],
|
| + message: "tag name must be String");
|
| + expectTagsError(
|
| + tags: [null],
|
| + message: "tag name must be String");
|
| + });
|
| +
|
| + test("refuses blank tag names", () {
|
| + var errorMsg = "tag name must contain non-whitespace characters";
|
| + expectTagsError(
|
| + tags: [""],
|
| + message: errorMsg);
|
| + expectTagsError(
|
| + tags: [" "],
|
| + message: errorMsg);
|
| + });
|
| +
|
| + test("merges tags by computing the union of the two tag sets", () {
|
| + expect(new Metadata(tags: "a,b").merge(new Metadata(tags: "b,c")).tags,
|
| + unorderedEquals(["a", "b", "c"]));
|
| + });
|
| +
|
| + test("serializes tags to a List", () {
|
| + var serialized = new Metadata(tags: "a,b").serialize()['tags'];
|
| + expect(serialized, new isInstanceOf<List>());
|
| + expect(serialized, ["a", "b"]);
|
| + });
|
| + });
|
| +
|
| group("onPlatform", () {
|
| test("parses a valid map", () {
|
| var metadata = new Metadata.parse(onPlatform: {
|
|
|