This change allows ReflectiveInjector to be tree shaken resulting in not needed Reflect polyfil and smaller bundles. Code savings for HelloWorld using Closure: Reflective: bundle.js: 105,864(34,190 gzip) Static: bundle.js: 154,889(33,555 gzip) 645( 2%) BREAKING CHANGE: `platformXXXX()` no longer accepts providers which depend on reflection. Specifically the method signature when from `Provider[]` to `StaticProvider[]`. Example: Before: ``` [ MyClass, {provide: ClassA, useClass: SubClassA} ] ``` After: ``` [ {provide: MyClass, deps: [Dep1,...]}, {provide: ClassA, useClass: SubClassA, deps: [Dep1,...]} ] ``` NOTE: This only applies to platform creation and providers for the JIT compiler. It does not apply to `@Compotent` or `@NgModule` provides declarations. Benchpress note: Previously Benchpress also supported reflective provides, which now require static providers. DEPRECATION: - `ReflectiveInjector` is now deprecated as it will be remove. Use `Injector.create` as a replacement. closes #18496
75 lines
2.1 KiB
TypeScript
75 lines
2.1 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright Google Inc. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by an MIT-style license that can be
|
|
* found in the LICENSE file at https://angular.io/license
|
|
*/
|
|
|
|
import {StaticProvider} from '@angular/core';
|
|
|
|
import {WebDriverAdapter} from '../web_driver_adapter';
|
|
|
|
|
|
/**
|
|
* Adapter for the selenium-webdriver.
|
|
*/
|
|
export class SeleniumWebDriverAdapter extends WebDriverAdapter {
|
|
static PROTRACTOR_PROVIDERS = <StaticProvider[]>[{
|
|
provide: WebDriverAdapter,
|
|
useFactory: () => new SeleniumWebDriverAdapter((<any>global).browser),
|
|
deps: []
|
|
}];
|
|
|
|
constructor(private _driver: any) { super(); }
|
|
|
|
waitFor(callback: () => any): Promise<any> { return this._driver.call(callback); }
|
|
|
|
executeScript(script: string): Promise<any> { return this._driver.executeScript(script); }
|
|
|
|
executeAsyncScript(script: string): Promise<any> {
|
|
return this._driver.executeAsyncScript(script);
|
|
}
|
|
|
|
capabilities(): Promise<{[key: string]: any}> {
|
|
return this._driver.getCapabilities().then((capsObject: any) => {
|
|
const localData: {[key: string]: any} = {};
|
|
capsObject.forEach((value: any, key: string) => { localData[key] = value; });
|
|
return localData;
|
|
});
|
|
}
|
|
|
|
logs(type: string): Promise<any> {
|
|
// Needed as selenium-webdriver does not forward
|
|
// performance logs in the correct way via manage().logs
|
|
return this._driver.schedule(
|
|
new Command('getLog').setParameter('type', type),
|
|
'WebDriver.manage().logs().get(' + type + ')');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Copy of the `Command` class of webdriver as
|
|
* it is not exposed via index.js in selenium-webdriver.
|
|
*/
|
|
class Command {
|
|
private parameters_: {[key: string]: any} = {};
|
|
constructor(private name_: string) {}
|
|
|
|
getName() { return this.name_; }
|
|
|
|
setParameter(name: string, value: any) {
|
|
this.parameters_[name] = value;
|
|
return this;
|
|
}
|
|
|
|
setParameters(parameters: {[key: string]: any}) {
|
|
this.parameters_ = parameters;
|
|
return this;
|
|
}
|
|
|
|
getParameter(key: string) { return this.parameters_[key]; }
|
|
|
|
getParameters() { return this.parameters_; }
|
|
}
|