feat(testability): add an initial scaffold for the testability api

Make each application component register itself onto the testability
API and exports the API onto the window object.
This commit is contained in:
Julie Ralph
2015-03-23 16:46:18 -07:00
parent f68cdf3878
commit e81e5fb2b9
15 changed files with 369 additions and 4 deletions

View File

@ -123,6 +123,7 @@ class BrowserDomAdapter extends GenericBrowserDomAdapter {
}
ShadowRoot createShadowRoot(Element el) => el.createShadowRoot();
ShadowRoot getShadowRoot(Element el) => el.shadowRoot;
Element getHost(Element el) => (el as ShadowRoot).host;
clone(Node node) => node.clone(true);
bool hasProperty(Element element, String name) =>
new JsObject.fromBrowserObject(element).hasProperty(name);
@ -188,6 +189,9 @@ class BrowserDomAdapter extends GenericBrowserDomAdapter {
bool hasShadowRoot(Node node) {
return node is Element && node.shadowRoot != null;
}
bool isShadowRoot(Node node) {
return node is ShadowRoot;
}
Node importIntoDoc(Node node) {
return document.importNode(node, true);
}

View File

@ -158,6 +158,9 @@ export class BrowserDomAdapter extends GenericBrowserDomAdapter {
getShadowRoot(el:HTMLElement): ShadowRoot {
return el.shadowRoot;
}
getHost(el:HTMLElement): HTMLElement {
return el.host;
}
clone(node:Node) {
return node.cloneNode(true);
}
@ -245,6 +248,9 @@ export class BrowserDomAdapter extends GenericBrowserDomAdapter {
hasShadowRoot(node):boolean {
return node instanceof HTMLElement && isPresent(node.shadowRoot);
}
isShadowRoot(node):boolean {
return node instanceof ShadowRoot;
}
importIntoDoc(node:Node) {
var result = document.importNode(node, true);
// Workaround WebKit https://bugs.webkit.org/show_bug.cgi?id=137619

View File

@ -147,6 +147,9 @@ export class DomAdapter {
getShadowRoot(el) {
throw _abstract();
}
getHost(el) {
throw _abstract();
}
getDistributedNodes(el) {
throw _abstract();
}
@ -231,6 +234,9 @@ export class DomAdapter {
hasShadowRoot(node):boolean {
throw _abstract();
}
isShadowRoot(node):boolean {
throw _abstract();
}
importIntoDoc(node) {
throw _abstract();
}

View File

@ -120,6 +120,15 @@ class Html5LibDomAdapter implements DomAdapter {
createStyleElement(String css, [doc]) {
throw 'not implemented';
}
createShadowRoot(el) {
throw 'not implemented';
}
getShadowRoot(el) {
throw 'not implemented';
}
getHost(el) {
throw 'not implemented';
}
clone(node) {
throw 'not implemented';
}
@ -199,6 +208,9 @@ class Html5LibDomAdapter implements DomAdapter {
bool hasShadowRoot(node) {
throw 'not implemented';
}
bool isShadowRoot(node) {
throw 'not implemented';
}
importIntoDoc(node) {
throw 'not implemented';
}

View File

@ -252,6 +252,9 @@ export class Parse5DomAdapter extends DomAdapter {
getShadowRoot(el) {
return el.shadowRoot;
}
getHost(el) {
return el.host;
}
getDistributedNodes(el) {
throw _notImplemented('getDistributedNodes');
}
@ -395,6 +398,9 @@ export class Parse5DomAdapter extends DomAdapter {
hasShadowRoot(node):boolean {
return isPresent(node.shadowRoot);
}
isShadowRoot(node): boolean {
return this.getShadowRoot(node) == node;
}
importIntoDoc(node) {
return this.clone(node);
}