You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by bo...@apache.org on 2021/01/12 18:58:36 UTC

[myfaces-tobago] 02/02: fix: jasmine tests

This is an automated email from the ASF dual-hosted git repository.

bommel pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/myfaces-tobago.git

commit 6cc1e17c2e7e34bd9e5ca1f04bb9fd76675e82b7
Author: Henning Noeth <hn...@apache.org>
AuthorDate: Tue Jan 12 19:43:05 2021 +0100

    fix: jasmine tests
---
 .../10-selectBooleanCheckbox/Checkbox.test.js      | 228 ++++++++++-----------
 .../15-selectBooleanToggle/Toggle.test.js          | 227 ++++++++++----------
 .../030-select/20-selectOneChoice/Dropdown.test.js | 127 ++++++------
 .../030-select/30-selectOneRadio/Radio.test.js     |   1 +
 .../030-select/40-selectOneListbox/Listbox.test.js | 152 +++++++-------
 .../50-selectManyCheckbox/Multi_Checkbox.test.js   | 214 ++++++++++---------
 .../70-selectManyShuttle/Shuttle.test.js           | 198 ++++++++----------
 7 files changed, 541 insertions(+), 606 deletions(-)

diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/030-select/10-selectBooleanCheckbox/Checkbox.test.js b/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/030-select/10-selectBooleanCheckbox/Checkbox.test.js
index 9fc1d31..9fd41eb 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/030-select/10-selectBooleanCheckbox/Checkbox.test.js
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/030-select/10-selectBooleanCheckbox/Checkbox.test.js
@@ -16,152 +16,132 @@
  */
 
 import {JasmineTestTool} from "/tobago/test/tobago-test-tool.js";
-
-it("not implemented yet", function (done) {
-  let test = new JasmineTestTool(done);
-  test.do(() => fail("not implemented yet"));
-  test.start();
-});
-
-/*
 import {querySelectorFn} from "/script/tobago-test.js";
-import {TobagoTestTool} from "/tobago/test/tobago-test-tool.js";
 
-QUnit.test("submit: select A", function (assert) {
+it("submit: select A", function (done) {
   let selectAFn = querySelectorFn("#page\\:mainForm\\:selectA input");
   let selectBFn = querySelectorFn("#page\\:mainForm\\:selectB input");
   let selectCFn = querySelectorFn("#page\\:mainForm\\:selectC input");
   let submitFn = querySelectorFn("#page\\:mainForm\\:submit");
-  let outputFn = querySelectorFn("#page\\:mainForm\\:submitOutput span");
-
-  let TTT = new TobagoTestTool(assert);
-  TTT.action(function () {
-    selectAFn().checked = true;
-    selectBFn().checked = false;
-    selectCFn().checked = false;
-    submitFn().click();
-  });
-  TTT.waitForResponse();
-  TTT.asserts(1, function () {
-    assert.equal(outputFn().textContent, "A ");
-  });
-  TTT.startTest();
+  let outputFn = querySelectorFn("#page\\:mainForm\\:submitOutput tobago-out");
+
+  let test = new JasmineTestTool(done);
+  test.setup(() => outputFn().textContent === "",
+      () => {
+        selectAFn().checked = false;
+        selectBFn().checked = false;
+        selectCFn().checked = false;
+      }, "click", submitFn);
+  test.do(() => selectAFn().checked = true);
+  test.do(() => selectBFn().checked = false);
+  test.do(() => selectCFn().checked = false);
+  test.event("click", submitFn, () => outputFn().textContent.trim(), "A");
+  test.do(() => expect(outputFn().textContent.trim()).toBe("A"));
+  test.start();
 });
 
-QUnit.test("submit: select B and C", function (assert) {
+it("submit: select B and C", function (done) {
   let selectAFn = querySelectorFn("#page\\:mainForm\\:selectA input");
   let selectBFn = querySelectorFn("#page\\:mainForm\\:selectB input");
   let selectCFn = querySelectorFn("#page\\:mainForm\\:selectC input");
   let submitFn = querySelectorFn("#page\\:mainForm\\:submit");
-  let outputFn = querySelectorFn("#page\\:mainForm\\:submitOutput span");
-
-  let TTT = new TobagoTestTool(assert);
-  TTT.action(function () {
-    selectAFn().checked = false;
-    selectBFn().checked = true;
-    selectCFn().checked = true;
-    submitFn().click();
-  });
-  TTT.waitForResponse();
-  TTT.asserts(1, function () {
-    assert.equal(outputFn().textContent, "B C ");
-  });
-  TTT.startTest();
+  let outputFn = querySelectorFn("#page\\:mainForm\\:submitOutput tobago-out");
+
+  let test = new JasmineTestTool(done);
+  test.setup(() => outputFn().textContent === "",
+      () => {
+        selectAFn().checked = false;
+        selectBFn().checked = false;
+        selectCFn().checked = false;
+      }, "click", submitFn);
+  test.do(() => selectAFn().checked = false);
+  test.do(() => selectBFn().checked = true);
+  test.do(() => selectCFn().checked = true);
+  test.event("click", submitFn, () => outputFn().textContent.trim(), "B C");
+  test.do(() => expect(outputFn().textContent.trim()).toBe("B C"));
+  test.start();
 });
 
-QUnit.test("ajax: select D", function (assert) {
-  let selectDFn = querySelectorFn("#page\\:mainForm\\:selectD input");
-  let outputDFn = querySelectorFn("#page\\:mainForm\\:outputD span");
-
-  let TTT = new TobagoTestTool(assert);
-  TTT.action(function () {
-    selectDFn().checked = true;
-    selectDFn().dispatchEvent(new Event("change", {bubbles: true}));
-  });
-  TTT.waitForResponse();
-  TTT.asserts(1, function () {
-    assert.equal(outputDFn().textContent, "true");
-  });
-  TTT.startTest();
+it("ajax: select D", function (done) {
+  let selectFn = querySelectorFn("#page\\:mainForm\\:selectD input");
+  let outputFn = querySelectorFn("#page\\:mainForm\\:outputD tobago-out");
+
+  let test = new JasmineTestTool(done);
+  test.setup(() => outputFn().textContent === "false",
+      () => selectFn().checked = false,
+      "change", selectFn);
+  test.do(() => selectFn().checked = true);
+  test.event("change", selectFn, () => outputFn().textContent === "true")
+  test.do(() => expect(outputFn().textContent).toBe("true"));
+  test.start();
 });
 
-QUnit.test("ajax: deselect D", function (assert) {
-  let selectDFn = querySelectorFn("#page\\:mainForm\\:selectD input");
-  let outputDFn = querySelectorFn("#page\\:mainForm\\:outputD span");
-
-  let TTT = new TobagoTestTool(assert);
-  TTT.action(function () {
-    selectDFn().checked = false;
-    selectDFn().dispatchEvent(new Event("change", {bubbles: true}));
-  });
-  TTT.waitForResponse();
-  TTT.asserts(1, function () {
-    assert.equal(outputDFn().textContent, "false");
-  });
-  TTT.startTest();
+it("ajax: deselect D", function (done) {
+  let selectFn = querySelectorFn("#page\\:mainForm\\:selectD input");
+  let outputFn = querySelectorFn("#page\\:mainForm\\:outputD tobago-out");
+
+  let test = new JasmineTestTool(done);
+  test.setup(() => outputFn().textContent === "true",
+      () => selectFn().checked = true,
+      "change", selectFn);
+  test.do(() => selectFn().checked = false);
+  test.event("change", selectFn, () => outputFn().textContent === "false")
+  test.do(() => expect(outputFn().textContent).toBe("false"));
+  test.start();
 });
 
-QUnit.test("ajax: select E", function (assert) {
-  let selectEFn = querySelectorFn("#page\\:mainForm\\:selectE input");
-  let outputEFn = querySelectorFn("#page\\:mainForm\\:outputE span");
-
-  let TTT = new TobagoTestTool(assert);
-  TTT.action(function () {
-    selectEFn().checked = true;
-    selectEFn().dispatchEvent(new Event("change", {bubbles: true}));
-  });
-  TTT.waitForResponse();
-  TTT.asserts(1, function () {
-    assert.equal(outputEFn().textContent, "true");
-  });
-  TTT.startTest();
+it("ajax: select E", function (done) {
+  let selectFn = querySelectorFn("#page\\:mainForm\\:selectE input");
+  let outputFn = querySelectorFn("#page\\:mainForm\\:outputE tobago-out");
+
+  let test = new JasmineTestTool(done);
+  test.setup(() => outputFn().textContent === "false",
+      () => selectFn().checked = false,
+      "change", selectFn);
+  test.do(() => selectFn().checked = true);
+  test.event("change", selectFn, () => outputFn().textContent === "true")
+  test.do(() => expect(outputFn().textContent).toBe("true"));
+  test.start();
 });
 
-QUnit.test("ajax: deselect E", function (assert) {
-  let selectEFn = querySelectorFn("#page\\:mainForm\\:selectE input");
-  let outputEFn = querySelectorFn("#page\\:mainForm\\:outputE span");
-
-  let TTT = new TobagoTestTool(assert);
-  TTT.action(function () {
-    selectEFn().checked = false;
-    selectEFn().dispatchEvent(new Event("change", {bubbles: true}));
-  });
-  TTT.waitForResponse();
-  TTT.asserts(1, function () {
-    assert.equal(outputEFn().textContent, "false");
-  });
-  TTT.startTest();
+it("ajax: deselect E", function (done) {
+  let selectFn = querySelectorFn("#page\\:mainForm\\:selectE input");
+  let outputFn = querySelectorFn("#page\\:mainForm\\:outputE tobago-out");
+
+  let test = new JasmineTestTool(done);
+  test.setup(() => outputFn().textContent === "true",
+      () => selectFn().checked = true,
+      "change", selectFn);
+  test.do(() => selectFn().checked = false);
+  test.event("change", selectFn, () => outputFn().textContent === "false")
+  test.do(() => expect(outputFn().textContent).toBe("false"));
+  test.start();
 });
 
-QUnit.test("ajax: select F", function (assert) {
-  let selectFFn = querySelectorFn("#page\\:mainForm\\:selectF input");
-  let outputFFn = querySelectorFn("#page\\:mainForm\\:outputF span");
-
-  let TTT = new TobagoTestTool(assert);
-  TTT.action(function () {
-    selectFFn().checked = true;
-    selectFFn().dispatchEvent(new Event("change", {bubbles: true}));
-  });
-  TTT.waitForResponse();
-  TTT.asserts(1, function () {
-    assert.equal(outputFFn().textContent, "true");
-  });
-  TTT.startTest();
+it("ajax: select F", function (done) {
+  let selectFn = querySelectorFn("#page\\:mainForm\\:selectF input");
+  let outputFn = querySelectorFn("#page\\:mainForm\\:outputF tobago-out");
+
+  let test = new JasmineTestTool(done);
+  test.setup(() => outputFn().textContent === "false",
+      () => selectFn().checked = false,
+      "change", selectFn);
+  test.do(() => selectFn().checked = true);
+  test.event("change", selectFn, () => outputFn().textContent === "true")
+  test.do(() => expect(outputFn().textContent).toBe("true"));
+  test.start();
 });
 
-QUnit.test("ajax: deselect F", function (assert) {
-  let selectFFn = querySelectorFn("#page\\:mainForm\\:selectF input");
-  let outputFFn = querySelectorFn("#page\\:mainForm\\:outputF span");
-
-  let TTT = new TobagoTestTool(assert);
-  TTT.action(function () {
-    selectFFn().checked = false;
-    selectFFn().dispatchEvent(new Event("change", {bubbles: true}));
-  });
-  TTT.waitForResponse();
-  TTT.asserts(1, function () {
-    assert.equal(outputFFn().textContent, "false");
-  });
-  TTT.startTest();
+it("ajax: deselect F", function (done) {
+  let selectFn = querySelectorFn("#page\\:mainForm\\:selectF input");
+  let outputFn = querySelectorFn("#page\\:mainForm\\:outputF tobago-out");
+
+  let test = new JasmineTestTool(done);
+  test.setup(() => outputFn().textContent === "true",
+      () => selectFn().checked = true,
+      "change", selectFn);
+  test.do(() => selectFn().checked = false);
+  test.event("change", selectFn, () => outputFn().textContent === "false")
+  test.do(() => expect(outputFn().textContent).toBe("false"));
+  test.start();
 });
-*/
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/030-select/15-selectBooleanToggle/Toggle.test.js b/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/030-select/15-selectBooleanToggle/Toggle.test.js
index 5671dec..9fd41eb 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/030-select/15-selectBooleanToggle/Toggle.test.js
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/030-select/15-selectBooleanToggle/Toggle.test.js
@@ -16,151 +16,132 @@
  */
 
 import {JasmineTestTool} from "/tobago/test/tobago-test-tool.js";
-
-it("not implemented yet", function (done) {
-  let test = new JasmineTestTool(done);
-  test.do(() => fail("not implemented yet"));
-  test.start();
-});
-/*
 import {querySelectorFn} from "/script/tobago-test.js";
-import {TobagoTestTool} from "/tobago/test/tobago-test-tool.js";
 
-QUnit.test("submit: select A", function (assert) {
+it("submit: select A", function (done) {
   let selectAFn = querySelectorFn("#page\\:mainForm\\:selectA input");
   let selectBFn = querySelectorFn("#page\\:mainForm\\:selectB input");
   let selectCFn = querySelectorFn("#page\\:mainForm\\:selectC input");
   let submitFn = querySelectorFn("#page\\:mainForm\\:submit");
-  let outputFn = querySelectorFn("#page\\:mainForm\\:submitOutput span");
-
-  let TTT = new TobagoTestTool(assert);
-  TTT.action(function () {
-    selectAFn().checked = true;
-    selectBFn().checked = false;
-    selectCFn().checked = false;
-    submitFn().click();
-  });
-  TTT.waitForResponse();
-  TTT.asserts(1, function () {
-    assert.equal(outputFn().textContent, "A ");
-  });
-  TTT.startTest();
+  let outputFn = querySelectorFn("#page\\:mainForm\\:submitOutput tobago-out");
+
+  let test = new JasmineTestTool(done);
+  test.setup(() => outputFn().textContent === "",
+      () => {
+        selectAFn().checked = false;
+        selectBFn().checked = false;
+        selectCFn().checked = false;
+      }, "click", submitFn);
+  test.do(() => selectAFn().checked = true);
+  test.do(() => selectBFn().checked = false);
+  test.do(() => selectCFn().checked = false);
+  test.event("click", submitFn, () => outputFn().textContent.trim(), "A");
+  test.do(() => expect(outputFn().textContent.trim()).toBe("A"));
+  test.start();
 });
 
-QUnit.test("submit: select B and C", function (assert) {
+it("submit: select B and C", function (done) {
   let selectAFn = querySelectorFn("#page\\:mainForm\\:selectA input");
   let selectBFn = querySelectorFn("#page\\:mainForm\\:selectB input");
   let selectCFn = querySelectorFn("#page\\:mainForm\\:selectC input");
   let submitFn = querySelectorFn("#page\\:mainForm\\:submit");
-  let outputFn = querySelectorFn("#page\\:mainForm\\:submitOutput span");
-
-  let TTT = new TobagoTestTool(assert);
-  TTT.action(function () {
-    selectAFn().checked = false;
-    selectBFn().checked = true;
-    selectCFn().checked = true;
-    submitFn().click();
-  });
-  TTT.waitForResponse();
-  TTT.asserts(1, function () {
-    assert.equal(outputFn().textContent, "B C ");
-  });
-  TTT.startTest();
+  let outputFn = querySelectorFn("#page\\:mainForm\\:submitOutput tobago-out");
+
+  let test = new JasmineTestTool(done);
+  test.setup(() => outputFn().textContent === "",
+      () => {
+        selectAFn().checked = false;
+        selectBFn().checked = false;
+        selectCFn().checked = false;
+      }, "click", submitFn);
+  test.do(() => selectAFn().checked = false);
+  test.do(() => selectBFn().checked = true);
+  test.do(() => selectCFn().checked = true);
+  test.event("click", submitFn, () => outputFn().textContent.trim(), "B C");
+  test.do(() => expect(outputFn().textContent.trim()).toBe("B C"));
+  test.start();
 });
 
-QUnit.test("ajax: select D", function (assert) {
-  let selectDFn = querySelectorFn("#page\\:mainForm\\:selectD input");
-  let outputDFn = querySelectorFn("#page\\:mainForm\\:outputD span");
-
-  let TTT = new TobagoTestTool(assert);
-  TTT.action(function () {
-    selectDFn().checked = true;
-    selectDFn().dispatchEvent(new Event("change", {bubbles: true}));
-  });
-  TTT.waitForResponse();
-  TTT.asserts(1, function () {
-    assert.equal(outputDFn().textContent, "true");
-  });
-  TTT.startTest();
+it("ajax: select D", function (done) {
+  let selectFn = querySelectorFn("#page\\:mainForm\\:selectD input");
+  let outputFn = querySelectorFn("#page\\:mainForm\\:outputD tobago-out");
+
+  let test = new JasmineTestTool(done);
+  test.setup(() => outputFn().textContent === "false",
+      () => selectFn().checked = false,
+      "change", selectFn);
+  test.do(() => selectFn().checked = true);
+  test.event("change", selectFn, () => outputFn().textContent === "true")
+  test.do(() => expect(outputFn().textContent).toBe("true"));
+  test.start();
 });
 
-QUnit.test("ajax: deselect D", function (assert) {
-  let selectDFn = querySelectorFn("#page\\:mainForm\\:selectD input");
-  let outputDFn = querySelectorFn("#page\\:mainForm\\:outputD span");
-
-  let TTT = new TobagoTestTool(assert);
-  TTT.action(function () {
-    selectDFn().checked = false;
-    selectDFn().dispatchEvent(new Event("change", {bubbles: true}));
-  });
-  TTT.waitForResponse();
-  TTT.asserts(1, function () {
-    assert.equal(outputDFn().textContent, "false");
-  });
-  TTT.startTest();
+it("ajax: deselect D", function (done) {
+  let selectFn = querySelectorFn("#page\\:mainForm\\:selectD input");
+  let outputFn = querySelectorFn("#page\\:mainForm\\:outputD tobago-out");
+
+  let test = new JasmineTestTool(done);
+  test.setup(() => outputFn().textContent === "true",
+      () => selectFn().checked = true,
+      "change", selectFn);
+  test.do(() => selectFn().checked = false);
+  test.event("change", selectFn, () => outputFn().textContent === "false")
+  test.do(() => expect(outputFn().textContent).toBe("false"));
+  test.start();
 });
 
-QUnit.test("ajax: select E", function (assert) {
-  let selectEFn = querySelectorFn("#page\\:mainForm\\:selectE input");
-  let outputEFn = querySelectorFn("#page\\:mainForm\\:outputE span");
-
-  let TTT = new TobagoTestTool(assert);
-  TTT.action(function () {
-    selectEFn().checked = true;
-    selectEFn().dispatchEvent(new Event("change", {bubbles: true}));
-  });
-  TTT.waitForResponse();
-  TTT.asserts(1, function () {
-    assert.equal(outputEFn().textContent, "true");
-  });
-  TTT.startTest();
+it("ajax: select E", function (done) {
+  let selectFn = querySelectorFn("#page\\:mainForm\\:selectE input");
+  let outputFn = querySelectorFn("#page\\:mainForm\\:outputE tobago-out");
+
+  let test = new JasmineTestTool(done);
+  test.setup(() => outputFn().textContent === "false",
+      () => selectFn().checked = false,
+      "change", selectFn);
+  test.do(() => selectFn().checked = true);
+  test.event("change", selectFn, () => outputFn().textContent === "true")
+  test.do(() => expect(outputFn().textContent).toBe("true"));
+  test.start();
 });
 
-QUnit.test("ajax: deselect E", function (assert) {
-  let selectEFn = querySelectorFn("#page\\:mainForm\\:selectE input");
-  let outputEFn = querySelectorFn("#page\\:mainForm\\:outputE span");
-
-  let TTT = new TobagoTestTool(assert);
-  TTT.action(function () {
-    selectEFn().checked = false;
-    selectEFn().dispatchEvent(new Event("change", {bubbles: true}));
-  });
-  TTT.waitForResponse();
-  TTT.asserts(1, function () {
-    assert.equal(outputEFn().textContent, "false");
-  });
-  TTT.startTest();
+it("ajax: deselect E", function (done) {
+  let selectFn = querySelectorFn("#page\\:mainForm\\:selectE input");
+  let outputFn = querySelectorFn("#page\\:mainForm\\:outputE tobago-out");
+
+  let test = new JasmineTestTool(done);
+  test.setup(() => outputFn().textContent === "true",
+      () => selectFn().checked = true,
+      "change", selectFn);
+  test.do(() => selectFn().checked = false);
+  test.event("change", selectFn, () => outputFn().textContent === "false")
+  test.do(() => expect(outputFn().textContent).toBe("false"));
+  test.start();
 });
 
-QUnit.test("ajax: select F", function (assert) {
-  let selectFFn = querySelectorFn("#page\\:mainForm\\:selectF input");
-  let outputFFn = querySelectorFn("#page\\:mainForm\\:outputF span");
-
-  let TTT = new TobagoTestTool(assert);
-  TTT.action(function () {
-    selectFFn().checked = true;
-    selectFFn().dispatchEvent(new Event("change", {bubbles: true}));
-  });
-  TTT.waitForResponse();
-  TTT.asserts(1, function () {
-    assert.equal(outputFFn().textContent, "true");
-  });
-  TTT.startTest();
+it("ajax: select F", function (done) {
+  let selectFn = querySelectorFn("#page\\:mainForm\\:selectF input");
+  let outputFn = querySelectorFn("#page\\:mainForm\\:outputF tobago-out");
+
+  let test = new JasmineTestTool(done);
+  test.setup(() => outputFn().textContent === "false",
+      () => selectFn().checked = false,
+      "change", selectFn);
+  test.do(() => selectFn().checked = true);
+  test.event("change", selectFn, () => outputFn().textContent === "true")
+  test.do(() => expect(outputFn().textContent).toBe("true"));
+  test.start();
 });
 
-QUnit.test("ajax: deselect F", function (assert) {
-  let selectFFn = querySelectorFn("#page\\:mainForm\\:selectF input");
-  let outputFFn = querySelectorFn("#page\\:mainForm\\:outputF span");
-
-  let TTT = new TobagoTestTool(assert);
-  TTT.action(function () {
-    selectFFn().checked = false;
-    selectFFn().dispatchEvent(new Event("change", {bubbles: true}));
-  });
-  TTT.waitForResponse();
-  TTT.asserts(1, function () {
-    assert.equal(outputFFn().textContent, "false");
-  });
-  TTT.startTest();
+it("ajax: deselect F", function (done) {
+  let selectFn = querySelectorFn("#page\\:mainForm\\:selectF input");
+  let outputFn = querySelectorFn("#page\\:mainForm\\:outputF tobago-out");
+
+  let test = new JasmineTestTool(done);
+  test.setup(() => outputFn().textContent === "true",
+      () => selectFn().checked = true,
+      "change", selectFn);
+  test.do(() => selectFn().checked = false);
+  test.event("change", selectFn, () => outputFn().textContent === "false")
+  test.do(() => expect(outputFn().textContent).toBe("false"));
+  test.start();
 });
-*/
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/030-select/20-selectOneChoice/Dropdown.test.js b/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/030-select/20-selectOneChoice/Dropdown.test.js
index 874c159..8c5aa1f 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/030-select/20-selectOneChoice/Dropdown.test.js
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/030-select/20-selectOneChoice/Dropdown.test.js
@@ -16,93 +16,94 @@
  */
 
 import {JasmineTestTool} from "/tobago/test/tobago-test-tool.js";
-
-it("not implemented yet", function (done) {
-  let test = new JasmineTestTool(done);
-  test.do(() => fail("not implemented yet"));
-  test.start();
-});
-/*
 import {querySelectorAllFn, querySelectorFn} from "/script/tobago-test.js";
-import {TobagoTestTool} from "/tobago/test/tobago-test-tool.js";
 
-QUnit.test("submit: Alice", function (assert) {
+it("submit: Alice", function (done) {
   let aliceFn = querySelectorFn("#page\\:mainForm\\:selectPerson\\:\\:field option[value^='Alice']");
   let bobFn = querySelectorFn("#page\\:mainForm\\:selectPerson\\:\\:field option[value^='Bob']");
   let submitFn = querySelectorFn("#page\\:mainForm\\:submit");
-  let outputFn = querySelectorFn("#page\\:mainForm\\:outputPerson span");
+  let outputFn = querySelectorFn("#page\\:mainForm\\:outputPerson tobago-out");
 
-  let TTT = new TobagoTestTool(assert);
-  TTT.action(function () {
-    aliceFn().selected = true;
-    bobFn().selected = false;
-    submitFn().dispatchEvent(new Event("click", {bubbles: true}));
-  });
-  TTT.waitForResponse();
-  TTT.asserts(1, function () {
-    assert.equal(outputFn().textContent, "Alice Anderson");
-  });
-  TTT.startTest();
+  const test = new JasmineTestTool(done);
+  test.setup(() => () => outputFn().textContent !== "Alice Anderson",
+      () => {
+        aliceFn().selected = false;
+        bobFn().selected = true;
+      },
+      "click", submitFn);
+  test.do(() => aliceFn().selected = true);
+  test.do(() => bobFn().selected = false);
+  test.event("click", submitFn, () => outputFn().textContent === "Alice Anderson");
+  test.do(() => expect(outputFn().textContent).toBe("Alice Anderson"));
+  test.start();
 });
 
-QUnit.test("submit: Bob", function (assert) {
+it("submit: Bob", function (done) {
   let aliceFn = querySelectorFn("#page\\:mainForm\\:selectPerson\\:\\:field option[value^='Alice']");
   let bobFn = querySelectorFn("#page\\:mainForm\\:selectPerson\\:\\:field option[value^='Bob']");
   let submitFn = querySelectorFn("#page\\:mainForm\\:submit");
-  let outputFn = querySelectorFn("#page\\:mainForm\\:outputPerson span");
+  let outputFn = querySelectorFn("#page\\:mainForm\\:outputPerson tobago-out");
 
-  let TTT = new TobagoTestTool(assert);
-  TTT.action(function () {
-    aliceFn().selected = false;
-    bobFn().selected = true;
-    submitFn().dispatchEvent(new Event("click", {bubbles: true}));
-  });
-  TTT.waitForResponse();
-  TTT.asserts(1, function () {
-    assert.equal(outputFn().textContent, "Bob Brunch");
-  });
-  TTT.startTest();
+  const test = new JasmineTestTool(done);
+  test.setup(() => () => outputFn().textContent !== "Bob Brunch",
+      () => {
+        aliceFn().selected = true;
+        bobFn().selected = false;
+      },
+      "click", submitFn);
+  test.do(() => aliceFn().selected = false);
+  test.do(() => bobFn().selected = true);
+  test.event("click", submitFn, () => outputFn().textContent === "Bob Brunch");
+  test.do(() => expect(outputFn().textContent).toBe("Bob Brunch"));
+  test.start();
 });
 
-QUnit.test("ajax: select Mars", function (assert) {
+it("ajax: select Mars", function (done) {
   let planetFn = querySelectorFn("#page\\:mainForm\\:selectPlanet\\:\\:field");
+  let earthOptionFn = querySelectorFn("#page\\:mainForm\\:selectPlanet\\:\\:field option[value='0']");
   let marsOptionFn = querySelectorFn("#page\\:mainForm\\:selectPlanet\\:\\:field option[value='1']");
   let jupiterOptionFn = querySelectorFn("#page\\:mainForm\\:selectPlanet\\:\\:field option[value='2']");
   let moonsFn = querySelectorAllFn("#page\\:mainForm\\:moonbox\\:\\:field option");
 
-  let TTT = new TobagoTestTool(assert);
-  TTT.action(function () {
-    jupiterOptionFn().selected = false;
-    marsOptionFn().selected = true;
-    planetFn().dispatchEvent(new Event("change", {bubbles: true}));
-  });
-  TTT.waitForResponse();
-  TTT.asserts(2, function () {
-    assert.equal(moonsFn().item(0).text, "Phobos");
-    assert.equal(moonsFn().item(1).text, "Deimos");
-  });
-  TTT.startTest();
+  const test = new JasmineTestTool(done);
+  test.setup(() => moonsFn().item(0).text !== "Phobos",
+      () => {
+        earthOptionFn().selected = true;
+        marsOptionFn().selected = false;
+        jupiterOptionFn().selected = false;
+      },
+      "change", planetFn);
+  test.do(() => earthOptionFn().selected = false);
+  test.do(() => marsOptionFn().selected = true);
+  test.do(() => jupiterOptionFn().selected = false);
+  test.event("change", planetFn, () => moonsFn().item(0).text === "Phobos");
+  test.do(() => expect(moonsFn().item(0).text).toBe("Phobos"));
+  test.do(() => expect(moonsFn().item(1).text).toBe("Deimos"));
+  test.start();
 });
 
-QUnit.test("ajax: select Jupiter", function (assert) {
+it("ajax: select Jupiter", function (done) {
   let planetFn = querySelectorFn("#page\\:mainForm\\:selectPlanet\\:\\:field");
+  let earthOptionFn = querySelectorFn("#page\\:mainForm\\:selectPlanet\\:\\:field option[value='0']");
   let marsOptionFn = querySelectorFn("#page\\:mainForm\\:selectPlanet\\:\\:field option[value='1']");
   let jupiterOptionFn = querySelectorFn("#page\\:mainForm\\:selectPlanet\\:\\:field option[value='2']");
   let moonsFn = querySelectorAllFn("#page\\:mainForm\\:moonbox\\:\\:field option");
 
-  let TTT = new TobagoTestTool(assert);
-  TTT.action(function () {
-    marsOptionFn().selected = false;
-    jupiterOptionFn().selected = true;
-    planetFn().dispatchEvent(new Event("change", {bubbles: true}));
-  });
-  TTT.waitForResponse();
-  TTT.asserts(4, function () {
-    assert.equal(moonsFn().item(0).text, "Europa");
-    assert.equal(moonsFn().item(1).text, "Ganymed");
-    assert.equal(moonsFn().item(2).text, "Io");
-    assert.equal(moonsFn().item(3).text, "Kallisto");
-  });
-  TTT.startTest();
+  const test = new JasmineTestTool(done);
+  test.setup(() => moonsFn().item(0).text !== "Europa",
+      () => {
+        earthOptionFn().selected = true;
+        marsOptionFn().selected = false;
+        jupiterOptionFn().selected = false;
+      },
+      "change", planetFn);
+  test.do(() => earthOptionFn().selected = false);
+  test.do(() => marsOptionFn().selected = false);
+  test.do(() => jupiterOptionFn().selected = true);
+  test.event("change", planetFn, () => moonsFn().item(0).text === "Europa");
+  test.do(() => expect(moonsFn().item(0).text).toBe("Europa"));
+  test.do(() => expect(moonsFn().item(1).text).toBe("Ganymed"));
+  test.do(() => expect(moonsFn().item(2).text).toBe("Io"));
+  test.do(() => expect(moonsFn().item(3).text).toBe("Kallisto"));
+  test.start();
 });
-*/
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/030-select/30-selectOneRadio/Radio.test.js b/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/030-select/30-selectOneRadio/Radio.test.js
index aaa1a91..65181af 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/030-select/30-selectOneRadio/Radio.test.js
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/030-select/30-selectOneRadio/Radio.test.js
@@ -53,6 +53,7 @@ it("submit: Subtraction (4 - 1)", function (done) {
   test.do(() => expect(outputFn().textContent).toBe("3"));
   test.start();
 });
+
 it("ajax: select Mars", function (done) {
   const earthFn = elementByIdFn("page:mainForm:selectPlanet::0");
   const marsFn = elementByIdFn("page:mainForm:selectPlanet::1");
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/030-select/40-selectOneListbox/Listbox.test.js b/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/030-select/40-selectOneListbox/Listbox.test.js
index dcad683..5987eca 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/030-select/40-selectOneListbox/Listbox.test.js
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/030-select/40-selectOneListbox/Listbox.test.js
@@ -16,98 +16,102 @@
  */
 
 import {JasmineTestTool} from "/tobago/test/tobago-test-tool.js";
-
-it("not implemented yet", function (done) {
-  let test = new JasmineTestTool(done);
-  test.do(() => fail("not implemented yet"));
-  test.start();
-});
-/*
 import {querySelectorAllFn, querySelectorFn} from "/script/tobago-test.js";
-import {TobagoTestTool} from "/tobago/test/tobago-test-tool.js";
 
-QUnit.test("submit: select 'Nile'", function (assert) {
+it("submit: select 'Nile'", function (done) {
   let riversFn = querySelectorAllFn("#page\\:mainForm\\:riverList option");
   let submitFn = querySelectorFn("#page\\:mainForm\\:riverSubmit");
-  let outputFn = querySelectorFn("#page\\:mainForm\\:riverOutput span");
+  let outputFn = querySelectorFn("#page\\:mainForm\\:riverOutput tobago-out");
 
-  let TTT = new TobagoTestTool(assert);
-  TTT.action(function () {
-    riversFn().item(0).selected = true; // Nile
-    riversFn().item(1).selected = false; // Amazon
-    riversFn().item(2).selected = false; // Yangtze
-    riversFn().item(3).selected = false; // Yellow River
-    riversFn().item(4).selected = false; // Paraná River
-    submitFn().dispatchEvent(new Event("click", {bubbles: true}));
-  });
-  TTT.waitForResponse();
-  TTT.asserts(1, function () {
-    assert.equal(outputFn().textContent, "6853 km");
-  });
-  TTT.startTest();
+  const test = new JasmineTestTool(done);
+  test.setup(() => outputFn().textContent !== "6853 km",
+      () => {
+        riversFn().item(0).selected = false; // Nile
+        riversFn().item(1).selected = false; // Amazon
+        riversFn().item(2).selected = false; // Yangtze
+        riversFn().item(3).selected = false; // Yellow River
+        riversFn().item(4).selected = false; // Paraná River
+      },
+      "click", submitFn);
+  test.do(() => riversFn().item(0).selected = true); // Nile
+  test.do(() => riversFn().item(1).selected = false); // Amazon
+  test.do(() => riversFn().item(2).selected = false); // Yangtze
+  test.do(() => riversFn().item(3).selected = false); // Yellow River
+  test.do(() => riversFn().item(4).selected = false); // Paraná River
+  test.event("click", submitFn, () => outputFn().textContent === "6853 km");
+  test.do(() => expect(outputFn().textContent).toBe("6853 km"));
+  test.start();
 });
 
-QUnit.test("submit: select 'Yangtze'", function (assert) {
+it("submit: select 'Yangtze'", function (done) {
   let riversFn = querySelectorAllFn("#page\\:mainForm\\:riverList option");
   let submitFn = querySelectorFn("#page\\:mainForm\\:riverSubmit");
-  let outputFn = querySelectorFn("#page\\:mainForm\\:riverOutput span");
+  let outputFn = querySelectorFn("#page\\:mainForm\\:riverOutput tobago-out");
 
-  let TTT = new TobagoTestTool(assert);
-  TTT.action(function () {
-    riversFn().item(0).selected = false; // Nile
-    riversFn().item(1).selected = false; // Amazon
-    riversFn().item(2).selected = true; // Yangtze
-    riversFn().item(3).selected = false; // Yellow River
-    riversFn().item(4).selected = false; // Paraná River
-    submitFn().dispatchEvent(new Event("click", {bubbles: true}));
-  });
-  TTT.waitForResponse();
-  TTT.asserts(1, function () {
-    assert.equal(outputFn().textContent, "6300 km");
-
-  });
-  TTT.startTest();
+  const test = new JasmineTestTool(done);
+  test.setup(() => outputFn().textContent !== "6300 km",
+      () => {
+        riversFn().item(0).selected = false; // Nile
+        riversFn().item(1).selected = false; // Amazon
+        riversFn().item(2).selected = false; // Yangtze
+        riversFn().item(3).selected = false; // Yellow River
+        riversFn().item(4).selected = false; // Paraná River
+      },
+      "click", submitFn);
+  test.do(() => riversFn().item(0).selected = false); // Nile
+  test.do(() => riversFn().item(1).selected = false); // Amazon
+  test.do(() => riversFn().item(2).selected = true); // Yangtze
+  test.do(() => riversFn().item(3).selected = false); // Yellow River
+  test.do(() => riversFn().item(4).selected = false); // Paraná River
+  test.event("click", submitFn, () => outputFn().textContent === "6300 km");
+  test.do(() => expect(outputFn().textContent).toBe("6300 km"));
+  test.start();
 });
 
-QUnit.test("ajax: select Everest", function (assert) {
+it("ajax: select Everest", function (done) {
   let mountainListFn = querySelectorFn("#page\\:mainForm\\:mountainList\\:\\:field");
   let mountainsFn = querySelectorAllFn("#page\\:mainForm\\:mountainList option");
-  let outputFn = querySelectorFn("#page\\:mainForm\\:selectedMountain span");
+  let outputFn = querySelectorFn("#page\\:mainForm\\:selectedMountain tobago-out");
 
-  let TTT = new TobagoTestTool(assert);
-  TTT.action(function () {
-    mountainsFn().item(1).selected = false;
-    mountainsFn().item(2).selected = false;
-    mountainsFn().item(3).selected = false;
-    mountainsFn().item(4).selected = false;
-    mountainsFn().item(0).selected = true; // Everest
-    mountainListFn().dispatchEvent(new Event("change", {bubbles: true})); // Everest
-  });
-  TTT.waitForResponse();
-  TTT.asserts(1, function () {
-    assert.equal(outputFn().textContent, "8848 m");
-  });
-  TTT.startTest();
+  const test = new JasmineTestTool(done);
+  test.setup(() => outputFn().textContent !== "8848 m",
+      () => {
+        mountainsFn().item(0).selected = false;
+        mountainsFn().item(1).selected = false;
+        mountainsFn().item(2).selected = false;
+        mountainsFn().item(3).selected = false;
+        mountainsFn().item(4).selected = false;
+      }, "change", mountainListFn);
+  test.do(() => mountainsFn().item(0).selected = true); // Everest
+  test.do(() => mountainsFn().item(1).selected = false);
+  test.do(() => mountainsFn().item(2).selected = false);
+  test.do(() => mountainsFn().item(3).selected = false);
+  test.do(() => mountainsFn().item(4).selected = false);
+  test.event("change", mountainListFn, () => outputFn().textContent === "8848 m");
+  test.do(() => expect(outputFn().textContent).toBe("8848 m"));
+  test.start();
 });
 
-QUnit.test("ajax: select Makalu", function (assert) {
+it("ajax: select Makalu", function (done) {
   let mountainListFn = querySelectorFn("#page\\:mainForm\\:mountainList\\:\\:field");
   let mountainsFn = querySelectorAllFn("#page\\:mainForm\\:mountainList option");
-  let outputFn = querySelectorFn("#page\\:mainForm\\:selectedMountain span");
+  let outputFn = querySelectorFn("#page\\:mainForm\\:selectedMountain tobago-out");
 
-  let TTT = new TobagoTestTool(assert);
-  TTT.action(function () {
-    mountainsFn().item(0).selected = false;
-    mountainsFn().item(1).selected = false;
-    mountainsFn().item(2).selected = false;
-    mountainsFn().item(3).selected = false;
-    mountainsFn().item(4).selected = true; // Everest
-    mountainListFn().dispatchEvent(new Event("change", {bubbles: true})); // Everest
-  });
-  TTT.waitForResponse();
-  TTT.asserts(1, function () {
-    assert.equal(outputFn().textContent, "8481 m");
-  });
-  TTT.startTest();
+  const test = new JasmineTestTool(done);
+  test.setup(() => outputFn().textContent !== "8481 m",
+      () => {
+        mountainsFn().item(0).selected = false;
+        mountainsFn().item(1).selected = false;
+        mountainsFn().item(2).selected = false;
+        mountainsFn().item(3).selected = false;
+        mountainsFn().item(4).selected = false;
+      }, "change", mountainListFn);
+  test.do(() => mountainsFn().item(0).selected = false); // Everest
+  test.do(() => mountainsFn().item(1).selected = false);
+  test.do(() => mountainsFn().item(2).selected = false);
+  test.do(() => mountainsFn().item(3).selected = false);
+  test.do(() => mountainsFn().item(4).selected = true); // Makalu
+  test.event("change", mountainListFn, () => outputFn().textContent === "8481 m");
+  test.do(() => expect(outputFn().textContent).toBe("8481 m"));
+  test.start();
 });
-*/
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/030-select/50-selectManyCheckbox/Multi_Checkbox.test.js b/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/030-select/50-selectManyCheckbox/Multi_Checkbox.test.js
index b29e09f..c5eb23d 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/030-select/50-selectManyCheckbox/Multi_Checkbox.test.js
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/030-select/50-selectManyCheckbox/Multi_Checkbox.test.js
@@ -16,126 +16,124 @@
  */
 
 import {JasmineTestTool} from "/tobago/test/tobago-test-tool.js";
-
-it("not implemented yet", function (done) {
-  let test = new JasmineTestTool(done);
-  test.do(() => fail("not implemented yet"));
-  test.start();
-});
-
-/*
 import {querySelectorAllFn, querySelectorFn} from "/script/tobago-test.js";
-import {TobagoTestTool} from "/tobago/test/tobago-test-tool.js";
 
-QUnit.test("submit: select cat", function (assert) {
+it("submit: select cat", function (done) {
   let animalsFn = querySelectorAllFn("#page\\:mainForm\\:animals input");
   let submitFn = querySelectorFn("#page\\:mainForm\\:submit");
-  let outputFn = querySelectorFn("#page\\:mainForm\\:animalsOutput span");
-
-  let TTT = new TobagoTestTool(assert);
-  TTT.action(function () {
-    animalsFn().item(0).checked = true;
-    animalsFn().item(1).checked = false;
-    animalsFn().item(2).checked = false;
-    animalsFn().item(3).checked = false;
-    submitFn().dispatchEvent(new Event("click", {bubbles: true}));
-  });
-  TTT.waitForResponse();
-  TTT.asserts(1, function () {
-    assert.equal(outputFn().textContent, "Cat ");
-  });
-  TTT.startTest();
+  let outputFn = querySelectorFn("#page\\:mainForm\\:animalsOutput tobago-out");
+
+  const test = new JasmineTestTool(done);
+  test.setup(() => outputFn().textContent.trim() !== "Cat",
+      () => {
+        animalsFn().item(0).checked = false;
+        animalsFn().item(1).checked = false;
+        animalsFn().item(2).checked = false;
+        animalsFn().item(3).checked = false;
+      },
+      "click", submitFn);
+  test.do(() => animalsFn().item(0).checked = true); // Cat
+  test.do(() => animalsFn().item(1).checked = false);
+  test.do(() => animalsFn().item(2).checked = false);
+  test.do(() => animalsFn().item(3).checked = false);
+  test.event("click", submitFn, () => outputFn().textContent.trim() === "Cat");
+  test.do(() => expect(outputFn().textContent.trim()).toBe("Cat"));
+  test.start();
 });
 
-QUnit.test("submit: select fox and rabbit", function (assert) {
+it("submit: select fox and rabbit", function (done) {
   let animalsFn = querySelectorAllFn("#page\\:mainForm\\:animals input");
   let submitFn = querySelectorFn("#page\\:mainForm\\:submit");
-  let outputFn = querySelectorFn("#page\\:mainForm\\:animalsOutput span");
-
-  let TTT = new TobagoTestTool(assert);
-  TTT.action(function () {
-    animalsFn().item(0).checked = false;
-    animalsFn().item(1).checked = false;
-    animalsFn().item(2).checked = true;
-    animalsFn().item(3).checked = true;
-    submitFn().dispatchEvent(new Event("click", {bubbles: true}));
-  });
-  TTT.waitForResponse();
-  TTT.asserts(1, function () {
-    assert.equal(outputFn().textContent, "Fox Rabbit ");
-  });
-  TTT.startTest();
+  let outputFn = querySelectorFn("#page\\:mainForm\\:animalsOutput tobago-out");
+
+  const test = new JasmineTestTool(done);
+  test.setup(() => outputFn().textContent.trim() !== "Fox Rabbit",
+      () => {
+        animalsFn().item(0).checked = false;
+        animalsFn().item(1).checked = false;
+        animalsFn().item(2).checked = false;
+        animalsFn().item(3).checked = false;
+      },
+      "click", submitFn);
+  test.do(() => animalsFn().item(0).checked = false); // Cat
+  test.do(() => animalsFn().item(1).checked = false);
+  test.do(() => animalsFn().item(2).checked = true); // Fox
+  test.do(() => animalsFn().item(3).checked = true); // Rabbit
+  test.event("click", submitFn, () => outputFn().textContent.trim() === "Fox Rabbit");
+  test.do(() => expect(outputFn().textContent.trim()).toBe("Fox Rabbit"));
+  test.start();
+});
+
+it("ajax: select 'One'", function (done) {
+  let numberFn = querySelectorFn("#page\\:mainForm\\:numbers\\:\\:0");
+  ajaxSelect(done, numberFn, 1);
+});
+
+it("ajax: deselect 'One'", function (done) {
+  let numberFn = querySelectorFn("#page\\:mainForm\\:numbers\\:\\:0");
+  ajaxDeselect(done, numberFn, 1);
 });
 
-QUnit.test("ajax: click 'Two'", function (assert) {
-  let number2Fn = querySelectorFn("#page\\:mainForm\\:numbers\\:\\:1");
-  let outputFn = querySelectorFn("#page\\:mainForm\\:resultOutput span");
-  let newOutputValue;
-
-  let TTT = new TobagoTestTool(assert);
-  TTT.action(function () {
-    if (number2Fn().checked) {
-      newOutputValue = parseInt(outputFn().textContent) - 2;
-      number2Fn().checked = false;
-      number2Fn().dispatchEvent(new Event("change", {bubbles: true}));
-    } else {
-      newOutputValue = parseInt(outputFn().textContent) + 2;
-      number2Fn().checked = true;
-      number2Fn().dispatchEvent(new Event("change", {bubbles: true}));
-    }
-  });
-  TTT.waitForResponse();
-  TTT.asserts(1, function () {
-    assert.equal(outputFn().textContent, newOutputValue);
-  });
-  TTT.startTest();
+it("ajax: select 'Two'", function (done) {
+  let numberFn = querySelectorFn("#page\\:mainForm\\:numbers\\:\\:1");
+  ajaxSelect(done, numberFn, 2);
 });
 
-QUnit.test("ajax: click 'Three'", function (assert) {
-  let number3Fn = querySelectorFn("#page\\:mainForm\\:numbers\\:\\:2");
-  let outputFn = querySelectorFn("#page\\:mainForm\\:resultOutput span");
-  let newOutputValue;
-
-  let TTT = new TobagoTestTool(assert);
-  TTT.action(function () {
-    if (number3Fn().checked) {
-      newOutputValue = parseInt(outputFn().textContent) - 3;
-      number3Fn().checked = false;
-      number3Fn().dispatchEvent(new Event("change", {bubbles: true}));
-    } else {
-      newOutputValue = parseInt(outputFn().textContent) + 3;
-      number3Fn().checked = true;
-      number3Fn().dispatchEvent(new Event("change", {bubbles: true}));
-    }
-  });
-  TTT.waitForResponse();
-  TTT.asserts(1, function () {
-    assert.equal(outputFn().textContent, newOutputValue);
-  });
-  TTT.startTest();
+it("ajax: deselect 'Two'", function (done) {
+  let numberFn = querySelectorFn("#page\\:mainForm\\:numbers\\:\\:1");
+  ajaxDeselect(done, numberFn, 2);
 });
 
-QUnit.test("ajax: click 'Two'", function (assert) {
-  let number2Fn = querySelectorFn("#page\\:mainForm\\:numbers\\:\\:1");
-  let outputFn = querySelectorFn("#page\\:mainForm\\:resultOutput span");
-  let newOutputValue;
-
-  let TTT = new TobagoTestTool(assert);
-  TTT.action(function () {
-    if (number2Fn().checked) {
-      newOutputValue = parseInt(outputFn().textContent) - 2;
-      number2Fn().checked = false;
-      number2Fn().dispatchEvent(new Event("change", {bubbles: true}));
-    } else {
-      newOutputValue = parseInt(outputFn().textContent) + 2;
-      number2Fn().checked = true;
-      number2Fn().dispatchEvent(new Event("change", {bubbles: true}));
-    }
-  });
-  TTT.waitForResponse();
-  TTT.asserts(1, function () {
-    assert.equal(outputFn().textContent, newOutputValue);
-  });
-  TTT.startTest();
+it("ajax: select 'Three'", function (done) {
+  let numberFn = querySelectorFn("#page\\:mainForm\\:numbers\\:\\:2");
+  ajaxSelect(done, numberFn, 3);
 });
-*/
+
+it("ajax: deselect 'Three'", function (done) {
+  let numberFn = querySelectorFn("#page\\:mainForm\\:numbers\\:\\:2");
+  ajaxDeselect(done, numberFn, 3);
+});
+
+it("ajax: select 'Four'", function (done) {
+  let numberFn = querySelectorFn("#page\\:mainForm\\:numbers\\:\\:3");
+  ajaxSelect(done, numberFn, 4);
+});
+
+it("ajax: deselect 'Four'", function (done) {
+  let numberFn = querySelectorFn("#page\\:mainForm\\:numbers\\:\\:3");
+  ajaxDeselect(done, numberFn, 4);
+});
+
+function ajaxSelect(done, numberFn, number) {
+  let outputFn = querySelectorFn("#page\\:mainForm\\:resultOutput tobago-out");
+  let newOutputValue = parseInt(outputFn().textContent);
+  if (!numberFn().checked) {
+    newOutputValue = parseInt(outputFn().textContent) + number;
+  }
+
+  const test = new JasmineTestTool(done);
+  test.setup(() => parseInt(outputFn().textContent) !== newOutputValue,
+      () => numberFn().checked = false,
+      "change", numberFn);
+  test.do(() => numberFn().checked = true);
+  test.event("change", numberFn, () => parseInt(outputFn().textContent) === newOutputValue);
+  test.do(() => expect(parseInt(outputFn().textContent)).toBe(newOutputValue));
+  test.start();
+}
+
+function ajaxDeselect(done, numberFn, number) {
+  let outputFn = querySelectorFn("#page\\:mainForm\\:resultOutput tobago-out");
+  let newOutputValue = parseInt(outputFn().textContent);
+  if (numberFn().checked) {
+    newOutputValue = parseInt(outputFn().textContent) - number;
+  }
+
+  const test = new JasmineTestTool(done);
+  test.setup(() => parseInt(outputFn().textContent) !== newOutputValue,
+      () => numberFn().checked = true,
+      "change", numberFn);
+  test.do(() => numberFn().checked = false);
+  test.event("change", numberFn, () => parseInt(outputFn().textContent) === newOutputValue);
+  test.do(() => expect(parseInt(outputFn().textContent)).toBe(newOutputValue));
+  test.start();
+}
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/030-select/70-selectManyShuttle/Shuttle.test.js b/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/030-select/70-selectManyShuttle/Shuttle.test.js
index fe9b85c..f43593e 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/030-select/70-selectManyShuttle/Shuttle.test.js
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/030-select/70-selectManyShuttle/Shuttle.test.js
@@ -16,17 +16,9 @@
  */
 
 import {JasmineTestTool} from "/tobago/test/tobago-test-tool.js";
-
-it("not implemented yet", function (done) {
-  let test = new JasmineTestTool(done);
-  test.do(() => fail("not implemented yet"));
-  test.start();
-});
-/*
 import {querySelectorAllFn, querySelectorFn} from "/script/tobago-test.js";
-import {TobagoTestTool} from "/tobago/test/tobago-test-tool.js";
 
-QUnit.test("submit: addAll, removeAll, addItem0to4, removeItem2to3", function (assert) {
+it("submit: addAll, removeAll, addItem0to4, removeItem2to3", function (done) {
   let unselectedOptions = querySelectorAllFn("#page\\:mainForm\\:submitExample\\:\\:unselected option");
   let selectedOptions = querySelectorAllFn("#page\\:mainForm\\:submitExample\\:\\:selected option");
   let addAllButton = querySelectorFn("#page\\:mainForm\\:submitExample\\:\\:addAll");
@@ -34,117 +26,95 @@ QUnit.test("submit: addAll, removeAll, addItem0to4, removeItem2to3", function (a
   let removeButton = querySelectorFn("#page\\:mainForm\\:submitExample\\:\\:remove");
   let removeAllButton = querySelectorFn("#page\\:mainForm\\:submitExample\\:\\:removeAll");
   let submitButton = querySelectorFn("#page\\:mainForm\\:submitButton");
-  let output = querySelectorFn("#page\\:mainForm\\:submitExampleOutput span");
-
-  let TTT = new TobagoTestTool(assert);
-  TTT.action(function () {
-    addAllButton().click();
-    submitButton().click();
-  });
-  TTT.waitForResponse();
-  TTT.asserts(3, function () {
-    assert.equal(unselectedOptions().length, 0);
-    assert.equal(selectedOptions().length, 9);
-    assert.equal(output().textContent, "[Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune, Pluto]");
-  });
-  TTT.action(function () {
-    removeAllButton().click();
-    submitButton().click();
-  });
-  TTT.waitForResponse();
-  TTT.asserts(3, function () {
-    assert.equal(unselectedOptions().length, 9);
-    assert.equal(selectedOptions().length, 0);
-    assert.equal(output().textContent, "[]");
-  });
-  TTT.action(function () {
-    unselectedOptions().item(0).selected = true;
-    unselectedOptions().item(1).selected = true;
-    unselectedOptions().item(2).selected = true;
-    unselectedOptions().item(3).selected = true;
-    unselectedOptions().item(4).selected = true;
-    addButton().click();
-    submitButton().click();
-  });
-  TTT.waitForResponse();
-  TTT.asserts(3, function () {
-    assert.equal(unselectedOptions().length, 4);
-    assert.equal(selectedOptions().length, 5);
-    assert.equal(output().textContent, "[Mercury, Venus, Earth, Mars, Jupiter]");
-  });
-  TTT.action(function () {
-    selectedOptions().item(2).selected = true;
-    selectedOptions().item(3).selected = true;
-    removeButton().click();
-    submitButton().click();
-  });
-  TTT.waitForResponse();
-  TTT.asserts(3, function () {
-    assert.equal(unselectedOptions().length, 6);
-    assert.equal(selectedOptions().length, 3);
-    assert.equal(output().textContent, "[Mercury, Venus, Jupiter]");
-  });
-  TTT.startTest();
+  let output = querySelectorFn("#page\\:mainForm\\:submitExampleOutput tobago-out");
+
+  const test = new JasmineTestTool(done);
+  test.setup(() => selectedOptions().length === 0, null, "click", removeAllButton);
+  test.setup(() => output().textContent === "[]", null, "click", submitButton);
+
+  test.event("click", addAllButton, () => selectedOptions().length === 9);
+  test.do(() => expect(unselectedOptions().length).toBe(0));
+  test.do(() => expect(selectedOptions().length).toBe(9));
+  test.event("click", submitButton,
+      () => output().textContent === "[Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune, Pluto]");
+  test.do(() => expect(output().textContent)
+      .toBe("[Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune, Pluto]"));
+
+  test.event("click", removeAllButton, () => selectedOptions().length === 0);
+  test.do(() => expect(unselectedOptions().length).toBe(9));
+  test.do(() => expect(selectedOptions().length).toBe(0));
+  test.event("click", submitButton, () => output().textContent === "[]");
+  test.do(() => expect(output().textContent).toBe("[]"));
+
+  test.do(() => unselectedOptions().item(0).selected = true);
+  test.do(() => unselectedOptions().item(1).selected = true);
+  test.do(() => unselectedOptions().item(2).selected = true);
+  test.do(() => unselectedOptions().item(3).selected = true);
+  test.do(() => unselectedOptions().item(4).selected = true);
+  test.event("click", addButton, () => selectedOptions().length === 5);
+  test.do(() => expect(unselectedOptions().length).toBe(4));
+  test.do(() => expect(selectedOptions().length).toBe(5));
+  test.event("click", submitButton, () => output().textContent === "[Mercury, Venus, Earth, Mars, Jupiter]");
+  test.do(() => expect(output().textContent).toBe("[Mercury, Venus, Earth, Mars, Jupiter]"));
+
+  test.do(() => selectedOptions().item(2).selected = true);
+  test.do(() => selectedOptions().item(3).selected = true);
+  test.event("click", removeButton, () => selectedOptions().length === 3);
+  test.do(() => expect(unselectedOptions().length).toBe(6));
+  test.do(() => expect(selectedOptions().length).toBe(3));
+  test.event("click", submitButton, () => output().textContent === "[Mercury, Venus, Jupiter]");
+  test.do(() => expect(output().textContent).toBe("[Mercury, Venus, Jupiter]"));
+
+  const pageOverlays = querySelectorAllFn(".tobago-page-overlay");
+  test.do(() => expect(pageOverlays().length).toBe(0));
+
+  test.start();
 });
 
-QUnit.test("ajax: addAll, removeAll, addItem1to2, removeItem0", function (assert) {
+it("ajax: addAll, removeAll, addItem1to2, removeItem0", function (done) {
   let unselectedOptions = querySelectorAllFn("#page\\:mainForm\\:ajaxExample\\:\\:unselected option");
   let selectedOptions = querySelectorAllFn("#page\\:mainForm\\:ajaxExample\\:\\:selected option");
   let addAllButton = querySelectorFn("#page\\:mainForm\\:ajaxExample\\:\\:addAll");
   let addButton = querySelectorFn("#page\\:mainForm\\:ajaxExample\\:\\:add");
   let removeButton = querySelectorFn("#page\\:mainForm\\:ajaxExample\\:\\:remove");
   let removeAllButton = querySelectorFn("#page\\:mainForm\\:ajaxExample\\:\\:removeAll");
-  let output = querySelectorFn("#page\\:mainForm\\:outputStars span");
-
-  let TTT = new TobagoTestTool(assert);
-  TTT.action(function () {
-    addAllButton().click();
-  });
-  // TTT.waitForResponse(); //TODO use waitForResponse()
-  TTT.waitMs(5000);
-  TTT.asserts(6, function () {
-    assert.equal(unselectedOptions().length, 0);
-    assert.equal(selectedOptions().length, 4);
-    assert.ok(output().textContent.indexOf(selectedOptions().item(0).value) > 0);
-    assert.ok(output().textContent.indexOf(selectedOptions().item(1).value) > 0);
-    assert.ok(output().textContent.indexOf(selectedOptions().item(2).value) > 0);
-    assert.ok(output().textContent.indexOf(selectedOptions().item(3).value) > 0);
-  });
-  TTT.action(function () {
-    removeAllButton().click();
-  });
-  // TTT.waitForResponse(); //TODO use waitForResponse()
-  TTT.waitMs(5000);
-  TTT.asserts(3, function () {
-    assert.equal(unselectedOptions().length, 4);
-    assert.equal(selectedOptions().length, 0);
-    assert.equal(output().textContent, "[]");
-  });
-  TTT.action(function () {
-    unselectedOptions().item(1).selected = true;
-    unselectedOptions().item(2).selected = true;
-    addButton().click();
-  });
-  // TTT.waitForResponse(); //TODO use waitForResponse()
-  TTT.waitMs(5000);
-  TTT.asserts(4, function () {
-    assert.equal(unselectedOptions().length, 2);
-    assert.equal(selectedOptions().length, 2);
-    assert.ok(output().textContent.indexOf(selectedOptions().item(0).value) > 0);
-    assert.ok(output().textContent.indexOf(selectedOptions().item(1).value) > 0);
-  });
-  TTT.action(function () {
-    selectedOptions().item(0).selected = true;
-    selectedOptions().item(1).selected = false;
-    removeButton().click();
-  });
-  // TTT.waitForResponse(); //TODO use waitForResponse()
-  TTT.waitMs(5000);
-  TTT.asserts(3, function () {
-    assert.equal(unselectedOptions().length, 3);
-    assert.equal(selectedOptions().length, 1);
-    assert.ok(output().textContent.indexOf(selectedOptions().item(0).value) > 0);
-  });
-  TTT.startTest();
+  let output = querySelectorFn("#page\\:mainForm\\:outputStars tobago-out");
+  let submitButton = querySelectorFn("#page\\:mainForm\\:submitButton");
+
+  const test = new JasmineTestTool(done);
+  test.setup(() => output().textContent === "[]", null, "click", removeAllButton);
+  test.setup(() => unselectedOptions().item(0).text === "Proxima Centauri"
+      && unselectedOptions().item(1).text === "Alpha Centauri"
+      && unselectedOptions().item(2).text === "Wolf 359"
+      && unselectedOptions().item(3).text === "Sirius",
+      null, "click", submitButton);
+
+  test.event("click", addAllButton,
+      () => output().textContent === "[Proxima Centauri, Alpha Centauri, Wolf 359, Sirius]");
+  test.do(() => expect(unselectedOptions().length).toBe(0));
+  test.do(() => expect(selectedOptions().length).toBe(4));
+  test.do(() => expect(output().textContent).toBe("[Proxima Centauri, Alpha Centauri, Wolf 359, Sirius]"));
+
+  test.event("click", removeAllButton, () => output().textContent === "[]");
+  test.do(() => expect(unselectedOptions().length).toBe(4));
+  test.do(() => expect(selectedOptions().length).toBe(0));
+  test.do(() => expect(output().textContent).toBe("[]"));
+
+  test.do(() => unselectedOptions().item(1).selected = true);
+  test.do(() => unselectedOptions().item(2).selected = true);
+  test.event("click", addButton, () => output().textContent === "[Alpha Centauri, Wolf 359]");
+  test.do(() => expect(unselectedOptions().length).toBe(2));
+  test.do(() => expect(selectedOptions().length).toBe(2));
+  test.do(() => expect(output().textContent).toBe("[Alpha Centauri, Wolf 359]"));
+
+  test.do(() => selectedOptions().item(0).selected = true);
+  test.do(() => selectedOptions().item(1).selected = false);
+  test.event("click", removeButton, () => output().textContent === "[Wolf 359]");
+  test.do(() => expect(unselectedOptions().length).toBe(3));
+  test.do(() => expect(selectedOptions().length).toBe(1));
+  test.do(() => expect(output().textContent).toBe("[Wolf 359]"));
+
+  const pageOverlays = querySelectorAllFn(".tobago-page-overlay");
+  test.do(() => expect(pageOverlays().length).toBe(0, "there must be no tobago-page-overlay"));
+  test.start();
 });
-*/