blob: 85b7cb9b1d3eaf63a2f1e7f0cf012b17d64535e0 [file] [log] [blame] [edit]
load("@rules_ruby//ruby:defs.bzl", "rb_library", "rb_test")
load(
"//common:browsers.bzl",
"COMMON_TAGS",
"chrome_beta_data",
"chrome_data",
"edge_data",
"firefox_beta_data",
"firefox_data",
)
BROWSERS = {
"chrome": {
"data": chrome_data,
"deps": ["//rb/lib/selenium/webdriver:chrome"],
"tags": [],
"target_compatible_with": [],
"env": {
"WD_REMOTE_BROWSER": "chrome",
"WD_SPEC_DRIVER": "chrome",
} | select({
"@selenium//common:use_pinned_linux_chrome": {
"CHROME_BINARY": "$(location @linux_chrome//:chrome-linux64/chrome)",
"CHROMEDRIVER_BINARY": "$(location @linux_chromedriver//:chromedriver)",
},
"@selenium//common:use_pinned_macos_chrome": {
"CHROME_BINARY": "$(location @mac_chrome//:Chrome.app)/Contents/MacOS/Chrome",
"CHROMEDRIVER_BINARY": "$(location @mac_chromedriver//:chromedriver)",
},
"//conditions:default": {},
}) | select({
"@selenium//common:use_headless_browser": {"HEADLESS": "true"},
"//conditions:default": {},
}),
},
"chrome-beta": {
"data": chrome_beta_data,
"deps": ["//rb/lib/selenium/webdriver:chrome"],
"tags": [],
"target_compatible_with": [],
"env": {
"WD_REMOTE_BROWSER": "chrome",
"WD_SPEC_DRIVER": "chrome",
"WD_BROWSER_VERSION": "beta",
} | select({
"@selenium//common:use_pinned_linux_chrome": {
"CHROME_BINARY": "$(location @linux_beta_chrome//:chrome-linux64/chrome)",
"CHROMEDRIVER_BINARY": "$(location @linux_beta_chromedriver//:chromedriver)",
},
"@selenium//common:use_pinned_macos_chrome": {
"CHROME_BINARY": "$(location @mac_beta_chrome//:Chrome.app)/Contents/MacOS/Chrome",
"CHROMEDRIVER_BINARY": "$(location @mac_beta_chromedriver//:chromedriver)",
},
"//conditions:default": {},
}) | select({
"@selenium//common:use_headless_browser": {"HEADLESS": "true"},
"//conditions:default": {},
}),
},
"edge": {
"data": edge_data,
"deps": ["//rb/lib/selenium/webdriver:edge"],
"tags": [],
"target_compatible_with": [],
"env": {
"WD_REMOTE_BROWSER": "edge",
"WD_SPEC_DRIVER": "edge",
} | select({
"@selenium//common:use_pinned_linux_edge": {
"EDGE_BINARY": "$(location @linux_edge//:opt/microsoft/msedge/microsoft-edge)",
"MSEDGEDRIVER_BINARY": "$(location @linux_edgedriver//:msedgedriver)",
},
"@selenium//common:use_pinned_macos_edge": {
"EDGE_BINARY": "$(location @mac_edge//:Edge.app)/Contents/MacOS/Microsoft\\ Edge",
"MSEDGEDRIVER_BINARY": "$(location @mac_edgedriver//:msedgedriver)",
},
"//conditions:default": {},
}) | select({
"@selenium//common:use_headless_browser": {"HEADLESS": "true"},
"//conditions:default": {},
}),
},
"firefox": {
"data": firefox_data,
"deps": ["//rb/lib/selenium/webdriver:firefox"],
"tags": [],
"target_compatible_with": [],
"env": {
"WD_REMOTE_BROWSER": "firefox",
"WD_SPEC_DRIVER": "firefox",
} | select({
"@selenium//common:use_pinned_linux_firefox": {
"FIREFOX_BINARY": "$(location @linux_firefox//:firefox/firefox)",
"GECKODRIVER_BINARY": "$(location @linux_geckodriver//:geckodriver)",
},
"@selenium//common:use_pinned_macos_firefox": {
"FIREFOX_BINARY": "$(location @mac_firefox//:Firefox.app)/Contents/MacOS/firefox",
"GECKODRIVER_BINARY": "$(location @mac_geckodriver//:geckodriver)",
},
"//conditions:default": {},
}) | select({
"@selenium//common:use_headless_browser": {"HEADLESS": "true"},
"//conditions:default": {},
}),
},
"firefox-beta": {
"data": firefox_beta_data,
"deps": ["//rb/lib/selenium/webdriver:firefox"],
"tags": [],
"target_compatible_with": [],
"env": {
"WD_REMOTE_BROWSER": "firefox",
"WD_SPEC_DRIVER": "firefox",
} | select({
"@selenium//common:use_pinned_linux_firefox": {
"FIREFOX_BINARY": "$(location @linux_beta_firefox//:firefox/firefox)",
"GECKODRIVER_BINARY": "$(location @linux_geckodriver//:geckodriver)",
},
"@selenium//common:use_pinned_macos_firefox": {
"FIREFOX_BINARY": "$(location @mac_beta_firefox//:Firefox.app)/Contents/MacOS/firefox",
"GECKODRIVER_BINARY": "$(location @mac_geckodriver//:geckodriver)",
},
"//conditions:default": {},
}) | select({
"@selenium//common:use_headless_browser": {"HEADLESS": "true"},
"//conditions:default": {},
}),
},
"ie": {
"data": [],
"deps": ["//rb/lib/selenium/webdriver:ie"],
"tags": [
"skip-rbe", # RBE is Linux-only.
],
"target_compatible_with": ["@platforms//os:windows"],
"env": {
"WD_REMOTE_BROWSER": "ie",
"WD_SPEC_DRIVER": "ie",
},
},
"safari": {
"data": [],
"deps": ["//rb/lib/selenium/webdriver:safari"],
"tags": [
"exclusive-if-local", # Safari cannot run in parallel.
"skip-rbe", # RBE is Linux-only.
],
"target_compatible_with": ["@platforms//os:macos"],
"env": {
"WD_REMOTE_BROWSER": "safari",
"WD_SPEC_DRIVER": "safari",
},
},
"safari-preview": {
"data": [],
"deps": ["//rb/lib/selenium/webdriver:safari"],
"tags": [
"exclusive-if-local", # Safari cannot run in parallel.
"skip-rbe", # RBE is Linux-only.
],
"target_compatible_with": ["@platforms//os:macos"],
"env": {
"WD_REMOTE_BROWSER": "safari-preview",
"WD_SPEC_DRIVER": "safari-preview",
},
},
}
def rb_integration_test(name, srcs, deps = [], data = [], browsers = BROWSERS.keys(), tags = []):
# Generate a library target that is used by //rb/spec:spec to expose all tests to //rb:lint.
rb_library(
name = name,
srcs = srcs,
visibility = ["//rb:__subpackages__"],
)
for browser in browsers:
# Generate a test target for local browser execution.
rb_test(
name = "{}-{}".format(name, browser),
size = "large",
srcs = srcs,
args = ["rb/spec/"],
data = BROWSERS[browser]["data"] + data + ["//common/src/web"],
env = BROWSERS[browser]["env"],
main = "@bundle//bin:rspec",
tags = COMMON_TAGS + BROWSERS[browser]["tags"] + tags + [browser],
deps = ["//rb/spec/integration/selenium/webdriver:spec_helper"] + BROWSERS[browser]["deps"] + deps,
visibility = ["//rb:__subpackages__"],
target_compatible_with = BROWSERS[browser]["target_compatible_with"],
)
# Generate a test target for remote browser execution (Grid).
rb_test(
name = "{}-{}-remote".format(name, browser),
size = "large",
srcs = srcs,
args = ["rb/spec/"],
data = BROWSERS[browser]["data"] + data + [
"//common/src/web",
"//java/src/org/openqa/selenium/grid:selenium_server_deploy.jar",
"//rb/spec:java-location",
"@bazel_tools//tools/jdk:current_java_runtime",
],
env = BROWSERS[browser]["env"] | {
"WD_BAZEL_JAVA_LOCATION": "$(rootpath //rb/spec:java-location)",
"WD_SPEC_DRIVER": "remote",
},
main = "@bundle//bin:rspec",
tags = COMMON_TAGS + BROWSERS[browser]["tags"] + tags + ["{}-remote".format(browser)],
deps = ["//rb/spec/integration/selenium/webdriver:spec_helper"] + BROWSERS[browser]["deps"] + deps,
visibility = ["//rb:__subpackages__"],
target_compatible_with = BROWSERS[browser]["target_compatible_with"],
)
# Generate a test target for bidi browser execution.
rb_test(
name = "{}-{}-bidi".format(name, browser),
size = "large",
srcs = srcs,
args = ["rb/spec/"],
data = BROWSERS[browser]["data"] + data + ["//common/src/web"],
env = BROWSERS[browser]["env"] | {"WEBDRIVER_BIDI": "true"},
main = "@bundle//bin:rspec",
tags = COMMON_TAGS + BROWSERS[browser]["tags"] + tags + ["{}-bidi".format(browser)],
deps = depset(
["//rb/spec/integration/selenium/webdriver:spec_helper", "//rb/lib/selenium/webdriver:bidi"] +
BROWSERS[browser]["deps"] +
deps,
),
visibility = ["//rb:__subpackages__"],
target_compatible_with = BROWSERS[browser]["target_compatible_with"],
)
def rb_unit_test(name, srcs, deps, data = []):
rb_test(
name = name,
size = "small",
srcs = srcs,
args = ["rb/spec/"],
main = "@bundle//bin:rspec",
data = data,
tags = ["no-sandbox"], # TODO: Do we need this?
deps = ["//rb/spec/unit/selenium/webdriver:spec_helper"] + deps,
visibility = ["//rb:__subpackages__"],
)