diff options
author | James Lal <james@lightsofapollo.com> | 2012-06-25 16:44:39 +0200 |
---|---|---|
committer | James Lal <james@lightsofapollo.com> | 2012-06-25 16:44:39 +0200 |
commit | 96683161e43fc0101c74f0875d1a2d445afe7e8d (patch) | |
tree | 64fca9e7e146a79b433d975de521331b7f21a2ad | |
parent | 536f0c2b8391b95750de370b0f851d8a83d28598 (diff) | |
download | jsCalDAV-96683161e43fc0101c74f0875d1a2d445afe7e8d.tar.gz |
test/helper add xhr tests
-rw-r--r-- | lib/webcals/request/abstract.js | 14 | ||||
-rw-r--r-- | test/helper.js | 76 | ||||
-rw-r--r-- | test/support/fake_xhr.js | 43 | ||||
-rw-r--r-- | test/webcals/request/abstract_test.js | 13 | ||||
-rw-r--r-- | test/webcals/xhr_test.js | 142 |
5 files changed, 261 insertions, 27 deletions
diff --git a/lib/webcals/request/abstract.js b/lib/webcals/request/abstract.js new file mode 100644 index 0000000..7d31540 --- /dev/null +++ b/lib/webcals/request/abstract.js @@ -0,0 +1,14 @@ +(function(module, ns) { + + function Abstract() { + + } + + module.exports = Abstract; + +}.apply( + this, + (this.Webcals) ? + [Webcals('request/abstract'), Webcals] : + [module, require('../webcals')] +)); diff --git a/test/helper.js b/test/helper.js index d5ac7a0..436f8d2 100644 --- a/test/helper.js +++ b/test/helper.js @@ -1,30 +1,52 @@ -var chai = require('chai'), - fs = require('fs'); - -chai.Assertion.includeStack = true; -assert = chai.assert; - -loadSample = function(file, cb) { - var root = __dirname + '/../samples/'; - fs.readFile(root + file, 'utf8', function(err, contents) { - cb(err, contents); - }); -}; - -defineSample = function(file, cb) { - suiteSetup(function(done) { - loadSample(file, function(err, data) { - if (err) { - done(err); - } - cb(data); - done(); +(function() { + var chai = require('chai'), + fs = require('fs'), + path = require('path'); + + chai.Assertion.includeStack = true; + assert = chai.assert; + + loadSample = function(file, cb) { + var root = __dirname + '/../samples/'; + fs.readFile(root + file, 'utf8', function(err, contents) { + cb(err, contents); }); - }); -}; + }; + + defineSample = function(file, cb) { + suiteSetup(function(done) { + loadSample(file, function(err, data) { + if (err) { + done(err); + } + cb(data); + done(); + }); + }); + }; + + requireLib = function(lib) { + return require(__dirname + '/../lib/webcals/' + lib); + }; + + requireSupport = function(lib) { + return require(__dirname + '/support/' + lib); + } + + Webcals = require('../lib/webcals/webcals.js'); + + if (typeof(window) === 'undefined') { + //in node we need to hack Webcals to do the right thing. + var oldRequire = Webcals.require; + + Webcals.require = function exportRequireDev(path) { + if (path.indexOf('support') === 0) { + path = __dirname + '/' + path; + return require(path); + } + return oldRequire(path); + } + } -requireLib = function(lib) { - return require(__dirname + '/../lib/webcals/' + lib); -}; +}()); -Webcals = require('../lib/webcals/webcals.js'); diff --git a/test/support/fake_xhr.js b/test/support/fake_xhr.js new file mode 100644 index 0000000..27e621b --- /dev/null +++ b/test/support/fake_xhr.js @@ -0,0 +1,43 @@ +(function(module) { + + function FakeXhr() { + this.openArgs = null; + this.sendArgs = null; + this.headers = {}; + this.responseHeaders = {}; + } + + FakeXhr.prototype = { + open: function() { + this.openArgs = arguments; + }, + + getResponseHeader: function(key) { + return this.responseHeaders[key]; + }, + + setRequestHeader: function(key, value) { + this.headers[key] = value; + }, + + send: function() { + this.sendArgs = arguments; + }, + + respond: function(data, code) { + this.readyState = 4; + this.responseHeaders['content-type'] = 'application/json'; + this.responseText = JSON.stringify(data); + this.status = code || 200; + this.onreadystatechange(); + } + }; + + module.exports = FakeXhr; + +}.apply( + this, + (this.Webcals) ? + [Webcals('support/fake_xhr'), Webcals] : + [module, require('../../lib/webcals/webcals')] +)); diff --git a/test/webcals/request/abstract_test.js b/test/webcals/request/abstract_test.js new file mode 100644 index 0000000..08c806c --- /dev/null +++ b/test/webcals/request/abstract_test.js @@ -0,0 +1,13 @@ +requireLib('xhr'); +requireLib('request/abstract'); + +suite('webcals/request/abstract.js', function() { + var subject; + var Abstract; + + suiteSetup(function() { + Abstract = Webcals.require('request/abstract'); + }); + + +}); diff --git a/test/webcals/xhr_test.js b/test/webcals/xhr_test.js new file mode 100644 index 0000000..2ac2dbb --- /dev/null +++ b/test/webcals/xhr_test.js @@ -0,0 +1,142 @@ +requireLib('xhr'); +requireSupport('fake_xhr'); + +suite('webacls/xhr', function() { + var subject, + Xhr, + FakeXhr; + + + suiteSetup(function() { + Xhr = Webcals.require('xhr'); + FakeXhr = Webcals.require('support/fake_xhr'); + }); + + setup(function() { + subject = new Xhr({ + method: 'POST' + }); + }); + + suite('initialization', function() { + + test('should set options on instance', function() { + assert.equal(subject.method, 'POST'); + }); + + }); + + suite('.abort', function() { + suite('when there is an xhr object', function() { + var aborted; + + setup(function() { + aborted = false; + subject.xhr = { + abort: function() { + aborted = true; + } + }; + subject.abort(); + }); + + test('should call abort on the xhr object', function() { + assert.equal(aborted, true); + }); + }); + + suite('when there is no xhr object', function() { + test('should not fail', function() { + subject.xhr = null; + subject.abort(); + }); + }); + }); + + suite('.send', function() { + + var data = '<html></html>', + url = 'http://foo', + xhr, + responseData, + responseXhr; + + function callback(done, data, xhr) { + responseXhr = xhr; + responseData = data; + done(); + } + + function request(options) { + options.xhrClass = FakeXhr; + subject = new Xhr(options); + } + + function opensXHR() { + test('should create xhr', function() { + assert.instanceOf(subject.xhr, FakeXhr); + }); + + test('should set headers', function() { + assert.deepEqual(subject.xhr.headers, subject.headers); + }); + + test('should parse and send data', function() { + assert.deepEqual(subject.xhr.sendArgs[0], data); + }); + + test('should open xhr', function() { + assert.deepEqual(subject.xhr.openArgs, [ + subject.method, + subject.url, + subject.async, + subject.user, + subject.password + ]); + }); + } + + setup(function() { + responseXhr = null; + responseData = null; + }); + + suite('when xhr is a success and responds /w json', function() { + var response = '<html></html>', cb; + + setup(function(done) { + var xhr; + request({ + data: data, + url: url, + method: 'PUT' + }); + cb = callback.bind(this, done); + subject.send(cb); + + //should be waiting inbetween requests + assert.equal(subject.waiting, true); + + xhr = subject.xhr; + xhr.readyState = 4; + xhr.responseText = response; + xhr.onreadystatechange(); + }); + + test('should not be waiting after response', function() { + assert.equal(subject.waiting, false); + }); + + test('should send callback parsed data and xhr', function() { + assert.equal(responseXhr, subject.xhr); + assert.deepEqual(responseData, response); + }); + + opensXHR(); + }); + + }); + +}); + + |