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 /test/webcals/xhr_test.js | |
parent | 536f0c2b8391b95750de370b0f851d8a83d28598 (diff) | |
download | jsCalDAV-96683161e43fc0101c74f0875d1a2d445afe7e8d.tar.gz |
test/helper add xhr tests
Diffstat (limited to 'test/webcals/xhr_test.js')
-rw-r--r-- | test/webcals/xhr_test.js | 142 |
1 files changed, 142 insertions, 0 deletions
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(); + }); + + }); + +}); + + |