Skip to content

Commit 6f3c4cb

Browse files
authored
Merge pull request #258 from hjwp/chap-16-js
Update Javascript Chapter to use jasmine
2 parents f0d6b97 + 9d2df6c commit 6f3c4cb

9 files changed

+793
-481
lines changed

chapter_16_javascript.asciidoc

Lines changed: 719 additions & 480 deletions
Large diffs are not rendered by default.

images/editing-html-via-devtools.png

366 KB
Loading
56.7 KB
Loading

images/jasmine-in-browser-green.png

149 KB
Loading

images/jasmine-in-browser-red.png

201 KB
Loading
62.2 KB
Loading

pyproject.toml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,3 +50,8 @@ ignore = [
5050
"E741", # single-letter variable
5151
"PLR2004", # magic values
5252
]
53+
54+
[tool.pyright]
55+
# these help pyright in neovide to find its way around
56+
venvPath = "."
57+
venv = ".venv"

tests/run-js-spec.py

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
#!python
2+
import re
3+
import sys
4+
import time
5+
from pathlib import Path
6+
7+
from selenium import webdriver
8+
from selenium.webdriver.common.by import By
9+
from selenium.webdriver.remote.webelement import WebElement
10+
11+
12+
def sub_book_path(text: str) -> str:
13+
return re.sub(
14+
r"@file://(.+)/superlists/src/",
15+
".../goat-book/src/",
16+
text,
17+
)
18+
19+
20+
def run(path: Path):
21+
assert path.exists()
22+
23+
options = webdriver.FirefoxOptions()
24+
options.add_argument("--headless")
25+
browser = webdriver.Firefox(options=options)
26+
failed = False
27+
28+
def _el_text(sel, node: webdriver.Remote | WebElement = browser):
29+
return "\n".join(el.text for el in node.find_elements(By.CSS_SELECTOR, sel))
30+
31+
try:
32+
browser.get(f"file:///{path}?seed=12345")
33+
time.sleep(0.2)
34+
35+
print(
36+
f"{_el_text('.jasmine-overall-result')}\t\t{_el_text('.jasmine-duration')}"
37+
)
38+
39+
print(_el_text(".jasmine-menu.jasmine-failure-list"))
40+
for failures_el in browser.find_elements(By.CSS_SELECTOR, ".jasmine-failures"):
41+
for spec_failure in failures_el.find_elements(
42+
By.CSS_SELECTOR, ".jasmine-spec-detail.jasmine-failed"
43+
):
44+
failed = True
45+
print()
46+
print(_el_text(".jasmine-description", spec_failure))
47+
print(_el_text(".jasmine-messages", spec_failure))
48+
49+
for success_el in browser.find_elements(By.CSS_SELECTOR, ".jasmine-summary"):
50+
for suite_el in success_el.find_elements(By.CSS_SELECTOR, ".jasmine-suite"):
51+
if suite_el.is_displayed():
52+
print(_el_text("li.jasmine-suite-detail", suite_el))
53+
for spec_el in suite_el.find_elements(
54+
By.CSS_SELECTOR, "ul.jasmine-specs li.jasmine-passed"
55+
):
56+
print(" * " + spec_el.text)
57+
58+
finally:
59+
browser.quit()
60+
return failed
61+
62+
63+
if __name__ == "__main__":
64+
_, fn, *__ = sys.argv
65+
if fn.endswith("Spec.js"):
66+
fn = fn.replace("Spec.js", "SpecRunner.html")
67+
failed = run(Path(fn).resolve())
68+
sys.exit(1 if failed is True else 0)

0 commit comments

Comments
 (0)