#lang racket/base (require json "jsmaker-test-framework.rkt" "jsmaker-executors.rkt" "../demo/dom-exercises.rkt") (define (dom-preamble paragraph-text) (format #<]*>/g, ''); }, set textContent(v) { this.innerHTML = String(v); }, insertAdjacentHTML: (position, html) => { state.afterParagraph.push([position, html]); } }; const heading = { insertAdjacentHTML: (position, html) => { state.afterHeading.push([position, html]); } }; const document = { querySelector: (selector) => { if (selector === 'p') return paragraph; if (selector === 'h1') return heading; return false; } }; JS (jsexpr->string paragraph-text))) (define tests (list (js-program-test 'dom-ex01-highlight-long-words exercise01 "paragraph.innerHTML" (jsexpr->string "Short extraordinary words remain.") #:preamble (dom-preamble "Short extraordinary words remain.")) (js-program-test 'dom-ex02-add-source-link exercise02 "state.afterParagraph" (jsexpr->string '(("afterend" "Source: ForceM Ipsum"))) #:preamble (dom-preamble "Force ipsum text.")) (js-program-test 'dom-ex03-split-sentences exercise03 "paragraph.innerHTML" (jsexpr->string "First sentence.
Second sentence.
Third.
") #:preamble (dom-preamble "First sentence. Second sentence. Third.")) (js-program-test 'dom-ex04-count-words-after-heading exercise04 "state.afterHeading" (jsexpr->string '(("afterend" "

4 words

"))) #:preamble (dom-preamble "These are four words")) (js-program-test 'dom-ex05-replace-punctuation-faces exercise05 "paragraph.innerHTML" (jsexpr->string "Really🤔 Yes😲 No🤔") #:preamble (dom-preamble "Really? Yes! No?")))) (define engine (find-js-engine)) (run-jsmaker-regression 'jsmaker-dom-exercises tests "/tmp/jsmaker-dom-exercises.js" #:engine engine)