diff --git a/modules/core/src/animations/animation-manager.js b/modules/core/src/animations/animation-manager.js index 7b881117..24bb82b8 100644 --- a/modules/core/src/animations/animation-manager.js +++ b/modules/core/src/animations/animation-manager.js @@ -41,14 +41,14 @@ export default class AnimationManager { } setKeyframes(animationId, params) { - this.animations[animationId].setKeyframes({ + this.animations[animationId]?.setKeyframes({ timeline: this.timeline, ...params }); } getKeyframes(animationId) { - return this.animations[animationId].getKeyframes(); + return this.animations[animationId]?.getKeyframes(); } getAnimation(animationId) { diff --git a/modules/core/test/animations/animation-manager.spec.js b/modules/core/test/animations/animation-manager.spec.js new file mode 100644 index 00000000..07472af8 --- /dev/null +++ b/modules/core/test/animations/animation-manager.spec.js @@ -0,0 +1,67 @@ +// Copyright (c) 2021 Uber Technologies, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +import test from 'tape-catch'; + +import {AnimationManager} from '@hubble.gl/core'; + +class MockAnimation { + constructor() { + this.id = 'mock-animation'; + } + attachKeyframes(timeline) { + return; + } + setKeyframes({}) { + return; + } + getKeyframes() { + return true; + } +} + +test('AnimationManager#getKeyframes', t => { + const manager = new AnimationManager({ + animations: [new MockAnimation()] + }); + + const existent = manager.getKeyframes('mock-animation'); + t.equals(existent, true, 'defined animations return keyframes'); + + const nonExistent = manager.getKeyframes('non-existent-animation'); + t.equals(nonExistent, undefined, 'undefined animations dont return keyframes'); + + t.end(); +}); + +test('AnimationManager#setKeyframes', t => { + const manager = new AnimationManager({ + animations: [new MockAnimation()] + }); + + t.doesNotThrow( + () => manager.setKeyframes('mock-animation', {}), + 'defined animations set keyframes' + ); + t.doesNotThrow( + () => manager.setKeyframes('non-existent-animation', {}), + 'undefined animations dont set keyframes' + ); + t.end(); +}); diff --git a/modules/core/test/index.js b/modules/core/test/index.js index be4b5aee..b2d7b68d 100644 --- a/modules/core/test/index.js +++ b/modules/core/test/index.js @@ -21,3 +21,4 @@ import './keyframes/camera-keyframes.spec'; import './keyframes/kepler-filter-keyframes.spec'; import './keyframes/utils.spec'; import './animations/kepler-animation.spec'; +import './animations/animation-manager.spec';