1 | import {Injector, bind, provide, Provider, ReflectiveInjector} from 'angular2/src/core/di';
|
2 | import {isPresent, isBlank} from 'angular2/src/facade/lang';
|
3 | import {PromiseWrapper} from 'angular2/src/facade/async';
|
4 |
|
5 | import {Sampler, SampleState} from './sampler';
|
6 | import {ConsoleReporter} from './reporter/console_reporter';
|
7 | import {MultiReporter} from './reporter/multi_reporter';
|
8 | import {RegressionSlopeValidator} from './validator/regression_slope_validator';
|
9 | import {SizeValidator} from './validator/size_validator';
|
10 | import {Validator} from './validator';
|
11 | import {PerflogMetric} from './metric/perflog_metric';
|
12 | import {MultiMetric} from './metric/multi_metric';
|
13 | import {ChromeDriverExtension} from './webdriver/chrome_driver_extension';
|
14 | import {FirefoxDriverExtension} from './webdriver/firefox_driver_extension';
|
15 | import {IOsDriverExtension} from './webdriver/ios_driver_extension';
|
16 | import {WebDriverExtension} from './web_driver_extension';
|
17 | import {SampleDescription} from './sample_description';
|
18 | import {WebDriverAdapter} from './web_driver_adapter';
|
19 | import {Reporter} from './reporter';
|
20 | import {Metric} from './metric';
|
21 | import {Options} from './common_options';
|
22 |
|
23 |
|
24 |
|
25 |
|
26 |
|
27 | export class Runner {
|
28 | private _defaultBindings: Provider[];
|
29 | constructor(defaultBindings: Provider[] = null) {
|
30 | if (isBlank(defaultBindings)) {
|
31 | defaultBindings = [];
|
32 | }
|
33 | this._defaultBindings = defaultBindings;
|
34 | }
|
35 |
|
36 | sample({id, execute, prepare, microMetrics, bindings}:
|
37 | {id: string, execute?: any, prepare?: any, microMetrics?: any, bindings?: any}):
|
38 | Promise<SampleState> {
|
39 | var sampleBindings = [
|
40 | _DEFAULT_PROVIDERS,
|
41 | this._defaultBindings,
|
42 | bind(Options.SAMPLE_ID).toValue(id),
|
43 | bind(Options.EXECUTE).toValue(execute)
|
44 | ];
|
45 | if (isPresent(prepare)) {
|
46 | sampleBindings.push(bind(Options.PREPARE).toValue(prepare));
|
47 | }
|
48 | if (isPresent(microMetrics)) {
|
49 | sampleBindings.push(bind(Options.MICRO_METRICS).toValue(microMetrics));
|
50 | }
|
51 | if (isPresent(bindings)) {
|
52 | sampleBindings.push(bindings);
|
53 | }
|
54 |
|
55 | var inj = ReflectiveInjector.resolveAndCreate(sampleBindings);
|
56 | var adapter = inj.get(WebDriverAdapter);
|
57 |
|
58 | return PromiseWrapper
|
59 | .all([adapter.capabilities(), adapter.executeScript('return window.navigator.userAgent;')])
|
60 | .then((args) => {
|
61 | var capabilities = args[0];
|
62 | var userAgent = args[1];
|
63 |
|
64 |
|
65 |
|
66 |
|
67 |
|
68 |
|
69 | var injector = ReflectiveInjector.resolveAndCreate([
|
70 | sampleBindings,
|
71 | bind(Options.CAPABILITIES).toValue(capabilities),
|
72 | bind(Options.USER_AGENT).toValue(userAgent),
|
73 | provide(WebDriverAdapter, {useValue: adapter})
|
74 | ]);
|
75 |
|
76 | var sampler = injector.get(Sampler);
|
77 | return sampler.sample();
|
78 | });
|
79 | }
|
80 | }
|
81 |
|
82 | var _DEFAULT_PROVIDERS = [
|
83 | Options.DEFAULT_PROVIDERS,
|
84 | Sampler.BINDINGS,
|
85 | ConsoleReporter.BINDINGS,
|
86 | RegressionSlopeValidator.BINDINGS,
|
87 | SizeValidator.BINDINGS,
|
88 | ChromeDriverExtension.BINDINGS,
|
89 | FirefoxDriverExtension.BINDINGS,
|
90 | IOsDriverExtension.BINDINGS,
|
91 | PerflogMetric.BINDINGS,
|
92 | SampleDescription.BINDINGS,
|
93 | MultiReporter.createBindings([ConsoleReporter]),
|
94 | MultiMetric.createBindings([PerflogMetric]),
|
95 |
|
96 | Reporter.bindTo(MultiReporter),
|
97 | Validator.bindTo(RegressionSlopeValidator),
|
98 | WebDriverExtension.bindTo([ChromeDriverExtension, FirefoxDriverExtension, IOsDriverExtension]),
|
99 | Metric.bindTo(MultiMetric),
|
100 | ];
|