Skip to content
145 changes: 145 additions & 0 deletions experimental/tests.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
import { BenchmarkTestStep } from "../resources/benchmark-runner.mjs";
import { getTodoText } from "../resources/shared/translations.mjs";
import { numberOfItemsToAdd } from "../resources/shared/todomvc-utils.mjs";
import { freezeSuites } from "../resources/suites-helper.mjs";

export const ExperimentalSuites = freezeSuites([
{
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();
}),
],
},
{
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();
}
}),
],
},
{
name: "TodoMVC-WebComponents-PostMessage",
url: "resources/todomvc/vanilla-examples/javascript-web-components/dist/index.html",
tags: ["experimental", "todomvc", "webcomponents"],
async prepare() {},
type: "remote",
/* config: {
name: "default", // optional param to target non-default tests locally
}, */
},
{
name: "TodoMVC-Jaspr-Dart2JS-O4",
url: "experimental/todomvc-dart-jaspr/dist/out-dart2js-O4/index.html",
tags: ["todomvc", "experimental"],
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();
}),
],
},
{
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();
}),
],
},
{
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
}, */
},
]);
20 changes: 13 additions & 7 deletions resources/benchmark-configurator.mjs
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
// example url for local testing:
// http://localhost:8080/?developerMode=true&config=http://localhost:8080/resources/config.json
// since the json doesn't contain a default suite, dismiss warning popups and select from the developerMenu
import { defaultSuites } from "./default-tests.mjs";
import { DefaultSuites } from "./default-tests.mjs";
import { ExperimentalSuites } from "../experimental/tests.mjs";
import { params } from "./shared/params.mjs";

const DEFAULT_TAGS = ["all", "default", "experimental"];
Expand Down Expand Up @@ -75,7 +76,7 @@ export class BenchmarkConfigurator {
const benchmarkUrl = new URL(window.location);
if (DISALLOWED_DOMAINS.some((domain) => benchmarkUrl.hostname.endsWith(domain))) {
console.warn("Configuration fetch not allowed. Loading default suites.");
this._loadDefaultSuites();
this._loadSuites();
return;
}

Expand All @@ -98,19 +99,24 @@ export class BenchmarkConfigurator {
});
} catch (error) {
console.warn(`Error loading custom configuration: ${error.message}. Loading default suites.`);
this._loadDefaultSuites();
this._loadSuites();
}
} else {
this._loadDefaultSuites();
this._loadSuites();
}

this._freezeTags();
this._freezeSuites();
}

_loadDefaultSuites() {
defaultSuites.flatMap((suite) => suite.tags).forEach((tag) => this.#tags.add(tag));
defaultSuites.forEach((suite) => this.#suites.push(suite));
_loadSuites() {
DefaultSuites.forEach((suite) => this._loadSuite(suite));
ExperimentalSuites.forEach((suite) => this._loadSuite(suite));
}

_loadSuite(suite) {
suite.tags.forEach((tag) => this.#tags.add(tag));
this.#suites.push(suite);
}

enableSuites(names, tags) {
Expand Down
143 changes: 3 additions & 140 deletions resources/default-tests.mjs
Original file line number Diff line number Diff line change
@@ -1,69 +1,9 @@
import { BenchmarkTestStep } from "./benchmark-runner.mjs";
import { getTodoText, defaultLanguage } from "./shared/translations.mjs";
import { numberOfItemsToAdd } from "./shared/todomvc-utils.mjs";
import { freezeSuites } from "../resources/suites-helper.mjs";

export const defaultSuites = [
{
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();
}),
],
},
{
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();
}
}),
],
},
export const DefaultSuites = freezeSuites([
{
name: "TodoMVC-JavaScript-ES5",
url: "resources/todomvc/vanilla-examples/javascript-es5/dist/index.html",
Expand Down Expand Up @@ -210,16 +150,6 @@ export const defaultSuites = [
}),
],
},
{
name: "TodoMVC-WebComponents-PostMessage",
url: "resources/todomvc/vanilla-examples/javascript-web-components/dist/index.html",
tags: ["experimental", "todomvc", "webcomponents"],
async prepare() {},
type: "remote",
/* config: {
name: "default", // optional param to target non-default tests locally
}, */
},
{
name: "TodoMVC-WebComponents-Complex-DOM",
url: "resources/todomvc/vanilla-examples/javascript-web-components-complex/dist/index.html",
Expand Down Expand Up @@ -770,63 +700,6 @@ export const defaultSuites = [
}),
],
},
{
name: "TodoMVC-Jaspr-Dart2JS-O4",
url: "experimental/todomvc-dart-jaspr/dist/out-dart2js-O4/index.html",
tags: ["todomvc", "experimental"],
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();
}),
],
},
{
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();
}),
],
},
{
name: "NewsSite-Next",
url: "resources/newssite/news-next/dist/index.html",
Expand Down Expand Up @@ -867,16 +740,6 @@ export const defaultSuites = [
}),
],
},
{
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
}, */
},
{
name: "NewsSite-Nuxt",
url: "resources/newssite/news-nuxt/dist/index.html",
Expand Down Expand Up @@ -1077,4 +940,4 @@ export const defaultSuites = [
}),
],
},
];
]);
11 changes: 11 additions & 0 deletions resources/suites-helper.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
export function freezeSuites(suites) {
suites = suites.map((suite) => {
// FIXME: freeze tags
// suite.tags = Object.freeze(suite.tags);
suite.steps = Object.freeze(suite.steps);
// FIXME: freeze suite after fixing the benchmark-configurator.
// return Object.freeze(suite);
return suite;
});
return suites;
}
1 change: 1 addition & 0 deletions tests/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
Loading
Loading