Skip to content

Commit 35a344c

Browse files
committed
feat(protractor): add protractor rule
Copied over from angular/angular repo under packages/bazel
1 parent 8c14866 commit 35a344c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+2213
-288
lines changed

.bazelci/presubmit.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ tasks:
1717
- "@bazel_workspace_b//subdir:bin"
1818
build_targets:
1919
- "//..."
20+
test_flags:
21+
- "--test_tag_filters=-fix-bazelci-ubuntu"
2022
test_targets:
2123
- "//..."
2224
ubuntu1804:
@@ -39,6 +41,8 @@ tasks:
3941
# This target is tagged "manual" but we want some CI
4042
# coverage of it to make sure it doesn't break.
4143
- "//docs"
44+
test_flags:
45+
- "--test_tag_filters=-fix-bazelci-ubuntu"
4246
test_targets:
4347
- "//..."
4448
macos:

.circleci/config.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,13 @@ var_4: &init_environment
2020
# Setup circleci environment
2121
./.circleci/env.sh
2222
23+
# Install GTK+ graphical user interface (libgtk-3-0), advanced linux sound architecture (libasound2)
24+
# and network security service libraries (libnss3) & X11 Screen Saver extension library (libssx1)
25+
# which are dependendies of chrome & needed for karma & protractor headless chrome tests.
26+
# This is a very small install with the whole init_environment step taking less than 8 seconds.
27+
sudo apt-get update
28+
sudo apt-get -y install libgtk-3-0 libasound2 libnss3 libxss1
29+
2330
# Overwrite the yarn installed in the docker container with our own version.
2431
pathToYarn=$(realpath ./third_party/github.com/yarnpkg/yarn/releases/download/v1.13.0/bin/yarn.js)
2532
sudo chmod a+x $pathToYarn
@@ -203,6 +210,7 @@ jobs:
203210
- ./rules_nodejs/dist/npm_bazel_labs
204211
- ./rules_nodejs/dist/npm_bazel_hide-bazel-files
205212
- ./rules_nodejs/dist/npm_bazel_create
213+
- ./rules_nodejs/dist/npm_bazel_protractor
206214

207215
# This job cannot run on BuildKite (BazelCI) because it requires changing
208216
# directories to test inside nested workspaces.

WORKSPACE

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,11 @@ local_repository(
6262
path = "packages/labs/src",
6363
)
6464

65+
local_repository(
66+
name = "npm_bazel_protractor",
67+
path = "packages/protractor/src",
68+
)
69+
6570
local_repository(
6671
name = "npm_bazel_typescript",
6772
path = "packages/typescript/src",
@@ -160,6 +165,17 @@ load("@npm_bazel_karma//:package.bzl", "rules_karma_dependencies")
160165

161166
rules_karma_dependencies()
162167

168+
# Setup the rules_webtesting toolchain
169+
load("@io_bazel_rules_webtesting//web:repositories.bzl", "web_test_repositories")
170+
171+
web_test_repositories()
172+
173+
# Temporary work-around for https://github.com/angular/angular/issues/28681
174+
# TODO(gregmagolan): go back to @io_bazel_rules_webtesting browser_repositories
175+
load("@npm_bazel_karma//:browser_repositories.bzl", "browser_repositories")
176+
177+
browser_repositories()
178+
163179
#
164180
# Dependencies to run skydoc & generating documentation
165181
#

commitlint.config.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ module.exports = {
1414
'jasmine',
1515
'karma',
1616
'labs',
17+
'protractor',
1718
'rollup',
1819
'typescript',
1920
]

examples/app/BUILD.bazel

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
load("@build_bazel_rules_nodejs//:defs.bzl", "http_server", "rollup_bundle")
22
load("@build_bazel_rules_nodejs//internal/web_package:web_package.bzl", "web_package")
3+
load("@npm_bazel_protractor//:index.bzl", "protractor_web_test_suite")
34
load("@npm_bazel_typescript//:index.bzl", "ts_config", "ts_devserver", "ts_library")
45

6+
package(default_visibility = ["//visibility:public"])
7+
58
ts_library(
69
name = "app",
710
srcs = ["app.ts"],
@@ -10,9 +13,6 @@ ts_library(
1013
ts_devserver(
1114
name = "devserver",
1215
index_html = "index.html",
13-
port = 8080,
14-
# Expose this to other examples, so we can test visibility of generated manifest file
15-
visibility = ["//:__subpackages__"],
1616
# We'll collect all the devmode JS sources from these TypeScript libraries
1717
deps = [":app"],
1818
)
@@ -37,11 +37,7 @@ web_package(
3737
http_server(
3838
name = "prodserver",
3939
data = [":package"],
40-
templated_args = [
41-
"package",
42-
"-p",
43-
"8080",
44-
],
40+
templated_args = ["package"],
4541
)
4642

4743
ts_config(
@@ -53,11 +49,25 @@ ts_config(
5349
ts_library(
5450
name = "e2e",
5551
testonly = 1,
56-
srcs = ["app_e2e_test.ts"],
52+
srcs = ["app.e2e-spec.ts"],
5753
tsconfig = ":tsconfig-test",
5854
deps = [
5955
"@npm//@types/jasmine",
60-
"@npm//@types/node",
56+
"@npm//jasmine",
6157
"@npm//protractor",
6258
],
6359
)
60+
61+
protractor_web_test_suite(
62+
name = "prodserver_test",
63+
on_prepare = ":protractor.on-prepare.js",
64+
server = "//:prodserver",
65+
deps = [":e2e"],
66+
)
67+
68+
protractor_web_test_suite(
69+
name = "devserver_test",
70+
on_prepare = ":protractor.on-prepare.js",
71+
server = "//:devserver",
72+
deps = [":e2e"],
73+
)

examples/app/WORKSPACE

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,3 +44,18 @@ install_bazel_dependencies()
4444
load("@npm_bazel_typescript//:index.bzl", "ts_setup_workspace")
4545

4646
ts_setup_workspace()
47+
48+
load("@npm_bazel_protractor//:package.bzl", "npm_bazel_protractor_dependencies")
49+
50+
npm_bazel_protractor_dependencies()
51+
52+
# Setup the rules_webtesting toolchain
53+
load("@io_bazel_rules_webtesting//web:repositories.bzl", "web_test_repositories")
54+
55+
web_test_repositories()
56+
57+
# Temporary work-around for https://github.com/angular/angular/issues/28681
58+
# TODO(gregmagolan): go back to @io_bazel_rules_webtesting browser_repositories
59+
load("@npm_bazel_protractor//:browser_repositories.bzl", "browser_repositories")
60+
61+
browser_repositories()
File renamed without changes.

examples/app/package.json

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,12 @@
11
{
22
"devDependencies": {
33
"@bazel/hide-bazel-files": "file:../../dist/npm_bazel_hide-bazel-files",
4+
"@bazel/protractor": "file:../../dist/npm_bazel_protractor",
45
"@bazel/typescript": "file:../../dist/npm_bazel_typescript",
5-
"@types/jasmine": "2.8.2",
6-
"@types/node": "7.0.18",
7-
"concurrently": "^3.5.1",
8-
"jasmine": "2.8.0",
9-
"protractor": "^5.4.2",
6+
"@types/jasmine": "3.3.15",
107
"typescript": "2.7.x"
118
},
129
"scripts": {
13-
"pretest": "bazel run @nodejs//:yarn && webdriver-manager update --standalone false --gecko false $CHROMEDRIVER_VERSION_ARG",
14-
"e2e-devserver": "concurrently \"bazel run //:devserver\" \"while ! nc -z 127.0.0.1 8080; do sleep 1; done && protractor\" --kill-others --success first",
15-
"e2e-prodserver": "concurrently \"bazel run //:prodserver\" \"while ! nc -z 127.0.0.1 8080; do sleep 1; done && protractor\" --kill-others --success first",
16-
"test": "bazel build ... && yarn e2e-devserver && yarn e2e-prodserver"
10+
"test": "bazel test ..."
1711
}
1812
}

examples/app/protractor.conf.js

Lines changed: 0 additions & 7 deletions
This file was deleted.

examples/app/protractor.on-prepare.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// The function exported from this file is used by the protractor_web_test_suite.
2+
// It is passed to the `onPrepare` configuration setting in protractor and executed
3+
// before running tests.
4+
//
5+
// If the function returns a promise, as it does here, protractor will wait
6+
// for the promise to resolve before running tests.
7+
8+
const protractorUtils = require('@bazel/protractor/protractor-utils');
9+
const protractor = require('protractor');
10+
11+
module.exports = function(config) {
12+
// In this example, `@bazel/protractor/protractor-utils` is used to run
13+
// the server. protractorUtils.runServer() runs the server on a randomly
14+
// selected port (given a port flag to pass to the server as an argument).
15+
// The port used is returned in serverSpec and the protractor serverUrl
16+
// is the configured.
17+
const isProdserver = config.server.endsWith('prodserver');
18+
return protractorUtils
19+
.runServer(config.workspace, config.server, isProdserver ? '-p' : '-port', [])
20+
.then(serverSpec => {
21+
protractor.browser.baseUrl = `http://localhost:${serverSpec.port}`;
22+
});
23+
};

0 commit comments

Comments
 (0)