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 = '', url = 'http://foo', xhr, responseXhr; function callback(done, data, xhr) { responseXhr = xhr; 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; }); suite('when xhr is a success and responds /w data', function() { var response = '', 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); }); opensXHR(); }); }); });