open Jest open DomTestingLibrary open JestDom let render = %raw(` function(html) { const body = document.querySelector('body', document) body.innerHTML = html return body } `) describe("UserEvent", () => { let setupMocks = %raw(` window.increment = () => { window.count = window.count || 0; return window.count++ } `) let resetMocks = () => %raw(`window.count = 0`) beforeEach(() => { setupMocks() }) afterEach(() => { resetMocks() }) test("click", () => { `` ->render ->getByRole(~matcher=#Str("button"), ~options=makeByRoleOptions(~name="Click me", ())) ->UserEvent.click %raw("window.count") |> ExpectJs.expect |> ExpectJs.toEqual(1) }) test("type", () => { let input = ``->render input->getByRole(~matcher=#Str("textbox"))->UserEvent.type_("four") input->getByDisplayValue(~matcher=#Str("four"))->expect->toBeInTheDocument }) testPromise("keyboard", () => { ``->render->getByRole(~matcher=#Str("textbox"))->UserEvent.click UserEvent.keyboard("four") waitFor(() => screen->getByDisplayValue(~matcher=#Str("four"))->expect->toBeInTheDocument) }) test("tab", () => { let html = ``->render let cancel = html->DomTestingLibrary.getByRole( ~matcher=#Str("button"), ~options=makeByRoleOptions(~name="Save", ()), ) let activeElement = %raw(`document.activeElement`) cancel->expect->Expect.toBe(activeElement) }) })