Skip to content

Commit

Permalink
[refactored] MotionObservable tests to use mockObserver
Browse files Browse the repository at this point in the history
Summary: Hooray refactoring common code into reusable abstractions!

Reviewers: O3 Material JavaScript platform reviewers, #material_motion, O2 Material Motion, featherless

Reviewed By: #material_motion, O2 Material Motion, featherless

Tags: #material_motion

Differential Revision: http://codereview.cc/D2412
  • Loading branch information
appsforartists committed Dec 22, 2016
1 parent c5d8089 commit e9887a3
Show file tree
Hide file tree
Showing 5 changed files with 76 additions and 110 deletions.
42 changes: 18 additions & 24 deletions packages/streams/src/__tests__/MotionObservable-debounce.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,15 +26,19 @@ import {
stub,
} from 'sinon';

import MotionObservable from '../MotionObservable';

declare function require(name: string);

// chai really doesn't like being imported as an ES2015 module; will be fixed in v4
require('chai').use(
require('sinon-chai')
);

import {
createMockObserver,
} from 'material-motion-testing-utils';

import MotionObservable from '../MotionObservable';

export function waitOneFrame() {
return new Promise(
resolve => requestAnimationFrame(resolve)
Expand All @@ -43,35 +47,25 @@ export function waitOneFrame() {

describe('MotionObservable._debounce',
() => {
let next;
let stream;
let mockObserver;
let listener1;
let disconnect;

beforeEach(
() => {
stream = new MotionObservable(
observer => {
next = (value) => {
observer.next(value);
}

return disconnect;
}
);

mockObserver = createMockObserver();
stream = new MotionObservable(mockObserver.connect);
listener1 = stub();
disconnect = stub();
}
);

it('should send the most recent value to the observer at the beginning of each frame',
() => {
stream._debounce().subscribe(listener1);

next(1);
next(2);
next(3);
mockObserver.next(1);
mockObserver.next(2);
mockObserver.next(3);

return waitOneFrame().then(
() => {
Expand All @@ -86,15 +80,15 @@ describe('MotionObservable._debounce',
() => {
stream._debounce().subscribe(listener1);

next(1);
next(2);
next(3);
mockObserver.next(1);
mockObserver.next(2);
mockObserver.next(3);

return waitOneFrame().then(
() => {
next(4);
next(5);
next(6);
mockObserver.next(4);
mockObserver.next(5);
mockObserver.next(6);

return waitOneFrame();
}
Expand Down
30 changes: 12 additions & 18 deletions packages/streams/src/__tests__/MotionObservable-filter.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,36 +26,30 @@ import {
stub,
} from 'sinon';

import MotionObservable from '../MotionObservable';

declare function require(name: string);

// chai really doesn't like being imported as an ES2015 module; will be fixed in v4
require('chai').use(
require('sinon-chai')
);

import {
createMockObserver,
} from 'material-motion-testing-utils';

import MotionObservable from '../MotionObservable';

describe('MotionObservable._filter',
() => {
let next;
let stream;
let mockObserver;
let listener1;
let disconnect;

beforeEach(
() => {
stream = new MotionObservable(
observer => {
next = (value) => {
observer.next(value);
}

return disconnect;
}
);

mockObserver = createMockObserver();
stream = new MotionObservable(mockObserver.connect);
listener1 = stub();
disconnect = stub();
}
);

Expand All @@ -65,9 +59,9 @@ describe('MotionObservable._filter',

stream._filter(isOdd).subscribe(listener1);

next(1);
next(2);
next(3);
mockObserver.next(1);
mockObserver.next(2);
mockObserver.next(3);

expect(listener1).to.have.been.calledWith(1);
expect(listener1).not.to.have.been.calledWith(2);
Expand Down
26 changes: 10 additions & 16 deletions packages/streams/src/__tests__/MotionObservable-map.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,36 +26,30 @@ import {
stub,
} from 'sinon';

import MotionObservable from '../MotionObservable';

declare function require(name: string);

// chai really doesn't like being imported as an ES2015 module; will be fixed in v4
require('chai').use(
require('sinon-chai')
);

import {
createMockObserver,
} from 'material-motion-testing-utils';

import MotionObservable from '../MotionObservable';

describe('MotionObservable._map',
() => {
let next;
let stream;
let mockObserver;
let listener1;
let disconnect;

beforeEach(
() => {
stream = new MotionObservable(
observer => {
next = (value) => {
observer.next(value);
}

return disconnect;
}
);

mockObserver = createMockObserver();
stream = new MotionObservable(mockObserver.connect);
listener1 = stub();
disconnect = stub();
}
);

Expand All @@ -65,7 +59,7 @@ describe('MotionObservable._map',
x => x + 40
).subscribe(listener1);

next(2);
mockObserver.next(2);
expect(listener1).to.have.been.calledWith(42);
}
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,46 +26,36 @@ import {
stub,
} from 'sinon';

import {
MotionObservable,
State,
} from '../';

declare function require(name: string);

// chai really doesn't like being imported as an ES2015 module; will be fixed in v4
require('chai').use(
require('sinon-chai')
);

import {
createMockObserver,
} from 'material-motion-testing-utils';

import {
MotionObservable,
State,
} from '../';

describe('MotionObservable._nextOperator',
() => {
let next;
let state;
let stream;
let mockObserver;
let nextListener;
let stateListener;
let disconnect;

beforeEach(
() => {
stream = new MotionObservable(
observer => {
next = (value) => {
observer.next(value);
}

state = (value) => {
observer.state(value);
}

return disconnect;
}
);
mockObserver = createMockObserver();
stream = new MotionObservable(mockObserver.connect);

nextListener = stub();
stateListener = stub();
disconnect = stub();
}
);

Expand All @@ -83,7 +73,7 @@ describe('MotionObservable._nextOperator',

stream._nextOperator(makeValuesAsync).subscribe(nextListener);

next(1);
mockObserver.next(1);

expect(nextListener).not.to.have.been.called;
return waitAMoment.then(
Expand All @@ -103,9 +93,9 @@ describe('MotionObservable._nextOperator',
state: stateListener,
});

state(State.AT_REST);
next('hi');
state(State.ACTIVE);
mockObserver.state(State.AT_REST);
mockObserver.next('hi');
mockObserver.state(State.ACTIVE);

expect(stateListener).to.have.been.calledWith(State.AT_REST);
expect(nextListener).not.to.have.been.called;
Expand Down
46 changes: 20 additions & 26 deletions packages/streams/src/__tests__/MotionObservable.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,45 +26,36 @@ import {
stub,
} from 'sinon';

import {
MotionObservable,
State,
} from '../';

declare function require(name: string);

// chai really doesn't like being imported as an ES2015 module; will be fixed in v4
require('chai').use(
require('sinon-chai')
);

import {
createMockObserver,
} from 'material-motion-testing-utils';

import {
MotionObservable,
State,
} from '../';

describe('MotionObservable',
() => {
let next;
let state;
let stream;
let mockObserver;
let nextListener;
let stateListener;
let disconnect;

beforeEach(
() => {
// Reset these until the stream is subscribed to.
next = undefined;
state = undefined;

stream = new MotionObservable(
observer => {
next = observer.next;
state = observer.state;

return disconnect;
}
);
mockObserver = createMockObserver();
stream = new MotionObservable(mockObserver.connect);

nextListener = stub();
stateListener = stub();
disconnect = stub();
}
);

Expand All @@ -75,7 +66,8 @@ describe('MotionObservable',
state: stateListener,
});

next(1);
mockObserver.next(1);

expect(nextListener).to.have.been.calledWith(1);
expect(stateListener).not.to.have.been.called;
}
Expand All @@ -88,7 +80,8 @@ describe('MotionObservable',
state: stateListener,
});

state(State.ACTIVE);
mockObserver.state(State.ACTIVE);

expect(nextListener).not.to.have.been.called;
expect(stateListener).to.have.been.calledWith(State.ACTIVE);
}
Expand All @@ -101,8 +94,9 @@ describe('MotionObservable',
state: stateListener,
});

next('hi');
state(State.ACTIVE);
mockObserver.next('hi');
mockObserver.state(State.ACTIVE);

expect(nextListener).to.have.been.calledWith('hi');
expect(stateListener).to.have.been.calledWith(State.ACTIVE);
}
Expand All @@ -115,7 +109,7 @@ describe('MotionObservable',
expect(observer.state).to.exist;
observer.state(State.ACTIVE);

return disconnect;
return mockObserver.disconnect;
}
).subscribe(nextListener);
}
Expand Down

0 comments on commit e9887a3

Please sign in to comment.