From 5f381fd35729b470f3274d3e39199600bc81cc69 Mon Sep 17 00:00:00 2001 From: Pieter De Baets Date: Fri, 9 Sep 2016 10:53:49 -0700 Subject: [PATCH] Move buildStyleInterpolator-test to open-source, remove unused files Reviewed By: bestander Differential Revision: D3820939 fbshipit-source-id: 2ff114326642b522f162c6cce7853c8b3f0c138b --- .../__tests__/buildStyleInterpolator-test.js | 292 ++++++++++++++++++ 1 file changed, 292 insertions(+) create mode 100644 Libraries/Utilities/__tests__/buildStyleInterpolator-test.js diff --git a/Libraries/Utilities/__tests__/buildStyleInterpolator-test.js b/Libraries/Utilities/__tests__/buildStyleInterpolator-test.js new file mode 100644 index 000000000..4cb1b29fd --- /dev/null +++ b/Libraries/Utilities/__tests__/buildStyleInterpolator-test.js @@ -0,0 +1,292 @@ +/** + * Copyright (c) 2013-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + */ +'use strict'; + +jest.unmock('buildStyleInterpolator'); + +var buildStyleInterpolator = require('buildStyleInterpolator'); + +var validateEmpty = function(interpolator, value, validator) { + var emptyObject = {}; + var changed = interpolator(emptyObject, value); + validator(emptyObject); + expect(changed).toBe(true); + changed = interpolator(emptyObject, value); + expect(changed).toBe(false); +}; +describe('buildStyleInterpolator', function() { + it('should linearly interpolate without extrapolating', function() { + var testAnim = { + opacity: { + from: 100, + to: 200, + min: 0, + max: 1, + type: 'linear', + extrapolate: false, + }, + left: { + from: 200, + to: 300, + min: 0, + max: 1, + type: 'linear', + extrapolate: false, + }, + top: { + type: 'constant', + value: 23.5, + }, + }; + var interpolator = buildStyleInterpolator(testAnim); + validateEmpty(interpolator, 0, function(res) { + expect(res).toEqual({ + opacity: 100, + left: 200, + top: 23.5, + }); + }); + validateEmpty(interpolator, 1, function(res) { + expect(res).toEqual({ + opacity: 200, + left: 300, + top: 23.5, + }); + }); + validateEmpty(interpolator, -0.1, function(res) { + expect(res).toEqual({ + opacity: 100, + left: 200, + top: 23.5, + }); + }); + validateEmpty(interpolator, 1.1, function(res) { + expect(res).toEqual({ + opacity: 200, + left: 300, + top: 23.5, + }); + }); + validateEmpty(interpolator, 0.5, function(res) { + expect(res).toEqual({ + opacity: 150, + left: 250, + top: 23.5, + }); + }); + }); + it('should linearly interpolate with extrapolating', function() { + var testAnim = { + opacity: { + from: 100, + to: 200, + min: 0, + max: 1, + type: 'linear', + round: 1, // To make testing easier + extrapolate: true, + }, + left: { + from: 200, + to: 300, + min: 0, + max: 1, + type: 'linear', + round: 1, // To make testing easier + extrapolate: true, + }, + top: { + type: 'constant', + value: 23.5, + }, + }; + var interpolator = buildStyleInterpolator(testAnim); + validateEmpty(interpolator, 0, function(res) { + expect(res).toEqual({ + opacity: 100, + left: 200, + top: 23.5, + }); + }); + validateEmpty(interpolator, 1, function(res) { + expect(res).toEqual({ + opacity: 200, + left: 300, + top: 23.5, + }); + }); + validateEmpty(interpolator, -0.1, function(res) { + expect(res).toEqual({ + opacity: 90, + left: 190, + top: 23.5, + }); + }); + validateEmpty(interpolator, 1.1, function(res) { + expect(res).toEqual({ + opacity: 210, + left: 310, + top: 23.5, + }); + }); + validateEmpty(interpolator, 0.5, function(res) { + expect(res).toEqual({ + opacity: 150, + left: 250, + top: 23.5, + }); + }); + }); + it('should round accordingly', function() { + var testAnim = { + opacity: { + from: 0, + to: 1, + min: 0, + max: 1, + type: 'linear', + round: 2, // As in one over two + extrapolate: true, + }, + }; + var interpolator = buildStyleInterpolator(testAnim); + validateEmpty(interpolator, 0, function(res) { + expect(res).toEqual({ + opacity: 0, + }); + }); + validateEmpty(interpolator, 0.5, function(res) { + expect(res).toEqual({ + opacity: 0.5, + }); + }); + validateEmpty(interpolator, 0.4, function(res) { + expect(res).toEqual({ + opacity: 0.5, + }); + }); + validateEmpty(interpolator, 0.26, function(res) { + expect(res).toEqual({ + opacity: 0.5, + }); + }); + validateEmpty(interpolator, 0.74, function(res) { + expect(res).toEqual({ + opacity: 0.5, + }); + }); + validateEmpty(interpolator, 0.76, function(res) { + expect(res).toEqual({ + opacity: 1.0, + }); + }); + }); + it('should detect chnages correctly', function() { + var testAnim = { + opacity: { + from: 0, + to: 1, + min: 0, + max: 1, + type: 'linear', + round: 2, // As in one over two + extrapolate: false, + }, + }; + var interpolator = buildStyleInterpolator(testAnim); + var obj = {}; + var res = interpolator(obj, 0); + expect(obj).toEqual({ + opacity: 0, + }); + expect(res).toBe(true); + + res = interpolator(obj, 0); + // No change detected + expect(obj).toEqual({ + opacity: 0, + }); + expect(res).toBe(false); + + // No change detected + res = interpolator(obj, 1); + expect(obj).toEqual({ + opacity: 1, + }); + expect(res).toBe(true); + + // Still no change detected even when clipping + res = interpolator(obj, 1); + expect(obj).toEqual({ + opacity: 1, + }); + expect(res).toBe(false); + }); + + it('should step', function() { + var testAnim = { + opacity: { + threshold: 13, + from: 10, + to: 20, + type: 'step', + }, + }; + var interpolator = buildStyleInterpolator(testAnim); + var obj = {}; + var res = interpolator(obj, 0); + expect(obj).toEqual({ + opacity: 10, + }); + expect(res).toBe(true); + + res = interpolator(obj, 0); + // No change detected + expect(obj).toEqual({ + opacity: 10, + }); + expect(res).toBe(false); + + // No change detected + res = interpolator(obj, 10); + expect(obj).toEqual({ + opacity: 10, + }); + expect(res).toBe(false); + + // No change detected + res = interpolator(obj, 12); + expect(obj).toEqual({ + opacity: 10, + }); + expect(res).toBe(false); + + // No change detected + res = interpolator(obj, 13); + expect(obj).toEqual({ + opacity: 20, + }); + expect(res).toBe(true); + + // No change detected + res = interpolator(obj, 13.1); + expect(obj).toEqual({ + opacity: 20, + }); + expect(res).toBe(false); + + // No change detected + res = interpolator(obj, 25); + expect(obj).toEqual({ + opacity: 20, + }); + expect(res).toBe(false); + }); +});