Split tests up into separate targets. (#133)
- Use codegen to select between io and html test configs.
- Implement io test config.
- Mark test flaky.
diff --git a/.travis.yml b/.travis.yml
index 8795470..ba507ad 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -9,8 +9,8 @@
- pkg-config
before_install:
- - wget https://github.com/bazelbuild/bazel/releases/download/0.4.2/bazel_0.4.2-linux-x86_64.deb
- - sudo dpkg -i bazel_0.4.2-linux-x86_64.deb
+ - wget https://github.com/bazelbuild/bazel/releases/download/0.4.3/bazel_0.4.3-linux-x86_64.deb
+ - sudo dpkg -i bazel_0.4.3-linux-x86_64.deb
script:
- bazel test --test_output=streamed --keep_going ...
diff --git a/BUILD b/BUILD
index 96874e6..007c81e 100644
--- a/BUILD
+++ b/BUILD
@@ -13,7 +13,7 @@
# limitations under the License.
load("@io_bazel_rules_dart//dart/build_rules:core.bzl", "dart_library")
-load("@io_bazel_rules_dart//dart/build_rules:vm.bzl", "dart_vm_test")
+load("@io_bazel_rules_dart//dart/build_rules:vm.bzl", "dart_vm_binary", "dart_vm_test")
licenses(["notice"]) # Apache (Google-authored with external contributions)
@@ -22,6 +22,7 @@
dart_library(
name = "webdriver",
srcs = glob(["lib/**"]),
+ enable_ddc = False,
license_files = ["LICENSE"],
pub_pkg_name = "webdriver",
visibility = ["//visibility:public"],
@@ -34,5 +35,12 @@
],
)
+dart_vm_binary(
+ name = "transform_tests",
+ srcs = ["bin/transform_tests.dart"],
+ script_file = "bin/transform_tests.dart",
+ visibility = ["//test:__subpackages__"],
+)
+
# Test BUILD rules are defined test/BUILD instead of here to prevent cyclic
# dependency between this and rules_webtesting.
diff --git a/bin/transform_tests.dart b/bin/transform_tests.dart
new file mode 100644
index 0000000..819b4dc
--- /dev/null
+++ b/bin/transform_tests.dart
@@ -0,0 +1,65 @@
+// Copyright 2017 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+library webdriver.transform_tests;
+
+import 'dart:io';
+
+void main(List<String> args) {
+ String inExtension;
+ String outExtension;
+ String outDirectory;
+ String srcsFile;
+
+ // Stupid simple arg parsing.
+ for (var arg in args.takeWhile((arg) => arg != '--')) {
+ if (arg.startsWith('--in-extension=')) {
+ inExtension = arg.split('=')[1];
+ } else if (arg.startsWith('--out-extension=')) {
+ outExtension = arg.split('=')[1];
+ } else if (arg.startsWith('--out=')) {
+ outDirectory = arg.split('=')[1];
+ } else if (arg.startsWith('--srcs-file=')) {
+ srcsFile = arg.split('=')[1];
+ }
+ }
+
+ print('Parsed --in-extension $inExtension');
+ print('Parsed --out-extension $outExtension');
+ print('Parsed --out $outDirectory');
+ print('Parsed --srcs-file $srcsFile');
+
+ String testUtilImport;
+ for (var arg in args.skipWhile((arg) => arg != '--')) {
+ if (arg.startsWith('--test_util_import=')) {
+ testUtilImport = arg.split('=')[1];
+ }
+ }
+
+ print('Parsed --test_util_import $testUtilImport');
+
+ var srcsList = new File(srcsFile).readAsLinesSync();
+ var year = new DateTime.now().year;
+ for (var srcFile in srcsList) {
+ if (!srcFile.endsWith(inExtension)) {
+ continue;
+ }
+ var outFile = '$outDirectory/$srcFile'
+ .replaceFirst(new RegExp('$inExtension\$'), outExtension);
+
+ var srcContents = new File(srcFile).readAsStringSync();
+ srcContents = srcContents.replaceFirst('test_util.dart', '$testUtilImport');
+ new File(outFile).writeAsString(srcContents);
+ }
+}
\ No newline at end of file
diff --git a/test/BUILD b/test/BUILD
index 36785b2..8dc024a 100644
--- a/test/BUILD
+++ b/test/BUILD
@@ -13,35 +13,48 @@
# limitations under the License.
load("@io_bazel_rules_dart//dart/build_rules:vm.bzl", "dart_vm_test")
+load("@io_bazel_rules_dart//dart/build_rules:code_gen.bzl", "dart_code_gen")
load("@io_bazel_rules_webtesting//web:dart.bzl", "dart_web_test_suite")
licenses(["notice"]) # Apache (Google-authored with external contributions)
-dart_web_test_suite(
- name = "io_test",
- srcs = glob(
- ["**/*.dart"],
- exclude = [
- "**/html_*.dart",
- "support/async_test.dart",
- ],
- ),
- browsers = ["//browsers:chromium-native"],
- data = glob(
- ["**"],
- exclude = ["**/*.dart"],
- ),
- local = True,
- pub_pkg_name = "webdriver_test",
- script_file = "io_test.dart",
- deps = [
- "//:webdriver",
- "@org_dartlang_pub_matcher//:matcher",
- "@org_dartlang_pub_path//:path",
- "@org_dartlang_pub_test//:test",
- ],
+# TODO(DrMarcII) Add support html webdriver tests when rules_dart support dart_web_test
+
+dart_code_gen(
+ name = "generate_io_tests",
+ srcs = glob(["*_test.dart"]),
+ generator = "//:transform_tests",
+ generator_args = ["--test_util_import=io_test_util.dart"],
+ out_extensions = [".io.dart"],
)
+[
+ dart_web_test_suite(
+ name = dart_file[:-5] + "_io",
+ srcs = [
+ dart_file[:-5] + ".io.dart",
+ "io_test_util.dart",
+ "test_util.dart",
+ ],
+ browsers = ["//browsers:chromium-native"],
+ data = [
+ "frame.html",
+ "test_page.html",
+ ],
+ flaky = True,
+ local = True,
+ pub_pkg_name = "webdriver_test",
+ script_file = dart_file[:-5] + ".io.dart",
+ deps = [
+ "//:webdriver",
+ "@org_dartlang_pub_matcher//:matcher",
+ "@org_dartlang_pub_path//:path",
+ "@org_dartlang_pub_test//:test",
+ ],
+ )
+ for dart_file in glob(["*_test.dart"])
+]
+
dart_vm_test(
name = "async_test",
srcs = ["support/async_test.dart"],
diff --git a/test/src/alert.dart b/test/alert_test.dart
similarity index 97%
rename from test/src/alert.dart
rename to test/alert_test.dart
index ec2e52b..80866b4 100644
--- a/test/src/alert.dart
+++ b/test/alert_test.dart
@@ -17,9 +17,9 @@
import 'package:test/test.dart';
import 'package:webdriver/core.dart';
-import '../test_util.dart';
+import 'test_util.dart';
-void runTests() {
+void main() {
group('Alert', () {
WebDriver driver;
WebElement button;
diff --git a/test/src/command_event.dart b/test/command_event_test.dart
similarity index 97%
rename from test/src/command_event.dart
rename to test/command_event_test.dart
index c3a2541..d2c4aa5 100644
--- a/test/src/command_event.dart
+++ b/test/command_event_test.dart
@@ -19,9 +19,9 @@
import 'package:webdriver/core.dart';
import 'package:webdriver/support/async.dart';
-import '../test_util.dart';
+import 'test_util.dart';
-void runTests() {
+void main() {
group('CommandEvent', () {
WebDriver driver;
diff --git a/test/html_test.dart b/test/html_test.dart
deleted file mode 100644
index 401936f..0000000
--- a/test/html_test.dart
+++ /dev/null
@@ -1,85 +0,0 @@
-// Copyright 2015 Google Inc. All Rights Reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-@TestOn('browser')
-library webdriver.html_test;
-
-import 'dart:html' as html;
-
-import 'package:test/test.dart';
-import 'package:webdriver/html.dart'
- show WebDriver, Capabilities, createDriver, fromExistingSession;
-
-import 'src/alert.dart' as alert;
-import 'src/command_event.dart' as command_event;
-import 'src/keyboard.dart' as keyboard;
-import 'src/logs.dart' as logs;
-import 'src/mouse.dart' as mouse;
-import 'src/navigation.dart' as navigation;
-import 'src/options.dart' as options;
-import 'src/target_locator.dart' as target_locator;
-import 'src/web_driver.dart' as web_driver;
-import 'src/web_element.dart' as web_element;
-import 'src/window.dart' as window;
-import 'test_util.dart' as test_util;
-
-void main() {
- test_util.runningOnTravis = false;
- test_util.createTestDriver = ({Map<String, dynamic> additionalCapabilities}) {
- var capabilities = Capabilities.chrome;
-
- if (additionalCapabilities != null) {
- capabilities.addAll(additionalCapabilities);
- }
-
- return createDriver(desired: capabilities);
- };
-
- test_util.testPagePath =
- Uri.parse(html.window.location.href).resolve('test_page.html').toString();
-
- group('html-specific tests', () {
- WebDriver driver;
- setUp(() async {
- driver = await test_util.createTestDriver();
- await driver.get(test_util.testPagePath);
- });
-
- tearDown(() => driver.quit());
-
- test('fromExistingSession', () async {
- WebDriver newDriver =
- await fromExistingSession(driver.id, uri: driver.uri);
- expect(newDriver.capabilities, driver.capabilities);
- var url = await newDriver.currentUrl;
- expect(url, startsWith('http:'));
- expect(url, endsWith('test_page.html'));
- await newDriver.get('http://www.google.com/ncr');
- url = await driver.currentUrl;
- expect(url, contains('www.google.com'));
- });
- });
-
- alert.runTests();
- command_event.runTests();
- keyboard.runTests();
- logs.runTests();
- mouse.runTests();
- navigation.runTests();
- options.runTests();
- target_locator.runTests();
- web_driver.runTests();
- web_element.runTests();
- window.runTests();
-}
diff --git a/test/io_test.dart b/test/io_test.dart
deleted file mode 100644
index f612e86..0000000
--- a/test/io_test.dart
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2015 Google Inc. All Rights Reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-@TestOn("vm")
-library webdriver.io_test;
-
-import 'package:test/test.dart';
-
-import 'src/alert.dart' as alert;
-import 'src/command_event.dart' as command_event;
-import 'src/keyboard.dart' as keyboard;
-import 'src/logs.dart' as logs;
-import 'src/mouse.dart' as mouse;
-import 'src/navigation.dart' as navigation;
-import 'src/options.dart' as options;
-import 'src/target_locator.dart' as target_locator;
-import 'src/web_driver.dart' as web_driver;
-import 'src/web_element.dart' as web_element;
-import 'src/window.dart' as window;
-import 'support/firefox_profile.dart' as firefox_profile;
-
-import 'io_config.dart' as config;
-
-void main() {
- config.config();
-
- alert.runTests();
- command_event.runTests();
- firefox_profile.runTests();
- keyboard.runTests();
- logs.runTests();
- mouse.runTests();
- navigation.runTests();
- options.runTests();
- target_locator.runTests();
- web_driver.runTests();
- web_element.runTests();
- window.runTests();
-}
diff --git a/test/io_config.dart b/test/io_test_util.dart
similarity index 73%
rename from test/io_config.dart
rename to test/io_test_util.dart
index 6f2460d..3c30d41 100644
--- a/test/io_config.dart
+++ b/test/io_test_util.dart
@@ -1,4 +1,4 @@
-// Copyright 2015 Google Inc. All Rights Reserved.
+// Copyright 2017 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -12,25 +12,26 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-library webdriver.io_test;
+library io_test_util;
import 'dart:io' show FileSystemEntity, Platform;
import 'package:path/path.dart' as path;
-import 'package:webdriver/io.dart' show Capabilities, createDriver;
+import 'package:webdriver/core.dart' show WebDriver;
+import 'package:webdriver/io.dart' as wdio;
-import 'test_util.dart' as test_util;
+export 'test_util.dart' show isWebElement, isRectangle, isPoint;
-void config() {
- test_util.runningOnTravis = Platform.environment['TRAVIS'] == 'true';
- test_util.createTestDriver = ({Map<String, dynamic> additionalCapabilities}) {
+Future<WebDriver> createTestDriver({Map<String, dynamic> additionalCapabilities}) {
var address = Platform.environment['WEB_TEST_WEBDRIVER_SERVER'];
if (!address.endsWith('/')) {
address += '/';
}
var uri = Uri.parse(address);
- return createDriver(uri: uri, desired: additionalCapabilities);
- };
+ return wdio.createDriver(uri: uri, desired: additionalCapabilities);
+}
+
+String get testPagePath {
var testSrcDir = Platform.environment['TEST_SRCDIR'];
String testPagePath;
if (testSrcDir != null) {
@@ -43,5 +44,5 @@
throw new Exception('Could not find the test file at "$testPagePath".'
' Make sure you are running tests from the root of the project.');
}
- test_util.testPagePath = path.toUri(testPagePath).toString();
+ return path.toUri(testPagePath).toString();
}
diff --git a/test/src/keyboard.dart b/test/keyboard_test.dart
similarity index 97%
rename from test/src/keyboard.dart
rename to test/keyboard_test.dart
index 745ad6a..c2bb724 100644
--- a/test/src/keyboard.dart
+++ b/test/keyboard_test.dart
@@ -19,9 +19,9 @@
import 'package:test/test.dart';
import 'package:webdriver/core.dart';
-import '../test_util.dart';
+import 'test_util.dart';
-void runTests() {
+void main() {
group('Keyboard', () {
WebDriver driver;
WebElement textInput;
diff --git a/test/src/logs.dart b/test/logs_test.dart
similarity index 96%
rename from test/src/logs.dart
rename to test/logs_test.dart
index af81378..963ff67 100644
--- a/test/src/logs.dart
+++ b/test/logs_test.dart
@@ -17,9 +17,9 @@
import 'package:test/test.dart';
import 'package:webdriver/core.dart';
-import '../test_util.dart';
+import 'test_util.dart';
-void runTests() {
+void main() {
group('Logs', () {
WebDriver driver;
diff --git a/test/src/mouse.dart b/test/mouse_test.dart
similarity index 97%
rename from test/src/mouse.dart
rename to test/mouse_test.dart
index 4c5327c..fb25783 100644
--- a/test/src/mouse.dart
+++ b/test/mouse_test.dart
@@ -17,9 +17,9 @@
import 'package:test/test.dart';
import 'package:webdriver/core.dart';
-import '../test_util.dart';
+import 'test_util.dart';
-void runTests() {
+void main() {
group('Mouse', () {
WebDriver driver;
WebElement button;
diff --git a/test/src/navigation.dart b/test/navigation_test.dart
similarity index 96%
rename from test/src/navigation.dart
rename to test/navigation_test.dart
index 9572372..121717e 100644
--- a/test/src/navigation.dart
+++ b/test/navigation_test.dart
@@ -18,9 +18,9 @@
import 'package:webdriver/support/async.dart';
import 'package:webdriver/core.dart';
-import '../test_util.dart';
+import 'test_util.dart';
-void runTests() {
+void main() {
group('Navigation', () {
WebDriver driver;
diff --git a/test/src/options.dart b/test/options_test.dart
similarity index 97%
rename from test/src/options.dart
rename to test/options_test.dart
index c1ff723..82b0180 100644
--- a/test/src/options.dart
+++ b/test/options_test.dart
@@ -17,9 +17,9 @@
import 'package:test/test.dart';
import 'package:webdriver/core.dart';
-import '../test_util.dart';
+import 'test_util.dart';
-void runTests() {
+void main() {
group('Cookies', () {
WebDriver driver;
diff --git a/test/src/target_locator.dart b/test/target_locator_test.dart
similarity index 96%
rename from test/src/target_locator.dart
rename to test/target_locator_test.dart
index 0a0940f..82995cf 100644
--- a/test/src/target_locator.dart
+++ b/test/target_locator_test.dart
@@ -17,13 +17,13 @@
import 'package:test/test.dart';
import 'package:webdriver/core.dart';
-import '../test_util.dart';
+import 'test_util.dart';
/**
* Tests for switchTo.frame(). switchTo.window() and switchTo.alert are tested
* in other classes.
*/
-void runTests() {
+void main() {
group('TargetLocator', () {
WebDriver driver;
WebElement frame;
diff --git a/test/test_util.dart b/test/test_util.dart
index d32901b..34bdff7 100644
--- a/test/test_util.dart
+++ b/test/test_util.dart
@@ -24,11 +24,10 @@
final Matcher isRectangle = new isInstanceOf<Rectangle<int>>();
final Matcher isPoint = new isInstanceOf<Point<int>>();
-String testPagePath;
+Future<WebDriver> createTestDriver({Map<String, dynamic> additionalCapabilities}) async {
+ throw new Exception("createTestDriverFn is not implemented.");
+}
-typedef Future<WebDriver> createTestDriverFn(
- {Map<String, dynamic> additionalCapabilities});
-
-createTestDriverFn createTestDriver;
-
-bool runningOnTravis;
+String get testPagePath {
+ throw new Exception("testPagePath is not implemented.");
+}
diff --git a/test/src/web_driver.dart b/test/web_driver_test.dart
similarity index 98%
rename from test/src/web_driver.dart
rename to test/web_driver_test.dart
index bf6e7a9..dd6161e 100644
--- a/test/src/web_driver.dart
+++ b/test/web_driver_test.dart
@@ -19,9 +19,9 @@
import 'package:test/test.dart';
import 'package:webdriver/core.dart';
-import '../test_util.dart';
+import 'test_util.dart';
-void runTests() {
+void main() {
group('WebDriver', () {
group('create', () {
test('default', () async {
diff --git a/test/src/web_element.dart b/test/web_element_test.dart
similarity index 98%
rename from test/src/web_element.dart
rename to test/web_element_test.dart
index 06193a5..6f51028 100644
--- a/test/src/web_element.dart
+++ b/test/web_element_test.dart
@@ -17,9 +17,9 @@
import 'package:test/test.dart';
import 'package:webdriver/core.dart';
-import '../test_util.dart';
+import 'test_util.dart';
-void runTests() {
+void main() {
group('WebElement', () {
WebDriver driver;
WebElement table;
diff --git a/test/src/window.dart b/test/window_test.dart
similarity index 97%
rename from test/src/window.dart
rename to test/window_test.dart
index 15a7672..86432e0 100644
--- a/test/src/window.dart
+++ b/test/window_test.dart
@@ -20,9 +20,9 @@
import 'package:webdriver/support/async.dart';
import 'package:webdriver/core.dart';
-import '../test_util.dart';
+import 'test_util.dart';
-void runTests() {
+void main() {
group('Window', () {
WebDriver driver;