import { afterEach, AsyncTestCompleter, beforeEach, ddescribe, describe, expect, iit, inject, it, xit, } from 'angular2/test_lib'; import { List, ListWrapper, StringMap } from 'angular2/src/facade/collection'; import { PromiseWrapper, Promise } from 'angular2/src/facade/async'; import { Metric, MultiMetric, bind, Injector } from 'benchpress/common'; export function main() { function createMetric(ids) { return Injector.resolveAndCreate([ ListWrapper.map(ids, (id) => bind(id).toValue(new MockMetric(id)) ), MultiMetric.createBindings(ids) ]).asyncGet(MultiMetric); } describe('multi metric', () => { it('should merge descriptions', inject([AsyncTestCompleter], (async) => { createMetric(['m1', 'm2']).then( (m) => { expect(m.describe()).toEqual({ 'm1': 'describe', 'm2': 'describe' }); async.done(); }); })); it('should merge all beginMeasure calls', inject([AsyncTestCompleter], (async) => { createMetric(['m1', 'm2']) .then( (m) => m.beginMeasure() ) .then( (values) => { expect(values).toEqual([ 'm1_beginMeasure', 'm2_beginMeasure' ]); async.done(); }); })); [false, true].forEach( (restartFlag) => { it(`should merge all endMeasure calls for restart=${restartFlag}`, inject([AsyncTestCompleter], (async) => { createMetric(['m1', 'm2']) .then( (m) => m.endMeasure(restartFlag) ) .then( (values) => { expect(values).toEqual({ 'm1': { 'restart': restartFlag }, 'm2': { 'restart': restartFlag } }); async.done(); }); })); }); }); } class MockMetric extends Metric { _id:string; constructor(id) { super(); this._id = id; } beginMeasure():Promise { return PromiseWrapper.resolve(`${this._id}_beginMeasure`); } endMeasure(restart:boolean):Promise { var result = {}; result[this._id] = { 'restart': restart }; return PromiseWrapper.resolve(result); } describe():StringMap { var result = {}; result[this._id] = 'describe'; return result; } }