Chromium Code Reviews| Index: test/runner/configuration/configuration_test.dart |
| diff --git a/test/runner/configuration/configuration_test.dart b/test/runner/configuration/configuration_test.dart |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..7987f6cbf369a222210120f7c9b1094d9830670a |
| --- /dev/null |
| +++ b/test/runner/configuration/configuration_test.dart |
| @@ -0,0 +1,217 @@ |
| +// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
| +// for details. All rights reserved. Use of this source code is governed by a |
| +// BSD-style license that can be found in the LICENSE file. |
| + |
| +@TestOn("vm") |
| + |
| +import 'dart:io'; |
|
kevmoo
2016/02/03 23:01:56
dart:io, dart:convert, scheduled_test/descriptor a
|
| +import 'dart:convert'; |
| + |
| +import 'package:path/path.dart' as p; |
| +import 'package:scheduled_test/descriptor.dart' as d; |
| +import 'package:test/test.dart'; |
| + |
| +import 'package:test/src/backend/test_platform.dart'; |
| +import 'package:test/src/runner/configuration.dart'; |
| +import 'package:test/src/runner/configuration/values.dart'; |
| +import 'package:test/src/util/io.dart'; |
| + |
| +void main() { |
| + group("merge", () { |
| + group("for most fields", () { |
| + test("if neither is defined, preserves the default", () { |
| + var merged = new Configuration().merge(new Configuration()); |
| + expect(merged.help, isFalse); |
| + expect(merged.version, isFalse); |
| + expect(merged.verboseTrace, isFalse); |
| + expect(merged.jsTrace, isFalse); |
| + expect(merged.pauseAfterLoad, isFalse); |
| + expect(merged.color, equals(canUseSpecialChars)); |
| + expect(merged.packageRoot, equals(p.join(p.current, 'packages'))); |
| + expect(merged.reporter, equals(defaultReporter)); |
| + expect(merged.pubServeUrl, isNull); |
| + expect(merged.pattern, isNull); |
| + expect(merged.platforms, equals([TestPlatform.vm])); |
| + expect(merged.paths, equals(["test"])); |
| + }); |
| + |
| + test("if only the old configuration's is defined, uses it", () { |
| + var merged = new Configuration( |
| + help: true, |
| + version: true, |
| + verboseTrace: true, |
| + jsTrace: true, |
| + pauseAfterLoad: true, |
| + color: true, |
| + packageRoot: "root", |
| + reporter: "json", |
| + pubServePort: 1234, |
| + pattern: "foo", |
| + platforms: [TestPlatform.chrome], |
| + paths: ["bar"]) |
| + .merge(new Configuration()); |
| + |
| + expect(merged.help, isTrue); |
| + expect(merged.version, isTrue); |
| + expect(merged.verboseTrace, isTrue); |
| + expect(merged.jsTrace, isTrue); |
| + expect(merged.pauseAfterLoad, isTrue); |
| + expect(merged.color, isTrue); |
| + expect(merged.packageRoot, equals("root")); |
| + expect(merged.reporter, equals("json")); |
| + expect(merged.pubServeUrl.port, equals(1234)); |
| + expect(merged.pattern, equals("foo")); |
| + expect(merged.platforms, equals([TestPlatform.chrome])); |
| + expect(merged.paths, equals(["bar"])); |
| + }); |
| + |
| + test("if only the new configuration's is defined, uses it", () { |
| + var merged = new Configuration().merge(new Configuration( |
| + help: true, |
| + version: true, |
| + verboseTrace: true, |
| + jsTrace: true, |
| + pauseAfterLoad: true, |
| + color: true, |
| + packageRoot: "root", |
| + reporter: "json", |
| + pubServePort: 1234, |
| + pattern: "foo", |
| + platforms: [TestPlatform.chrome], |
| + paths: ["bar"])); |
| + |
| + expect(merged.help, isTrue); |
| + expect(merged.version, isTrue); |
| + expect(merged.verboseTrace, isTrue); |
| + expect(merged.jsTrace, isTrue); |
| + expect(merged.pauseAfterLoad, isTrue); |
| + expect(merged.color, isTrue); |
| + expect(merged.packageRoot, equals("root")); |
| + expect(merged.reporter, equals("json")); |
| + expect(merged.pubServeUrl.port, equals(1234)); |
| + expect(merged.pattern, equals("foo")); |
| + expect(merged.platforms, equals([TestPlatform.chrome])); |
| + expect(merged.paths, equals(["bar"])); |
| + }); |
| + |
| + test("if the two configurations conflict, uses the new configuration's " |
| + "values", () { |
| + var older = new Configuration( |
| + help: true, |
| + version: false, |
| + verboseTrace: true, |
| + jsTrace: false, |
| + pauseAfterLoad: true, |
| + color: false, |
| + packageRoot: "root", |
| + reporter: "json", |
| + pubServePort: 1234, |
| + pattern: "foo", |
| + platforms: [TestPlatform.chrome], |
| + paths: ["bar"]); |
| + var newer = new Configuration( |
| + help: false, |
| + version: true, |
| + verboseTrace: false, |
| + jsTrace: true, |
| + pauseAfterLoad: false, |
| + color: true, |
| + packageRoot: "boot", |
| + reporter: "compact", |
| + pubServePort: 5678, |
| + pattern: "gonk", |
| + platforms: [TestPlatform.dartium], |
| + paths: ["blech"]); |
| + var merged = older.merge(newer); |
| + |
| + expect(merged.help, isFalse); |
| + expect(merged.version, isTrue); |
| + expect(merged.verboseTrace, isFalse); |
| + expect(merged.jsTrace, isTrue); |
| + expect(merged.pauseAfterLoad, isFalse); |
| + expect(merged.color, isTrue); |
| + expect(merged.packageRoot, equals("boot")); |
| + expect(merged.reporter, equals("compact")); |
| + expect(merged.pubServeUrl.port, equals(5678)); |
| + expect(merged.pattern, equals("gonk")); |
| + expect(merged.platforms, equals([TestPlatform.dartium])); |
| + expect(merged.paths, equals(["blech"])); |
| + }); |
| + }); |
| + |
| + group("for tags", () { |
| + test("if neither is defined, preserves the default", () { |
| + var merged = new Configuration().merge(new Configuration()); |
| + expect(merged.tags, isEmpty); |
| + expect(merged.excludeTags, isEmpty); |
| + }); |
| + |
| + test("if only the old configuration's is defined, uses it", () { |
| + var merged = new Configuration( |
| + tags: ["foo", "bar"], |
| + excludeTags: ["baz", "bang"]) |
| + .merge(new Configuration()); |
| + |
| + expect(merged.tags, unorderedEquals(["foo", "bar"])); |
| + expect(merged.excludeTags, unorderedEquals(["baz", "bang"])); |
| + }); |
| + |
| + test("if only the new configuration's is defined, uses it", () { |
| + var merged = new Configuration().merge(new Configuration( |
| + tags: ["foo", "bar"], |
| + excludeTags: ["baz", "bang"])); |
| + |
| + expect(merged.tags, unorderedEquals(["foo", "bar"])); |
| + expect(merged.excludeTags, unorderedEquals(["baz", "bang"])); |
| + }); |
| + |
| + test("if both are defined, unions them", () { |
| + var older = new Configuration( |
| + tags: ["foo", "bar"], |
| + excludeTags: ["baz", "bang"]); |
| + var newer = new Configuration( |
| + tags: ["bar", "blip"], |
| + excludeTags: ["bang", "qux"]); |
| + var merged = older.merge(newer); |
| + |
| + expect(merged.tags, unorderedEquals(["foo", "bar", "blip"])); |
| + expect(merged.excludeTags, unorderedEquals(["baz", "bang", "qux"])); |
| + }); |
| + }); |
| + |
| + group("for timeout", () { |
| + test("if neither is defined, preserves the default", () { |
| + var merged = new Configuration().merge(new Configuration()); |
| + expect(merged.timeout, equals(new Timeout.factor(1))); |
| + }); |
| + |
| + test("if only the old configuration's is defined, uses it", () { |
| + var merged = new Configuration(timeout: new Timeout.factor(2)) |
| + .merge(new Configuration()); |
| + expect(merged.timeout, equals(new Timeout.factor(2))); |
| + }); |
| + |
| + test("if only the new configuration's is defined, uses it", () { |
| + var merged = new Configuration() |
| + .merge(new Configuration(timeout: new Timeout.factor(2))); |
| + expect(merged.timeout, equals(new Timeout.factor(2))); |
| + }); |
| + |
| + test("if both are defined, merges them", () { |
| + var older = new Configuration(timeout: new Timeout.factor(2)); |
| + var newer = new Configuration(timeout: new Timeout.factor(3)); |
| + var merged = older.merge(newer); |
| + expect(merged.timeout, equals(new Timeout.factor(6))); |
| + }); |
| + |
| + test("if the merge conflicts, prefers the new value", () { |
| + var older = new Configuration( |
| + timeout: new Timeout(new Duration(seconds: 1))); |
| + var newer = new Configuration( |
| + timeout: new Timeout(new Duration(seconds: 2))); |
| + var merged = older.merge(newer); |
| + expect(merged.timeout, equals(new Timeout(new Duration(seconds: 2)))); |
| + }); |
| + }); |
| + }); |
| +} |