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> = [
|
||||
bind(ConnectionBackend)
|
||||
.toClass(XHRBackend),
|
||||
// TODO(pascal): use factory type annotations once supported in DI
|
||||
// issue: https://github.com/angular/angular/issues/3183
|
||||
bind(Http)
|
||||
.toFactory((xhrBackend, requestOptions) => { return new Http(xhrBackend, requestOptions);},
|
||||
[XHRBackend, RequestOptions]),
|
||||
BrowserXhr,
|
||||
bind(RequestOptions).toClass(BaseRequestOptions),
|
||||
bind(ResponseOptions).toClass(BaseResponseOptions),
|
||||
Http
|
||||
XHRBackend
|
||||
];
|
||||
|
||||
export const JSONP_BINDINGS: List<any> = [
|
||||
bind(ConnectionBackend)
|
||||
.toClass(JSONPBackend),
|
||||
// TODO(pascal): use factory type annotations once supported in DI
|
||||
// issue: https://github.com/angular/angular/issues/3183
|
||||
bind(Jsonp)
|
||||
.toFactory(
|
||||
(jsonpBackend, requestOptions) => { return new Jsonp(jsonpBackend, requestOptions);},
|
||||
[JSONPBackend, RequestOptions]),
|
||||
BrowserJsonp,
|
||||
bind(RequestOptions).toClass(BaseRequestOptions),
|
||||
bind(ResponseOptions).toClass(BaseResponseOptions),
|
||||
Jsonp
|
||||
JSONPBackend
|
||||
];
|
||||
|
|
|
@ -17,13 +17,18 @@ import {EventEmitter, ObservableWrapper} from 'angular2/src/facade/async';
|
|||
import {
|
||||
BaseRequestOptions,
|
||||
ConnectionBackend,
|
||||
Http,
|
||||
Request,
|
||||
RequestMethods,
|
||||
RequestOptions,
|
||||
Response,
|
||||
ResponseOptions,
|
||||
URLSearchParams
|
||||
URLSearchParams,
|
||||
JSONP_BINDINGS,
|
||||
HTTP_BINDINGS,
|
||||
XHRBackend,
|
||||
JSONPBackend,
|
||||
Http,
|
||||
Jsonp
|
||||
} from 'http/http';
|
||||
|
||||
class SpyObserver extends SpyObject {
|
||||
|
@ -39,6 +44,59 @@ class SpyObserver extends SpyObject {
|
|||
}
|
||||
|
||||
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', () => {
|
||||
var url = 'http://foo.bar';
|
||||
var http: Http;
|
||||
|
|
Loading…
Reference in New Issue