diff --git a/experimental/tests.mjs b/experimental/tests.mjs new file mode 100644 index 000000000..08ec7ab12 --- /dev/null +++ b/experimental/tests.mjs @@ -0,0 +1,141 @@ +import { BenchmarkTestStep } from "../resources/benchmark-runner.mjs"; +import { getTodoText } from "../resources/shared/translations.mjs"; +import { numberOfItemsToAdd } from "../resources/shared/todomvc-utils.mjs"; + +export const ExperimentalSuites = []; + +ExperimentalSuites.push({ + name: "TodoMVC-LocalStorage", + url: "experimental/todomvc-localstorage/dist/index.html", + tags: ["todomvc", "experimental"], + async prepare(page) { + (await page.waitForElement(".new-todo")).focus(); + page.getLocalStorage().getItem("javascript-es5"); + }, + tests: [ + new BenchmarkTestStep(`Adding${numberOfItemsToAdd}Items`, (page) => { + const newTodo = page.querySelector(".new-todo"); + for (let i = 0; i < numberOfItemsToAdd; i++) { + newTodo.setValue(getTodoText("ja", i)); + newTodo.dispatchEvent("change"); + newTodo.enter("keypress"); + } + }), + new BenchmarkTestStep("CompletingAllItems", (page) => { + const checkboxes = page.querySelectorAll(".toggle"); + for (let i = 0; i < numberOfItemsToAdd; i++) + checkboxes[i].click(); + }), + new BenchmarkTestStep("DeletingAllItems", (page) => { + const deleteButtons = page.querySelectorAll(".destroy"); + for (let i = numberOfItemsToAdd - 1; i >= 0; i--) + deleteButtons[i].click(); + }), + ], +}); + +ExperimentalSuites.push({ + name: "TodoMVC-Emoji", + url: "resources/todomvc/vanilla-examples/javascript-web-components/dist/index.html", + tags: ["todomvc", "experimental"], + async prepare(page) { + await page.waitForElement("todo-app"); + }, + tests: [ + new BenchmarkTestStep(`Adding${numberOfItemsToAdd}Items`, (page) => { + const input = page.querySelector(".new-todo-input", ["todo-app", "todo-topbar"]); + for (let i = 0; i < numberOfItemsToAdd; i++) { + input.setValue(getTodoText("emoji", i)); + input.dispatchEvent("input"); + input.enter("keyup"); + } + }), + new BenchmarkTestStep("CompletingAllItems", (page) => { + const items = page.querySelectorAll("todo-item", ["todo-app", "todo-list"]); + for (let i = 0; i < numberOfItemsToAdd; i++) { + const item = items[i].querySelectorInShadowRoot(".toggle-todo-input"); + item.click(); + } + }), + new BenchmarkTestStep("DeletingAllItems", (page) => { + const items = page.querySelectorAll("todo-item", ["todo-app", "todo-list"]); + for (let i = numberOfItemsToAdd - 1; i >= 0; i--) { + const item = items[i].querySelectorInShadowRoot(".remove-todo-button"); + item.click(); + } + }), + ], +}); + +ExperimentalSuites.push({ + name: "NewsSite-PostMessage", + url: "resources/newssite/news-next/dist/index.html", + tags: ["experimental", "newssite", "language"], + async prepare() {}, + type: "remote", + /* config: { + name: "default", // optional param to target non-default tests locally + }, */ +}); + +ExperimentalSuites.push({ + name: "TodoMVC-Jaspr-Dart2JS-O4", + url: "experimental/todomvc-dart-jaspr/dist/out-dart2js-O4/index.html", + tags: ["todomvc", "experimental"], + disabled: true, + async prepare(page) { + (await page.waitForElement(".new-todo")).focus(); + }, + tests: [ + new BenchmarkTestStep(`Adding${numberOfItemsToAdd}Items`, (page) => { + const newTodo = page.querySelector(".new-todo"); + for (let i = 0; i < numberOfItemsToAdd; i++) { + newTodo.setValue(getTodoText("ja", i)); + newTodo.dispatchEvent("change"); + newTodo.enter("keypress"); + } + }), + new BenchmarkTestStep("CompletingAllItems", (page) => { + const checkboxes = page.querySelectorAll(".toggle"); + for (let i = 0; i < numberOfItemsToAdd; i++) + checkboxes[i].click(); + }), + new BenchmarkTestStep("DeletingAllItems", (page) => { + const deleteButtons = page.querySelectorAll(".destroy"); + for (let i = numberOfItemsToAdd - 1; i >= 0; i--) + deleteButtons[i].click(); + }), + ], +}); + +ExperimentalSuites.push({ + name: "TodoMVC-Jaspr-Dart2Wasm-O2", + url: "experimental/todomvc-dart-jaspr/dist/out-dart2wasm-O2/index.html", + tags: ["todomvc", "experimental"], + disabled: true, + async prepare(page) { + (await page.waitForElement(".new-todo")).focus(); + }, + tests: [ + new BenchmarkTestStep(`Adding${numberOfItemsToAdd}Items`, (page) => { + const newTodo = page.querySelector(".new-todo"); + for (let i = 0; i < numberOfItemsToAdd; i++) { + newTodo.setValue(getTodoText("ja", i)); + newTodo.dispatchEvent("change"); + newTodo.enter("keypress"); + } + }), + new BenchmarkTestStep("CompletingAllItems", (page) => { + const checkboxes = page.querySelectorAll(".toggle"); + for (let i = 0; i < numberOfItemsToAdd; i++) + checkboxes[i].click(); + }), + new BenchmarkTestStep("DeletingAllItems", (page) => { + const deleteButtons = page.querySelectorAll(".destroy"); + for (let i = numberOfItemsToAdd - 1; i >= 0; i--) + deleteButtons[i].click(); + }), + ], +}); + +Object.freeze(ExperimentalSuites); diff --git a/resources/tests.mjs b/resources/tests.mjs index cfafc061e..7540fa79c 100644 --- a/resources/tests.mjs +++ b/resources/tests.mjs @@ -1,4 +1,5 @@ import { BenchmarkTestStep } from "./benchmark-runner.mjs"; +import { ExperimentalSuites } from "../experimental/tests.mjs"; import { getTodoText, defaultLanguage } from "./shared/translations.mjs"; import { numberOfItemsToAdd } from "./shared/todomvc-utils.mjs"; @@ -45,69 +46,6 @@ Suites.enable = function (names, tags) { console.error(message, debugInfo); }; -Suites.push({ - name: "TodoMVC-LocalStorage", - url: "experimental/todomvc-localstorage/dist/index.html", - tags: ["todomvc"], - async prepare(page) { - (await page.waitForElement(".new-todo")).focus(); - page.getLocalStorage().getItem("javascript-es5"); - }, - tests: [ - new BenchmarkTestStep(`Adding${numberOfItemsToAdd}Items`, (page) => { - const newTodo = page.querySelector(".new-todo"); - for (let i = 0; i < numberOfItemsToAdd; i++) { - newTodo.setValue(getTodoText("ja", i)); - newTodo.dispatchEvent("change"); - newTodo.enter("keypress"); - } - }), - new BenchmarkTestStep("CompletingAllItems", (page) => { - const checkboxes = page.querySelectorAll(".toggle"); - for (let i = 0; i < numberOfItemsToAdd; i++) - checkboxes[i].click(); - }), - new BenchmarkTestStep("DeletingAllItems", (page) => { - const deleteButtons = page.querySelectorAll(".destroy"); - for (let i = numberOfItemsToAdd - 1; i >= 0; i--) - deleteButtons[i].click(); - }), - ], -}); - -Suites.push({ - name: "TodoMVC-Emoji", - url: "resources/todomvc/vanilla-examples/javascript-web-components/dist/index.html", - tags: ["todomvc", "experimental"], - async prepare(page) { - await page.waitForElement("todo-app"); - }, - tests: [ - new BenchmarkTestStep(`Adding${numberOfItemsToAdd}Items`, (page) => { - const input = page.querySelector(".new-todo-input", ["todo-app", "todo-topbar"]); - for (let i = 0; i < numberOfItemsToAdd; i++) { - input.setValue(getTodoText("emoji", i)); - input.dispatchEvent("input"); - input.enter("keyup"); - } - }), - new BenchmarkTestStep("CompletingAllItems", (page) => { - const items = page.querySelectorAll("todo-item", ["todo-app", "todo-list"]); - for (let i = 0; i < numberOfItemsToAdd; i++) { - const item = items[i].querySelectorInShadowRoot(".toggle-todo-input"); - item.click(); - } - }), - new BenchmarkTestStep("DeletingAllItems", (page) => { - const items = page.querySelectorAll("todo-item", ["todo-app", "todo-list"]); - for (let i = numberOfItemsToAdd - 1; i >= 0; i--) { - const item = items[i].querySelectorInShadowRoot(".remove-todo-button"); - item.click(); - } - }), - ], -}); - Suites.push({ name: "TodoMVC-JavaScript-ES5", url: "resources/todomvc/vanilla-examples/javascript-es5/dist/index.html", @@ -259,18 +197,6 @@ Suites.push({ ], }); -Suites.push({ - name: "TodoMVC-WebComponents-PostMessage", - url: "resources/todomvc/vanilla-examples/javascript-web-components/dist/index.html", - tags: ["experimental", "todomvc", "webcomponents"], - disabled: true, - async prepare() {}, - type: "remote", - /* config: { - name: "default", // optional param to target non-default tests locally - }, */ -}); - Suites.push({ name: "TodoMVC-WebComponents-Complex-DOM", url: "resources/todomvc/vanilla-examples/javascript-web-components-complex/dist/index.html", @@ -840,66 +766,6 @@ Suites.push({ ], }); -Suites.push({ - name: "TodoMVC-Jaspr-Dart2JS-O4", - url: "experimental/todomvc-dart-jaspr/dist/out-dart2js-O4/index.html", - tags: ["todomvc", "experimental"], - disabled: true, - async prepare(page) { - (await page.waitForElement(".new-todo")).focus(); - }, - tests: [ - new BenchmarkTestStep(`Adding${numberOfItemsToAdd}Items`, (page) => { - const newTodo = page.querySelector(".new-todo"); - for (let i = 0; i < numberOfItemsToAdd; i++) { - newTodo.setValue(getTodoText("ja", i)); - newTodo.dispatchEvent("change"); - newTodo.enter("keypress"); - } - }), - new BenchmarkTestStep("CompletingAllItems", (page) => { - const checkboxes = page.querySelectorAll(".toggle"); - for (let i = 0; i < numberOfItemsToAdd; i++) - checkboxes[i].click(); - }), - new BenchmarkTestStep("DeletingAllItems", (page) => { - const deleteButtons = page.querySelectorAll(".destroy"); - for (let i = numberOfItemsToAdd - 1; i >= 0; i--) - deleteButtons[i].click(); - }), - ], -}); - -Suites.push({ - name: "TodoMVC-Jaspr-Dart2Wasm-O2", - url: "experimental/todomvc-dart-jaspr/dist/out-dart2wasm-O2/index.html", - tags: ["todomvc", "experimental"], - disabled: true, - async prepare(page) { - (await page.waitForElement(".new-todo")).focus(); - }, - tests: [ - new BenchmarkTestStep(`Adding${numberOfItemsToAdd}Items`, (page) => { - const newTodo = page.querySelector(".new-todo"); - for (let i = 0; i < numberOfItemsToAdd; i++) { - newTodo.setValue(getTodoText("ja", i)); - newTodo.dispatchEvent("change"); - newTodo.enter("keypress"); - } - }), - new BenchmarkTestStep("CompletingAllItems", (page) => { - const checkboxes = page.querySelectorAll(".toggle"); - for (let i = 0; i < numberOfItemsToAdd; i++) - checkboxes[i].click(); - }), - new BenchmarkTestStep("DeletingAllItems", (page) => { - const deleteButtons = page.querySelectorAll(".destroy"); - for (let i = numberOfItemsToAdd - 1; i >= 0; i--) - deleteButtons[i].click(); - }), - ], -}); - Suites.push({ name: "NewsSite-Next", url: "resources/newssite/news-next/dist/index.html", @@ -941,17 +807,6 @@ Suites.push({ ], }); -Suites.push({ - name: "NewsSite-PostMessage", - url: "resources/newssite/news-next/dist/index.html", - tags: ["experimental", "newssite", "language"], - async prepare() {}, - type: "remote", - /* config: { - name: "default", // optional param to target non-default tests locally - }, */ -}); - Suites.push({ name: "NewsSite-Nuxt", url: "resources/newssite/news-nuxt/dist/index.html", @@ -1159,14 +1014,13 @@ Suites.push({ ], }); +Suites.push(...ExperimentalSuites); + Object.freeze(Suites); Suites.forEach((suite) => { if (!suite.tags) suite.tags = []; - if (suite.url.startsWith("experimental/")) - suite.tags.unshift("all", "experimental"); - else - suite.tags.unshift("all"); + suite.tags.unshift("all"); suite.enabled = suite.tags.includes("default"); Object.freeze(suite.tags); Object.freeze(suite.steps); diff --git a/tests/index.html b/tests/index.html index d11801ecb..a6bc60a3b 100644 --- a/tests/index.html +++ b/tests/index.html @@ -29,6 +29,7 @@ await import("./unittests/benchmark-runner.mjs"); await import("./unittests/params.mjs"); + await import("./unittests/suites.mjs"); globalThis.testResults = undefined; globalThis.testRunner = mocha.run(); diff --git a/tests/unittests/suites.mjs b/tests/unittests/suites.mjs new file mode 100644 index 000000000..e0fbcb181 --- /dev/null +++ b/tests/unittests/suites.mjs @@ -0,0 +1,112 @@ +import { ExperimentalSuites } from "../../experimental/tests.mjs"; +import { Suites } from "../../resources/tests.mjs"; + +describe("ExperimentalSuites", () => { + it("should be frozen", () => { + expect(Object.isFrozen(ExperimentalSuites)).to.be(true); + }); + it("should have tags array", () => { + ExperimentalSuites.forEach((suite) => { + expect(suite.tags).to.be.an("array"); + }); + }); + it("should have frozen tags array", () => { + ExperimentalSuites.forEach((suite) => { + expect(Object.isFrozen(suite.tags)).to.be(true); + }); + }); + it("should have frozen steps array", () => { + ExperimentalSuites.forEach((suite) => { + expect(Object.isFrozen(suite.tags)).to.be(true); + }); + }); + it("should have 'experimental' tag", () => { + ExperimentalSuites.forEach((suite) => { + expect(suite.tags.includes("experimental")).to.be(true); + }); + }); + it("should be disabled by default", () => { + ExperimentalSuites.forEach((suite) => { + expect(suite.enabled).to.be(false); + expect(suite.tags.includes("default")).to.be(false); + }); + }); + + it("should have unique names", () => { + const uniqueNames = new Set(); + ExperimentalSuites.forEach((suite) => { + expect(uniqueNames.has(suite.name)).to.be(false); + uniqueNames.add(suite.name); + }); + }); +}); + +describe("Suites", () => { + it("should be frozen", () => { + expect(Object.isFrozen(Suites)).to.be(true); + }); + it("should have tags array", () => { + Suites.forEach((suite) => { + expect(suite.tags).to.be.an("array"); + }); + }); + it("should have frozen tags array", () => { + Suites.forEach((suite) => { + expect(Object.isFrozen(suite.tags)).to.be(true); + }); + }); + it("should have frozen steps array", () => { + Suites.forEach((suite) => { + expect(Object.isFrozen(suite.tags)).to.be(true); + }); + }); + it("should have 'all' tags", () => { + Suites.forEach((suite) => { + expect(suite.tags.includes("all")).to.be(true); + expect(suite.tags[0]).to.be("all"); + }); + }); + it("default suites should be enabled by default", () => { + Suites.forEach((suite) => { + if (suite.tags.includes("default")) + expect(suite.enabled).to.be(true); + }); + }); + it("should have 'default' and not 'experimental' tag", () => { + Suites.forEach((suite) => { + if (suite.tags.includes("experimental")) + expect(suite.tags.includes("default")).to.be(false); + }); + }); + it("should have experimental tag for experimental url", () => { + ExperimentalSuites.forEach((suite) => { + if (suite.tags.includes("experimental")) + expect(suite.tags.includes("experimental")).to.be(true); + }); + }); + it("should not have duplicate tags", () => { + Suites.forEach((suite) => { + const uniqueTags = new Set(suite.tags); + expect(suite.tags).to.eql(Array.from(uniqueTags)); + }); + }); + it("should have a name string", () => { + Suites.forEach((suite) => { + expect(suite.name).to.be.a("string"); + expect(suite.name.length).to.be.greaterThan(0); + }); + }); + it("should have a url string", () => { + Suites.forEach((suite) => { + expect(suite.url).to.be.a("string"); + expect(suite.url.length).to.be.greaterThan(0); + }); + }); + it("should have unique names", () => { + const uniqueNames = new Set(); + Suites.forEach((suite) => { + expect(uniqueNames.has(suite.name)).to.be(false); + uniqueNames.add(suite.name); + }); + }); +});