| // 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:convert'; |
| |
| import 'package:scheduled_test/descriptor.dart' as d; |
| import 'package:scheduled_test/scheduled_test.dart'; |
| |
| import 'package:test/src/util/exit_codes.dart' as exit_codes; |
| import 'package:test/src/util/io.dart'; |
| |
| import '../../io.dart'; |
| |
| void main() { |
| useSandbox(); |
| |
| group("on_platform", () { |
| test("applies platform-specific configuration to matching tests", () { |
| d |
| .file( |
| "dart_test.yaml", |
| JSON.encode({ |
| "on_platform": { |
| "content-shell": {"timeout": "0s"} |
| } |
| })) |
| .create(); |
| |
| d |
| .file( |
| "test.dart", |
| """ |
| import 'dart:async'; |
| |
| import 'package:test/test.dart'; |
| |
| void main() { |
| test("test", () => new Future.delayed(Duration.ZERO)); |
| } |
| """) |
| .create(); |
| |
| var test = runTest(["-p", "content-shell,vm", "test.dart"]); |
| test.stdout.expect(containsInOrder([ |
| "-1: [Dartium Content Shell] test [E]", |
| "+1 -1: Some tests failed." |
| ])); |
| test.shouldExit(1); |
| }, tags: ['content-shell']); |
| |
| test("supports platform selectors", () { |
| d |
| .file( |
| "dart_test.yaml", |
| JSON.encode({ |
| "on_platform": { |
| "content-shell || vm": {"timeout": "0s"} |
| } |
| })) |
| .create(); |
| |
| d |
| .file( |
| "test.dart", |
| """ |
| import 'dart:async'; |
| |
| import 'package:test/test.dart'; |
| |
| void main() { |
| test("test", () => new Future.delayed(Duration.ZERO)); |
| } |
| """) |
| .create(); |
| |
| var test = runTest(["-p", "content-shell,vm", "test.dart"]); |
| test.stdout.expect(containsInOrder([ |
| "-1: [VM] test [E]", |
| "-2: [Dartium Content Shell] test [E]", |
| "-2: Some tests failed." |
| ])); |
| test.shouldExit(1); |
| }, tags: ['content-shell']); |
| |
| group("errors", () { |
| test("rejects an invalid selector type", () { |
| d.file("dart_test.yaml", '{"on_platform": {12: null}}').create(); |
| |
| var test = runTest([]); |
| test.stderr.expect( |
| containsInOrder(["on_platform key must be a string", "^^"])); |
| test.shouldExit(exit_codes.data); |
| }); |
| |
| test("rejects an invalid selector", () { |
| d |
| .file( |
| "dart_test.yaml", |
| JSON.encode({ |
| "on_platform": {"foo bar": null} |
| })) |
| .create(); |
| |
| var test = runTest([]); |
| test.stderr.expect(containsInOrder( |
| ["Invalid on_platform key: Expected end of input.", "^^^^^^^^^"])); |
| test.shouldExit(exit_codes.data); |
| }); |
| |
| test("rejects a selector with an undefined variable", () { |
| d |
| .file( |
| "dart_test.yaml", |
| JSON.encode({ |
| "on_platform": {"foo": null} |
| })) |
| .create(); |
| |
| var test = runTest([]); |
| test.stderr.expect(containsInOrder( |
| ["Invalid on_platform key: Undefined variable.", "^^^^^"])); |
| test.shouldExit(exit_codes.data); |
| }); |
| |
| test("rejects an invalid map", () { |
| d |
| .file( |
| "dart_test.yaml", |
| JSON.encode({ |
| "on_platform": {"linux": 12} |
| })) |
| .create(); |
| |
| var test = runTest([]); |
| test.stderr.expect( |
| containsInOrder(["on_platform value must be a map.", "^^"])); |
| test.shouldExit(exit_codes.data); |
| }); |
| |
| test("rejects an invalid configuration", () { |
| d |
| .file( |
| "dart_test.yaml", |
| JSON.encode({ |
| "on_platform": { |
| "linux": {"timeout": "12p"} |
| } |
| })) |
| .create(); |
| |
| var test = runTest([]); |
| test.stderr.expect( |
| containsInOrder(["Invalid timeout: expected unit.", "^^^^^"])); |
| test.shouldExit(exit_codes.data); |
| }); |
| |
| test("rejects runner configuration", () { |
| d |
| .file( |
| "dart_test.yaml", |
| JSON.encode({ |
| "on_platform": { |
| "linux": {"filename": "*_blorp"} |
| } |
| })) |
| .create(); |
| |
| var test = runTest([]); |
| test.stderr.expect( |
| containsInOrder(["filename isn't supported here.", "^^^^^^^^^"])); |
| test.shouldExit(exit_codes.data); |
| }); |
| }); |
| }); |
| |
| group("on_os", () { |
| test("applies OS-specific configuration on a matching OS", () { |
| d |
| .file( |
| "dart_test.yaml", |
| JSON.encode({ |
| "on_os": { |
| currentOS.identifier: {"filename": "test_*.dart"} |
| } |
| })) |
| .create(); |
| |
| d |
| .file( |
| "foo_test.dart", |
| """ |
| import 'package:test/test.dart'; |
| |
| void main() { |
| test("foo_test", () {}); |
| } |
| """) |
| .create(); |
| |
| d |
| .file( |
| "test_foo.dart", |
| """ |
| import 'package:test/test.dart'; |
| |
| void main() { |
| test("test_foo", () {}); |
| } |
| """) |
| .create(); |
| |
| var test = runTest(["."]); |
| test.stdout.expect(containsInOrder( |
| ["+0: ./test_foo.dart: test_foo", "+1: All tests passed!"])); |
| test.shouldExit(0); |
| }); |
| |
| test("doesn't apply OS-specific configuration on a non-matching OS", () { |
| d |
| .file( |
| "dart_test.yaml", |
| JSON.encode({ |
| "on_os": { |
| otherOS: {"filename": "test_*.dart"} |
| } |
| })) |
| .create(); |
| |
| d |
| .file( |
| "foo_test.dart", |
| """ |
| import 'package:test/test.dart'; |
| |
| void main() { |
| test("foo_test", () {}); |
| } |
| """) |
| .create(); |
| |
| d |
| .file( |
| "test_foo.dart", |
| """ |
| import 'package:test/test.dart'; |
| |
| void main() { |
| test("test_foo", () {}); |
| } |
| """) |
| .create(); |
| |
| var test = runTest(["."]); |
| test.stdout.expect(containsInOrder( |
| ["+0: ./foo_test.dart: foo_test", "+1: All tests passed!"])); |
| test.shouldExit(0); |
| }); |
| |
| group("errors", () { |
| test("rejects an invalid OS type", () { |
| d.file("dart_test.yaml", '{"on_os": {12: null}}').create(); |
| |
| var test = runTest([]); |
| test.stderr |
| .expect(containsInOrder(["on_os key must be a string", "^^"])); |
| test.shouldExit(exit_codes.data); |
| }); |
| |
| test("rejects an unknown OS name", () { |
| d |
| .file( |
| "dart_test.yaml", |
| JSON.encode({ |
| "on_os": {"foo": null} |
| })) |
| .create(); |
| |
| var test = runTest([]); |
| test.stderr.expect(containsInOrder( |
| ["Invalid on_os key: No such operating system.", "^^^^^"])); |
| test.shouldExit(exit_codes.data); |
| }); |
| |
| test("rejects an invalid map", () { |
| d |
| .file( |
| "dart_test.yaml", |
| JSON.encode({ |
| "on_os": {"linux": 12} |
| })) |
| .create(); |
| |
| var test = runTest([]); |
| test.stderr |
| .expect(containsInOrder(["on_os value must be a map.", "^^"])); |
| test.shouldExit(exit_codes.data); |
| }); |
| |
| test("rejects an invalid configuration", () { |
| d |
| .file( |
| "dart_test.yaml", |
| JSON.encode({ |
| "on_os": { |
| "linux": {"timeout": "12p"} |
| } |
| })) |
| .create(); |
| |
| var test = runTest([]); |
| test.stderr.expect( |
| containsInOrder(["Invalid timeout: expected unit.", "^^^^^"])); |
| test.shouldExit(exit_codes.data); |
| }); |
| }); |
| }); |
| } |