Entry-point to bootstrapping is a rootComponent. The bootstrapping method, uses the component's selector to find the insertion element in the DOM, and attaches the component in its ShadowRoot.
98 lines
3.1 KiB
JavaScript
98 lines
3.1 KiB
JavaScript
import {describe, ddescribe, it, iit, xit, xdescribe, expect, beforeEach} from 'test_lib/test_lib';
|
|
import {bootstrap, appDocumentToken, appElementToken, documentDependentBindings}
|
|
from 'core/application';
|
|
import {Component} from 'core/annotations/component';
|
|
import {DOM} from 'facade/dom';
|
|
import {ListWrapper} from 'facade/collection';
|
|
import {PromiseWrapper} from 'facade/async';
|
|
import {bind} from 'di/di';
|
|
import {TemplateConfig} from 'core/annotations/template_config';
|
|
|
|
@Component({
|
|
selector: 'hello-app',
|
|
template: new TemplateConfig({
|
|
inline: '{{greeting}} world!',
|
|
directives: []
|
|
})
|
|
})
|
|
class HelloRootCmp {
|
|
constructor() {
|
|
this.greeting = 'hello';
|
|
}
|
|
}
|
|
|
|
@Component({
|
|
selector: 'hello-app-2',
|
|
template: new TemplateConfig({
|
|
inline: '{{greeting}} world, again!',
|
|
directives: []
|
|
})
|
|
})
|
|
class HelloRootCmp2 {
|
|
constructor() {
|
|
this.greeting = 'hello';
|
|
}
|
|
}
|
|
|
|
export function main() {
|
|
var fakeDoc, el, el2;
|
|
|
|
beforeEach(() => {
|
|
fakeDoc = DOM.createHtmlDocument();
|
|
el = DOM.createElement('hello-app', fakeDoc);
|
|
el2 = DOM.createElement('hello-app-2', fakeDoc);
|
|
DOM.appendChild(fakeDoc.body, el);
|
|
DOM.appendChild(fakeDoc.body, el2);
|
|
});
|
|
|
|
function testBindings(appComponentType) {
|
|
return ListWrapper.concat([bind(appDocumentToken).toValue(fakeDoc),
|
|
], documentDependentBindings(appComponentType));
|
|
}
|
|
|
|
describe('bootstrap factory method', () => {
|
|
it('should throw if no element is found', (done) => {
|
|
var injectorPromise = bootstrap(HelloRootCmp);
|
|
PromiseWrapper.then(injectorPromise, null, (reason) => {
|
|
expect(reason.message).toContain(
|
|
'The app selector "hello-app" did not match any elements');
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('should create an injector promise', () => {
|
|
var injectorPromise = bootstrap(HelloRootCmp, testBindings(HelloRootCmp));
|
|
expect(injectorPromise).not.toBe(null);
|
|
});
|
|
|
|
it('should resolve an injector promise and contain bindings', (done) => {
|
|
var injectorPromise = bootstrap(HelloRootCmp, testBindings(HelloRootCmp));
|
|
injectorPromise.then((injector) => {
|
|
expect(injector.get(appElementToken)).toBe(el);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('should display hello world', (done) => {
|
|
var injectorPromise = bootstrap(HelloRootCmp, testBindings(HelloRootCmp));
|
|
injectorPromise.then((injector) => {
|
|
expect(injector.get(appElementToken)
|
|
.shadowRoot.childNodes[0].nodeValue).toEqual('hello world!');
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('should support multiple calls to bootstrap', (done) => {
|
|
var injectorPromise1 = bootstrap(HelloRootCmp, testBindings(HelloRootCmp));
|
|
var injectorPromise2 = bootstrap(HelloRootCmp2, testBindings(HelloRootCmp2));
|
|
PromiseWrapper.all([injectorPromise1, injectorPromise2]).then((injectors) => {
|
|
expect(injectors[0].get(appElementToken)
|
|
.shadowRoot.childNodes[0].nodeValue).toEqual('hello world!');
|
|
expect(injectors[1].get(appElementToken)
|
|
.shadowRoot.childNodes[0].nodeValue).toEqual('hello world, again!');
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
}
|