@samitouri / QOS-React-2 / commits / e3ced21c9d

postDataToURL using ajax instead of DOM

Thomas Aylott committed Nov 8, 2013 at 16:33 UTC e3ced21c9d5d099cf0fc71ae5b5d7b2c496a0033
3 files changed +38 -79
grunt/config/server.js
+3 -18
@@ -1,25 +1,12 @@
1 -var pxlgif = Buffer('R0lGODlhAQABAIAAAP///wAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==', 'base64');
2 -
1 module.exports = function(grunt){
4 -
5 - function printMiddleware(req, res, next) {
6 - if (req._parsedUrl.pathname != '/print') return next();
7 - if (req.query.message.indexOf('ok') === 0){
8 - grunt.log.ok(req.query.message);
9 - } else if (req.query.message.indexOf('not ok') === 0){
10 - grunt.log.error(req.query.message);
11 - } else {
12 - grunt[req.query.type || 'log'].writeln('[%s][%s]', req.headers['user-agent'], Date.now(), req.query.message);
13 - }
14 - res.end(pxlgif);
15 - }
2 +
3 function testResultLoggerMiddleware(req, res, next) {
4 if (!(req.body && req.body.data)) return next();
5 grunt.log.writeln('[%s][%s]', req.headers['user-agent'], Date.now(), req.body.data);
6 res.write('<!doctype html><meta charset=utf-8>');
7 res.end('Got it, thanks!');
8 }
22 -
9 +
10 return {
11 server: {
12 options: {
@@ -27,13 +14,11 @@ module.exports = function(grunt){
14 hostname: '*',
15 port: 9999,
16 middleware: function(connect, options) {
17 +
18 connect.logger.token('user-agent', function(req, res){ return req.headers['user-agent']; });
19 connect.logger.token('timestamp', function(req, res){ return Date.now(); });
20
21 return [
34 - connect.query(),
35 - printMiddleware,
36 -
22 connect.logger({format:'[:user-agent][:timestamp] :method :url', stream:grunt.verbose}),
23 connect.bodyParser(),
24 testResultLoggerMiddleware,
grunt/tasks/webdriver-jasmine.js
+1 -1
@@ -66,7 +66,7 @@ function getJSReport(browser){
66 throw Error("The test page didn't load properly. " + error);
67 })
68 .waitForCondition("typeof window.jasmine.getJSReport != 'undefined'", 10e3)
69 - .waitForCondition("window.testImageURL.running <= 0", 5e3)
69 + .waitForCondition("window.postDataToURL.running <= 0", 30e3)
70 .eval("jasmine.getJSReport()")
71 ;
72 }
test/lib/reportTestResults.browser.js
+34 -60
@@ -1,31 +1,16 @@
1 -console._error = console.error;
2 -console._warn = console.warn;
3 -console._log = console.log;
4 -
5 -console.log = window.print = function(message){
6 - console._log(message);
7 - testImageURL('/print?type=log&message=' + encodeURIComponent(message) + '&_=' + Date.now().toString(36));
8 -};
9 -
10 -console.error = function(message){
11 - console._error(message);
12 - testImageURL('/print?type=error&message=' + encodeURIComponent(message) + '&_=' + Date.now().toString(36));
13 -};
14 -
15 -console.warn = function(message){
16 - console._warn(message);
17 - testImageURL('/print?type=warn&message=' + encodeURIComponent(message) + '&_=' + Date.now().toString(36));
18 -};
19 -
1 ;(function(env){
21 -
2 env.addReporter(new jasmine.JSReporter());
23 - env.addReporter(new TAPReporter(window.print));
3
4 function report(){
26 - if (typeof jasmine.getJSReport != 'function') return setTimeout(report, 100);
27 - postDataToURL(JSON.stringify(jasmine.getJSReport()), '/reportTestResults', function(error, event){
5 + console.log('report');
6 + if (typeof jasmine.getJSReport != 'function') {
7 + console.log("typeof jasmine.getJSReport != 'function'");
8 + return setTimeout(report, 100);
9 + }
10 + postDataToURL(jasmine.getJSReport(), '/reportTestResults', function(error, event){
11 + console.log(error, event);
12 if (error) return console.error(error);
13 + console.log(event);
14 });
15 }
16
@@ -35,42 +20,31 @@ console.warn = function(message){
20 report();
21 };
22
38 - function postDataToURL(data, url, callback){
39 - var id = '$' + (+new Date()).toString(36);
40 -
41 - var postReportingTarget = document.createElement('iframe');
42 - postReportingTarget.id = postReportingTarget.name = 'postReportingTarget' + id;
43 -
44 - var postReportingForm = document.createElement('form');
45 - postReportingForm.method = 'POST';
46 - postReportingForm.action = url;
47 - postReportingForm.target = postReportingTarget.name;
48 -
49 - var postReportingData = document.createElement('input');
50 - postReportingData.type = 'hidden';
51 - postReportingData.name = 'data';
52 - postReportingData.value = data || '{"error":"unknown error in postReportingData"}';
53 -
54 - postReportingForm.appendChild(postReportingData);
55 - postReportingForm.appendChild(postReportingTarget);
56 - postReportingForm.style.cssText = "visibility:hidden; position:absolute; bottom:100%; right:100%";
57 -
58 - function done(error, event){
59 - postReportingForm.parentNode.removeChild(postReportingForm);
60 - callback(error, event);
61 - }
62 -
63 - postReportingTarget.onerror = function(error){
64 - done(error);
65 - }
66 - postReportingTarget.onload = function(event){
67 - done(null, event);
68 - }
69 - document.body.appendChild(postReportingForm);
70 - setTimeout(function(){
71 - postReportingForm.submit();
72 - },0);
73 - }
74 -
23 }(window.jasmine.getEnv()));
24
25 +function createXMLHttpRequest(){
26 + try{return new XMLHttpRequest();}
27 + catch(e){}
28 + try {return new ActiveXObject("Msxml2.XMLHTTP");}
29 + catch (e) {}
30 + try {return new ActiveXObject("Microsoft.XMLHTTP");}
31 + catch (e) {}
32 +}
33 +function postDataToURL(data, url, callback) {
34 + if (!callback) callback = postDataToURL.defaultCallback;
35 + var request = createXMLHttpRequest();
36 + if (!request) return callback(Error('XMLHttpRequest is unsupported'));
37 + postDataToURL.running = (postDataToURL.running||0) + 1;
38 + request.onreadystatechange = function(){
39 + if (request.readyState != 4) return;
40 + request.onreadystatechange = null;
41 + postDataToURL.running = (postDataToURL.running||0) - 1;
42 + callback(request.status == 200 ? null : request.status, request.responseText);
43 + };
44 + request.open('POST', url);
45 + request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
46 + request.send('data=' + encodeURIComponent(JSON.stringify(data)));
47 +}
48 +postDataToURL.defaultCallback = function(error){
49 + // console.log('postDataToURL.defaultCallback', arguments)
50 +}