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>