add test for tree commands
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/090-tree/00-command/Tree_Command_Types.test.js b/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/090-tree/00-command/Tree_Command_Types.test.js
new file mode 100644
index 0000000..de1a714
--- /dev/null
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/090-tree/00-command/Tree_Command_Types.test.js
@@ -0,0 +1,60 @@
+/*
+ * 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 {testFrameQuerySelectorFn} from "/script/tobago-test.js";
+import {TobagoTestTool} from "/tobago/test/tobago-test-tool.js";
+
+QUnit.test("execute both 'Action 1' and 'Action 2' two times", function (assert) {
+ let action1Fn = testFrameQuerySelectorFn("#page\\:mainForm\\:tree\\:2\\:actionCommand");
+ let action2Fn = testFrameQuerySelectorFn("#page\\:mainForm\\:tree\\:3\\:actionCommand");
+ let actionCount1Fn = testFrameQuerySelectorFn("#page\\:mainForm\\:actionCount1 .tobago-out");
+ let actionCount2Fn = testFrameQuerySelectorFn("#page\\:mainForm\\:actionCount2 .tobago-out");
+
+ const counterBeforeTestResult1 = Number(actionCount1Fn().textContent);
+ const counterBeforeTestResult2 = Number(actionCount2Fn().textContent);
+
+ let TTT = new TobagoTestTool(assert);
+ TTT.action(function () {
+ action1Fn().dispatchEvent(new Event('click'));
+ });
+ TTT.waitForResponse();
+ TTT.asserts(1, function () {
+ assert.equal(Number(actionCount1Fn().textContent), counterBeforeTestResult1 + 1);
+ });
+ TTT.action(function () {
+ action2Fn().dispatchEvent(new Event('click'));
+ });
+ TTT.waitForResponse();
+ TTT.asserts(1, function () {
+ assert.equal(Number(actionCount2Fn().textContent), counterBeforeTestResult2 + 1);
+ });
+ TTT.action(function () {
+ action1Fn().dispatchEvent(new Event('click'));
+ });
+ TTT.waitForResponse();
+ TTT.asserts(1, function () {
+ assert.equal(Number(actionCount1Fn().textContent), counterBeforeTestResult1 + 2);
+ });
+ TTT.action(function () {
+ action2Fn().dispatchEvent(new Event('click'));
+ });
+ TTT.waitForResponse();
+ TTT.asserts(1, function () {
+ assert.equal(Number(actionCount2Fn().textContent), counterBeforeTestResult2 + 2);
+ });
+ TTT.startTest();
+});
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/090-tree/00-command/Tree_Command_Types.xhtml b/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/090-tree/00-command/Tree_Command_Types.xhtml
index 205ce10..f7d8477 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/090-tree/00-command/Tree_Command_Types.xhtml
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/090-tree/00-command/Tree_Command_Types.xhtml
@@ -35,16 +35,18 @@
Like the parent nodes suggest,
the entries in 'Actions' run an action with the <code>action</code> attribute.
And the entries in 'Links' are links to an external website using the <code>link</code> attribute.</p>
- <tc:tree value="#{treeCommandTypesController.sample}" var="node">
- <tc:treeNode>
+ <tc:tree id="tree" value="#{treeCommandTypesController.sample}" var="node">
+ <tc:treeNode id="treeNode">
<tc:treeIndent showJunctions="false"/>
<tc:treeLabel value="#{node.name}" rendered="#{node.childCount > 0}"/>
- <tc:treeCommand label="#{node.name}" rendered="#{node.childCount == 0}"
- action="#{treeCommandTypesController.increaseActionCount(node.action)}" link="#{node.url}"/>
+ <tc:treeCommand id="actionCommand" label="#{node.name}" rendered="#{node.childCount == 0 and empty node.url}"
+ action="#{treeCommandTypesController.increaseActionCount(node.action)}"/>
+ <tc:treeCommand label="#{node.name}" rendered="#{node.childCount == 0 and not empty node.url}"
+ link="#{node.url}"/>
</tc:treeNode>
</tc:tree>
- <tc:out label="Action 1 Count" value="#{treeCommandTypesController.actionOneCount}"/>
- <tc:out label="Action 2 Count" value="#{treeCommandTypesController.actionTwoCount}"/>
+ <tc:out id="actionCount1" label="Action 1 Count" value="#{treeCommandTypesController.actionOneCount}"/>
+ <tc:out id="actionCount2" label="Action 2 Count" value="#{treeCommandTypesController.actionTwoCount}"/>
</tc:section>
</ui:composition>