test(core): update Web Platform feature detection (#24861)

PR Close #24861
This commit is contained in:
Rob Wormald 2018-07-12 15:58:13 -07:00 committed by Misko Hevery
parent 6e6489a408
commit d76a7d6f7c
5 changed files with 25 additions and 10 deletions

View File

@ -9,6 +9,7 @@
import {Component, DoBootstrap, EventEmitter, Injector, Input, NgModule, Output, destroyPlatform} from '@angular/core'; import {Component, DoBootstrap, EventEmitter, Injector, Input, NgModule, Output, destroyPlatform} from '@angular/core';
import {BrowserModule} from '@angular/platform-browser'; import {BrowserModule} from '@angular/platform-browser';
import {platformBrowserDynamic} from '@angular/platform-browser-dynamic'; import {platformBrowserDynamic} from '@angular/platform-browser-dynamic';
import {browserDetection} from '@angular/platform-browser/testing/src/browser_util';
import {Subject} from 'rxjs'; import {Subject} from 'rxjs';
import {NgElementConstructor, createCustomElement} from '../src/create-custom-element'; import {NgElementConstructor, createCustomElement} from '../src/create-custom-element';
@ -19,7 +20,7 @@ type WithFooBar = {
barBar: string barBar: string
}; };
if (typeof customElements !== 'undefined') { if (browserDetection.supportsCustomElements) {
describe('createCustomElement', () => { describe('createCustomElement', () => {
let NgElementCtor: NgElementConstructor<WithFooBar>; let NgElementCtor: NgElementConstructor<WithFooBar>;
let strategy: TestStrategy; let strategy: TestStrategy;

View File

@ -9,6 +9,7 @@
import {Component, ComponentFactoryResolver, EventEmitter, Injector, Input, NgModule, Output, ViewEncapsulation, destroyPlatform} from '@angular/core'; import {Component, ComponentFactoryResolver, EventEmitter, Injector, Input, NgModule, Output, ViewEncapsulation, destroyPlatform} from '@angular/core';
import {BrowserModule} from '@angular/platform-browser'; import {BrowserModule} from '@angular/platform-browser';
import {platformBrowserDynamic} from '@angular/platform-browser-dynamic'; import {platformBrowserDynamic} from '@angular/platform-browser-dynamic';
import {browserDetection} from '@angular/platform-browser/testing/src/browser_util';
import {Subject} from 'rxjs'; import {Subject} from 'rxjs';
import {NgElement, NgElementConstructor, createCustomElement} from '../src/create-custom-element'; import {NgElement, NgElementConstructor, createCustomElement} from '../src/create-custom-element';
@ -18,8 +19,8 @@ type WithFooBar = {
fooFoo: string, fooFoo: string,
barBar: string barBar: string
}; };
// we only run these tests in browsers that support Shadom DOM slots natively
if (typeof customElements !== 'undefined') { if (browserDetection.supportsCustomElements && browserDetection.supportsShadowDom) {
describe('slots', () => { describe('slots', () => {
let testContainer: HTMLDivElement; let testContainer: HTMLDivElement;

View File

@ -87,8 +87,7 @@ import {NAMESPACE_URIS} from '../../src/dom/dom_renderer';
}); });
}); });
// other browsers don't support shadow dom if (browserDetection.supportsDeprecatedShadowDomV0) {
if (browserDetection.isChromeDesktop) {
it('should allow to style components with emulated encapsulation and no encapsulation inside of components with shadow DOM', it('should allow to style components with emulated encapsulation and no encapsulation inside of components with shadow DOM',
() => { () => {
const fixture = TestBed.createComponent(SomeApp); const fixture = TestBed.createComponent(SomeApp);

View File

@ -9,14 +9,11 @@
import {Component, EventEmitter, Injector, Input, NgModule, Output, Renderer2, ViewEncapsulation, destroyPlatform} from '@angular/core'; import {Component, EventEmitter, Injector, Input, NgModule, Output, Renderer2, ViewEncapsulation, destroyPlatform} from '@angular/core';
import {TestBed} from '@angular/core/testing'; import {TestBed} from '@angular/core/testing';
import {BrowserModule} from '@angular/platform-browser'; import {BrowserModule} from '@angular/platform-browser';
import {browserDetection} from '@angular/platform-browser/testing/src/browser_util';
import {expect} from '@angular/platform-browser/testing/src/matchers'; import {expect} from '@angular/platform-browser/testing/src/matchers';
function supportsShadowDOMV1() {
const testEl = document.createElement('div');
return (typeof customElements !== 'undefined') && (typeof testEl.attachShadow !== 'undefined');
}
if (supportsShadowDOMV1()) { if (browserDetection.supportsShadowDom) {
describe('ShadowDOM Support', () => { describe('ShadowDOM Support', () => {
let testContainer: HTMLDivElement; let testContainer: HTMLDivElement;

View File

@ -68,6 +68,23 @@ export class BrowserDetection {
return this._ua.indexOf('Chrome') > -1 && this._ua.indexOf('Chrome/3') > -1 && return this._ua.indexOf('Chrome') > -1 && this._ua.indexOf('Chrome/3') > -1 &&
this._ua.indexOf('Edge') == -1; this._ua.indexOf('Edge') == -1;
} }
get supportsCustomElements() { return (typeof(<any>global).customElements !== 'undefined'); }
get supportsDeprecatedCustomCustomElementsV0() {
return (typeof(document as any).registerElement !== 'undefined');
}
get supportsShadowDom() {
const testEl = document.createElement('div');
return (typeof customElements !== 'undefined') && (typeof testEl.attachShadow !== 'undefined');
}
get supportsDeprecatedShadowDomV0() {
const testEl = document.createElement('div') as any;
return (typeof customElements !== 'undefined') &&
(typeof testEl.createShadowRoot !== 'undefined');
}
} }
BrowserDetection.setup(); BrowserDetection.setup();