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 2023/06/01 15:12:58 UTC

[myfaces-tobago] branch tobago-5.x updated: test: event

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

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


The following commit(s) were added to refs/heads/tobago-5.x by this push:
     new 28af40c4ba test: event
28af40c4ba is described below

commit 28af40c4ba56aff5f36f9e314b87149f246d85fd
Author: Henning Noeth <hn...@apache.org>
AuthorDate: Wed May 24 09:20:59 2023 +0200

    test: event
    
    * increase jasmine DEFAULT_TIMEOUT_INTERVAL to 5 minutes to fix event.test.js on jetty
    * add a column for input event
    * add selectOneList and selectManyList to list
    * add a test for textarea input event
    * add test for selectOneListbox
---
 .../tobago/example/demo/EventController.java       |  9 ++++++
 .../content/900-test/6000-event/Event.test.js      | 27 +++++++++++++----
 .../webapp/content/900-test/6000-event/Event.xhtml |  8 +++++
 .../6000-event/x-event-selectOneListbox.xhtml      | 34 +++++++++++++++++++++-
 .../900-test/6000-event/x-event-textarea.xhtml     |  4 +++
 .../src/main/webapp/script/tobago-test.js          |  1 +
 6 files changed, 77 insertions(+), 6 deletions(-)

diff --git a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/EventController.java b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/EventController.java
index dcb628a786..5c651fa8a9 100644
--- a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/EventController.java
+++ b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/EventController.java
@@ -54,9 +54,11 @@ import org.apache.myfaces.tobago.component.UISection;
 import org.apache.myfaces.tobago.component.UISegmentLayout;
 import org.apache.myfaces.tobago.component.UISelectBooleanCheckbox;
 import org.apache.myfaces.tobago.component.UISelectManyCheckbox;
+import org.apache.myfaces.tobago.component.UISelectManyList;
 import org.apache.myfaces.tobago.component.UISelectManyListbox;
 import org.apache.myfaces.tobago.component.UISelectManyShuttle;
 import org.apache.myfaces.tobago.component.UISelectOneChoice;
+import org.apache.myfaces.tobago.component.UISelectOneList;
 import org.apache.myfaces.tobago.component.UISelectOneListbox;
 import org.apache.myfaces.tobago.component.UISelectOneRadio;
 import org.apache.myfaces.tobago.component.UISeparator;
@@ -138,9 +140,11 @@ public class EventController implements Serializable {
     eventsOnComponents.add(new EventsOnComponent(new UISelectBooleanCheckbox()));
     eventsOnComponents.add(new EventsOnComponent(new UISelectManyCheckbox()));
     eventsOnComponents.add(new EventsOnComponent(new UISelectManyListbox()));
+    eventsOnComponents.add(new EventsOnComponent(new UISelectManyList()));
     eventsOnComponents.add(new EventsOnComponent(new UISelectManyShuttle()));
     eventsOnComponents.add(new EventsOnComponent(new UISelectOneChoice()));
     eventsOnComponents.add(new EventsOnComponent(new UISelectOneListbox()));
+    eventsOnComponents.add(new EventsOnComponent(new UISelectOneList()));
     eventsOnComponents.add(new EventsOnComponent(new UISelectOneRadio()));
     eventsOnComponents.add(new EventsOnComponent(new UISeparator()));
     eventsOnComponents.add(new EventsOnComponent(new UISheet()));
@@ -266,6 +270,10 @@ public class EventController implements Serializable {
       return eventNames.contains(CommonEvent.focus.name());
     }
 
+    public boolean hasInputEvent() {
+      return eventNames.contains(CommonEvent.input.name());
+    }
+
     public boolean hasKeydownEvent() {
       return eventNames.contains(CommonEvent.keydown.name());
     }
@@ -341,6 +349,7 @@ public class EventController implements Serializable {
     change,
     click, dblclick,
     focus, blur,
+    input,
     keydown, keypress, keyup,
     mousedown, mousemove, mouseout, mouseover, mouseup,
     select
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/6000-event/Event.test.js b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/6000-event/Event.test.js
index 73468c8b2b..8bd1a4ecc3 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/6000-event/Event.test.js
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/6000-event/Event.test.js
@@ -71,8 +71,26 @@ it("tc:selectBooleanCheckbox", function (done) {
   test.start();
 });
 
-it("tc:textarea", function (done) {
+it("tc:selectOneListbox", function (done) {
   const eventNames = ["change", "click", "dblclick", "focus", "blur"];
+  const eventComponentFn = elementByIdFn("page:mainForm:selectOneListboxevent::field");
+  const ajaxComponentFn = elementByIdFn("page:mainForm:selectOneListboxajax::field");
+
+  const changeValueFn = function (componentFn) {
+    if (componentFn().querySelectorAll("option")[0].selected) {
+      componentFn().querySelectorAll("option")[1].selected = true;
+    } else {
+      componentFn().querySelectorAll("option")[0].selected = true;
+    }
+  };
+
+  const test = new JasmineTestTool(done);
+  createSteps(test, "selectOneListbox", eventNames, eventComponentFn, ajaxComponentFn, changeValueFn);
+  test.start();
+});
+
+it("tc:textarea", function (done) {
+  const eventNames = ["change", "click", "dblclick", "focus", "blur", "input"];
   const eventComponentFn = elementByIdFn("page:mainForm:textareaevent::field");
   const ajaxComponentFn = elementByIdFn("page:mainForm:textareaajax::field");
 
@@ -108,10 +126,9 @@ function createSteps(test, componentName, eventNames, eventComponentFn, ajaxComp
     const eventName = eventNames[i];
     let rowIdPrefix;
 
-    const tobagoSheetRow = rows();
-    Array.prototype.forEach.call(tobagoSheetRow, (element, i) => {
-      const tobagoOut = element.querySelector("tobago-out");
-      if (tobagoOut.querySelector(".form-control-plaintext").textContent === componentName) {
+    rows().forEach((row) => {
+      const tobagoOut = row.querySelector("tobago-out");
+      if (row.querySelector("tobago-out .form-control-plaintext").textContent === componentName) {
         rowIdPrefix = tobagoOut.id.slice(0, tobagoOut.id.lastIndexOf(":"));
       }
     });
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/6000-event/Event.xhtml b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/6000-event/Event.xhtml
index 5a18758237..396f0139d9 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/6000-event/Event.xhtml
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/6000-event/Event.xhtml
@@ -103,6 +103,14 @@
       <tc:out value="-" labelLayout="skip" rendered="#{!comp.hasBlurEvent()}"/>
       <tc:style customClass="#{comp.hasBlurEvent() ? 'demo-lightgreen' : 'demo-lightred'}"/>
     </tc:column>
+    <tc:column label="input" align="center">
+      <tc:button id="inputBehavior" label="X"
+                 actionListener="#{eventController.selectComponent}" rendered="#{comp.hasInputEvent()}">
+        <f:attribute name="eventName" value="input"/>
+      </tc:button>
+      <tc:out value="-" labelLayout="skip" rendered="#{!comp.hasInputEvent()}"/>
+      <tc:style customClass="#{comp.hasInputEvent() ? 'demo-lightgreen' : 'demo-lightred'}"/>
+    </tc:column>
     <tc:column label="key down" align="center">
       <tc:button id="keydownBehavior" label="X"
                  actionListener="#{eventController.selectComponent}" rendered="#{comp.hasKeydownEvent()}">
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/6000-event/x-event-selectOneListbox.xhtml b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/6000-event/x-event-selectOneListbox.xhtml
index 63526e227d..7e99e9827b 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/6000-event/x-event-selectOneListbox.xhtml
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/6000-event/x-event-selectOneListbox.xhtml
@@ -18,6 +18,38 @@
 -->
 
 <ui:composition xmlns="http://www.w3.org/1999/xhtml"
+                xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
+                xmlns:f="http://xmlns.jcp.org/jsf/core"
+                xmlns:tc="http://myfaces.apache.org/tobago/component"
                 xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
-  <p>Not implemented yet!</p>
+  <tc:selectOneListbox id="selectOneListbox#{eventType}" valueChangeListener="#{eventController.valueChangeListener}">
+    <tc:selectItem itemValue="alpha" itemLabel="Alpha"/>
+    <tc:selectItem itemValue="beta" itemLabel="Beta"/>
+    <tc:selectItem itemValue="gamma" itemLabel="Gamma"/>
+    <tc:selectItem itemValue="delta" itemLabel="Delta"/>
+    <c:if test="#{eventType == 'ajax'}">
+      <f:ajax event="change" render="metrics" listener="#{eventController.ajaxListener}"
+              disabled="#{eventName != 'change'}"/>
+      <f:ajax event="click" render="metrics" listener="#{eventController.ajaxListener}"
+              disabled="#{eventName != 'click'}"/>
+      <f:ajax event="dblclick" render="metrics" listener="#{eventController.ajaxListener}"
+              disabled="#{eventName != 'dblclick'}"/>
+      <f:ajax event="focus" render="metrics" listener="#{eventController.ajaxListener}"
+              disabled="#{eventName != 'focus'}"/>
+      <f:ajax event="blur" render="metrics" listener="#{eventController.ajaxListener}"
+              disabled="#{eventName != 'blur'}"/>
+    </c:if>
+    <c:if test="#{eventType == 'event'}">
+      <tc:event event="change" action="#{eventController.action}" actionListener="#{eventController.actionListener}"
+                rendered="#{eventName == 'change'}"/>
+      <tc:event event="click" action="#{eventController.action}" actionListener="#{eventController.actionListener}"
+                rendered="#{eventName == 'click'}"/>
+      <tc:event event="dblclick" action="#{eventController.action}" actionListener="#{eventController.actionListener}"
+                rendered="#{eventName == 'dblclick'}"/>
+      <tc:event event="focus" action="#{eventController.action}" actionListener="#{eventController.actionListener}"
+                rendered="#{eventName == 'focus'}"/>
+      <tc:event event="blur" action="#{eventController.action}" actionListener="#{eventController.actionListener}"
+                rendered="#{eventName == 'blur'}"/>
+    </c:if>
+  </tc:selectOneListbox>
 </ui:composition>
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/6000-event/x-event-textarea.xhtml b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/6000-event/x-event-textarea.xhtml
index 4153863bdd..8531f4f0f1 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/6000-event/x-event-textarea.xhtml
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/900-test/6000-event/x-event-textarea.xhtml
@@ -34,6 +34,8 @@
               disabled="#{eventName != 'focus'}"/>
       <f:ajax event="blur" render="metrics" listener="#{eventController.ajaxListener}"
               disabled="#{eventName != 'blur'}"/>
+      <f:ajax event="input" render="metrics" listener="#{eventController.ajaxListener}"
+              disabled="#{eventName != 'input'}"/>
     </c:if>
     <c:if test="#{eventType == 'event'}">
       <tc:event event="change" action="#{eventController.action}" actionListener="#{eventController.actionListener}"
@@ -46,6 +48,8 @@
                 rendered="#{eventName == 'focus'}"/>
       <tc:event event="blur" action="#{eventController.action}" actionListener="#{eventController.actionListener}"
                 rendered="#{eventName == 'blur'}"/>
+      <tc:event event="input" action="#{eventController.action}" actionListener="#{eventController.actionListener}"
+                rendered="#{eventName == 'input'}"/>
     </c:if>
   </tc:textarea>
 </ui:composition>
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/script/tobago-test.js b/tobago-example/tobago-example-demo/src/main/webapp/script/tobago-test.js
index 761cda8aac..e4a70b6237 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/script/tobago-test.js
+++ b/tobago-example/tobago-example-demo/src/main/webapp/script/tobago-test.js
@@ -59,6 +59,7 @@ function activeElementFn() {
 export {elementByIdFn, querySelectorFn, querySelectorAllFn, activeElementFn};
 
 beforeEach(function (done) {
+  jasmine.DEFAULT_TIMEOUT_INTERVAL = 5 * 60 * 1000; //5 minutes
   const test = new JasmineTestTool(done);
   test.wait(() => document.getElementById("page:testframe").contentWindow.document.readyState === "complete");
   test.do(() => expect("waiting for testframe is done").toBe("waiting for testframe is done"));