Skip to content

Commit

Permalink
test(XHRConnection): normalize responseText and response
Browse files Browse the repository at this point in the history
normalize xhr.responseText and xhr.response

- [x] Tests
  • Loading branch information
PatrickJS committed Jul 28, 2015
1 parent 5e99f2f commit 19426a6
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 3 deletions.
3 changes: 2 additions & 1 deletion modules/angular2/src/render/xhr_impl.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import {Injectable} from 'angular2/di';
import {Promise, PromiseWrapper, PromiseCompleter} from 'angular2/src/facade/async';
import {isPresent} from 'angular2/src/facade/lang';
import {XHR} from './xhr';

@Injectable()
Expand All @@ -13,7 +14,7 @@ export class XHRImpl extends XHR {
xhr.onload = function() {
// responseText is the old-school way of retrieving response (supported by IE8 & 9)
// response/responseType properties were introduced in XHR Level2 spec (supported by IE10)
var response = ('response' in xhr) ? xhr.response : xhr.responseText;
var response = isPresent(xhr.response) ? xhr.response : xhr.responseText;

// normalize IE9 bug (http://bugs.jquery.com/ticket/1450)
var status = xhr.status === 1223 ? 204 : xhr.status;
Expand Down
35 changes: 33 additions & 2 deletions modules/angular2/test/http/backends/xhr_backend_spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,11 @@ class MockBrowserXHR extends BrowserXhr {
}

setStatusCode(status) { this.status = status; }

setResponse(value) { this.response = value; }

setResponseText(value) { this.responseText = value; }

addEventListener(type: string, cb: Function) { this.callbacks.set(type, cb); }

dispatchEvent(type: string) { this.callbacks.get(type)({}); }
Expand Down Expand Up @@ -133,7 +138,7 @@ export function main() {
var connection = new XHRConnection(sampleRequest, new MockBrowserXHR(),
new ResponseOptions({status: statusCode}));

ObservableWrapper.subscribe(connection.response, res => {
ObservableWrapper.subscribe<Response>(connection.response, res => {
expect(res.status).toBe(statusCode);
async.done();
});
Expand All @@ -148,14 +153,40 @@ export function main() {
var connection = new XHRConnection(sampleRequest, new MockBrowserXHR(),
new ResponseOptions({status: statusCode}));

ObservableWrapper.subscribe(connection.response, res => {
ObservableWrapper.subscribe<Response>(connection.response, res => {
expect(res.status).toBe(normalizedCode);
async.done();
});

existingXHRs[0].setStatusCode(statusCode);
existingXHRs[0].dispatchEvent('load');
}));

it('should normalize responseText and response', inject([AsyncTestCompleter], async => {
var responseBody = 'Doge';

var connection1 =
new XHRConnection(sampleRequest, new MockBrowserXHR(), new ResponseOptions());

var connection2 =
new XHRConnection(sampleRequest, new MockBrowserXHR(), new ResponseOptions());

ObservableWrapper.subscribe<Response>(connection1.response, res => {
expect(res.text()).toBe(responseBody);

ObservableWrapper.subscribe<Response>(connection2.response, ress => {
expect(ress.text()).toBe(responseBody);
async.done();
});
existingXHRs[1].dispatchEvent('load');
});

existingXHRs[0].setResponseText(responseBody);
existingXHRs[1].setResponse(responseBody);

existingXHRs[0].dispatchEvent('load');
}));

});
});
}

0 comments on commit 19426a6

Please sign in to comment.