aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJames Lal <james@lightsofapollo.com>2012-06-25 16:44:39 +0200
committerJames Lal <james@lightsofapollo.com>2012-06-25 16:44:39 +0200
commit96683161e43fc0101c74f0875d1a2d445afe7e8d (patch)
tree64fca9e7e146a79b433d975de521331b7f21a2ad
parent536f0c2b8391b95750de370b0f851d8a83d28598 (diff)
downloadjsCalDAV-96683161e43fc0101c74f0875d1a2d445afe7e8d.tar.gz
test/helper add xhr tests
-rw-r--r--lib/webcals/request/abstract.js14
-rw-r--r--test/helper.js76
-rw-r--r--test/support/fake_xhr.js43
-rw-r--r--test/webcals/request/abstract_test.js13
-rw-r--r--test/webcals/xhr_test.js142
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();
+ });
+
+ });
+
+});
+
+