155 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			155 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import {
 | 
						|
  afterEach,
 | 
						|
  AsyncTestCompleter,
 | 
						|
  beforeEach,
 | 
						|
  ddescribe,
 | 
						|
  describe,
 | 
						|
  expect,
 | 
						|
  iit,
 | 
						|
  inject,
 | 
						|
  it,
 | 
						|
  xit,
 | 
						|
} from 'angular2/test_lib';
 | 
						|
import {
 | 
						|
  Runner, Sampler, SampleDescription,
 | 
						|
  Validator, bind, Injector, Metric,
 | 
						|
  Options, WebDriverAdapter
 | 
						|
} from 'benchpress/common';
 | 
						|
import { isBlank } from 'angular2/src/facade/lang';
 | 
						|
import { Promise, PromiseWrapper } from 'angular2/src/facade/async';
 | 
						|
 | 
						|
export function main() {
 | 
						|
  describe('runner', () => {
 | 
						|
    var injector;
 | 
						|
    var runner;
 | 
						|
 | 
						|
    function createRunner(defaultBindings = null) {
 | 
						|
      if (isBlank(defaultBindings)) {
 | 
						|
        defaultBindings = [];
 | 
						|
      }
 | 
						|
      runner = new Runner([
 | 
						|
        defaultBindings,
 | 
						|
        bind(Sampler).toFactory(
 | 
						|
          (_injector) => {
 | 
						|
            injector = _injector;
 | 
						|
            return new MockSampler();
 | 
						|
          }, [Injector]
 | 
						|
        ),
 | 
						|
        bind(Metric).toFactory( () => new MockMetric(), []),
 | 
						|
        bind(Validator).toFactory( () => new MockValidator(), []),
 | 
						|
        bind(WebDriverAdapter).toFactory( () => new MockWebDriverAdapter(), [])
 | 
						|
      ]);
 | 
						|
      return runner;
 | 
						|
    }
 | 
						|
 | 
						|
    it('should set SampleDescription.id', inject([AsyncTestCompleter], (async) => {
 | 
						|
      createRunner().sample({id: 'someId'})
 | 
						|
        .then( (_) => injector.asyncGet(SampleDescription) )
 | 
						|
        .then( (desc) => {
 | 
						|
          expect(desc.id).toBe('someId');
 | 
						|
          async.done();
 | 
						|
        });
 | 
						|
    }));
 | 
						|
 | 
						|
    it('should merge SampleDescription.description', inject([AsyncTestCompleter], (async) => {
 | 
						|
      createRunner([
 | 
						|
        bind(Options.DEFAULT_DESCRIPTION).toValue({'a': 1})
 | 
						|
      ]).sample({id: 'someId', bindings: [
 | 
						|
        bind(Options.SAMPLE_DESCRIPTION).toValue({'b': 2})
 | 
						|
      ]}).then( (_) => injector.asyncGet(SampleDescription) )
 | 
						|
         .then( (desc) => {
 | 
						|
 | 
						|
        expect(desc.description).toEqual({
 | 
						|
          'forceGc': false,
 | 
						|
          'userAgent': 'someUserAgent',
 | 
						|
          'a': 1,
 | 
						|
          'b': 2,
 | 
						|
          'v': 11
 | 
						|
        });
 | 
						|
        async.done();
 | 
						|
      });
 | 
						|
    }));
 | 
						|
 | 
						|
    it('should fill SampleDescription.metrics from the Metric', inject([AsyncTestCompleter], (async) => {
 | 
						|
      createRunner().sample({id: 'someId'})
 | 
						|
        .then( (_) => injector.asyncGet(SampleDescription) )
 | 
						|
        .then( (desc) => {
 | 
						|
 | 
						|
        expect(desc.metrics).toEqual({ 'm1': 'some metric' });
 | 
						|
        async.done();
 | 
						|
      });
 | 
						|
    }));
 | 
						|
 | 
						|
    it('should bind Options.EXECUTE', inject([AsyncTestCompleter], (async) => {
 | 
						|
      var execute = () => {};
 | 
						|
      createRunner().sample({id: 'someId', execute: execute}).then( (_) => {
 | 
						|
        expect(injector.get(Options.EXECUTE)).toEqual(execute);
 | 
						|
        async.done();
 | 
						|
      });
 | 
						|
    }));
 | 
						|
 | 
						|
    it('should bind Options.PREPARE', inject([AsyncTestCompleter], (async) => {
 | 
						|
      var prepare = () => {};
 | 
						|
      createRunner().sample({id: 'someId', prepare: prepare}).then( (_) => {
 | 
						|
        expect(injector.get(Options.PREPARE)).toEqual(prepare);
 | 
						|
        async.done();
 | 
						|
      });
 | 
						|
    }));
 | 
						|
 | 
						|
    it('should bind Options.MICRO_METRICS', inject([AsyncTestCompleter], (async) => {
 | 
						|
      createRunner().sample({id: 'someId', microMetrics: {'a': 'b'}}).then( (_) => {
 | 
						|
        expect(injector.get(Options.MICRO_METRICS)).toEqual({'a': 'b'});
 | 
						|
        async.done();
 | 
						|
      });
 | 
						|
    }));
 | 
						|
 | 
						|
    it('should overwrite bindings per sample call', inject([AsyncTestCompleter], (async) => {
 | 
						|
      createRunner([
 | 
						|
        bind(Options.DEFAULT_DESCRIPTION).toValue({'a': 1}),
 | 
						|
      ]).sample({id: 'someId', bindings: [
 | 
						|
        bind(Options.DEFAULT_DESCRIPTION).toValue({'a': 2}),
 | 
						|
      ]}).then( (_) => injector.asyncGet(SampleDescription) )
 | 
						|
         .then( (desc) => {
 | 
						|
 | 
						|
        expect(injector.get(SampleDescription).description['a']).toBe(2);
 | 
						|
        async.done();
 | 
						|
      });
 | 
						|
 | 
						|
    }));
 | 
						|
 | 
						|
  });
 | 
						|
}
 | 
						|
 | 
						|
class MockWebDriverAdapter extends WebDriverAdapter {
 | 
						|
  executeScript(script):Promise {
 | 
						|
    return PromiseWrapper.resolve('someUserAgent');
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
class MockValidator extends Validator {
 | 
						|
  constructor() {
 | 
						|
    super();
 | 
						|
  }
 | 
						|
  describe() {
 | 
						|
    return { 'v': 11 };
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
class MockMetric extends Metric {
 | 
						|
  constructor() {
 | 
						|
    super();
 | 
						|
  }
 | 
						|
  describe() {
 | 
						|
    return { 'm1': 'some metric' };
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
class MockSampler extends Sampler {
 | 
						|
  constructor() {
 | 
						|
    super();
 | 
						|
  }
 | 
						|
  sample():Promise {
 | 
						|
    return PromiseWrapper.resolve(23);
 | 
						|
  }
 | 
						|
}
 |