Author: pyaschenko
Date: 2010-05-17 10:16:50 -0400 (Mon, 17 May 2010)
New Revision: 17080
Added:
root/core/trunk/impl/src/test/resources/javascript/timer-simulation.js
Modified:
root/core/trunk/impl/src/test/resources/javascript/richfaces-client-api.html
root/core/trunk/impl/src/test/resources/javascript/richfaces-queue-qunit-request.js
Log:
timer simulation was added to tests
Modified: root/core/trunk/impl/src/test/resources/javascript/richfaces-client-api.html
===================================================================
---
root/core/trunk/impl/src/test/resources/javascript/richfaces-client-api.html 2010-05-17
13:40:59 UTC (rev 17079)
+++
root/core/trunk/impl/src/test/resources/javascript/richfaces-client-api.html 2010-05-17
14:16:50 UTC (rev 17080)
@@ -7,6 +7,7 @@
<link type="text/css" rel="Stylesheet" media="screen"
href="qunit/qunit.css" />
<script type="text/javascript"
src="../../classes/META-INF/resources/jquery.js"></script>
<script type="text/javascript"
src="qunit/qunit.js"></script>
+ <script type="text/javascript"
src="timer-simulation.js"></script>
<script type="text/javascript"
src="../../classes/META-INF/resources/richfaces.js"></script>
<script type="text/javascript"
src="richfaces-jsf-ajax-qunit.js"></script>
<script type="text/javascript"
src="../../classes/META-INF/resources/jquery.position.js"></script>
Modified:
root/core/trunk/impl/src/test/resources/javascript/richfaces-queue-qunit-request.js
===================================================================
---
root/core/trunk/impl/src/test/resources/javascript/richfaces-queue-qunit-request.js 2010-05-17
13:40:59 UTC (rev 17079)
+++
root/core/trunk/impl/src/test/resources/javascript/richfaces-queue-qunit-request.js 2010-05-17
14:16:50 UTC (rev 17080)
@@ -37,7 +37,8 @@
test("setQueueOptions/getQueueOptions - params: object", function() {
expect(6);
RichFaces.queue.setQueueOptions("testId1", {myParam:"hello1"});
- RichFaces.queue.setQueueOptions({"testId2": {myParam:"hello2"},
"testId3": {myParam:"hello3"}});
+ RichFaces.queue.setQueueOptions("testId2", {myParam:"hello2"});
+ RichFaces.queue.setQueueOptions({"testId2": {myParam:"hello2-new"},
"testId3": {myParam:"hello3"}});
var options1 = RichFaces.queue.getQueueOptions("testId1");
equals(typeof options1, "object");
@@ -45,7 +46,7 @@
var options2 = RichFaces.queue.getQueueOptions("testId2");
equals(typeof options2, "object");
- equals(options2.myParam, "hello2", "myParam");
+ equals(options2.myParam, "hello2-new", "myParam");
var options3 = RichFaces.queue.getQueueOptions("testId3");
equals(typeof options3, "object");
@@ -139,15 +140,16 @@
});
//jsf.ajax.request - requestDelay
- asyncTest("jsf.ajax.request - requestDelay", function() {
+ test("jsf.ajax.request - requestDelay", function() {
+ Timer.beginSimulation();
var time;
var newTime;
var onTimeOut = function () {
expect(1);
try {
- if (typeof newTime == "object") {
- var timeout = newTime.getTime() - time.getTime();
- ok((timeout>900 && timeout<1100), timeout);
+ if (typeof newTime != "undefined") {
+ var timeout = newTime - time;
+ equals(timeout, 1000);
} else {
ok(false, "newTime is object");
}
@@ -160,7 +162,7 @@
for (var i=0; i<jsf.ajax.eventHandlers.length;i++) {
jsf.ajax.eventHandlers[i]({type:"event", status:"success"});
}
- newTime = new Date();
+ newTime = Timer.currentTime;
}
var elements = RichFaces.QUnit.appendDomElements(body,
@@ -172,25 +174,28 @@
var options1 = {requestDelay: 1000};
RichFaces.queue.setQueueOptions({'testQueueId1': options1});
- window.setTimeout(onTimeOut, 2000);
- time = new Date();
+ setTimeout(onTimeOut, 2000);
+ time = Timer.currentTime;
document.getElementById("testButton4").click({type:"onclick"});
+ Timer.execute();
+ Timer.endSimulation();
});
//jsf.ajax.request - equal requestGroupId
- asyncTest("jsf.ajax.request - equal requestGroupId", function() {
+ test("jsf.ajax.request - equal requestGroupId", function() {
+ Timer.beginSimulation();
var time;
var newTime;
var param = "";
var onTimeOut = function () {
expect(2);
try {
- if (typeof newTime == "object") {
- var timeout = newTime.getTime() - time.getTime();
- ok((timeout>1400 && timeout<1600), timeout);
+ if (typeof newTime != "undefined") {
+ var timeout = newTime - time;
+ equals(timeout, 1500);
equals(param, "value2", "options.param");
} else {
- ok(false, "newTime is object");
+ ok(false, "newTime is undefined");
}
start();
} finally {
@@ -201,7 +206,7 @@
for (var i=0; i<jsf.ajax.eventHandlers.length;i++) {
jsf.ajax.eventHandlers[i]({type:"event", status:"success"});
}
- newTime = new Date();
+ newTime = Timer.currentTime;
param = options.param;
}
@@ -216,13 +221,16 @@
RichFaces.queue.setQueueOptions({'testQueueId1': options1});
window.setTimeout(onTimeOut, 2000);
- time = new Date();
+ time = Timer.currentTime;
document.getElementById("testButton5-1").click({type:"onclick"});
window.setTimeout(function ()
{document.getElementById("testButton5-2").click({type:"onclick"});},
500);
+ Timer.execute();
+ Timer.endSimulation();
});
//jsf.ajax.request - not equal requestGroupId
- asyncTest("jsf.ajax.request - not equal requestGroupId", function() {
+ test("jsf.ajax.request - not equal requestGroupId", function() {
+ Timer.beginSimulation();
var time;
var newTime;
var newTime2;
@@ -230,18 +238,18 @@
var onTimeOut = function () {
expect(3);
try {
- if (typeof newTime == "object") {
- var timeout = newTime.getTime() - time.getTime();
- ok((timeout>400 && timeout<600), timeout);
+ if (typeof newTime != "undefined") {
+ var timeout = newTime - time;
+ equals(timeout, 500);
equals(param, "value2", "options.param");
} else {
- ok(typeof newTime == "object", "newTime is object");
+ ok(false, "newTime is undefined");
}
- if (typeof newTime2 == "object") {
- var timeout = newTime2.getTime() - time.getTime();
- ok((timeout>1400 && timeout<1600), timeout);
+ if (typeof newTime2 != "undefined") {
+ var timeout = newTime2 - time;
+ equals(timeout, 1500);
} else {
- ok(typeof newTime2 == "object", "newTime2 is object");
+ ok(false, "newTime2 is undefined");
}
start();
} finally {
@@ -253,10 +261,10 @@
jsf.ajax.eventHandlers[i]({type:"event", status:"success"});
}
param = options.param;
- if (typeof newTime != "object") {
- newTime = new Date();
+ if (typeof newTime == "undefined") {
+ newTime = Timer.currentTime;
} else {
- newTime2 = new Date();
+ newTime2 = Timer.currentTime;
}
}
@@ -272,8 +280,10 @@
RichFaces.queue.setQueueOptions({'testQueueId1': options1,
'testQueueId2': options2});
window.setTimeout(onTimeOut, 2000);
- time = new Date();
+ time = Timer.currentTime;
document.getElementById("testButton6-1").click({type:"onclick"});
window.setTimeout(function ()
{document.getElementById("testButton6-2").click({type:"onclick"});},
500);
+ Timer.execute();
+ Timer.endSimulation();
});
});
\ No newline at end of file
Added: root/core/trunk/impl/src/test/resources/javascript/timer-simulation.js
===================================================================
--- root/core/trunk/impl/src/test/resources/javascript/timer-simulation.js
(rev 0)
+++ root/core/trunk/impl/src/test/resources/javascript/timer-simulation.js 2010-05-17
14:16:50 UTC (rev 17080)
@@ -0,0 +1,84 @@
+var Timer = {
+
+ _eventCounter: 0,
+
+ currentTime: 0,
+
+ maxTime: 10000000,
+
+ events: new Array(),
+
+ wSetTimeout: window.setTimeout,
+
+ wClearTimeout: window.clearTimeout,
+
+ addEventToTimer: function(callback, delay) {
+ var eventTime = this.currentTime + delay;
+
+ var i = 0;
+
+ while (this.events[i] && (this.events[i].eventTime <= eventTime)) {
+ i++;
+ }
+
+ var eventId = this._eventCounter++;
+
+ this.events.splice(i, 0, {eventTime: eventTime, callback: callback, eventId:
eventId});
+
+ return eventId;
+ },
+
+ removeEventFromTimer: function(eventId) {
+ for ( var i = 0; i < this.events.length; i++) {
+ if (this.events[i].eventId == eventId) {
+ this.events.splice(i, 1);
+
+ break;
+ }
+ }
+ },
+
+ execute: function() {
+ while (this.events.length > 0) {
+
+ var eventData = this.events.shift();
+
+ this.currentTime = eventData.eventTime;
+ if (this.currentTime > this.maxTime) {
+ throw "Maximum execution time reached, aborting timer";
+ }
+
+ try {
+ eventData.callback();
+ } catch (e) {
+ alert(e.message);
+ }
+ }
+ },
+
+ isEmpty: function() {
+ return this.events.length == 0;
+ },
+
+ clear: function() {
+ this._eventCounter = 0;
+ this.currentTime = 0;
+ this.events = [];
+ },
+
+ beginSimulation: function() {
+ this.clear();
+ window.setTimeout = document.setTimeout = function(callback, delay) {
+ return Timer.addEventToTimer(callback, delay);
+ };
+
+ window.clearTimeout = document.clearTimeout = function(timerId) {
+ Timer.removeEventFromTimer(timerId);
+ };
+ },
+
+ endSimulation: function() {
+ window.setTimeout = Timer.wSetTimeout;
+ window.clearTimeout = Timer.wClearTimeout;
+ }
+};
\ No newline at end of file