import {describe, ddescribe, it, iit, xit, expect, beforeEach, afterEach} from 'angular2/test_lib'; import { isBlank, isPresent, Date, DateWrapper } from 'angular2/src/facade/lang'; import { List, ListWrapper } from 'angular2/src/facade/collection'; import { SampleState, Reporter, bind, Injector, ConsoleReporter, SampleDescription, MeasureValues } from 'benchpress/common'; export function main() { describe('console reporter', () => { var reporter; var log; function createReporter({columnWidth, sampleId, descriptions, metrics}) { log = []; if (isBlank(descriptions)) { descriptions = []; } if (isBlank(sampleId)) { sampleId = 'null'; } var bindings = [ ConsoleReporter.BINDINGS, bind(SampleDescription).toValue(new SampleDescription(sampleId, descriptions, metrics)), bind(ConsoleReporter.PRINT).toValue((line) => ListWrapper.push(log, line)) ]; if (isPresent(columnWidth)) { ListWrapper.push(bindings, bind(ConsoleReporter.COLUMN_WIDTH).toValue(columnWidth)); } reporter = Injector.resolveAndCreate(bindings).get(ConsoleReporter); } it('should print the sample id, description and table header', () => { createReporter({ columnWidth: 8, sampleId: 'someSample', descriptions: [{ 'a': 1, 'b': 2 }], metrics: { 'm1': 'some desc', 'm2': 'some other desc' } }); expect(log).toEqual([ 'BENCHMARK someSample', 'Description:', '- a: 1', '- b: 2', 'Metrics:', '- m1: some desc', '- m2: some other desc', '', ' m1 | m2', '-------- | --------', ]); }); it('should print a table row', () => { createReporter({ columnWidth: 8, metrics: { 'a': '', 'b': '' } }); log = []; reporter.reportMeasureValues(mv(0, 0, { 'a': 1.23, 'b': 2 })); expect(log).toEqual([ ' 1.23 | 2.00' ]); }); it('should print the table footer and stats when there is a valid sample', () => { createReporter({ columnWidth: 8, metrics: { 'a': '', 'b': '' } }); log = []; reporter.reportSample([], [mv(0,0,{ 'a': 3, 'b': 6 }), mv(1,1,{ 'a': 5, 'b': 9 })]); expect(log).toEqual([ '======== | ========', '4.00+-25% | 7.50+-20%' ]); }); it('should print the coefficient of variation only when it is meaningful', () => { createReporter({ columnWidth: 8, metrics: { 'a': '', 'b': '' } }); log = []; reporter.reportSample([], [ mv(0, 0, { 'a': 3, 'b': 0 }), mv(1, 1, { 'a': 5, 'b': 0 }) ]); expect(log).toEqual([ '======== | ========', '4.00+-25% | 0.00' ]); }); }); } function mv(runIndex, time, values) { return new MeasureValues(runIndex, DateWrapper.fromMillis(time), values); }