fix(http): allow using JSONP_INJECTABLES and HTTP_INJECTABLES in same injector
Fixes #3365 Closes #3390
This commit is contained in:
parent
88a5b8da0f
commit
5725f71777
|
@ -62,19 +62,26 @@ export {URLSearchParams} from './src/url_search_params';
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
export const HTTP_BINDINGS: List<any> = [
|
export const HTTP_BINDINGS: List<any> = [
|
||||||
bind(ConnectionBackend)
|
// TODO(pascal): use factory type annotations once supported in DI
|
||||||
.toClass(XHRBackend),
|
// issue: https://github.com/angular/angular/issues/3183
|
||||||
|
bind(Http)
|
||||||
|
.toFactory((xhrBackend, requestOptions) => { return new Http(xhrBackend, requestOptions);},
|
||||||
|
[XHRBackend, RequestOptions]),
|
||||||
BrowserXhr,
|
BrowserXhr,
|
||||||
bind(RequestOptions).toClass(BaseRequestOptions),
|
bind(RequestOptions).toClass(BaseRequestOptions),
|
||||||
bind(ResponseOptions).toClass(BaseResponseOptions),
|
bind(ResponseOptions).toClass(BaseResponseOptions),
|
||||||
Http
|
XHRBackend
|
||||||
];
|
];
|
||||||
|
|
||||||
export const JSONP_BINDINGS: List<any> = [
|
export const JSONP_BINDINGS: List<any> = [
|
||||||
bind(ConnectionBackend)
|
// TODO(pascal): use factory type annotations once supported in DI
|
||||||
.toClass(JSONPBackend),
|
// issue: https://github.com/angular/angular/issues/3183
|
||||||
|
bind(Jsonp)
|
||||||
|
.toFactory(
|
||||||
|
(jsonpBackend, requestOptions) => { return new Jsonp(jsonpBackend, requestOptions);},
|
||||||
|
[JSONPBackend, RequestOptions]),
|
||||||
BrowserJsonp,
|
BrowserJsonp,
|
||||||
bind(RequestOptions).toClass(BaseRequestOptions),
|
bind(RequestOptions).toClass(BaseRequestOptions),
|
||||||
bind(ResponseOptions).toClass(BaseResponseOptions),
|
bind(ResponseOptions).toClass(BaseResponseOptions),
|
||||||
Jsonp
|
JSONPBackend
|
||||||
];
|
];
|
||||||
|
|
|
@ -17,13 +17,18 @@ import {EventEmitter, ObservableWrapper} from 'angular2/src/facade/async';
|
||||||
import {
|
import {
|
||||||
BaseRequestOptions,
|
BaseRequestOptions,
|
||||||
ConnectionBackend,
|
ConnectionBackend,
|
||||||
Http,
|
|
||||||
Request,
|
Request,
|
||||||
RequestMethods,
|
RequestMethods,
|
||||||
RequestOptions,
|
RequestOptions,
|
||||||
Response,
|
Response,
|
||||||
ResponseOptions,
|
ResponseOptions,
|
||||||
URLSearchParams
|
URLSearchParams,
|
||||||
|
JSONP_BINDINGS,
|
||||||
|
HTTP_BINDINGS,
|
||||||
|
XHRBackend,
|
||||||
|
JSONPBackend,
|
||||||
|
Http,
|
||||||
|
Jsonp
|
||||||
} from 'http/http';
|
} from 'http/http';
|
||||||
|
|
||||||
class SpyObserver extends SpyObject {
|
class SpyObserver extends SpyObject {
|
||||||
|
@ -39,6 +44,59 @@ class SpyObserver extends SpyObject {
|
||||||
}
|
}
|
||||||
|
|
||||||
export function main() {
|
export function main() {
|
||||||
|
describe('injectables', () => {
|
||||||
|
var url = 'http://foo.bar';
|
||||||
|
var http: Http;
|
||||||
|
var parentInjector: Injector;
|
||||||
|
var childInjector: Injector;
|
||||||
|
var jsonpBackend: MockBackend;
|
||||||
|
var xhrBackend: MockBackend;
|
||||||
|
var jsonp: Jsonp;
|
||||||
|
var http: Http;
|
||||||
|
|
||||||
|
it('should allow using jsonpInjectables and httpInjectables in same injector',
|
||||||
|
inject([AsyncTestCompleter], (async) => {
|
||||||
|
parentInjector = Injector.resolveAndCreate(
|
||||||
|
[bind(XHRBackend).toClass(MockBackend), bind(JSONPBackend).toClass(MockBackend)]);
|
||||||
|
|
||||||
|
childInjector = parentInjector.resolveAndCreateChild([
|
||||||
|
HTTP_BINDINGS,
|
||||||
|
JSONP_BINDINGS,
|
||||||
|
bind(XHRBackend).toClass(MockBackend),
|
||||||
|
bind(JSONPBackend).toClass(MockBackend)
|
||||||
|
]);
|
||||||
|
|
||||||
|
http = childInjector.get(Http);
|
||||||
|
jsonp = childInjector.get(Jsonp);
|
||||||
|
jsonpBackend = childInjector.get(JSONPBackend);
|
||||||
|
xhrBackend = childInjector.get(XHRBackend);
|
||||||
|
|
||||||
|
var xhrCreatedConnections = 0;
|
||||||
|
var jsonpCreatedConnections = 0;
|
||||||
|
|
||||||
|
|
||||||
|
ObservableWrapper.subscribe(xhrBackend.connections, () => {
|
||||||
|
xhrCreatedConnections++;
|
||||||
|
expect(xhrCreatedConnections).toEqual(1);
|
||||||
|
if (jsonpCreatedConnections) {
|
||||||
|
async.done();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
ObservableWrapper.subscribe(http.get(url), () => {});
|
||||||
|
|
||||||
|
ObservableWrapper.subscribe(jsonpBackend.connections, () => {
|
||||||
|
jsonpCreatedConnections++;
|
||||||
|
expect(jsonpCreatedConnections).toEqual(1);
|
||||||
|
if (xhrCreatedConnections) {
|
||||||
|
async.done();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
ObservableWrapper.subscribe(jsonp.request(url), () => {});
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
|
||||||
describe('http', () => {
|
describe('http', () => {
|
||||||
var url = 'http://foo.bar';
|
var url = 'http://foo.bar';
|
||||||
var http: Http;
|
var http: Http;
|
||||||
|
|
Loading…
Reference in New Issue