Skip to content

Commit

Permalink
[added] MotionSubject
Browse files Browse the repository at this point in the history
Summary: Related: #194

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

Reviewed By: O2 Material Motion, #material_motion, featherless

Subscribers: featherless

Tags: #material_motion

Differential Revision: http://codereview.cc/D3131
  • Loading branch information
appsforartists committed May 2, 2017
1 parent 7a046b5 commit d480b70
Show file tree
Hide file tree
Showing 3 changed files with 108 additions and 0 deletions.
41 changes: 41 additions & 0 deletions packages/core/src/observables/MotionSubject.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
/** @license
* Copyright 2016 - present The Material Motion Authors. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy
* of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/

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

// ObservableWithMotionOperators isn't referenced in this file, but TypeScript
// gets mad if you remove it. (MotionSubject is using MotionDebounceable from an
// external module)
import {
ObservableWithMotionOperators,
withMotionOperators,
} from '../operators';

import {
Operable,
} from '../types';

import {
IndefiniteSubject,
} from './IndefiniteSubject';

export class OperableSubject<T> extends IndefiniteSubject<T> implements Operable<T> {
_observableConstructor = MotionObservable;
}
export const MotionSubject = withMotionOperators(OperableSubject);
export default MotionSubject;
64 changes: 64 additions & 0 deletions packages/core/src/observables/__tests__/motionSubject.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
/** @license
* Copyright 2016 - present The Material Motion Authors. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy
* of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/

import { expect } from 'chai';

import {
beforeEach,
describe,
it,
} from 'mocha-sugar-free';

import {
spy,
} from 'sinon';

import MotionSubject from '../MotionSubject';

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')
);

describe('motionSubject',
() => {
let subject;
let listener;

beforeEach(
() => {
subject = new MotionSubject();

listener = spy();
}
);

it(`should be a subject with operators`,
() => {
subject.pluck('a').subscribe(listener);

subject.next({ 'a': 1 });

expect(listener).to.have.been.calledOnce.and.to.have.been.calledWith(1);
}
);

// It would be more thorough to re-run the IndefiniteSubject and operator
// test suites here, but I'm not sure it adds value/
}
);
3 changes: 3 additions & 0 deletions packages/core/src/observables/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,7 @@ export { default as IndefiniteSubject } from './IndefiniteSubject';
export * from './MotionObservable';
export { default as MotionObservable } from './MotionObservable';

export * from './MotionSubject';
export { default as MotionSubject } from './MotionSubject';

export default undefined;

0 comments on commit d480b70

Please sign in to comment.