Skip to content

Commit

Permalink
WIP: attempt to hook node runner script into bazel
Browse files Browse the repository at this point in the history
  • Loading branch information
mmalerba committed Apr 1, 2021
1 parent 80bb87d commit 43bb4e3
Show file tree
Hide file tree
Showing 4 changed files with 102 additions and 17 deletions.
14 changes: 13 additions & 1 deletion tools/webdriver/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
load("@build_bazel_rules_nodejs//:index.bzl", "nodejs_binary")
load("//tools:defaults.bzl", "ts_library")

package(default_visibility = ["//visibility:public"])

Expand All @@ -7,7 +8,18 @@ sh_library(
srcs = ["run-webdriver-test.sh"],
)

ts_library(
name = "sources",
srcs = ["run-webdriver-test.ts"],
deps = ["@npm//@types/node"],
tsconfig = ":tsconfig.json",
)

nodejs_binary(
name = "run-webdriver-test-platform-independent",
entry_point = "run-webdriver-test.ts",
entry_point = ":run-webdriver-test.ts",
data = [":sources"],
# TODO(josephperrott): update dependency usages to no longer need bazel patch module resolver
# See: https://github.com/bazelbuild/rules_nodejs/wiki#--bazel_patch_module_resolver-now-defaults-to-false-2324
templated_args = ["--bazel_patch_module_resolver"],
)
13 changes: 8 additions & 5 deletions tools/webdriver/run-webdriver-test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,8 @@ async function waitForPortBound(port: number, timeout: number): Promise<boolean>
async function runTest(serverTarget: string, testTarget: string) {
let server: child_process.ChildProcess | null = null;
return new Promise<void>(async (resolve, reject) => {
const serverPath = runfiles.resolve(`angular_material/${serverTarget}`);
const testPath = runfiles.resolve(`angular_material/${testTarget}`);
const serverPath = runfiles.resolve(`/${serverTarget}`);
const testPath = runfiles.resolve(`/${testTarget}`);
const port = await getRandomFreePort();
process.env['E2E_APP_PORT'] = `${port}`;

Expand All @@ -83,6 +83,9 @@ async function runTest(serverTarget: string, testTarget: string) {
}).finally(() => server?.kill());
}

runTest(process.argv[0], process.argv[1])
.then(() => process.exit())
.catch(() => process.exit(1));
if (require.main === module) {
console.error(process.argv);
runTest(process.argv[2], process.argv[3])
.then(() => process.exit())
.catch(() => process.exit(1));
}
17 changes: 17 additions & 0 deletions tools/webdriver/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"compilerOptions": {
"noUnusedParameters": false,
"noUnusedLocals": false,
"lib": ["es2015", "dom", "es2016.array.include"],
"moduleResolution": "node",
"strictNullChecks": true,
"noImplicitReturns": true,
"strictFunctionTypes": true,
"noImplicitThis": true,
"noImplicitAny": true,
"target": "es2015",
"types": [
"node"
]
}
}
75 changes: 64 additions & 11 deletions tools/webdriver/webdriver.bzl
Original file line number Diff line number Diff line change
@@ -1,6 +1,51 @@
load("//tools:defaults.bzl", "jasmine_node_test")
load("@io_bazel_rules_webtesting//web:web.bzl", "web_test")

def _webdriver_test_impl(ctx):
executable = ctx.actions.declare_file(ctx.label.name)
args = ctx.actions.args()
args.add(ctx.executable.server)
args.add(ctx.executable.test)
tools = [
ctx.executable.server,
ctx.executable.test,
ctx.executable._runner,
]

ctx.actions.run(
outputs = [executable],
tools = [ctx.executable.server, ctx.executable.test, ctx.executable._runner],
arguments = [args],
executable = ctx.executable._runner,
)

return [
DefaultInfo(
executable = executable,
runfiles = ctx.runfiles(files = tools)
),
]

webdriver_test = rule(
implementation = _webdriver_test_impl,
test = True,
attrs = {
"server": attr.label(
executable = True,
cfg = "exec",
),
"test": attr.label(
executable = True,
cfg = "exec",
),
"_runner": attr.label(
executable = True,
cfg = "exec",
default = Label("//tools/webdriver:run-webdriver-test-platform-independent"),
),
},
)

def webdriver_e2e_test(name, deps, browser, tags = [], **kwargs):
jasmine_node_test(
name = "%s_jasmine_node_test" % name,
Expand All @@ -19,18 +64,26 @@ def webdriver_e2e_test(name, deps, browser, tags = [], **kwargs):
test = ":%s_jasmine_node_test" % name,
)

native.sh_test(
webdriver_test(
name = name,
testonly = True,
srcs = ["//tools/webdriver:run-webdriver-test"],
args = [
"$(location //src/e2e-app:devserver)",
"$(location :%s_web_test)" % name,
],
data = [
":%s_web_test" % name,
"//src/e2e-app:devserver",
],
server = "//src/e2e-app:devserver",
test = ":%s_web_test" % name,
tags = tags + ["e2e"],
deps = ["@bazel_tools//tools/bash/runfiles"],
)

# native.sh_test(
# name = name,
# testonly = True,
# srcs = ["//tools/webdriver:run-webdriver-test"],
# args = [
# "$(location //src/e2e-app:devserver)",
# "$(location :%s_web_test)" % name,
# ],
# data = [
# ":%s_web_test" % name,
# "//src/e2e-app:devserver",
# ],
# tags = tags + ["e2e"],
# deps = ["@bazel_tools//tools/bash/runfiles"],
# )

0 comments on commit 43bb4e3

Please sign in to comment.