| // Copyright (c) 2015, 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:async'; |
| |
| import 'package:test_descriptor/test_descriptor.dart' as d; |
| |
| import 'package:test/src/util/io.dart'; |
| import 'package:test/test.dart'; |
| |
| import '../io.dart'; |
| |
| void main() { |
| group("for suite", () { |
| test("runs a test suite on a matching platform", () async { |
| await _writeTestFile("vm_test.dart", suiteTestOn: "vm"); |
| |
| var test = await runTest(["vm_test.dart"]); |
| expect(test.stdout, emitsThrough(contains("All tests passed!"))); |
| await test.shouldExit(0); |
| }); |
| |
| test("doesn't run a test suite on a non-matching platform", () async { |
| await _writeTestFile("vm_test.dart", suiteTestOn: "vm"); |
| |
| var test = await runTest(["--platform", "content-shell", "vm_test.dart"]); |
| expect(test.stdout, emitsThrough(contains("No tests ran."))); |
| await test.shouldExit(0); |
| }, tags: 'content-shell'); |
| |
| test("runs a test suite on a matching operating system", () async { |
| await _writeTestFile("os_test.dart", suiteTestOn: currentOS.identifier); |
| |
| var test = await runTest(["os_test.dart"]); |
| expect(test.stdout, emitsThrough(contains("All tests passed!"))); |
| await test.shouldExit(0); |
| }); |
| |
| test("doesn't run a test suite on a non-matching operating system", |
| () async { |
| await _writeTestFile("os_test.dart", |
| suiteTestOn: otherOS, loadable: false); |
| |
| var test = await runTest(["os_test.dart"]); |
| expect(test.stdout, emitsThrough(contains("No tests ran."))); |
| await test.shouldExit(0); |
| }); |
| |
| test("only loads matching files when loading as a group", () async { |
| await _writeTestFile("vm_test.dart", suiteTestOn: "vm"); |
| await _writeTestFile("browser_test.dart", |
| suiteTestOn: "browser", loadable: false); |
| await _writeTestFile("this_os_test.dart", |
| suiteTestOn: currentOS.identifier); |
| await _writeTestFile("other_os_test.dart", |
| suiteTestOn: otherOS, loadable: false); |
| |
| var test = await runTest(["."]); |
| expect(test.stdout, emitsThrough(contains("+2: All tests passed!"))); |
| await test.shouldExit(0); |
| }); |
| }); |
| |
| group("for group", () { |
| test("runs a VM group on the VM", () async { |
| await _writeTestFile("vm_test.dart", groupTestOn: "vm"); |
| |
| var test = await runTest(["vm_test.dart"]); |
| expect(test.stdout, emitsThrough(contains("All tests passed!"))); |
| await test.shouldExit(0); |
| }); |
| |
| test("doesn't run a Browser group on the VM", () async { |
| await _writeTestFile("browser_test.dart", groupTestOn: "browser"); |
| |
| var test = await runTest(["browser_test.dart"]); |
| expect(test.stdout, emitsThrough(contains("No tests ran."))); |
| await test.shouldExit(0); |
| }); |
| |
| test("runs a browser group on a browser", () async { |
| await _writeTestFile("browser_test.dart", groupTestOn: "browser"); |
| |
| var test = |
| await runTest(["--platform", "content-shell", "browser_test.dart"]); |
| expect(test.stdout, emitsThrough(contains("All tests passed!"))); |
| await test.shouldExit(0); |
| }, tags: 'content-shell'); |
| |
| test("doesn't run a VM group on a browser", () async { |
| await _writeTestFile("vm_test.dart", groupTestOn: "vm"); |
| |
| var test = await runTest(["--platform", "content-shell", "vm_test.dart"]); |
| expect(test.stdout, emitsThrough(contains("No tests ran."))); |
| await test.shouldExit(0); |
| }, tags: 'content-shell'); |
| }); |
| |
| group("for test", () { |
| test("runs a VM test on the VM", () async { |
| await _writeTestFile("vm_test.dart", testTestOn: "vm"); |
| |
| var test = await runTest(["vm_test.dart"]); |
| expect(test.stdout, emitsThrough(contains("All tests passed!"))); |
| await test.shouldExit(0); |
| }); |
| |
| test("doesn't run a browser test on the VM", () async { |
| await _writeTestFile("browser_test.dart", testTestOn: "browser"); |
| |
| var test = await runTest(["browser_test.dart"]); |
| expect(test.stdout, emitsThrough(contains("No tests ran."))); |
| await test.shouldExit(0); |
| }); |
| |
| test("runs a browser test on a browser", () async { |
| await _writeTestFile("browser_test.dart", testTestOn: "browser"); |
| |
| var test = |
| await runTest(["--platform", "content-shell", "browser_test.dart"]); |
| expect(test.stdout, emitsThrough(contains("All tests passed!"))); |
| await test.shouldExit(0); |
| }, tags: 'content-shell'); |
| |
| test("doesn't run a VM test on a browser", () async { |
| await _writeTestFile("vm_test.dart", testTestOn: "vm"); |
| |
| var test = await runTest(["--platform", "content-shell", "vm_test.dart"]); |
| expect(test.stdout, emitsThrough(contains("No tests ran."))); |
| await test.shouldExit(0); |
| }, tags: 'content-shell'); |
| }); |
| |
| group("with suite, group, and test selectors", () { |
| test("runs the test if all selectors match", () async { |
| await _writeTestFile("vm_test.dart", |
| suiteTestOn: "!browser", groupTestOn: "!js", testTestOn: "vm"); |
| |
| var test = await runTest(["vm_test.dart"]); |
| expect(test.stdout, emitsThrough(contains("All tests passed!"))); |
| await test.shouldExit(0); |
| }); |
| |
| test("doesn't runs the test if the suite doesn't match", () async { |
| await _writeTestFile("vm_test.dart", |
| suiteTestOn: "browser", groupTestOn: "!js", testTestOn: "vm"); |
| |
| var test = await runTest(["vm_test.dart"]); |
| expect(test.stdout, emitsThrough(contains("No tests ran."))); |
| await test.shouldExit(0); |
| }); |
| |
| test("doesn't runs the test if the group doesn't match", () async { |
| await _writeTestFile("vm_test.dart", |
| suiteTestOn: "!browser", groupTestOn: "browser", testTestOn: "vm"); |
| |
| var test = await runTest(["vm_test.dart"]); |
| expect(test.stdout, emitsThrough(contains("No tests ran."))); |
| await test.shouldExit(0); |
| }); |
| |
| test("doesn't runs the test if the test doesn't match", () async { |
| await _writeTestFile("vm_test.dart", |
| suiteTestOn: "!browser", groupTestOn: "!js", testTestOn: "browser"); |
| |
| var test = await runTest(["vm_test.dart"]); |
| expect(test.stdout, emitsThrough(contains("No tests ran."))); |
| await test.shouldExit(0); |
| }); |
| }); |
| } |
| |
| /// Writes a test file with some platform selectors to [filename]. |
| /// |
| /// Each of [suiteTestOn], [groupTestOn], and [testTestOn] is a platform |
| /// selector that's suite-, group-, and test-level respectively. If [loadable] |
| /// is `false`, the test file will be made unloadable on the Dart VM. |
| Future _writeTestFile(String filename, |
| {String suiteTestOn, |
| String groupTestOn, |
| String testTestOn, |
| bool loadable: true}) { |
| var buffer = new StringBuffer(); |
| if (suiteTestOn != null) buffer.writeln("@TestOn('$suiteTestOn')"); |
| if (!loadable) buffer.writeln("import 'dart:html';"); |
| |
| buffer |
| ..writeln("import 'package:test/test.dart';") |
| ..writeln("void main() {") |
| ..writeln(" group('group', () {"); |
| |
| if (testTestOn != null) { |
| buffer.writeln(" test('test', () {}, testOn: '$testTestOn');"); |
| } else { |
| buffer.writeln(" test('test', () {});"); |
| } |
| |
| if (groupTestOn != null) { |
| buffer.writeln(" }, testOn: '$groupTestOn');"); |
| } else { |
| buffer.writeln(" });"); |
| } |
| |
| buffer.writeln("}"); |
| |
| return d.file(filename, buffer.toString()).create(); |
| } |