feat(protractor): protractor npm package is now a peer deps (#1352)
Also cleanup us arguments and doc string for protractor_web_test_suite.
BREAKING CHANGES:
npm protractor deps for protractor_web_test and protractor_web_test_suite is now a peer dep so that the versions used can be chosen by the user.
diff --git a/e2e/ts_devserver/package.json b/e2e/ts_devserver/package.json
index ac78aae..bd66da7 100644
--- a/e2e/ts_devserver/package.json
+++ b/e2e/ts_devserver/package.json
@@ -7,6 +7,7 @@
"@types/node": "7.0.18",
"date-fns": "1.30.1",
"jasmine": "2.8.0",
+ "protractor": "^5.4.2",
"rxjs": "^6.5.2",
"typeorm": "^0.2.17",
"typescript": "2.7.x"
diff --git a/examples/angular/package.json b/examples/angular/package.json
index 75f6740..b5a9a47 100644
--- a/examples/angular/package.json
+++ b/examples/angular/package.json
@@ -53,6 +53,7 @@
"karma-requirejs": "1.1.0",
"karma-sourcemap-loader": "0.3.7",
"requirejs": "2.3.6",
+ "protractor": "^5.4.2",
"rollup": "^1.21.4",
"rollup-plugin-commonjs": "^10.1.0",
"rollup-plugin-node-resolve": "^5.2.0",
diff --git a/examples/angular_view_engine/package.json b/examples/angular_view_engine/package.json
index 9e927ba..03462b9 100644
--- a/examples/angular_view_engine/package.json
+++ b/examples/angular_view_engine/package.json
@@ -53,6 +53,7 @@
"karma-requirejs": "1.1.0",
"karma-sourcemap-loader": "0.3.7",
"patch-package": "^6.2.0",
+ "protractor": "^5.4.2",
"requirejs": "2.3.6",
"rollup": "^1.21.4",
"rollup-plugin-amd": "^4.0.0",
diff --git a/examples/app/package.json b/examples/app/package.json
index be85b4a..44b744a 100644
--- a/examples/app/package.json
+++ b/examples/app/package.json
@@ -8,6 +8,7 @@
"@types/jasmine": "3.3.15",
"http-server": "^0.11.1",
"less": "^3.10.3",
+ "protractor": "^5.4.2",
"rollup": "1.20.3",
"stylus": "^0.54.7",
"terser": "4.3.1",
diff --git a/examples/protocol_buffers/package.json b/examples/protocol_buffers/package.json
index eecd3aa..49e2823 100644
--- a/examples/protocol_buffers/package.json
+++ b/examples/protocol_buffers/package.json
@@ -19,6 +19,7 @@
"karma-sourcemap-loader": "0.3.7",
"long": "4.0.0",
"protobufjs": "5.0.3",
+ "protractor": "^5.4.2",
"requirejs": "2.3.6",
"rollup": "1.20.3",
"terser": "4.3.1",
diff --git a/examples/webapp/package.json b/examples/webapp/package.json
index f5c4ffc..e68b8d9 100644
--- a/examples/webapp/package.json
+++ b/examples/webapp/package.json
@@ -10,6 +10,7 @@
"@bazel/typescript": "^0.40.0",
"http-server": "^0.11.1",
"mocha": "^6.2.1",
+ "protractor": "^5.4.2",
"rollup": "1.21.4",
"source-map": "^0.7.3",
"terser": "^4.3.1",
diff --git a/packages/protractor/src/BUILD.bazel b/packages/protractor/src/BUILD.bazel
index 1de84e4..34e4ea2 100644
--- a/packages/protractor/src/BUILD.bazel
+++ b/packages/protractor/src/BUILD.bazel
@@ -40,7 +40,6 @@
"package.bzl",
"package.json",
"protractor.conf.js",
- "protractor.js",
"protractor_web_test.bzl",
],
)
diff --git a/packages/protractor/src/index.from_src.bzl b/packages/protractor/src/index.from_src.bzl
index 2cbdddd..6f69f23 100644
--- a/packages/protractor/src/index.from_src.bzl
+++ b/packages/protractor/src/index.from_src.bzl
@@ -21,27 +21,13 @@
_protractor_web_test_suite = "protractor_web_test_suite",
)
-INTERNAL_PROTRACTOR = "@npm//protractor"
-INTERNAL_PROTRACTOR_ENTRY_POINT = "@npm_bazel_protractor//:protractor.js"
+_PROTRACTOR_PEER_DEPS = [
+ "@npm_bazel_protractor//:utils_lib",
+ "@npm//protractor",
+]
def protractor_web_test(data = [], **kwargs):
- _protractor_web_test(
- # When there is no @npm//@bazel/protractor package we use @npm_bazel_protractor instead.
- # @npm_bazel_protractor//:utils_lib dependency must also be added manually since without a dep on
- # @npm//@bazel/protractor "@bazel/protractor/protractor-utils" will not resolve.
- data = data + ["@npm_bazel_protractor//:utils_lib"],
- protractor = INTERNAL_PROTRACTOR,
- protractor_entry_point = INTERNAL_PROTRACTOR_ENTRY_POINT,
- **kwargs
- )
+ _protractor_web_test(peer_deps = _PROTRACTOR_PEER_DEPS, **kwargs)
def protractor_web_test_suite(data = [], **kwargs):
- _protractor_web_test_suite(
- # When there is no @npm//@bazel/protractor package we use @npm_bazel_protractor instead.
- # @npm_bazel_protractor//:utils_lib dependency must also be added manually since without a dep on
- # @npm//@bazel/protractor "@bazel/protractor/protractor-utils" will not resolve.
- data = data + ["@npm_bazel_protractor//:utils_lib"],
- protractor = INTERNAL_PROTRACTOR,
- protractor_entry_point = INTERNAL_PROTRACTOR_ENTRY_POINT,
- **kwargs
- )
+ _protractor_web_test_suite(peer_deps = _PROTRACTOR_PEER_DEPS, **kwargs)
diff --git a/packages/protractor/src/package.json b/packages/protractor/src/package.json
index 3b17f5d..4a59fa6 100644
--- a/packages/protractor/src/package.json
+++ b/packages/protractor/src/package.json
@@ -15,9 +15,8 @@
"protractor",
"bazel"
],
- "main": "index.js",
- "dependencies": {
- "protractor": "^5.4.2"
+ "peerDependencies": {
+ "protractor": ">=5.0.0"
},
"bazelWorkspaces": {
"npm_bazel_protractor": {
diff --git a/packages/protractor/src/protractor.js b/packages/protractor/src/protractor.js
deleted file mode 100644
index 04bcf38..0000000
--- a/packages/protractor/src/protractor.js
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/env node
-
-require('protractor/bin/protractor');
diff --git a/packages/protractor/src/protractor_web_test.bzl b/packages/protractor/src/protractor_web_test.bzl
index 2819bcb..50bbcfe 100644
--- a/packages/protractor/src/protractor_web_test.bzl
+++ b/packages/protractor/src/protractor_web_test.bzl
@@ -19,9 +19,11 @@
load("@io_bazel_rules_webtesting//web:web.bzl", "web_test_suite")
load("@io_bazel_rules_webtesting//web/internal:constants.bzl", "DEFAULT_WRAPPED_TEST_TAGS")
-_CONF_TMPL = "//:protractor.conf.js"
-_DEFUALT_PROTRACTOR = "@npm//@bazel/protractor"
-_DEFUALT_PROTRACTOR_ENTRY_POINT = "@npm//:node_modules/@bazel/protractor/protractor.js"
+_PROTRACTOR_PEER_DEPS = [
+ "@npm//@bazel/protractor",
+ "@npm//protractor",
+]
+_PROTRACTOR_ENTRY_POINT = "@npm//:node_modules/protractor/bin/protractor"
# Avoid using non-normalized paths (workspace/../other_workspace/path)
def _to_manifest_path(ctx, file):
@@ -195,7 +197,7 @@
aspects = [node_modules_aspect],
),
"_conf_tmpl": attr.label(
- default = Label(_CONF_TMPL),
+ default = Label("//:protractor.conf.js"),
allow_single_file = True,
),
},
@@ -210,8 +212,8 @@
data = [],
server = None,
tags = [],
- protractor = _DEFUALT_PROTRACTOR,
- protractor_entry_point = _DEFUALT_PROTRACTOR_ENTRY_POINT,
+ peer_deps = _PROTRACTOR_PEER_DEPS,
+ protractor_entry_point = _PROTRACTOR_ENTRY_POINT,
**kwargs):
"""Runs a protractor test in a browser.
@@ -226,9 +228,10 @@
data: Runtime dependencies
server: Optional server executable target
tags: Standard Bazel tags, this macro adds one for ibazel
- protractor: A label providing the @bazel/protractor npm dependency.
- protractor_entry_point: A label providing the @bazel/protractor entry point.
- **kwargs: passed through to `_protractor_web_test`
+ peer_deps: List of peer npm deps required by protractor_web_test.
+ protractor_entry_point: A label providing the @npm//protractor entry point.
+ Default to `@npm//:node_modules/protractor/bin/protractor`.
+ **kwargs: passed through to `protractor_web_test`
"""
protractor_bin_name = name + "_protractor_bin"
@@ -236,7 +239,7 @@
nodejs_binary(
name = protractor_bin_name,
entry_point = protractor_entry_point,
- data = srcs + deps + data + [protractor],
+ data = srcs + deps + data + peer_deps,
testonly = 1,
visibility = ["//visibility:private"],
)
@@ -265,133 +268,76 @@
def protractor_web_test_suite(
name,
- configuration = None,
- on_prepare = None,
- srcs = [],
- deps = [],
- data = [],
- server = None,
browsers = None,
- args = None,
- browser_overrides = None,
- config = None,
- flaky = None,
- local = None,
- shard_count = None,
- size = None,
- tags = [],
- test_suite_tags = None,
- timeout = None,
- visibility = None,
web_test_data = [],
- wrapped_test_tags = None,
- protractor = _DEFUALT_PROTRACTOR,
- protractor_entry_point = _DEFUALT_PROTRACTOR_ENTRY_POINT,
- **remaining_keyword_args):
+ wrapped_test_tags = list(DEFAULT_WRAPPED_TEST_TAGS),
+ **kwargs):
"""Defines a test_suite of web_test targets that wrap a protractor_web_test target.
Args:
- name: The base name of the test.
- configuration: Protractor configuration file.
- on_prepare: A file with a node.js script to run once before all tests run.
- If the script exports a function which returns a promise, protractor
- will wait for the promise to resolve before beginning tests.
- srcs: JavaScript source files
- deps: Other targets which produce JavaScript such as `ts_library`
- data: Runtime dependencies
- server: Optional server executable target
+ name: The base name of the test
browsers: A sequence of labels specifying the browsers to use.
- args: Args for web_test targets generated by this extension.
- browser_overrides: Dictionary; optional; default is an empty dictionary. A
- dictionary mapping from browser names to browser-specific web_test
- attributes, such as shard_count, flakiness, timeout, etc. For example:
- {'//browsers:chrome-native': {'shard_count': 3, 'flaky': 1}
- '//browsers:firefox-native': {'shard_count': 1, 'timeout': 100}}.
- config: Label; optional; Configuration of web test features.
- flaky: A boolean specifying that the test is flaky. If set, the test will
- be retried up to 3 times (default: 0)
- local: boolean; optional.
- shard_count: The number of test shards to use per browser. (default: 1)
- size: A string specifying the test size. (default: 'large')
- tags: A list of test tag strings to apply to each generated web_test target.
- This macro adds a couple for ibazel.
- test_suite_tags: A list of tag strings for the generated test_suite.
- timeout: A string specifying the test timeout (default: computed from size)
- visibility: List of labels; optional.
- web_test_data: Data dependencies for the web_test.
- wrapped_test_tags: A list of test tag strings to use for the wrapped test
- protractor: Protractor entry_point. Defaults to @npm//:node_modules/protractor/bin/protractor
- but should be changed to @your_npm_workspace//:node_modules/protractor/bin/protractor if
- you are not using @npm for your npm dependencies.
- **remaining_keyword_args: Arguments for the wrapped test target.
+ web_test_data: Data dependencies for the wrapoer web_test targets.
+ wrapped_test_tags: A list of test tag strings to use for the wrapped
+ karma_web_test target.
+ **kwargs: Arguments for the wrapped karma_web_test target.
"""
- # Check explicitly for None so that users can set this to the empty list
- if wrapped_test_tags == None:
- wrapped_test_tags = DEFAULT_WRAPPED_TEST_TAGS
+ # Common attributes
+ args = kwargs.pop("args", None)
+ flaky = kwargs.pop("flaky", None)
+ local = kwargs.pop("local", None)
+ shard_count = kwargs.pop("shard_count", None)
+ size = kwargs.pop("size", "large")
+ timeout = kwargs.pop("timeout", None)
+ # Wrapper attributes
+ browser_overrides = kwargs.pop("browser_overrides", None)
+ config = kwargs.pop("config", None)
+ test_suite_tags = kwargs.pop("test_suite_tags", None)
+ visibility = kwargs.pop("visibility", None)
+ tags = kwargs.pop("tags", []) + [
+ # Users don't need to know that this tag is required to run under ibazel
+ "ibazel_notify_changes",
+ ]
if browsers == None:
browsers = ["@io_bazel_rules_webtesting//browsers:chromium-local"]
+
+ # rules_webesting requires the "native" tag for browsers
if not "native" in tags:
tags = tags + ["native"]
- size = size or "large"
-
+ # The wrapped `karma_web_test` target
wrapped_test_name = name + "_wrapped_test"
- protractor_bin_name = name + "_protractor_bin"
-
- # Users don't need to know that this tag is required to run under ibazel
- tags = tags + ["ibazel_notify_changes"]
-
- nodejs_binary(
- name = protractor_bin_name,
- entry_point = protractor_entry_point,
- data = srcs + deps + data + [protractor],
- testonly = 1,
- visibility = ["//visibility:private"],
- )
-
- # Our binary dependency must be in data[] for collect_data to pick it up
- # FIXME: maybe we can just ask the :protractor_bin_name for its runfiles attr
- web_test_data = web_test_data + [":" + protractor_bin_name]
- if server:
- web_test_data += [server]
-
- _protractor_web_test(
+ protractor_web_test(
name = wrapped_test_name,
- configuration = configuration,
- on_prepare = on_prepare,
- srcs = srcs,
- deps = deps,
- data = web_test_data,
- server = server,
- protractor = protractor_bin_name,
args = args,
flaky = flaky,
local = local,
shard_count = shard_count,
size = size,
- tags = wrapped_test_tags,
timeout = timeout,
+ tags = wrapped_test_tags,
visibility = ["//visibility:private"],
- **remaining_keyword_args
+ **kwargs
)
+ # The wrapper `web_test_suite` target
web_test_suite(
name = name,
- launcher = ":" + wrapped_test_name,
args = args,
+ flaky = flaky,
+ local = local,
+ shard_count = shard_count,
+ size = size,
+ timeout = timeout,
+ launcher = ":" + wrapped_test_name,
browsers = browsers,
browser_overrides = browser_overrides,
config = config,
data = web_test_data,
- flaky = flaky,
- local = local,
- shard_count = shard_count,
- size = size,
tags = tags,
test = wrapped_test_name,
test_suite_tags = test_suite_tags,
- timeout = timeout,
visibility = visibility,
)
diff --git a/packages/protractor/test/protractor-2/BUILD.bazel b/packages/protractor/test/protractor-2/BUILD.bazel
index 84d6d13..c3fa25f 100644
--- a/packages/protractor/test/protractor-2/BUILD.bazel
+++ b/packages/protractor/test/protractor-2/BUILD.bazel
@@ -54,7 +54,6 @@
tsconfig = ":tsconfig-test",
deps = [
"@npm//@types/jasmine",
- "@npm//@types/selenium-webdriver",
"@npm//protractor",
],
)
diff --git a/packages/protractor/test/protractor/BUILD.bazel b/packages/protractor/test/protractor/BUILD.bazel
index 8c6347f..6fcbdab 100644
--- a/packages/protractor/test/protractor/BUILD.bazel
+++ b/packages/protractor/test/protractor/BUILD.bazel
@@ -8,7 +8,6 @@
tsconfig = ":tsconfig.json",
deps = [
"@npm//@types/jasmine",
- "@npm//@types/selenium-webdriver",
"@npm//protractor",
],
)