Author: pyaschenko
Date: 2010-05-14 08:24:06 -0400 (Fri, 14 May 2010)
New Revision: 17050
Modified:
root/core/trunk/impl/src/main/resources/META-INF/resources/richfaces-queue.js
root/core/trunk/impl/src/test/resources/javascript/richfaces-queue-qunit-request.js
Log:
https://jira.jboss.org/jira/browse/RF-7895
https://jira.jboss.org/jira/browse/RF-7898
Modified: root/core/trunk/impl/src/main/resources/META-INF/resources/richfaces-queue.js
===================================================================
---
root/core/trunk/impl/src/main/resources/META-INF/resources/richfaces-queue.js 2010-05-14
12:14:59 UTC (rev 17049)
+++
root/core/trunk/impl/src/main/resources/META-INF/resources/richfaces-queue.js 2010-05-14
12:24:06 UTC (rev 17050)
@@ -50,7 +50,7 @@
richfaces.queue = (function(){
var defaultQueueOptions = {};
- defaultQueueOptions[DEFAULT_QUEUE_ID] = {requestDelay:0, ignoreDupResponse:false,
timeout:0};
+ //defaultQueueOptions[DEFAULT_QUEUE_ID] = {requestDelay:0, ignoreDupResponse:false,
timeout:0};
var eventHandlers = {};
var QueueEntry = function(queue, source, event, options) {
@@ -131,7 +131,7 @@
onRequestDelayPassed: function() {
this.readyToSubmit = true;
- this.queue.submitFirst();
+ submitFirstEntry.call(this.queue);
},
startTimer: function() {
@@ -144,7 +144,7 @@
if (delay) {
var _this = this;
- this.timer = setTimeout(function() {
+ this.timer = window.setTimeout(function() {
try {
_this.onRequestDelayPassed();
} finally {
@@ -159,7 +159,7 @@
stopTimer: function() {
if (this.timer) {
- clearTimeout(this.timer);
+ window.clearTimeout(this.timer);
this.timer = undefined;
}
},
@@ -195,21 +195,21 @@
log.debug("richfaces.queue: ajax submit error");
lastRequestedEntry = null;
//TODO: what if somebody is going to clear queue on error?
- submitFirst();
+ submitFirstEntry();
};
var onComplete = function (data) {
if (data.type == JSF_EVENT_TYPE && data.status == JSF_EVENT_SUCCESS) { // or
JSF_EVENT_COMPLETE will be rather
log.debug("richfaces.queue: ajax submit successfull");
lastRequestedEntry = null;
- submitFirst();
+ submitFirstEntry();
}
};
jsf.ajax.addOnEvent(onComplete);
jsf.ajax.addOnError(onError);
- var submitFirst = function() {
+ var submitFirstEntry = function() {
if (QUEUE_MODE == QUEUE_MODE_PULL && lastRequestedEntry) {
log.debug("richfaces.queue: Waiting for previous submit results");
return;
@@ -231,7 +231,7 @@
// call event handlers
if (o.queueonsubmit) {
- o.queueonsubmit.call(lastRequestedEntry);
+ o.queueonsubmit.call(entry);
}
callEventHandler("onrequestdequeue", entry);
}
@@ -269,6 +269,13 @@
handler2.call(null, entry);
}
}
+
+ var pushEntry = function (entry) {
+ items.push(entry);
+ log.debug("New request added to queue. Queue requestGroupId changed to " +
entry.getRequestGroupId());
+ // call event handlers
+ callEventHandler("onrequestqueue", entry);
+ }
return {
/**
@@ -306,7 +313,7 @@
var entry = items[0];
entry.stopTimer();
entry.setReadyToSubmit(true);
- submitFirst();
+ submitFirstEntry();
}
},
@@ -335,6 +342,7 @@
entry.setEventsCount(lastEntry.getEventsCount() + 1);
updateLastEntry(entry);
+ callEventHandler("onrequestqueue", entry);
} else {
log.debug("Last queue entry is not the last anymore. Stopping requestDelay
timer and marking entry as ready for submission")
@@ -342,16 +350,12 @@
lastEntry.resetRequestGroupId();
lastEntry.setReadyToSubmit(true);
- items.push(entry);
- log.debug("New request added to queue. Queue requestGroupId changed to "
+ requestGroupId);
- submitFirst();
+ pushEntry(entry);
+ submitFirstEntry();
}
} else {
- items.push(entry);
- log.debug("New request added to queue.");
+ pushEntry(entry);
}
- // call event handlers
- callEventHandler("onrequestqueue", entry);
// start timer
entry.startTimer();
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-14
12:14:59 UTC (rev 17049)
+++
root/core/trunk/impl/src/test/resources/javascript/richfaces-queue-qunit-request.js 2010-05-14
12:24:06 UTC (rev 17050)
@@ -3,8 +3,6 @@
var element = document.getElementById("testDiv");
var event = {type:"testevent"};
- var options = {requestDelay:1000};
- var opts = {queueId:"myQueue", param:"value"};
var body = document.getElementsByTagName("body")[0];
@@ -21,11 +19,39 @@
});
// setQueueOptions
- test("setQueueOptions chain", function() {
- expect(1);
- equals(RichFaces.queue.setQueueOptions(), RichFaces.queue);
+ test("setQueueOptions/getQueueOptions - params: id, object", function() {
+ expect(5);
+ equals(RichFaces.queue.setQueueOptions(), RichFaces.queue, " chain");
+ RichFaces.queue.setQueueOptions("testId", {myParam:"hello"});
+
+ var options = RichFaces.queue.getQueueOptions("testId1");
+ equals(typeof options, "object", "getQueueOptions - wrong id");
+ equals(typeof options.myParam, "undefined", "myParam");
+
+ var options1 = RichFaces.queue.getQueueOptions("testId");
+ equals(typeof options1, "object", "getQueueOptions - right id");
+ equals(options1.myParam, "hello", "myParam");
});
+ // setQueueOptions
+ test("setQueueOptions/getQueueOptions - params: object", function() {
+ expect(6);
+ RichFaces.queue.setQueueOptions("testId1", {myParam:"hello1"});
+ RichFaces.queue.setQueueOptions({"testId2": {myParam:"hello2"},
"testId3": {myParam:"hello3"}});
+
+ var options1 = RichFaces.queue.getQueueOptions("testId1");
+ equals(typeof options1, "object");
+ equals(options1.myParam, "hello1", "myParam");
+
+ var options2 = RichFaces.queue.getQueueOptions("testId2");
+ equals(typeof options2, "object");
+ equals(options2.myParam, "hello2", "myParam");
+
+ var options3 = RichFaces.queue.getQueueOptions("testId3");
+ equals(typeof options3, "object");
+ equals(options3.myParam, "hello3", "myParam");
+ });
+
// queue handlers
test("queue event and error handlers", function() {
expect(4);
@@ -35,11 +61,9 @@
equals(typeof jsf.ajax.errorHandlers[0], "function", "error handler is
function");
});
- //TODO: add request test here
- //jsf.ajax.request
- test("jsf.ajax.request - ", function() {
- expect(2);
- RichFaces.queue.setQueueOptions(opts.queueId, options);
+ //jsf.ajax.request - parameters test
+ test("jsf.ajax.request - parameters", function() {
+ expect(5);
RichFaces.ajax.jsfRequest = function (source, event, options) {
for (var i=0; i<jsf.ajax.eventHandlers.length;i++) {
@@ -55,12 +79,201 @@
var elements = RichFaces.QUnit.appendDomElements(body,
'<form id="testForm">'+
'<input id="testButton1" type="button"
value="hello"
onclick="jsf.ajax.request(this,event,{parameters:{key:\'value\'}})"/>'+
- '<input id="testButton2" type="button"
value="hello" onclick="jsf.ajax.request()"/>'+
'</table>'+
'</form>');
document.getElementById("testButton1").click({type:"onclick"});
- expect(5);
- //equals(RichFaces.queue.setQueueOptions(), RichFaces.queue);
+ RichFaces.queue.clear();
});
+
+ //jsf.ajax.request - queueId
+ test("jsf.ajax.request - queueId", function() {
+ expect(3);
+
+ RichFaces.ajax.jsfRequest = function (source, event, options) {
+ for (var i=0; i<jsf.ajax.eventHandlers.length;i++) {
+ jsf.ajax.eventHandlers[i]({type:"event", status:"success"});
+ }
+ equals(typeof options.queueId, "undefined", "options.queueId");
+ equals(typeof options.requestGroupId, "undefined",
"options.requestGroupId");
+ equals(options.param, "value", "options.param");
+ }
+
+ var elements = RichFaces.QUnit.appendDomElements(body,
+ '<form id="testForm2">'+
+ '<input id="testButton2" type="button"
value="hello" onclick="jsf.ajax.request(this,event,{queueId:
\'testQueueId1\', param: \'value\'})"/>'+
+ '</table>'+
+ '</form>');
+
+ var options1 = {param:"value1", requestGroupId: 999};
+ RichFaces.queue.setQueueOptions({'testQueueId1': options1});
+ document.getElementById("testButton2").click({type:"onclick"});
+ RichFaces.queue.clear();
+ });
+
+ //jsf.ajax.request - 2 x queueId
+ test("jsf.ajax.request - 2 x queueId", function() {
+ expect(3);
+
+ RichFaces.ajax.jsfRequest = function (source, event, options) {
+ for (var i=0; i<jsf.ajax.eventHandlers.length;i++) {
+ jsf.ajax.eventHandlers[i]({type:"event", status:"success"});
+ }
+ equals(typeof options.queueId, "undefined", "options.queueId");
+ equals(typeof options.requestGroupId, "undefined",
"options.requestGroupId");
+ equals(options.param, "newValue", "options.param");
+ }
+
+ var elements = RichFaces.QUnit.appendDomElements(body,
+ '<form id="testForm3">'+
+ '<input id="testButton3" type="button"
value="hello" onclick="jsf.ajax.request(this,event,{queueId:
\'testQueueId1\', param: \'newValue\'})"/>'+
+ '</table>'+
+ '</form>');
+
+ var options1 = {queueId: 'testQueueId2', param:"value1",
requestGroupId: 888};
+ var options2 = {param:"value1", requestGroupId: 777};
+
+ RichFaces.queue.setQueueOptions({'testQueueId1': options1,
'testQueueId2': options2});
+ document.getElementById("testButton3").click({type:"onclick"});
+ RichFaces.queue.clear();
+ });
+
+ //jsf.ajax.request - requestDelay
+ asyncTest("jsf.ajax.request - requestDelay", function() {
+ 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);
+ } else {
+ ok(false, "newTime is object");
+ }
+ start();
+ } finally {
+ RichFaces.queue.clear();
+ }
+ }
+ RichFaces.ajax.jsfRequest = function (source, event, options) {
+ for (var i=0; i<jsf.ajax.eventHandlers.length;i++) {
+ jsf.ajax.eventHandlers[i]({type:"event", status:"success"});
+ }
+ newTime = new Date();
+ }
+
+ var elements = RichFaces.QUnit.appendDomElements(body,
+ '<form id="testForm4">'+
+ '<input id="testButton4" type="button"
value="hello" onclick="jsf.ajax.request(this,event,{queueId:
\'testQueueId1\'})"/>'+
+ '</table>'+
+ '</form>');
+
+ var options1 = {requestDelay: 1000};
+
+ RichFaces.queue.setQueueOptions({'testQueueId1': options1});
+ window.setTimeout(onTimeOut, 2000);
+ time = new Date();
+ document.getElementById("testButton4").click({type:"onclick"});
+ });
+
+ //jsf.ajax.request - equal requestGroupId
+ asyncTest("jsf.ajax.request - equal requestGroupId", function() {
+ 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);
+ equals(param, "value2", "options.param");
+ } else {
+ ok(false, "newTime is object");
+ }
+ start();
+ } finally {
+ RichFaces.queue.clear();
+ }
+ }
+ RichFaces.ajax.jsfRequest = function (source, event, options) {
+ for (var i=0; i<jsf.ajax.eventHandlers.length;i++) {
+ jsf.ajax.eventHandlers[i]({type:"event", status:"success"});
+ }
+ newTime = new Date();
+ param = options.param;
+ }
+
+ var elements = RichFaces.QUnit.appendDomElements(body,
+ '<form id="testForm5">'+
+ '<input id="testButton5-1" type="button"
value="hello" onclick="jsf.ajax.request(this,event,{queueId:
\'testQueueId1\', param: \'value\'})"/>'+
+ '<input id="testButton5-2" type="button"
value="hello" onclick="jsf.ajax.request(this,event,{queueId:
\'testQueueId1\', param: \'value2\'})"/>'+
+ '</table>'+
+ '</form>');
+
+ var options1 = {requestGroupId: 888, requestDelay:1000};
+
+ RichFaces.queue.setQueueOptions({'testQueueId1': options1});
+ window.setTimeout(onTimeOut, 2000);
+ time = new Date();
+ document.getElementById("testButton5-1").click({type:"onclick"});
+ window.setTimeout(function ()
{document.getElementById("testButton5-2").click({type:"onclick"});},
500);
+ });
+
+ //jsf.ajax.request - not equal requestGroupId
+ asyncTest("jsf.ajax.request - not equal requestGroupId", function() {
+ var time;
+ var newTime;
+ var newTime2;
+ var param;
+ var onTimeOut = function () {
+ expect(3);
+ try {
+ if (typeof newTime == "object") {
+ var timeout = newTime.getTime() - time.getTime();
+ ok((timeout>400 && timeout<600), timeout);
+ equals(param, "value2", "options.param");
+ } else {
+ ok(typeof newTime == "object", "newTime is object");
+ }
+ if (typeof newTime2 == "object") {
+ var timeout = newTime2.getTime() - time.getTime();
+ ok((timeout>1400 && timeout<1600), timeout);
+ } else {
+ ok(typeof newTime2 == "object", "newTime2 is object");
+ }
+ start();
+ } finally {
+ RichFaces.queue.clear();
+ }
+ }
+ RichFaces.ajax.jsfRequest = function (source, event, options) {
+ for (var i=0; i<jsf.ajax.eventHandlers.length;i++) {
+ jsf.ajax.eventHandlers[i]({type:"event", status:"success"});
+ }
+ param = options.param;
+ if (typeof newTime != "object") {
+ newTime = new Date();
+ } else {
+ newTime2 = new Date();
+ }
+ }
+
+ var elements = RichFaces.QUnit.appendDomElements(body,
+ '<form id="testForm6">'+
+ '<input id="testButton6-1" type="button"
value="hello" onclick="jsf.ajax.request(this,event,{queueId:
\'testQueueId1\', param: \'value\'})"/>'+
+ '<input id="testButton6-2" type="button"
value="hello" onclick="jsf.ajax.request(this,event,{queueId:
\'testQueueId2\', param: \'value2\'})"/>'+
+ '</table>'+
+ '</form>');
+
+ var options1 = {requestGroupId: 888, requestDelay:1000};
+ var options2 = {requestGroupId: 999, requestDelay:1000};
+
+ RichFaces.queue.setQueueOptions({'testQueueId1': options1,
'testQueueId2': options2});
+ window.setTimeout(onTimeOut, 2000);
+ time = new Date();
+ document.getElementById("testButton6-1").click({type:"onclick"});
+ window.setTimeout(function ()
{document.getElementById("testButton6-2").click({type:"onclick"});},
500);
+ });
});
\ No newline at end of file