You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by hn...@apache.org on 2025/12/09 21:54:17 UTC

(myfaces-tobago) branch main updated: test: refactoring

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

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


The following commit(s) were added to refs/heads/main by this push:
     new 0b473486cf test: refactoring
0b473486cf is described below

commit 0b473486cf917a663ac973dc92849896a9007b6f
Author: Henning Noeth <hn...@apache.org>
AuthorDate: Tue Dec 9 21:27:07 2025 +0100

    test: refactoring
    
    Try to restructure test so a test is testing a specific component.
---
 .../form-check/form-check.test.js}                 |   0
 .../form-check/form-check.xhtml}                   |   2 +
 .../disabled-entries}/Disabled_entries.test.js     |  16 --
 .../disabled-entries}/Disabled_entries.xhtml       |  11 --
 .../no-entries}/No_entries.test.js                 |  28 ---
 .../no-entries}/No_entries.xhtml                   |   6 -
 .../Server_side_filtering.test.js                  | 188 +++++++++++++++++++++
 .../Server_side_filtering.xhtml}                   |  19 ---
 .../disabled-entries}/Disabled_entries.test.js     |  16 --
 .../disabled-entries}/Disabled_entries.xhtml       |  11 --
 .../no-entries}/No_entries.test.js                 |  28 ---
 .../no-entries/No_entries.xhtml}                   |   6 +-
 .../Server_side_filtering.test.js}                 | 144 ----------------
 .../Server_side_filtering.xhtml}                   |  19 ---
 14 files changed, 194 insertions(+), 300 deletions(-)

diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2001-checkboxes/Checkboxes.test.js b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/misc/form-check/form-check.test.js
similarity index 100%
rename from tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2001-checkboxes/Checkboxes.test.js
rename to tobago-example/tobago-example-demo/src/main/webapp/content/900-test/misc/form-check/form-check.test.js
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2001-checkboxes/Checkboxes.xhtml b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/misc/form-check/form-check.xhtml
similarity index 98%
rename from tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2001-checkboxes/Checkboxes.xhtml
rename to tobago-example/tobago-example-demo/src/main/webapp/content/900-test/misc/form-check/form-check.xhtml
index 93efc0ebec..603058fd85 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2001-checkboxes/Checkboxes.xhtml
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/misc/form-check/form-check.xhtml
@@ -22,6 +22,8 @@
                 xmlns:tc="http://myfaces.apache.org/tobago/component"
                 xmlns:ui="jakarta.faces.facelets">
 
+  <p>Test .form-check components which are checkboxes, toggles and radio buttons.</p>
+
   <tc:section label="tc:selectBooleanCheckbox">
     <tc:flexLayout columns="auto">
       <tc:selectBooleanCheckbox id="selectBooleanCheckbox" value="false"/>
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/35-disabled-entries/Disabled_entries.test.js b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectManyList/disabled-entries/Disabled_entries.test.js
similarity index 65%
copy from tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/35-disabled-entries/Disabled_entries.test.js
copy to tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectManyList/disabled-entries/Disabled_entries.test.js
index f831454377..972f5bd538 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/35-disabled-entries/Disabled_entries.test.js
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectManyList/disabled-entries/Disabled_entries.test.js
@@ -17,14 +17,6 @@
 
 import {querySelectorFn} from "/script/tobago-test.js";
 
-it("SelectOneList expanded=false: colors of list entries", function () {
-  const entry1 = querySelectorFn("[id='page:mainForm:selectOneList'] tr[data-tobago-value='1'] td[value='1']");
-  const entry2 = querySelectorFn("[id='page:mainForm:selectOneList'] tr[data-tobago-value='2'] td[value='2']");
-
-  expect(getComputedStyle(entry1()).backgroundColor).toBe("rgb(255, 255, 255)")
-  expect(getComputedStyle(entry2()).backgroundColor).toBe("rgb(233, 236, 239)")
-});
-
 it("SelectManyList expanded=false: colors of list entries", function () {
   const entry1 = querySelectorFn("[id='page:mainForm:selectManyList'] tr[data-tobago-value='1'] td[value='1']");
   const entry2 = querySelectorFn("[id='page:mainForm:selectManyList'] tr[data-tobago-value='2'] td[value='2']");
@@ -33,14 +25,6 @@ it("SelectManyList expanded=false: colors of list entries", function () {
   expect(getComputedStyle(entry2()).backgroundColor).toBe("rgb(233, 236, 239)")
 });
 
-it("SelectOneList expanded=true: colors of list entries", function () {
-  const entry1 = querySelectorFn("[id='page:mainForm:selectOneListExpanded'] tr[data-tobago-value='1'] td[value='1']");
-  const entry2 = querySelectorFn("[id='page:mainForm:selectOneListExpanded'] tr[data-tobago-value='2'] td[value='2']");
-
-  expect(getComputedStyle(entry1()).backgroundColor).toBe("rgb(255, 255, 255)")
-  expect(getComputedStyle(entry2()).backgroundColor).toBe("rgb(233, 236, 239)")
-});
-
 it("SelectManyList expanded=true: colors of list entries", function () {
   const entry1 = querySelectorFn("[id='page:mainForm:selectManyListExpanded'] tr[data-tobago-value='1'] td[value='1']");
   const entry2 = querySelectorFn("[id='page:mainForm:selectManyListExpanded'] tr[data-tobago-value='2'] td[value='2']");
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/35-disabled-entries/Disabled_entries.xhtml b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectManyList/disabled-entries/Disabled_entries.xhtml
similarity index 77%
copy from tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/35-disabled-entries/Disabled_entries.xhtml
copy to tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectManyList/disabled-entries/Disabled_entries.xhtml
index 7bf7d1f4df..3b39e1eeb7 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/35-disabled-entries/Disabled_entries.xhtml
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectManyList/disabled-entries/Disabled_entries.xhtml
@@ -21,22 +21,11 @@
                 xmlns="http://www.w3.org/1999/xhtml"
                 xmlns:tc="http://myfaces.apache.org/tobago/component"
                 xmlns:ui="jakarta.faces.facelets">
-
-  <tc:selectOneList id="selectOneList">
-    <tc:selectItem itemValue="1" itemLabel="Entry One"/>
-    <tc:selectItem itemValue="2" itemLabel="Entry Two (disabled)" itemDisabled="true"/>
-  </tc:selectOneList>
-
   <tc:selectManyList id="selectManyList">
     <tc:selectItem itemValue="1" itemLabel="Entry One"/>
     <tc:selectItem itemValue="2" itemLabel="Entry Two (disabled)" itemDisabled="true"/>
   </tc:selectManyList>
 
-  <tc:selectOneList id="selectOneListExpanded" expanded="true">
-    <tc:selectItem itemValue="1" itemLabel="Entry One"/>
-    <tc:selectItem itemValue="2" itemLabel="Entry Two (disabled)" itemDisabled="true"/>
-  </tc:selectOneList>
-
   <tc:selectManyList id="selectManyListExpanded" expanded="true">
     <tc:selectItem itemValue="1" itemLabel="Entry One"/>
     <tc:selectItem itemValue="2" itemLabel="Entry Two (disabled)" itemDisabled="true"/>
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/30-no-entries/No_entries.test.js b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectManyList/no-entries/No_entries.test.js
similarity index 61%
copy from tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/30-no-entries/No_entries.test.js
copy to tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectManyList/no-entries/No_entries.test.js
index ebfa94b6ca..a4dc92670e 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/30-no-entries/No_entries.test.js
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectManyList/no-entries/No_entries.test.js
@@ -18,34 +18,6 @@
 import {JasmineTestTool} from "/tobago/test/tobago-test-tool.js";
 import {elementByIdFn, querySelectorFn} from "/script/tobago-test.js";
 
-it("SelectOneList: no-entries hint after leaving", function (done) {
-  const rootComponent = elementByIdFn("page:mainForm:selectOneList");
-  const selectField = elementByIdFn("page:mainForm:selectOneList::selectField");
-  const filterInput = elementByIdFn("page:mainForm:selectOneList::filter");
-  const dropdownMenu = querySelectorFn(".tobago-dropdown-menu[name='page:mainForm:selectOneList']");
-  const noEntriesFooter = querySelectorFn(".tobago-dropdown-menu[name='page:mainForm:selectOneList'] .tobago-no-entries");
-
-  const test = new JasmineTestTool(done);
-  test.do(() => expect(dropdownMenu().classList).not.toContain("show"));
-  test.do(() => expect(noEntriesFooter().classList).toContain("d-none"));
-
-  test.event("focus", filterInput, () => rootComponent().classList.contains("tobago-focus"));
-  test.event("click", selectField, () => dropdownMenu().classList.contains("show"));
-  test.do(() => expect(dropdownMenu().classList).toContain("show"));
-  test.do(() => expect(noEntriesFooter().classList).toContain("d-none"));
-
-  test.event("blur", filterInput, () => !rootComponent().classList.contains("tobago-focus"));
-  test.do(() => expect(dropdownMenu().classList).not.toContain("show"));
-  test.do(() => expect(noEntriesFooter().classList).toContain("d-none"));
-
-  test.event("focus", filterInput, () => rootComponent().classList.contains("tobago-focus"));
-  test.event("click", selectField, () => dropdownMenu().classList.contains("show"));
-  test.do(() => expect(dropdownMenu().classList).toContain("show"));
-  test.do(() => expect(noEntriesFooter().classList).toContain("d-none"));
-
-  test.start();
-});
-
 it("SelectManyList: no-entries hint after leaving", function (done) {
   const rootComponent = elementByIdFn("page:mainForm:selectManyList");
   const selectField = elementByIdFn("page:mainForm:selectManyList::selectField");
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/30-no-entries/No_entries.xhtml b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectManyList/no-entries/No_entries.xhtml
similarity index 89%
rename from tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/30-no-entries/No_entries.xhtml
rename to tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectManyList/no-entries/No_entries.xhtml
index 50293dfc5e..beab179c83 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/30-no-entries/No_entries.xhtml
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectManyList/no-entries/No_entries.xhtml
@@ -21,12 +21,6 @@
                 xmlns="http://www.w3.org/1999/xhtml"
                 xmlns:tc="http://myfaces.apache.org/tobago/component"
                 xmlns:ui="jakarta.faces.facelets">
-
-  <tc:selectOneList id="selectOneList">
-    <tc:selectItem itemValue="Entry One"/>
-    <tc:selectItem itemValue="Entry Two"/>
-  </tc:selectOneList>
-
   <tc:selectManyList id="selectManyList">
     <tc:selectItem itemValue="Entry One"/>
     <tc:selectItem itemValue="Entry Two"/>
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectManyList/server-side-filtering/Server_side_filtering.test.js b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectManyList/server-side-filtering/Server_side_filtering.test.js
new file mode 100644
index 0000000000..65af83daa9
--- /dev/null
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectManyList/server-side-filtering/Server_side_filtering.test.js
@@ -0,0 +1,188 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import {JasmineTestTool} from "/tobago/test/tobago-test-tool.js";
+import {elementByIdFn, querySelectorAllFn, querySelectorFn} from "/script/tobago-test.js";
+
+it("SelectManyList minChar=3: leaving component", function (done) {
+  const minChar3 = elementByIdFn("page:mainForm:minChar3");
+  const badges = querySelectorAllFn("div[id='page:mainForm:selectManyList::selectField'] > .tobago-badges > .btn-group");
+  const filterInput = elementByIdFn("page:mainForm:selectManyList::filter");
+  const tobagoSelectItems = querySelectorAllFn(".tobago-dropdown-menu[name='page:mainForm:selectManyList'] .tobago-select-item");
+  const rheaSelectItem = querySelectorFn(".tobago-dropdown-menu[name='page:mainForm:selectManyList'] .tobago-select-item[data-tobago-value='Rhea']");
+  const customFooter = querySelectorFn(".tobago-dropdown-menu[name='page:mainForm:selectManyList'] .tobago-custom-footer");
+  const customFooterCell = querySelectorFn(".tobago-dropdown-menu[name='page:mainForm:selectManyList'] .tobago-custom-footer td");
+
+  let timestamp;
+
+  const test = new JasmineTestTool(done);
+  test.do(() => timestamp = currentTimestamp());
+  test.event("click", minChar3, () => currentTimestamp() > timestamp);
+  test.do(() => expect(tobagoSelectItems().length).toBe(0));
+  test.do(() => expect(customFooter().textContent.trim()).toBe("type 3 character for results"));
+  test.do(() => filterInput().value = "hea");
+  test.event("input", filterInput, () => tobagoSelectItems().length > 0);
+  test.do(() => expect(tobagoSelectItems().length).toBe(3));
+  test.do(() => expect(getComputedStyle(customFooterCell()).display).toBe("none"));
+  test.event("click", rheaSelectItem, () => badges().length === 1);
+  test.do(() => expect(badges()[0].dataset.tobagoValue).toBe("Rhea"));
+  test.do(() => expect(tobagoSelectItems().length).toBe(3));
+  test.event("blur", filterInput, () => tobagoSelectItems().length === 0);
+  test.do(() => expect(tobagoSelectItems().length).toBe(0));
+  test.start();
+});
+
+it("SelectManyList: avoid 'no valid selection' error", function (done) {
+  const reset = elementByIdFn("page:mainForm:reset");
+  const badges = querySelectorAllFn("div[id='page:mainForm:selectManyList::selectField'] > .tobago-badges > .btn-group");
+  const firstBadge = querySelectorFn("div[id='page:mainForm:selectManyList::selectField'] > .tobago-badges > .btn-group > .badge");
+  const filterInput = elementByIdFn("page:mainForm:selectManyList::filter");
+  const tobagoSelectItems = querySelectorAllFn(".tobago-dropdown-menu[name='page:mainForm:selectManyList'] .tobago-select-item");
+  const lysitheaSelectItem = querySelectorFn(".tobago-dropdown-menu[name='page:mainForm:selectManyList'] .tobago-select-item[data-tobago-value='Lysithea']");
+  const hiddenQueryInput = elementByIdFn("page:mainForm:selectItemsFilteredMany::query");
+  const popover = querySelectorFn("tobago-select-many-list[id='page:mainForm:selectManyList'] tobago-popover");
+
+  const test = new JasmineTestTool(done);
+  test.setup(() => badges().length === 0
+          && tobagoSelectItems().length === 0
+          && Number(hiddenQueryInput().dataset.tobagoMinChars) === 0,
+      null, "click", reset);
+  test.do(() => filterInput().value = "y");
+  test.event("input", filterInput, () => tobagoSelectItems().length > 0);
+  test.event("click", lysitheaSelectItem, () => badges().length > 0);
+  test.do(() => expect(firstBadge().textContent).toBe("Lysithea"));
+  test.event("click", reset, () => badges().length === 0);
+  test.do(() => expect(popover()).toBeNull());
+  test.start();
+});
+
+it("SelectManyList: footer must be visible for an empty list", function (done) {
+  const reset = elementByIdFn("page:mainForm:reset");
+  const badges = querySelectorAllFn("div[id='page:mainForm:selectManyList::selectField'] > .tobago-badges > .btn-group");
+  const filterInput = elementByIdFn("page:mainForm:selectManyList::filter");
+  const tobagoDropdownMenu = querySelectorFn(".tobago-dropdown-menu[name='page:mainForm:selectManyList']");
+  const tobagoSelectItems = querySelectorAllFn(".tobago-dropdown-menu[name='page:mainForm:selectManyList'] .tobago-select-item");
+  const customFooter = querySelectorFn(".tobago-dropdown-menu[name='page:mainForm:selectManyList'] .tobago-custom-footer");
+  const hiddenQueryInput = elementByIdFn("page:mainForm:selectItemsFilteredMany::query");
+
+  const test = new JasmineTestTool(done);
+  test.setup(() => badges().length === 0
+          && !tobagoDropdownMenu().classList.contains("show")
+          && tobagoSelectItems().length === 0
+          && Number(hiddenQueryInput().dataset.tobagoMinChars) === 0,
+      null, "click", reset);
+  test.do(() => expect(badges().length).toBe(0));
+  test.do(() => expect(tobagoDropdownMenu().classList.contains("show")).toBeFalse());
+  test.do(() => expect(tobagoSelectItems().length).toBe(0));
+  test.event("input", filterInput, () => tobagoDropdownMenu().classList.contains("show"));
+  test.do(() => expect(badges().length).toBe(0));
+  test.do(() => expect(tobagoDropdownMenu().classList.contains("show")).toBeTrue());
+  test.do(() => expect(tobagoSelectItems().length).toBe(0));
+  test.do(() => expect(customFooter().textContent.trim()).toBe("filter for results"));
+  test.start();
+});
+
+it("SelectManyList: ajax listener", function (done) {
+  const reset = elementByIdFn("page:mainForm:reset");
+  const selectField = querySelectorFn("#page\\:mainForm\\:selectManyList\\:\\:selectField");
+  const badges = querySelectorAllFn("div[id='page:mainForm:selectManyList::selectField'] > .tobago-badges > .btn-group");
+  const filterInput = elementByIdFn("page:mainForm:selectManyList::filter");
+  const tobagoSelectItems = querySelectorAllFn(".tobago-dropdown-menu[name='page:mainForm:selectManyList'] .tobago-select-item");
+  const thebeSelectItem = querySelectorFn(".tobago-dropdown-menu[name='page:mainForm:selectManyList'] .tobago-select-item[data-tobago-value='Thebe']");
+  const hiddenQueryInput = elementByIdFn("page:mainForm:selectItemsFilteredMany::query");
+
+  const test = new JasmineTestTool(done);
+  test.setup(() => changeCount() === 0
+          && clickCount() === 0
+          && dblclickCount() === 0
+          && focusCount() === 0
+          && blurCount() === 0
+          && badges().length === 0
+          && tobagoSelectItems().length === 0
+          && Number(hiddenQueryInput().dataset.tobagoMinChars) === 0,
+      null, "click", reset);
+  test.event("click", selectField, () => clickCount() >= 1);
+  test.do(() => expect(changeCount()).toBe(0));
+  test.do(() => expect(clickCount()).toBe(1));
+  test.do(() => expect(dblclickCount()).toBe(0));
+  test.do(() => expect(focusCount()).toBe(1));
+  test.do(() => expect(blurCount()).toBe(0));
+  test.event("dblclick", selectField, () => dblclickCount() >= 1);
+  test.do(() => expect(changeCount()).toBe(0));
+  test.do(() => expect(clickCount()).toBe(1));
+  test.do(() => expect(dblclickCount()).toBe(1));
+  test.do(() => expect(focusCount()).toBe(1));
+  test.do(() => expect(blurCount()).toBe(0));
+  test.event("focus", reset, () => blurCount() >= 1);
+  test.do(() => expect(changeCount()).toBe(0));
+  test.do(() => expect(clickCount()).toBe(1));
+  test.do(() => expect(dblclickCount()).toBe(1));
+  test.do(() => expect(focusCount()).toBe(1));
+  test.do(() => expect(blurCount()).toBe(1));
+  test.event("click", filterInput, () => clickCount() >= 2);
+  test.do(() => expect(changeCount()).toBe(0));
+  test.do(() => expect(clickCount()).toBe(2));
+  test.do(() => expect(dblclickCount()).toBe(1));
+  test.do(() => expect(focusCount()).toBe(2));
+  test.do(() => expect(blurCount()).toBe(1));
+  test.do(() => filterInput().value = "b");
+  test.event("input", filterInput, () => tobagoSelectItems().length > 0);
+  test.event("click", thebeSelectItem, () => badges().length > 0);
+  test.do(() => expect(changeCount()).toBe(1));
+  test.do(() => expect(clickCount()).toBe(3));
+  test.do(() => expect(dblclickCount()).toBe(1));
+  test.do(() => expect(focusCount()).toBe(2));
+  test.do(() => expect(blurCount()).toBe(1));
+  test.event("dblclick", selectField, () => dblclickCount() >= 2);
+  test.do(() => expect(changeCount()).toBe(1));
+  test.do(() => expect(clickCount()).toBe(3));
+  test.do(() => expect(dblclickCount()).toBe(2));
+  test.do(() => expect(focusCount()).toBe(2));
+  test.do(() => expect(blurCount()).toBe(1));
+  test.event("focus", reset, () => blurCount() >= 2);
+  test.do(() => expect(changeCount()).toBe(1));
+  test.do(() => expect(clickCount()).toBe(3));
+  test.do(() => expect(dblclickCount()).toBe(2));
+  test.do(() => expect(focusCount()).toBe(2));
+  test.do(() => expect(blurCount()).toBe(2));
+  test.start();
+});
+
+function currentTimestamp() {
+  const timestampOut = querySelectorFn("#page\\:mainForm\\:timestamp .form-control-plaintext");
+  return Number(timestampOut().textContent);
+}
+
+function changeCount() {
+  return parseInt(querySelectorFn("#page\\:mainForm\\:changeCounter .form-control-plaintext")().textContent);
+}
+
+function clickCount() {
+  return parseInt(querySelectorFn("#page\\:mainForm\\:clickCounter .form-control-plaintext")().textContent);
+}
+
+function dblclickCount() {
+  return parseInt(querySelectorFn("#page\\:mainForm\\:dblclickCounter .form-control-plaintext")().textContent);
+}
+
+function focusCount() {
+  return parseInt(querySelectorFn("#page\\:mainForm\\:focusCounter .form-control-plaintext")().textContent);
+}
+
+function blurCount() {
+  return parseInt(querySelectorFn("#page\\:mainForm\\:blurCounter .form-control-plaintext")().textContent);
+}
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/50-server/Server_Filtering.xhtml b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectManyList/server-side-filtering/Server_side_filtering.xhtml
similarity index 71%
copy from tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/50-server/Server_Filtering.xhtml
copy to tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectManyList/server-side-filtering/Server_side_filtering.xhtml
index 4864be1ff9..434d95d56a 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/50-server/Server_Filtering.xhtml
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectManyList/server-side-filtering/Server_side_filtering.xhtml
@@ -37,25 +37,6 @@
     <tc:out id="blurCounter" label="blur" value="#{selectListServerFilterController.blurCounter}" labelLayout="top"/>
   </tc:panel>
 
-  <tc:selectOneList id="selectOneList" label="selectOneList"
-                    value="#{selectListServerFilterController.selectedSolarObject}"
-                    footer="#{selectListServerFilterController.footerTextOne}">
-    <tc:selectItemsFiltered id="selectItemsFilteredOne" value="#{selectListServerFilterController.solarObjectsOne}"
-                            var="planet" itemLabel="#{planet.name}" itemValue="#{planet}"
-                            query="#{selectListServerFilterController.queryOne}"
-                            minimumCharacters="#{selectListServerFilterController.minChar}">
-    </tc:selectItemsFiltered>
-    <f:ajax render="statistics outputSelectOneList" listener="#{selectListServerFilterController.changeAjaxListener}"/>
-    <f:ajax event="click" render="statistics" listener="#{selectListServerFilterController.clickAjaxListener}"/>
-    <f:ajax event="dblclick" render="statistics" listener="#{selectListServerFilterController.dblclickAjaxListener}"/>
-    <f:ajax event="focus" render="statistics" listener="#{selectListServerFilterController.focusAjaxListener}"/>
-    <f:ajax event="blur" render="statistics" listener="#{selectListServerFilterController.blurAjaxListener}"/>
-  </tc:selectOneList>
-  <tc:out id="outputSelectOneList" label="Selected"
-          value="#{selectListServerFilterController.selectedSolarObjectString}"/>
-
-  <tc:separator/>
-
   <tc:out id="outputSelectManyList" label="Selected"
           value="#{selectListServerFilterController.selectedSolarObjectsString}"/>
   <tc:selectManyList id="selectManyList" label="selectManyList"
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/35-disabled-entries/Disabled_entries.test.js b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectOneList/disabled-entries/Disabled_entries.test.js
similarity index 65%
rename from tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/35-disabled-entries/Disabled_entries.test.js
rename to tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectOneList/disabled-entries/Disabled_entries.test.js
index f831454377..b06a8dbf26 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/35-disabled-entries/Disabled_entries.test.js
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectOneList/disabled-entries/Disabled_entries.test.js
@@ -25,14 +25,6 @@ it("SelectOneList expanded=false: colors of list entries", function () {
   expect(getComputedStyle(entry2()).backgroundColor).toBe("rgb(233, 236, 239)")
 });
 
-it("SelectManyList expanded=false: colors of list entries", function () {
-  const entry1 = querySelectorFn("[id='page:mainForm:selectManyList'] tr[data-tobago-value='1'] td[value='1']");
-  const entry2 = querySelectorFn("[id='page:mainForm:selectManyList'] tr[data-tobago-value='2'] td[value='2']");
-
-  expect(getComputedStyle(entry1()).backgroundColor).toBe("rgb(255, 255, 255)")
-  expect(getComputedStyle(entry2()).backgroundColor).toBe("rgb(233, 236, 239)")
-});
-
 it("SelectOneList expanded=true: colors of list entries", function () {
   const entry1 = querySelectorFn("[id='page:mainForm:selectOneListExpanded'] tr[data-tobago-value='1'] td[value='1']");
   const entry2 = querySelectorFn("[id='page:mainForm:selectOneListExpanded'] tr[data-tobago-value='2'] td[value='2']");
@@ -40,11 +32,3 @@ it("SelectOneList expanded=true: colors of list entries", function () {
   expect(getComputedStyle(entry1()).backgroundColor).toBe("rgb(255, 255, 255)")
   expect(getComputedStyle(entry2()).backgroundColor).toBe("rgb(233, 236, 239)")
 });
-
-it("SelectManyList expanded=true: colors of list entries", function () {
-  const entry1 = querySelectorFn("[id='page:mainForm:selectManyListExpanded'] tr[data-tobago-value='1'] td[value='1']");
-  const entry2 = querySelectorFn("[id='page:mainForm:selectManyListExpanded'] tr[data-tobago-value='2'] td[value='2']");
-
-  expect(getComputedStyle(entry1()).backgroundColor).toBe("rgb(255, 255, 255)")
-  expect(getComputedStyle(entry2()).backgroundColor).toBe("rgb(233, 236, 239)")
-});
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/35-disabled-entries/Disabled_entries.xhtml b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectOneList/disabled-entries/Disabled_entries.xhtml
similarity index 77%
rename from tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/35-disabled-entries/Disabled_entries.xhtml
rename to tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectOneList/disabled-entries/Disabled_entries.xhtml
index 7bf7d1f4df..0c77a53fba 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/35-disabled-entries/Disabled_entries.xhtml
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectOneList/disabled-entries/Disabled_entries.xhtml
@@ -21,24 +21,13 @@
                 xmlns="http://www.w3.org/1999/xhtml"
                 xmlns:tc="http://myfaces.apache.org/tobago/component"
                 xmlns:ui="jakarta.faces.facelets">
-
   <tc:selectOneList id="selectOneList">
     <tc:selectItem itemValue="1" itemLabel="Entry One"/>
     <tc:selectItem itemValue="2" itemLabel="Entry Two (disabled)" itemDisabled="true"/>
   </tc:selectOneList>
 
-  <tc:selectManyList id="selectManyList">
-    <tc:selectItem itemValue="1" itemLabel="Entry One"/>
-    <tc:selectItem itemValue="2" itemLabel="Entry Two (disabled)" itemDisabled="true"/>
-  </tc:selectManyList>
-
   <tc:selectOneList id="selectOneListExpanded" expanded="true">
     <tc:selectItem itemValue="1" itemLabel="Entry One"/>
     <tc:selectItem itemValue="2" itemLabel="Entry Two (disabled)" itemDisabled="true"/>
   </tc:selectOneList>
-
-  <tc:selectManyList id="selectManyListExpanded" expanded="true">
-    <tc:selectItem itemValue="1" itemLabel="Entry One"/>
-    <tc:selectItem itemValue="2" itemLabel="Entry Two (disabled)" itemDisabled="true"/>
-  </tc:selectManyList>
 </ui:composition>
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/30-no-entries/No_entries.test.js b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectOneList/no-entries/No_entries.test.js
similarity index 61%
rename from tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/30-no-entries/No_entries.test.js
rename to tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectOneList/no-entries/No_entries.test.js
index ebfa94b6ca..dc581cfcf5 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/30-no-entries/No_entries.test.js
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectOneList/no-entries/No_entries.test.js
@@ -45,31 +45,3 @@ it("SelectOneList: no-entries hint after leaving", function (done) {
 
   test.start();
 });
-
-it("SelectManyList: no-entries hint after leaving", function (done) {
-  const rootComponent = elementByIdFn("page:mainForm:selectManyList");
-  const selectField = elementByIdFn("page:mainForm:selectManyList::selectField");
-  const filterInput = elementByIdFn("page:mainForm:selectManyList::filter");
-  const dropdownMenu = querySelectorFn(".tobago-dropdown-menu[name='page:mainForm:selectManyList']");
-  const noEntriesFooter = querySelectorFn(".tobago-dropdown-menu[name='page:mainForm:selectManyList'] .tobago-no-entries");
-
-  const test = new JasmineTestTool(done);
-  test.do(() => expect(dropdownMenu().classList).not.toContain("show"));
-  test.do(() => expect(noEntriesFooter().classList).toContain("d-none"));
-
-  test.event("focus", filterInput, () => rootComponent().classList.contains("tobago-focus"));
-  test.event("click", selectField, () => dropdownMenu().classList.contains("show"));
-  test.do(() => expect(dropdownMenu().classList).toContain("show"));
-  test.do(() => expect(noEntriesFooter().classList).toContain("d-none"));
-
-  test.event("blur", filterInput, () => !rootComponent().classList.contains("tobago-focus"));
-  test.do(() => expect(dropdownMenu().classList).not.toContain("show"));
-  test.do(() => expect(noEntriesFooter().classList).toContain("d-none"));
-
-  test.event("focus", filterInput, () => rootComponent().classList.contains("tobago-focus"));
-  test.event("click", selectField, () => dropdownMenu().classList.contains("show"));
-  test.do(() => expect(dropdownMenu().classList).toContain("show"));
-  test.do(() => expect(noEntriesFooter().classList).toContain("d-none"));
-
-  test.start();
-});
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/SelectList.xhtml b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectOneList/no-entries/No_entries.xhtml
similarity index 87%
rename from tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/SelectList.xhtml
rename to tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectOneList/no-entries/No_entries.xhtml
index 5179ac4aea..4b24e935fd 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/SelectList.xhtml
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectOneList/no-entries/No_entries.xhtml
@@ -21,6 +21,8 @@
                 xmlns="http://www.w3.org/1999/xhtml"
                 xmlns:tc="http://myfaces.apache.org/tobago/component"
                 xmlns:ui="jakarta.faces.facelets">
-
-  <p>Tests for both tc:selectOneList and tc:selectManyList</p>
+  <tc:selectOneList id="selectOneList">
+    <tc:selectItem itemValue="Entry One"/>
+    <tc:selectItem itemValue="Entry Two"/>
+  </tc:selectOneList>
 </ui:composition>
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/50-server/Server_Filtering.test.js b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectOneList/server-side-filtering/Server_side_filtering.test.js
similarity index 58%
rename from tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/50-server/Server_Filtering.test.js
rename to tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectOneList/server-side-filtering/Server_side_filtering.test.js
index 473f4bda96..212c55906c 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/50-server/Server_Filtering.test.js
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectOneList/server-side-filtering/Server_side_filtering.test.js
@@ -76,34 +76,6 @@ it("SelectOneList minChar=3: leaving component", function (done) {
   test.start();
 });
 
-it("SelectManyList minChar=3: leaving component", function (done) {
-  const minChar3 = elementByIdFn("page:mainForm:minChar3");
-  const badges = querySelectorAllFn("div[id='page:mainForm:selectManyList::selectField'] > .tobago-badges > .btn-group");
-  const filterInput = elementByIdFn("page:mainForm:selectManyList::filter");
-  const tobagoSelectItems = querySelectorAllFn(".tobago-dropdown-menu[name='page:mainForm:selectManyList'] .tobago-select-item");
-  const rheaSelectItem = querySelectorFn(".tobago-dropdown-menu[name='page:mainForm:selectManyList'] .tobago-select-item[data-tobago-value='Rhea']");
-  const customFooter = querySelectorFn(".tobago-dropdown-menu[name='page:mainForm:selectManyList'] .tobago-custom-footer");
-  const customFooterCell = querySelectorFn(".tobago-dropdown-menu[name='page:mainForm:selectManyList'] .tobago-custom-footer td");
-
-  let timestamp;
-
-  const test = new JasmineTestTool(done);
-  test.do(() => timestamp = currentTimestamp());
-  test.event("click", minChar3, () => currentTimestamp() > timestamp);
-  test.do(() => expect(tobagoSelectItems().length).toBe(0));
-  test.do(() => expect(customFooter().textContent.trim()).toBe("type 3 character for results"));
-  test.do(() => filterInput().value = "hea");
-  test.event("input", filterInput, () => tobagoSelectItems().length > 0);
-  test.do(() => expect(tobagoSelectItems().length).toBe(3));
-  test.do(() => expect(getComputedStyle(customFooterCell()).display).toBe("none"));
-  test.event("click", rheaSelectItem, () => badges().length === 1);
-  test.do(() => expect(badges()[0].dataset.tobagoValue).toBe("Rhea"));
-  test.do(() => expect(tobagoSelectItems().length).toBe(3));
-  test.event("blur", filterInput, () => tobagoSelectItems().length === 0);
-  test.do(() => expect(tobagoSelectItems().length).toBe(0));
-  test.start();
-});
-
 it("SelectOneList: avoid 'no valid selection' error", function (done) {
   const reset = elementByIdFn("page:mainForm:reset");
   const span = querySelectorFn("#page\\:mainForm\\:selectOneList\\:\\:selectField span");
@@ -128,30 +100,6 @@ it("SelectOneList: avoid 'no valid selection' error", function (done) {
   test.start();
 });
 
-it("SelectManyList: avoid 'no valid selection' error", function (done) {
-  const reset = elementByIdFn("page:mainForm:reset");
-  const badges = querySelectorAllFn("div[id='page:mainForm:selectManyList::selectField'] > .tobago-badges > .btn-group");
-  const firstBadge = querySelectorFn("div[id='page:mainForm:selectManyList::selectField'] > .tobago-badges > .btn-group > .badge");
-  const filterInput = elementByIdFn("page:mainForm:selectManyList::filter");
-  const tobagoSelectItems = querySelectorAllFn(".tobago-dropdown-menu[name='page:mainForm:selectManyList'] .tobago-select-item");
-  const lysitheaSelectItem = querySelectorFn(".tobago-dropdown-menu[name='page:mainForm:selectManyList'] .tobago-select-item[data-tobago-value='Lysithea']");
-  const hiddenQueryInput = elementByIdFn("page:mainForm:selectItemsFilteredMany::query");
-  const popover = querySelectorFn("tobago-select-many-list[id='page:mainForm:selectManyList'] tobago-popover");
-
-  const test = new JasmineTestTool(done);
-  test.setup(() => badges().length === 0
-          && tobagoSelectItems().length === 0
-          && Number(hiddenQueryInput().dataset.tobagoMinChars) === 0,
-      null, "click", reset);
-  test.do(() => filterInput().value = "y");
-  test.event("input", filterInput, () => tobagoSelectItems().length > 0);
-  test.event("click", lysitheaSelectItem, () => badges().length > 0);
-  test.do(() => expect(firstBadge().textContent).toBe("Lysithea"));
-  test.event("click", reset, () => badges().length === 0);
-  test.do(() => expect(popover()).toBeNull());
-  test.start();
-});
-
 it("SelectOneList: footer must be visible for an empty list", function (done) {
   const reset = elementByIdFn("page:mainForm:reset");
   const span = querySelectorFn("#page\\:mainForm\\:selectOneList\\:\\:selectField span");
@@ -178,32 +126,6 @@ it("SelectOneList: footer must be visible for an empty list", function (done) {
   test.start();
 });
 
-it("SelectManyList: footer must be visible for an empty list", function (done) {
-  const reset = elementByIdFn("page:mainForm:reset");
-  const badges = querySelectorAllFn("div[id='page:mainForm:selectManyList::selectField'] > .tobago-badges > .btn-group");
-  const filterInput = elementByIdFn("page:mainForm:selectManyList::filter");
-  const tobagoDropdownMenu = querySelectorFn(".tobago-dropdown-menu[name='page:mainForm:selectManyList']");
-  const tobagoSelectItems = querySelectorAllFn(".tobago-dropdown-menu[name='page:mainForm:selectManyList'] .tobago-select-item");
-  const customFooter = querySelectorFn(".tobago-dropdown-menu[name='page:mainForm:selectManyList'] .tobago-custom-footer");
-  const hiddenQueryInput = elementByIdFn("page:mainForm:selectItemsFilteredMany::query");
-
-  const test = new JasmineTestTool(done);
-  test.setup(() => badges().length === 0
-          && !tobagoDropdownMenu().classList.contains("show")
-          && tobagoSelectItems().length === 0
-          && Number(hiddenQueryInput().dataset.tobagoMinChars) === 0,
-      null, "click", reset);
-  test.do(() => expect(badges().length).toBe(0));
-  test.do(() => expect(tobagoDropdownMenu().classList.contains("show")).toBeFalse());
-  test.do(() => expect(tobagoSelectItems().length).toBe(0));
-  test.event("input", filterInput, () => tobagoDropdownMenu().classList.contains("show"));
-  test.do(() => expect(badges().length).toBe(0));
-  test.do(() => expect(tobagoDropdownMenu().classList.contains("show")).toBeTrue());
-  test.do(() => expect(tobagoSelectItems().length).toBe(0));
-  test.do(() => expect(customFooter().textContent.trim()).toBe("filter for results"));
-  test.start();
-});
-
 it("SelectOneList: ajax listener", function (done) {
   const reset = elementByIdFn("page:mainForm:reset");
   const selectField = querySelectorFn("#page\\:mainForm\\:selectOneList\\:\\:selectField");
@@ -270,72 +192,6 @@ it("SelectOneList: ajax listener", function (done) {
   test.start();
 });
 
-it("SelectManyList: ajax listener", function (done) {
-  const reset = elementByIdFn("page:mainForm:reset");
-  const selectField = querySelectorFn("#page\\:mainForm\\:selectManyList\\:\\:selectField");
-  const badges = querySelectorAllFn("div[id='page:mainForm:selectManyList::selectField'] > .tobago-badges > .btn-group");
-  const filterInput = elementByIdFn("page:mainForm:selectManyList::filter");
-  const tobagoSelectItems = querySelectorAllFn(".tobago-dropdown-menu[name='page:mainForm:selectManyList'] .tobago-select-item");
-  const thebeSelectItem = querySelectorFn(".tobago-dropdown-menu[name='page:mainForm:selectManyList'] .tobago-select-item[data-tobago-value='Thebe']");
-  const hiddenQueryInput = elementByIdFn("page:mainForm:selectItemsFilteredMany::query");
-
-  const test = new JasmineTestTool(done);
-  test.setup(() => changeCount() === 0
-          && clickCount() === 0
-          && dblclickCount() === 0
-          && focusCount() === 0
-          && blurCount() === 0
-          && badges().length === 0
-          && tobagoSelectItems().length === 0
-          && Number(hiddenQueryInput().dataset.tobagoMinChars) === 0,
-      null, "click", reset);
-  test.event("click", selectField, () => clickCount() >= 1);
-  test.do(() => expect(changeCount()).toBe(0));
-  test.do(() => expect(clickCount()).toBe(1));
-  test.do(() => expect(dblclickCount()).toBe(0));
-  test.do(() => expect(focusCount()).toBe(1));
-  test.do(() => expect(blurCount()).toBe(0));
-  test.event("dblclick", selectField, () => dblclickCount() >= 1);
-  test.do(() => expect(changeCount()).toBe(0));
-  test.do(() => expect(clickCount()).toBe(1));
-  test.do(() => expect(dblclickCount()).toBe(1));
-  test.do(() => expect(focusCount()).toBe(1));
-  test.do(() => expect(blurCount()).toBe(0));
-  test.event("focus", reset, () => blurCount() >= 1);
-  test.do(() => expect(changeCount()).toBe(0));
-  test.do(() => expect(clickCount()).toBe(1));
-  test.do(() => expect(dblclickCount()).toBe(1));
-  test.do(() => expect(focusCount()).toBe(1));
-  test.do(() => expect(blurCount()).toBe(1));
-  test.event("click", filterInput, () => clickCount() >= 2);
-  test.do(() => expect(changeCount()).toBe(0));
-  test.do(() => expect(clickCount()).toBe(2));
-  test.do(() => expect(dblclickCount()).toBe(1));
-  test.do(() => expect(focusCount()).toBe(2));
-  test.do(() => expect(blurCount()).toBe(1));
-  test.do(() => filterInput().value = "b");
-  test.event("input", filterInput, () => tobagoSelectItems().length > 0);
-  test.event("click", thebeSelectItem, () => badges().length > 0);
-  test.do(() => expect(changeCount()).toBe(1));
-  test.do(() => expect(clickCount()).toBe(3));
-  test.do(() => expect(dblclickCount()).toBe(1));
-  test.do(() => expect(focusCount()).toBe(2));
-  test.do(() => expect(blurCount()).toBe(1));
-  test.event("dblclick", selectField, () => dblclickCount() >= 2);
-  test.do(() => expect(changeCount()).toBe(1));
-  test.do(() => expect(clickCount()).toBe(3));
-  test.do(() => expect(dblclickCount()).toBe(2));
-  test.do(() => expect(focusCount()).toBe(2));
-  test.do(() => expect(blurCount()).toBe(1));
-  test.event("focus", reset, () => blurCount() >= 2);
-  test.do(() => expect(changeCount()).toBe(1));
-  test.do(() => expect(clickCount()).toBe(3));
-  test.do(() => expect(dblclickCount()).toBe(2));
-  test.do(() => expect(focusCount()).toBe(2));
-  test.do(() => expect(blurCount()).toBe(2));
-  test.start();
-});
-
 function currentTimestamp() {
   const timestampOut = querySelectorFn("#page\\:mainForm\\:timestamp .form-control-plaintext");
   return Number(timestampOut().textContent);
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/50-server/Server_Filtering.xhtml b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectOneList/server-side-filtering/Server_side_filtering.xhtml
similarity index 71%
rename from tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/50-server/Server_Filtering.xhtml
rename to tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectOneList/server-side-filtering/Server_side_filtering.xhtml
index 4864be1ff9..828d122841 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/2101-selectList/50-server/Server_Filtering.xhtml
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/selectOneList/server-side-filtering/Server_side_filtering.xhtml
@@ -53,23 +53,4 @@
   </tc:selectOneList>
   <tc:out id="outputSelectOneList" label="Selected"
           value="#{selectListServerFilterController.selectedSolarObjectString}"/>
-
-  <tc:separator/>
-
-  <tc:out id="outputSelectManyList" label="Selected"
-          value="#{selectListServerFilterController.selectedSolarObjectsString}"/>
-  <tc:selectManyList id="selectManyList" label="selectManyList"
-                     value="#{selectListServerFilterController.selectedSolarObjects}"
-                     footer="#{selectListServerFilterController.footerTextMany}">
-    <tc:selectItemsFiltered id="selectItemsFilteredMany" value="#{selectListServerFilterController.solarObjectsMany}"
-                            var="planet" itemLabel="#{planet.name}" itemValue="#{planet}"
-                            query="#{selectListServerFilterController.queryMany}"
-                            minimumCharacters="#{selectListServerFilterController.minChar}">
-    </tc:selectItemsFiltered>
-    <f:ajax render="statistics outputSelectManyList" listener="#{selectListServerFilterController.changeAjaxListener}"/>
-    <f:ajax event="click" render="statistics" listener="#{selectListServerFilterController.clickAjaxListener}"/>
-    <f:ajax event="dblclick" render="statistics" listener="#{selectListServerFilterController.dblclickAjaxListener}"/>
-    <f:ajax event="focus" render="statistics" listener="#{selectListServerFilterController.focusAjaxListener}"/>
-    <f:ajax event="blur" render="statistics" listener="#{selectListServerFilterController.blurAjaxListener}"/>
-  </tc:selectManyList>
 </ui:composition>