You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by hl...@apache.org on 2012/12/16 02:17:33 UTC
[50/50] git commit: Set a flag on the HTML element when page
initializations complete Add a method to TapestryCoreTestCase to wait for the
flag to be set
Set a flag on the HTML element when page initializations complete
Add a method to TapestryCoreTestCase to wait for the flag to be set
Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/8c95676f
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/8c95676f
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/8c95676f
Branch: refs/heads/master
Commit: 8c95676fcdddfd74252c376385d0ed61ea9512f1
Parents: 04e0d89
Author: Howard M. Lewis Ship <hl...@apache.org>
Authored: Thu Nov 29 11:17:42 2012 -0800
Committer: Howard M. Lewis Ship <hl...@apache.org>
Committed: Thu Nov 29 11:17:42 2012 -0800
----------------------------------------------------------------------
.../META-INF/modules/core/pageinit.coffee | 9 ++++-
.../app1/SubmitUnconditionalTests.groovy | 4 +-
.../integration/TapestryCoreTestCase.java | 28 +++++++++++---
.../tapestry5/integration/app1/ZoneTests.java | 8 ++--
.../apache/tapestry5/test/SeleniumTestCase.java | 13 ++++++-
5 files changed, 47 insertions(+), 15 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/8c95676f/tapestry-core/src/main/coffeescript/META-INF/modules/core/pageinit.coffee
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/coffeescript/META-INF/modules/core/pageinit.coffee b/tapestry-core/src/main/coffeescript/META-INF/modules/core/pageinit.coffee
index 6650a78..c71c807 100644
--- a/tapestry-core/src/main/coffeescript/META-INF/modules/core/pageinit.coffee
+++ b/tapestry-core/src/main/coffeescript/META-INF/modules/core/pageinit.coffee
@@ -152,7 +152,14 @@ define ["_", "core/console", "core/dom", "core/events"],
# executed), and then executes the other initializations.
loadLibrariesAndInitialize: (libraries, inits) ->
console.debug "Loading #{libraries?.length or 0} libraries"
- exports.loadLibraries libraries, -> exports.initialize inits
+ exports.loadLibraries libraries,
+ -> exports.initialize inits,
+ ->
+ # At this point, all libraries have been loaded, and all inits should have executed. Unless some of
+ # the inits triggered Ajax updates (such as a core/ProgressiveDisplay component), then the page should
+ # be ready to go. We set a flag, mostly used by test suites, to ensure that all is ready.
+
+ (dom document.documentElement).attribute "data-page-loaded", "true"
evalJavaScript: (js) ->
console.debug "Evaluating: #{js}"
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/8c95676f/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app1/SubmitUnconditionalTests.groovy
----------------------------------------------------------------------
diff --git a/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app1/SubmitUnconditionalTests.groovy b/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app1/SubmitUnconditionalTests.groovy
index 13c13d7..5f6bbaa 100644
--- a/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app1/SubmitUnconditionalTests.groovy
+++ b/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app1/SubmitUnconditionalTests.groovy
@@ -10,7 +10,7 @@ class SubmitUnconditionalTests extends TapestryCoreTestCase {
void submit_with_unconditional_mode() {
openLinks "Cancel Demo"
- sleep SETUP_TIME
+ waitForPageLoaded()
clickAndWait "//input[@value='Abort']"
@@ -22,7 +22,7 @@ class SubmitUnconditionalTests extends TapestryCoreTestCase {
openLinks "Cancel Demo"
- sleep SETUP_TIME
+ waitForPageLoaded()
clickAndWait "link=Abort"
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/8c95676f/tapestry-core/src/test/java/org/apache/tapestry5/integration/TapestryCoreTestCase.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/TapestryCoreTestCase.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/TapestryCoreTestCase.java
index 96058ae..a8f85b9 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/TapestryCoreTestCase.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/TapestryCoreTestCase.java
@@ -23,12 +23,6 @@ public abstract class TapestryCoreTestCase extends SeleniumTestCase
public static final String EXCEPTION_PROCESSING_REQUEST = "An exception has occurred processing this request.";
public static final String TEST_APP_BANNER = "Tapestry Integration Test Application";
- /**
- * Number of milliseconds to sleep after the page has loaded, when giving JavaScript a chance to fully initialize.
- * Perhaps we need another option, say one that sets a flag on the HTML element once the initializations are complete.
- */
- public static final int SETUP_TIME = 100;
-
protected final void assertTextSeries(String idFormat, int startIndex, String... values)
{
for (int i = 0; i < values.length; i++)
@@ -63,6 +57,7 @@ public abstract class TapestryCoreTestCase extends SeleniumTestCase
* and the alert itself to appear.
*
* @param text
+ * @since 5.4
*/
protected final void assertFirstAlert(String text)
{
@@ -71,4 +66,25 @@ public abstract class TapestryCoreTestCase extends SeleniumTestCase
// Add the special "x" for the close button to the text.
assertText("css=[data-container-type=alerts] .alert", "\u00d7" + text);
}
+
+ /**
+ * Waits for page initialization to finish, which is recognized by the {@code data-page-loaded} attribute
+ * being added to the HTML element. Polls at 20ms intervals for 200ms.
+ *
+ * @since 5.4
+ */
+ protected final void waitForPageLoaded()
+ {
+ for (int i = 0; i < 10; i++)
+ {
+ if (isElementPresent("css=html[data-page-loaded]"))
+ {
+ return;
+ }
+
+ sleep(20);
+ }
+
+ reportAndThrowAssertionError("Page did not finish loading.");
+ }
}
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/8c95676f/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/ZoneTests.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/ZoneTests.java b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/ZoneTests.java
index d1bad25..deec281 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/ZoneTests.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/ZoneTests.java
@@ -32,7 +32,7 @@ public class ZoneTests extends TapestryCoreTestCase
{
openLinks("Select Zone Demo");
- sleep(SETUP_TIME);
+ waitForPageLoaded();
select("carMaker", "Bmw");
@@ -302,11 +302,11 @@ public class ZoneTests extends TapestryCoreTestCase
{
openLinks("Zone Demo");
- sleep(SETUP_TIME);
+ waitForPageLoaded();
click("link=Select \"CSS Injection\"");
- sleep(SETUP_TIME);
+ waitForPageLoaded();
// First check that the update arrived
@@ -318,7 +318,7 @@ public class ZoneTests extends TapestryCoreTestCase
assertCSS("demo-aip", "color", "rgb(0, 128, 0)");
assertCSS("demo-aip", "text-decoration", "underline");
}
-
+
/**
* TAP5-1890
*/
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/8c95676f/tapestry-test/src/main/java/org/apache/tapestry5/test/SeleniumTestCase.java
----------------------------------------------------------------------
diff --git a/tapestry-test/src/main/java/org/apache/tapestry5/test/SeleniumTestCase.java b/tapestry-test/src/main/java/org/apache/tapestry5/test/SeleniumTestCase.java
index 98ad5f8..850b46d 100644
--- a/tapestry-test/src/main/java/org/apache/tapestry5/test/SeleniumTestCase.java
+++ b/tapestry-test/src/main/java/org/apache/tapestry5/test/SeleniumTestCase.java
@@ -1161,7 +1161,15 @@ public abstract class SeleniumTestCase extends Assert implements Selenium
// End of delegate methods
// ---------------------------------------------------------------------
- private final void reportAndThrowAssertionError(String message, Object... arguments)
+ /**
+ * Formats a message from the provided arguments, which is written to System.err. In addition,
+ * captures the AUT's markup, screenshot, and a report to the output directory.
+ *
+ * @param message
+ * @param arguments
+ * @since 5.4
+ */
+ protected final void reportAndThrowAssertionError(String message, Object... arguments)
{
StringBuilder builder = new StringBuilder(5000);
@@ -1476,11 +1484,12 @@ public abstract class SeleniumTestCase extends Assert implements Selenium
}
/**
- * Waits until all active XHR requests are completed.
+ * Waits until all active XHR requests are completed. However, this is Prototype-based.
*
* @param timeout
* timeout to wait for
* @since 5.3
+ * @deprecated Deprecated in 5.4 as it is tied to Prototype.
*/
protected final void waitForAjaxRequestsToComplete(String timeout)
{