You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lo...@apache.org on 2016/07/01 14:56:09 UTC

svn commit: r1750949 [2/2] - in /myfaces/tobago/trunk/tobago-example/tobago-example-demo/src: main/webapp/ main/webapp/WEB-INF/ main/webapp/content/20-component/010-input/10-in/ main/webapp/content/20-component/010-input/20-suggest/ main/webapp/content...

Added: myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/content/30-concept/08-form/20-ajax/form-ajax.test.js
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/content/30-concept/08-form/20-ajax/form-ajax.test.js?rev=1750949&view=auto
==============================================================================
--- myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/content/30-concept/08-form/20-ajax/form-ajax.test.js (added)
+++ myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/content/30-concept/08-form/20-ajax/form-ajax.test.js Fri Jul  1 14:56:09 2016
@@ -0,0 +1,467 @@
+/*
+ * 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.
+ */
+
+function jQueryFrame(expression) {
+  return document.getElementById("page:testframe").contentWindow.jQuery(expression);
+}
+
+QUnit.test("submit inner form 1 without violations", function (assert) {
+  assert.expect(3);
+  var done = assert.async();
+  var $form1InputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:form1\\:in\\:\\:field");
+  var $form1OutputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:form1\\:out span");
+
+  var $button = jQueryFrame("#page\\:mainForm\\:outerForm\\:form1\\:submit");
+
+  $form1InputField.val("Alice");
+  $button.click();
+
+  $.ajax({
+    type: 'GET',
+    url: 'content/30-concept/08-form/20-ajax/form-ajax.xhtml'
+  }).done(function () {
+    $form1InputField = jQueryFrame($form1InputField.selector);
+    $form1OutputField = jQueryFrame($form1OutputField.selector);
+
+    assert.equal($form1InputField.val(), "Alice");
+    assert.equal($form1OutputField.text(), "Alice");
+
+    var $alert = jQueryFrame("#page\\:messages .alert-danger label");
+    assert.equal($alert.length, "0");
+
+    done();
+  });
+});
+
+QUnit.test("submit inner form 2, violate required field", function (assert) {
+  assert.expect(3);
+  var done = assert.async();
+  var $form2InputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:form2\\:in\\:\\:field");
+  var $form2OutputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:form2\\:out span");
+
+  var $button = jQueryFrame("#page\\:mainForm\\:outerForm\\:form2\\:submit");
+
+  var form2OutputFieldValue = $form2OutputField.text();
+
+  $form2InputField.val("");
+  $button.click();
+
+  $.ajax({
+    type: 'GET',
+    url: 'content/30-concept/08-form/20-ajax/form-ajax.xhtml'
+  }).done(function () {
+    $form2InputField = jQueryFrame($form2InputField.selector);
+    $form2OutputField = jQueryFrame($form2OutputField.selector);
+
+    assert.equal($form2InputField.val(), "");
+    assert.equal($form2OutputField.text(), form2OutputFieldValue);
+
+    var $alert = jQueryFrame("#page\\:messages .alert-danger label");
+    assert.equal($alert.length, "1");
+
+    done();
+  });
+});
+
+QUnit.test("submit inner form 2 without violations", function (assert) {
+  assert.expect(3);
+  var done = assert.async();
+  var $form2InputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:form2\\:in\\:\\:field");
+  var $form2OutputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:form2\\:out span");
+
+  var $button = jQueryFrame("#page\\:mainForm\\:outerForm\\:form2\\:submit");
+
+  $form2InputField.val("Bob");
+  $button.click();
+
+  $.ajax({
+    type: 'GET',
+    url: 'content/30-concept/08-form/20-ajax/form-ajax.xhtml'
+  }).done(function () {
+    $form2InputField = jQueryFrame($form2InputField.selector);
+    $form2OutputField = jQueryFrame($form2OutputField.selector);
+
+    assert.equal($form2InputField.val(), "Bob");
+    assert.equal($form2OutputField.text(), "Bob");
+
+    var $alert = jQueryFrame("#page\\:messages .alert-danger label");
+    assert.equal($alert.length, "0");
+
+    done();
+  });
+});
+
+QUnit.test("submit outer form, violate both required fields", function (assert) {
+  assert.expect(7);
+  var done = assert.async();
+  var $form1InputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:form1\\:in\\:\\:field");
+  var $form1OutputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:form1\\:out span");
+  var $form2InputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:form2\\:in\\:\\:field");
+  var $form2OutputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:form2\\:out span");
+  var $outerFormInputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:in\\:\\:field");
+  var $outerFormOutputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:out span");
+
+  var $button = jQueryFrame("#page\\:mainForm\\:outerForm\\:submit");
+
+  var form1OutputFieldValue = $form1OutputField.text();
+  var form2OutputFieldValue = $form2OutputField.text();
+  var outerFormOutputFieldValue = $outerFormOutputField.text();
+
+  $form1InputField.val("Charlie");
+  $form2InputField.val("");
+  $outerFormInputField.val("");
+  $button.click();
+
+  $.ajax({
+    type: 'GET',
+    url: 'content/30-concept/08-form/20-ajax/form-ajax.xhtml'
+  }).done(function () {
+    $form1InputField = jQueryFrame($form1InputField.selector);
+    $form1OutputField = jQueryFrame($form1OutputField.selector);
+    $form2InputField = jQueryFrame($form2InputField.selector);
+    $form2OutputField = jQueryFrame($form2OutputField.selector);
+    $outerFormInputField = jQueryFrame($outerFormInputField.selector);
+    $outerFormOutputField = jQueryFrame($outerFormOutputField.selector);
+
+    assert.equal($form1InputField.val(), "Charlie");
+    assert.equal($form1OutputField.text(), form1OutputFieldValue);
+    assert.equal($form2InputField.val(), "");
+    assert.equal($form2OutputField.text(), form2OutputFieldValue);
+    assert.equal($outerFormInputField.val(), "");
+    assert.equal($outerFormOutputField.text(), outerFormOutputFieldValue);
+
+    var $alert = jQueryFrame("#page\\:messages .alert-danger label");
+    assert.equal($alert.length, "2");
+
+    done();
+  });
+});
+
+QUnit.test("submit outer form, violate required field in form 2", function (assert) {
+  assert.expect(7);
+  var done = assert.async();
+  var $form1InputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:form1\\:in\\:\\:field");
+  var $form1OutputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:form1\\:out span");
+  var $form2InputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:form2\\:in\\:\\:field");
+  var $form2OutputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:form2\\:out span");
+  var $outerFormInputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:in\\:\\:field");
+  var $outerFormOutputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:out span");
+
+  var $button = jQueryFrame("#page\\:mainForm\\:outerForm\\:submit");
+
+  var form1OutputFieldValue = $form1OutputField.text();
+  var form2OutputFieldValue = $form2OutputField.text();
+  var outerFormOutputFieldValue = $outerFormOutputField.text();
+
+  $form1InputField.val("Dave");
+  $form2InputField.val("");
+  $outerFormInputField.val("Eve");
+  $button.click();
+
+  $.ajax({
+    type: 'GET',
+    url: 'content/30-concept/08-form/20-ajax/form-ajax.xhtml'
+  }).done(function () {
+    $form1InputField = jQueryFrame($form1InputField.selector);
+    $form1OutputField = jQueryFrame($form1OutputField.selector);
+    $form2InputField = jQueryFrame($form2InputField.selector);
+    $form2OutputField = jQueryFrame($form2OutputField.selector);
+    $outerFormInputField = jQueryFrame($outerFormInputField.selector);
+    $outerFormOutputField = jQueryFrame($outerFormOutputField.selector);
+
+    assert.equal($form1InputField.val(), "Dave");
+    assert.equal($form1OutputField.text(), form1OutputFieldValue);
+    assert.equal($form2InputField.val(), "");
+    assert.equal($form2OutputField.text(), form2OutputFieldValue);
+    assert.equal($outerFormInputField.val(), "Eve");
+    assert.equal($outerFormOutputField.text(), outerFormOutputFieldValue);
+
+    var $alert = jQueryFrame("#page\\:messages .alert-danger label");
+    assert.equal($alert.length, "1");
+
+    done();
+  });
+});
+
+QUnit.test("submit outer form, violate required field in outer form", function (assert) {
+  assert.expect(7);
+  var done = assert.async();
+  var $form1InputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:form1\\:in\\:\\:field");
+  var $form1OutputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:form1\\:out span");
+  var $form2InputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:form2\\:in\\:\\:field");
+  var $form2OutputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:form2\\:out span");
+  var $outerFormInputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:in\\:\\:field");
+  var $outerFormOutputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:out span");
+
+  var $button = jQueryFrame("#page\\:mainForm\\:outerForm\\:submit");
+
+  var form1OutputFieldValue = $form1OutputField.text();
+  var form2OutputFieldValue = $form2OutputField.text();
+  var outerFormOutputFieldValue = $outerFormOutputField.text();
+
+  $form1InputField.val("Frank");
+  $form2InputField.val("Grace");
+  $outerFormInputField.val("");
+  $button.click();
+
+  $.ajax({
+    type: 'GET',
+    url: 'content/30-concept/08-form/20-ajax/form-ajax.xhtml'
+  }).done(function () {
+    $form1InputField = jQueryFrame($form1InputField.selector);
+    $form1OutputField = jQueryFrame($form1OutputField.selector);
+    $form2InputField = jQueryFrame($form2InputField.selector);
+    $form2OutputField = jQueryFrame($form2OutputField.selector);
+    $outerFormInputField = jQueryFrame($outerFormInputField.selector);
+    $outerFormOutputField = jQueryFrame($outerFormOutputField.selector);
+
+    assert.equal($form1InputField.val(), "Frank");
+    assert.equal($form1OutputField.text(), form1OutputFieldValue);
+    assert.equal($form2InputField.val(), "Grace");
+    assert.equal($form2OutputField.text(), form2OutputFieldValue);
+    assert.equal($outerFormInputField.val(), "");
+    assert.equal($outerFormOutputField.text(), outerFormOutputFieldValue);
+
+    var $alert = jQueryFrame("#page\\:messages .alert-danger label");
+    assert.equal($alert.length, "1");
+
+    done();
+  });
+});
+
+QUnit.test("submit outer form without violations", function (assert) {
+  assert.expect(7);
+  var done = assert.async();
+  var $form1InputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:form1\\:in\\:\\:field");
+  var $form1OutputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:form1\\:out span");
+  var $form2InputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:form2\\:in\\:\\:field");
+  var $form2OutputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:form2\\:out span");
+  var $outerFormInputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:in\\:\\:field");
+  var $outerFormOutputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:out span");
+
+  var $button = jQueryFrame("#page\\:mainForm\\:outerForm\\:submit");
+
+  $form1InputField.val("Hank");
+  $form2InputField.val("Irene");
+  $outerFormInputField.val("John");
+  $button.click();
+
+  $.ajax({
+    type: 'GET',
+    url: 'content/30-concept/08-form/20-ajax/form-ajax.xhtml'
+  }).done(function () {
+    $form1InputField = jQueryFrame($form1InputField.selector);
+    $form1OutputField = jQueryFrame($form1OutputField.selector);
+    $form2InputField = jQueryFrame($form2InputField.selector);
+    $form2OutputField = jQueryFrame($form2OutputField.selector);
+    $outerFormInputField = jQueryFrame($outerFormInputField.selector);
+    $outerFormOutputField = jQueryFrame($outerFormOutputField.selector);
+
+    assert.equal($form1InputField.val(), "Hank");
+    assert.equal($form1OutputField.text(), "Hank");
+    assert.equal($form2InputField.val(), "Irene");
+    assert.equal($form2OutputField.text(), "Irene");
+    assert.equal($outerFormInputField.val(), "John");
+    assert.equal($outerFormOutputField.text(), "John");
+
+    var $alert = jQueryFrame("#page\\:messages .alert-danger label");
+    assert.equal($alert.length, "0");
+
+    done();
+  });
+});
+
+QUnit.test("submit inner forms, violate required field in form 2", function (assert) {
+  assert.expect(7);
+  var done = assert.async();
+  var $form1InputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:form1\\:in\\:\\:field");
+  var $form1OutputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:form1\\:out span");
+  var $form2InputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:form2\\:in\\:\\:field");
+  var $form2OutputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:form2\\:out span");
+  var $outerFormInputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:in\\:\\:field");
+  var $outerFormOutputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:out span");
+
+  var $button = jQueryFrame("#page\\:mainForm\\:outerForm\\:submitInnerForms");
+
+  var form1OutputFieldValue = $form1OutputField.text();
+  var form2OutputFieldValue = $form2OutputField.text();
+  var outerFormOutputFieldValue = $outerFormOutputField.text();
+
+  $form1InputField.val("Kate");
+  $form2InputField.val("");
+  $outerFormInputField.val("Leonard");
+  $button.click();
+
+  $.ajax({
+    type: 'GET',
+    url: 'content/30-concept/08-form/20-ajax/form-ajax.xhtml'
+  }).done(function () {
+    $form1InputField = jQueryFrame($form1InputField.selector);
+    $form1OutputField = jQueryFrame($form1OutputField.selector);
+    $form2InputField = jQueryFrame($form2InputField.selector);
+    $form2OutputField = jQueryFrame($form2OutputField.selector);
+    $outerFormInputField = jQueryFrame($outerFormInputField.selector);
+    $outerFormOutputField = jQueryFrame($outerFormOutputField.selector);
+
+    assert.equal($form1InputField.val(), "Kate");
+    assert.equal($form1OutputField.text(), form1OutputFieldValue);
+    assert.equal($form2InputField.val(), "");
+    assert.equal($form2OutputField.text(), form2OutputFieldValue);
+    assert.equal($outerFormInputField.val(), "Leonard");
+    assert.equal($outerFormOutputField.text(), outerFormOutputFieldValue);
+
+    var $alert = jQueryFrame("#page\\:messages .alert-danger label");
+    assert.equal($alert.length, "1");
+
+    done();
+  });
+});
+
+QUnit.test("submit inner forms without violations", function (assert) {
+  assert.expect(7);
+  var done = assert.async();
+  var $form1InputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:form1\\:in\\:\\:field");
+  var $form1OutputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:form1\\:out span");
+  var $form2InputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:form2\\:in\\:\\:field");
+  var $form2OutputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:form2\\:out span");
+  var $outerFormInputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:in\\:\\:field");
+  var $outerFormOutputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:out span");
+
+  var $button = jQueryFrame("#page\\:mainForm\\:outerForm\\:submitInnerForms");
+
+  var outerFormOutputFieldValue = $outerFormOutputField.text();
+
+  $form1InputField.val("Mike");
+  $form2InputField.val("Neil");
+  $outerFormInputField.val("");
+  $button.click();
+
+  $.ajax({
+    type: 'GET',
+    url: 'content/30-concept/08-form/20-ajax/form-ajax.xhtml'
+  }).done(function () {
+    $form1InputField = jQueryFrame($form1InputField.selector);
+    $form1OutputField = jQueryFrame($form1OutputField.selector);
+    $form2InputField = jQueryFrame($form2InputField.selector);
+    $form2OutputField = jQueryFrame($form2OutputField.selector);
+    $outerFormInputField = jQueryFrame($outerFormInputField.selector);
+    $outerFormOutputField = jQueryFrame($outerFormOutputField.selector);
+
+    assert.equal($form1InputField.val(), "Mike");
+    assert.equal($form1OutputField.text(), "Mike");
+    assert.equal($form2InputField.val(), "Neil");
+    assert.equal($form2OutputField.text(), "Neil");
+    assert.equal($outerFormInputField.val(), "");
+    assert.equal($outerFormOutputField.text(), outerFormOutputFieldValue);
+
+    var $alert = jQueryFrame("#page\\:messages .alert-danger label");
+    assert.equal($alert.length, "0");
+
+    done();
+  });
+});
+
+QUnit.test("submit outer value, violate required field", function (assert) {
+  assert.expect(7);
+  var done = assert.async();
+  var $form1InputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:form1\\:in\\:\\:field");
+  var $form1OutputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:form1\\:out span");
+  var $form2InputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:form2\\:in\\:\\:field");
+  var $form2OutputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:form2\\:out span");
+  var $outerFormInputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:in\\:\\:field");
+  var $outerFormOutputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:out span");
+
+  var $button = jQueryFrame("#page\\:mainForm\\:outerForm\\:submitOuterValue");
+
+  var form1OutputFieldValue = $form1OutputField.text();
+  var form2OutputFieldValue = $form2OutputField.text();
+  var outerFormOutputFieldValue = $outerFormOutputField.text();
+
+  $form1InputField.val("Oscar");
+  $form2InputField.val("Penny");
+  $outerFormInputField.val("");
+  $button.click();
+
+  $.ajax({
+    type: 'GET',
+    url: 'content/30-concept/08-form/20-ajax/form-ajax.xhtml'
+  }).done(function () {
+    $form1InputField = jQueryFrame($form1InputField.selector);
+    $form1OutputField = jQueryFrame($form1OutputField.selector);
+    $form2InputField = jQueryFrame($form2InputField.selector);
+    $form2OutputField = jQueryFrame($form2OutputField.selector);
+    $outerFormInputField = jQueryFrame($outerFormInputField.selector);
+    $outerFormOutputField = jQueryFrame($outerFormOutputField.selector);
+
+    assert.equal($form1InputField.val(), "Oscar");
+    assert.equal($form1OutputField.text(), form1OutputFieldValue);
+    assert.equal($form2InputField.val(), "Penny");
+    assert.equal($form2OutputField.text(), form2OutputFieldValue);
+    assert.equal($outerFormInputField.val(), "");
+    assert.equal($outerFormOutputField.text(), outerFormOutputFieldValue);
+
+    var $alert = jQueryFrame("#page\\:messages .alert-danger label");
+    assert.equal($alert.length, "1");
+
+    done();
+  });
+});
+
+QUnit.test("submit outer value without violations", function (assert) {
+  assert.expect(7);
+  var done = assert.async();
+  var $form1InputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:form1\\:in\\:\\:field");
+  var $form1OutputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:form1\\:out span");
+  var $form2InputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:form2\\:in\\:\\:field");
+  var $form2OutputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:form2\\:out span");
+  var $outerFormInputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:in\\:\\:field");
+  var $outerFormOutputField = jQueryFrame("#page\\:mainForm\\:outerForm\\:out span");
+
+  var $button = jQueryFrame("#page\\:mainForm\\:outerForm\\:submitOuterValue");
+
+  var form1OutputFieldValue = $form1OutputField.text();
+  var form2OutputFieldValue = $form2OutputField.text();
+
+  $form1InputField.val("Quin");
+  $form2InputField.val("Sue");
+  $outerFormInputField.val("Ted");
+  $button.click();
+
+  $.ajax({
+    type: 'GET',
+    url: 'content/30-concept/08-form/20-ajax/form-ajax.xhtml'
+  }).done(function () {
+    $form1InputField = jQueryFrame($form1InputField.selector);
+    $form1OutputField = jQueryFrame($form1OutputField.selector);
+    $form2InputField = jQueryFrame($form2InputField.selector);
+    $form2OutputField = jQueryFrame($form2OutputField.selector);
+    $outerFormInputField = jQueryFrame($outerFormInputField.selector);
+    $outerFormOutputField = jQueryFrame($outerFormOutputField.selector);
+
+    assert.equal($form1InputField.val(), "Quin");
+    assert.equal($form1OutputField.text(), form1OutputFieldValue);
+    assert.equal($form2InputField.val(), "Sue");
+    assert.equal($form2OutputField.text(), form2OutputFieldValue);
+    assert.equal($outerFormInputField.val(), "Ted");
+    assert.equal($outerFormOutputField.text(), "Ted");
+
+    var $alert = jQueryFrame("#page\\:messages .alert-danger label");
+    assert.equal($alert.length, "0");
+
+    done();
+  });
+});

Modified: myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/content/30-concept/08-form/20-ajax/form-ajax.xhtml
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/content/30-concept/08-form/20-ajax/form-ajax.xhtml?rev=1750949&r1=1750948&r2=1750949&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/content/30-concept/08-form/20-ajax/form-ajax.xhtml (original)
+++ myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/content/30-concept/08-form/20-ajax/form-ajax.xhtml Fri Jul  1 14:56:09 2016
@@ -23,43 +23,93 @@
                 xmlns:ui="http://java.sun.com/jsf/facelets"
                 xmlns:f="http://java.sun.com/jsf/core">
   <ui:param name="title" value="#{overviewBundle.form_ajax} &lt;tc:form>"/>
-  <p></p>
+  <p>The <code class="language-markup">&lt;f:ajax execute="..." render="..."/></code> tag ignore the
+    <code class="language-markup">&lt;tc:form></code> tag.
+    The form is only used as a naming container.</p>
+
   <tc:link label="Tag Library Documentation" image="image/feather-leaf.png"
-  link="#{overviewBundle.tagDocUrl}/form.html"/>
+           link="#{overviewBundle.tagDocUrl}/form.html"/>
 
   <tc:section label="Example">
-    <p></p>
+    <p>The structure of this example is similar to the
+      <tc:link label="#{overviewBundle.form_required}" link="../10-required/form-required.xhtml"/> example.
+      Every form in this example is surrounded by a content box.
+      The submit buttons in the inner forms only put the inner value into the model.
+      The submit button in the outer form put all values into the model.
+      The validation for the inner value 2 and for the outer value is activated, both fields are required.</p>
+    <p>There are also two more submit buttons in the outer form.
+      The 'Inner Forms' button submit both values in the inner forms.
+      The 'Outer Value' button only submit the outer value.
+      Please notice, that all buttons use the
+      <code class="language-markup">&lt;f:ajax execute="..." render="..."/></code> tag.</p>
+    <p>Also note, that the <code class="language-markup">&lt;tc:message/></code> tag has to be rerendered
+      to show error messages.</p>
 
-    <pre><code class="language-markup"></code></pre>
+    <pre><code class="language-markup">&lt;tc:box label="Outer Form">
+  &lt;tc:form>
+    &lt;tc:box label="Inner Form 1">
+      &lt;tc:form>
+        &lt;tc:in label="Inner Value 1"/>
+        &lt;tc:out label="Inner Value 1 in Model"/>
+        &lt;tc:button label="Submit">
+          &lt;f:ajax execute="in" render="out :page:messages"/>
+        &lt;/tc:button>
+      &lt;/tc:form>
+    &lt;/tc:box>
+    &lt;tc:box label="Inner Form 2">
+      ...
+    &lt;/tc:box>
+    &lt;tc:separator/>
+    &lt;tc:in label="Outer Value" required="true"/>
+    &lt;tc:out label="Outer Value in Model"/>
+    &lt;tc:button label="Submit">
+      &lt;f:ajax execute="::form1:in ::form2:in in"
+              render="::form1:out ::form2:out out :page:messages"/>
+    &lt;/tc:button>
+    ...
+  &lt;/tc:form>
+&lt;/tc:box></code></pre>
 
     <tc:box label="Outer Form">
-      <tc:form id="outerform">
+      <tc:form id="outerForm">
         <tc:box label="Inner Form 1">
           <tc:form id="form1">
-            <tc:in id="in" label="Inner Value 1" value="#{formRequiredController.innerValue1}"/>
-            <tc:out id="out" label="Inner Value 1 in Model" value="#{formRequiredController.innerValue1}"/>
-            <tc:button label="Submit">
-              <f:ajax execute="in" render="out"/>
+            <tc:in id="in" label="Inner Value 1" value="#{formAjaxController.innerValue1}"/>
+            <tc:out id="out" label="Inner Value 1 in Model" value="#{formAjaxController.innerValue1}"/>
+            <tc:button id="submit" label="Submit">
+              <f:ajax execute="in" render="out :page:messages"/>
             </tc:button>
           </tc:form>
         </tc:box>
         <tc:box label="Inner Form 2">
           <tc:form id="form2">
             <tc:in id="in" label="Inner Value 2" required="true"
-                   value="#{formRequiredController.innerValue2}"/>
-            <tc:out id="out" label="Inner Value 2 in Model" value="#{formRequiredController.innerValue2}"/>
-            <tc:button label="Submit">
-              <f:ajax execute="in" render="out"/>
+                   value="#{formAjaxController.innerValue2}"/>
+            <tc:out id="out" label="Inner Value 2 in Model" value="#{formAjaxController.innerValue2}"/>
+            <tc:button id="submit" label="Submit">
+              <f:ajax execute="in" render="out :page:messages"/>
             </tc:button>
           </tc:form>
         </tc:box>
         <tc:separator/>
-        <tc:in id="in" label="Outer Value" required="true" value="#{formRequiredController.outerValue}"/>
-        <tc:out id="out" label="Outer Value in Model" value="#{formRequiredController.outerValue}"/>
-        <tc:button label="Submit">
-          <f:ajax execute=":page:outerform:form1:in :page:outerform:form2:in in"
-                  render=":page:outerform:form1:out :page:outerform:form2:out out"/>
+        <tc:in id="in" label="Outer Value" required="true" value="#{formAjaxController.outerValue}"/>
+        <tc:out id="out" label="Outer Value in Model" value="#{formAjaxController.outerValue}"/>
+        <tc:button id="submit" label="Submit">
+          <f:ajax execute="::form1:in ::form2:in in"
+                  render="::form1:out ::form2:out out :page:messages"/>
         </tc:button>
+
+        <tc:separator/>
+        Submit only:
+        <tc:buttons>
+          <tc:button id="submitInnerForms" label="Inner Forms">
+            <f:ajax execute="::form1:in ::form2:in"
+                    render="::form1:out ::form2:out :page:messages"/>
+          </tc:button>
+          <tc:button id="submitOuterValue" label="Outer Value">
+            <f:ajax execute="in" render="out :page:messages"/>
+          </tc:button>
+        </tc:buttons>
       </tc:form>
     </tc:box>
   </tc:section>

Added: myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/content/30-concept/08-form/form.test.js
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/content/30-concept/08-form/form.test.js?rev=1750949&view=auto
==============================================================================
--- myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/content/30-concept/08-form/form.test.js (added)
+++ myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/content/30-concept/08-form/form.test.js Fri Jul  1 14:56:09 2016
@@ -0,0 +1,80 @@
+/*
+ * 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.
+ */
+
+function jQueryFrame(expression) {
+  return document.getElementById("page:testframe").contentWindow.jQuery(expression);
+}
+
+QUnit.test("submit form 1", function (assert) {
+  assert.expect(4);
+  var done = assert.async();
+
+  var $form1InputField = jQueryFrame("#page\\:mainForm\\:form1\\:in\\:\\:field");
+  var $form1SubmitButton = jQueryFrame("#page\\:mainForm\\:form1\\:submit");
+
+  var $form2InputField = jQueryFrame("#page\\:mainForm\\:form2\\:in\\:\\:field");
+  var $form2OutputFieldValue = jQueryFrame("#page\\:mainForm\\:form2\\:out span").text();
+
+  $form1InputField.val("Oliver");
+  $form2InputField.val("Peter");
+
+  $form1SubmitButton.click();
+
+  jQuery("#page\\:testframe").load(function () {
+    $form1InputField = jQueryFrame("#page\\:mainForm\\:form1\\:in\\:\\:field");
+    var $form1OutputField = jQueryFrame("#page\\:mainForm\\:form1\\:out span");
+    $form2InputField = jQueryFrame("#page\\:mainForm\\:form2\\:in\\:\\:field");
+    var $form2OutputField = jQueryFrame("#page\\:mainForm\\:form2\\:out span");
+
+    assert.equal($form1InputField.val(), "Oliver");
+    assert.equal($form1OutputField.text(), "Oliver");
+    assert.equal($form2InputField.val(), "Peter");
+    assert.equal($form2OutputField.text(), $form2OutputFieldValue);
+
+    done();
+  });
+});
+
+QUnit.test("submit form 2", function (assert) {
+  assert.expect(4);
+  var done = assert.async();
+
+  var $form1InputField = jQueryFrame("#page\\:mainForm\\:form1\\:in\\:\\:field");
+  var $form1OutputFieldValue = jQueryFrame("#page\\:mainForm\\:form1\\:out span").text();
+
+  var $form2InputField = jQueryFrame("#page\\:mainForm\\:form2\\:in\\:\\:field");
+  var $form2SubmitButton = jQueryFrame("#page\\:mainForm\\:form2\\:submit");
+
+  $form1InputField.val("Oliver");
+  $form2InputField.val("Peter");
+
+  $form2SubmitButton.click();
+
+  jQuery("#page\\:testframe").load(function () {
+    $form1InputField = jQueryFrame("#page\\:mainForm\\:form1\\:in\\:\\:field");
+    var $form1OutputField = jQueryFrame("#page\\:mainForm\\:form1\\:out span");
+    $form2InputField = jQueryFrame("#page\\:mainForm\\:form2\\:in\\:\\:field");
+    var $form2OutputField = jQueryFrame("#page\\:mainForm\\:form2\\:out span");
+
+    assert.equal($form1InputField.val(), "Oliver");
+    assert.equal($form1OutputField.text(), $form1OutputFieldValue);
+    assert.equal($form2InputField.val(), "Peter");
+    assert.equal($form2OutputField.text(), "Peter");
+
+    done();
+  });
+});

Modified: myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/content/30-concept/08-form/form.xhtml
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/content/30-concept/08-form/form.xhtml?rev=1750949&r1=1750948&r2=1750949&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/content/30-concept/08-form/form.xhtml (original)
+++ myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/content/30-concept/08-form/form.xhtml Fri Jul  1 14:56:09 2016
@@ -45,17 +45,17 @@
   ...
 &lt;/tc:box></code></pre>
     <tc:box label="Form 1">
-      <tc:form>
-        <tc:in id="ivalue1" label="Value 1" value="#{formController.value1}"/>
-        <tc:out id="ovalue1" label="Value 1 in Model" value="#{formController.value1}"/>
-        <tc:button label="Submit"/>
+      <tc:form id="form1">
+        <tc:in id="in" label="Value 1" value="#{formController.value1}"/>
+        <tc:out id="out" label="Value 1 in Model" value="#{formController.value1}"/>
+        <tc:button id="submit" label="Submit"/>
       </tc:form>
     </tc:box>
     <tc:box label="Form 2">
-      <tc:form>
-        <tc:in id="ivalue2" label="Value 2" value="#{formController.value2}"/>
-        <tc:out id="ovalue2" label="Value 2 in Model" value="#{formController.value2}"/>
-        <tc:button label="Submit"/>
+      <tc:form id="form2">
+        <tc:in id="in" label="Value 2" value="#{formController.value2}"/>
+        <tc:out id="out" label="Value 2 in Model" value="#{formController.value2}"/>
+        <tc:button id="submit" label="Submit"/>
       </tc:form>
     </tc:box>
   </tc:section>

Modified: myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/1040-date/date.test.js
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/1040-date/date.test.js?rev=1750949&r1=1750948&r2=1750949&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/1040-date/date.test.js (original)
+++ myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/1040-date/date.test.js Fri Jul  1 14:56:09 2016
@@ -20,8 +20,8 @@ function jQueryFrame(expression) {
 }
 
 QUnit.test("inputfield with label", function (assert) {
-  var $dateField = jQueryFrame("#page\\:dnopattern\\:\\:field");
-  var $dateButton = jQueryFrame("#page\\:dnopattern button");
+  var $dateField = jQueryFrame("#page\\:mainForm\\:dateNoPattern\\:\\:field");
+  var $dateButton = jQueryFrame("#page\\:mainForm\\:dateNoPattern button");
 
   assert.equal($dateField.val(), "");
 

Modified: myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/1040-date/date.xhtml
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/1040-date/date.xhtml?rev=1750949&r1=1750948&r2=1750949&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/1040-date/date.xhtml (original)
+++ myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/1040-date/date.xhtml Fri Jul  1 14:56:09 2016
@@ -23,9 +23,7 @@
                 xsi:schemaLocation="http://myfaces.apache.org/tobago/component ">
   <ui:param name="title" value="#{overviewBundle.date}"/>
 
-  <tc:date id="dnopattern">
-
-  </tc:date>
+  <tc:date id="dateNoPattern"/>
   <tc:button label="Submit"/>
 
 

Modified: myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/50000-java/10-rendererBase-getCurrentValue/rendererBase-getCurrentValue.test.js
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/50000-java/10-rendererBase-getCurrentValue/rendererBase-getCurrentValue.test.js?rev=1750949&r1=1750948&r2=1750949&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/50000-java/10-rendererBase-getCurrentValue/rendererBase-getCurrentValue.test.js (original)
+++ myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/50000-java/10-rendererBase-getCurrentValue/rendererBase-getCurrentValue.test.js Fri Jul  1 14:56:09 2016
@@ -20,7 +20,7 @@ function jQueryFrame(expression) {
 }
 
 function test(assert, idSuffix, expectedText) {
-  var $out = jQueryFrame("#page\\:" + idSuffix);
+  var $out = jQueryFrame("#page\\:mainForm\\:" + idSuffix);
   assert.equal($out.text().trim(), expectedText);
 }
 

Modified: myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/50000-java/20-ajax-execute/ajax-execute.test.js
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/50000-java/20-ajax-execute/ajax-execute.test.js?rev=1750949&r1=1750948&r2=1750949&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/50000-java/20-ajax-execute/ajax-execute.test.js (original)
+++ myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/50000-java/20-ajax-execute/ajax-execute.test.js Fri Jul  1 14:56:09 2016
@@ -20,41 +20,75 @@ function jQueryFrame(expression) {
 }
 
 QUnit.test("ajax excecute", function (assert) {
+  assert.expect(12);
+  var done = assert.async(3);
+  var step = 1;
 
   var $in1;
   var $in2;
   var $in3;
   var $in4;
 
-  var $clearButton = jQueryFrame("#page\\:clear");
+  var $clearButton = jQueryFrame("#page\\:mainForm\\:clear");
   $clearButton.click();
 
-  $in1 = jQueryFrame("#page\\:in1\\:\\:field");
-  $in2 = jQueryFrame("#page\\:in2\\:\\:field");
-  $in3 = jQueryFrame("#page\\:in3\\:\\:field");
-  $in4 = jQueryFrame("#page\\:in4\\:\\:field");
-  assert.equal($in1.val(), "");
-  assert.equal($in2.val(), "");
-  assert.equal($in3.val(), "");
-  assert.equal($in4.val(), "");
-  $in1.val("a");
-  $in2.val("b");
-  $in3.val("c");
-  $in4.val("d");
-
-  var $submitButton = jQueryFrame("#page\\:clear");
-  $submitButton.click();
-
-  $in1 = jQueryFrame("#page\\:in1\\:\\:field");
-  $in2 = jQueryFrame("#page\\:in2\\:\\:field");
-  $in3 = jQueryFrame("#page\\:in3\\:\\:field");
-  $in4 = jQueryFrame("#page\\:in4\\:\\:field");
-  assert.equal($in1.val(), "a");
-  assert.equal($in2.val(), "b");
-  assert.equal($in3.val(), "c");
-  assert.equal($in4.val(), "");
-
-
-  // todo: to be continued...
-
+  jQuery("#page\\:testframe").load(function () {
+    if (step == 1) {
+      $in1 = jQueryFrame("#page\\:mainForm\\:in1\\:\\:field");
+      $in2 = jQueryFrame("#page\\:mainForm\\:in2\\:\\:field");
+      $in3 = jQueryFrame("#page\\:mainForm\\:in3\\:\\:field");
+      $in4 = jQueryFrame("#page\\:mainForm\\:in4\\:\\:field");
+
+      assert.equal($in1.val(), "");
+      assert.equal($in2.val(), "");
+      assert.equal($in3.val(), "");
+      assert.equal($in4.val(), "");
+
+      $in1 = jQueryFrame("#page\\:mainForm\\:in1\\:\\:field");
+      $in2 = jQueryFrame("#page\\:mainForm\\:in2\\:\\:field");
+      $in3 = jQueryFrame("#page\\:mainForm\\:in3\\:\\:field");
+      $in4 = jQueryFrame("#page\\:mainForm\\:in4\\:\\:field");
+      $in1.val("a");
+      $in2.val("b");
+      $in3.val("c");
+      $in4.val("d");
+
+      var $submitButton = jQueryFrame("#page\\:mainForm\\:submit");
+      $submitButton.click();
+
+      $.ajax({
+        type: 'GET',
+        url: 'content/40-test/50000-java/20-ajax-execute/ajax-execute.xhtml'
+      }).done(function () {
+
+        $in1 = jQueryFrame("#page\\:mainForm\\:in1\\:\\:field");
+        $in2 = jQueryFrame("#page\\:mainForm\\:in2\\:\\:field");
+        $in3 = jQueryFrame("#page\\:mainForm\\:in3\\:\\:field");
+        $in4 = jQueryFrame("#page\\:mainForm\\:in4\\:\\:field");
+
+        assert.equal($in1.val(), "a");
+        assert.equal($in2.val(), "b");
+        assert.equal($in3.val(), "c");
+        assert.equal($in4.val(), "");
+
+        var $reloadButton = jQueryFrame("#page\\:mainForm\\:reload");
+        $reloadButton.click();
+
+        done();
+      });
+    } else if (step == 2) {
+      $in1 = jQueryFrame("#page\\:mainForm\\:in1\\:\\:field");
+      $in2 = jQueryFrame("#page\\:mainForm\\:in2\\:\\:field");
+      $in3 = jQueryFrame("#page\\:mainForm\\:in3\\:\\:field");
+      $in4 = jQueryFrame("#page\\:mainForm\\:in4\\:\\:field");
+
+      assert.equal($in1.val(), "a");
+      assert.equal($in2.val(), "");
+      assert.equal($in3.val(), "c");
+      assert.equal($in4.val(), "");
+    }
+
+    step++;
+    done();
+  });
 });

Modified: myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/main.xhtml
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/main.xhtml?rev=1750949&r1=1750948&r2=1750949&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/main.xhtml (original)
+++ myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/main.xhtml Fri Jul  1 14:56:09 2016
@@ -52,7 +52,9 @@
             </tc:panel>
 
             <tc:box label="#{title}" id="content">
-              <ui:insert/>
+              <tc:form id="mainForm">
+                <ui:insert/>
+              </tc:form>
             </tc:box>
 
           </tc:flexLayout>

Modified: myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/test/java/org/apache/myfaces/tobago/example/demo/QUnitTests.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/test/java/org/apache/myfaces/tobago/example/demo/QUnitTests.java?rev=1750949&r1=1750948&r2=1750949&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/test/java/org/apache/myfaces/tobago/example/demo/QUnitTests.java (original)
+++ myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/test/java/org/apache/myfaces/tobago/example/demo/QUnitTests.java Fri Jul  1 14:56:09 2016
@@ -39,6 +39,7 @@ import org.slf4j.LoggerFactory;
 
 import java.io.File;
 import java.net.URL;
+import java.util.ArrayList;
 import java.util.List;
 
 @RunWith(Arquillian.class)
@@ -51,9 +52,6 @@ public class QUnitTests {
   private WebDriver browser;
   @ArquillianResource
   private URL contextPath;
-
-  @FindByJQuery("#page\\:navbtns\\:toggletest")
-  private WebElement toggletest;
   @FindByJQuery("#qunit")
   private WebElement qunit;
 
@@ -87,12 +85,15 @@ public class QUnitTests {
         WebElement assertList = testCase.findElement(By.className("qunit-assert-list"));
         List<WebElement> asserts = assertList.findElements(By.tagName("li"));
 
-        int assertionCount = 1;
+        int assertionCount = 0;
         for (WebElement assertion : asserts) {
+          assertionCount++;
           if ("pass".equals(assertion.getAttribute("class"))) {
             Assert.assertTrue(true);
           } else if ("fail".equals(assertion.getAttribute("class"))) {
-            LOG.warn("test '" + testName + "' for " + page + " failed on assertion " + assertionCount);
+            WebElement source = assertion.findElement(By.className("test-source"));
+            LOG.warn("test '" + testName + "' for " + page + " failed on assertion " + assertionCount
+                    + "\n" + source.getText());
             String expected = assertion.findElement(By.className("test-expected")).getText();
             expected = expected.substring(12, expected.length() - 1);
             String actual = assertion.findElement(By.className("test-actual")).getText();
@@ -100,13 +101,40 @@ public class QUnitTests {
             Assert.assertEquals(expected, actual);
           }
         }
+      } else if ("running".equals(testCase.getAttribute("class"))) {
+        LOG.warn("test '" + testName + "' for " + page + " is still running...");
+        Assert.fail();
+      } else {
+        LOG.warn("unexpected error on test '" + testName + "' for " + page);
+        Assert.fail();
       }
     }
   }
 
-  @Test
+  //  @Test
   public void allPages() {
-    LOG.warn("Not implemented yet!");
+    File dir = new File("tobago-example/tobago-example-demo/src/main/webapp/content");
+    List<String> testablePages = getTestablePages(dir);
+
+    for (String page : testablePages) {
+      checkResults(page);
+    }
+  }
+
+  private List<String> getTestablePages(File dir) {
+    List<String> testablePages = new ArrayList<String>();
+    for (File file : dir.listFiles()) {
+      if (file.isDirectory()) {
+        testablePages.addAll(getTestablePages(file));
+      } else if (file.getName().endsWith(".test.js")) {
+        String path = file.getPath().substring(
+                "tobago-example/tobago-example-demo/src/main/webapp/".length(),
+                file.getPath().length() - 8)
+                .concat(".xhtml");
+        testablePages.add(path);
+      }
+    }
+    return testablePages;
   }
 
   @Test
@@ -116,13 +144,61 @@ public class QUnitTests {
   }
 
   @Test
-  public void suggest() {
-    String page = "content/20-component/010-input/20-suggest/suggest.xhtml";
+  public void date() {
+    String page = "content/20-component/010-input/40-date/date.xhtml";
     checkResults(page);
   }
 
   @Test
-  public void date() {
+  public void selectBooleanCheckbox() {
+    String page = "content/20-component/030-select/10-selectBooleanCheckbox/selectBooleanCheckbox.xhtml";
+    checkResults(page);
+  }
+
+  @Test
+  public void selectOneChoice() {
+    String page = "content/20-component/030-select/20-selectOneChoice/selectOneChoice.xhtml";
+    checkResults(page);
+  }
+
+  @Test
+  public void selectOneRadio() {
+    String page = "content/20-component/030-select/30-selectOneRadio/selectOneRadio.xhtml"; // TODO: fails
+    checkResults(page);
+  }
+
+  @Test
+  public void selectOneListbox() {
+    String page = "content/20-component/030-select/40-selectOneListbox/selectOneListbox.xhtml";
+    checkResults(page);
+  }
+
+  @Test
+  public void selectManyCheckbox() {
+    String page = "content/20-component/030-select/50-selectManyCheckbox/selectManyCheckbox.xhtml";
+    checkResults(page);
+  }
+
+  @Test
+  public void form() {
+    String page = "content/30-concept/08-form/form.xhtml";
+    checkResults(page);
+  }
+
+  @Test
+  public void formRequired() {
+    String page = "content/30-concept/08-form/10-required/form-required.xhtml";
+    checkResults(page);
+  }
+
+  @Test
+  public void formAjax() {
+    String page = "content/30-concept/08-form/20-ajax/form-ajax.xhtml";
+    checkResults(page);
+  }
+
+  @Test
+  public void testDate() {
     String page = "content/40-test/1040-date/date.xhtml";
     checkResults(page);
   }
@@ -132,4 +208,10 @@ public class QUnitTests {
     String page = "content/40-test/50000-java/10-rendererBase-getCurrentValue/rendererBase-getCurrentValue.xhtml";
     checkResults(page);
   }
+
+  @Test
+  public void ajaxExecute() {
+    String page = "content/40-test/50000-java/20-ajax-execute/ajax-execute.xhtml";
+    checkResults(page);
+  }
 }