| // Copyright 2006 The Closure Library 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. |
| |
| goog.provide('goog.ui.RangeModelTest'); |
| goog.setTestOnly('goog.ui.RangeModelTest'); |
| |
| goog.require('goog.testing.jsunit'); |
| goog.require('goog.ui.RangeModel'); |
| |
| function reset(rm, step) { |
| rm.setStep(step || 1); |
| rm.setExtent(0); |
| rm.setMinimum(0); |
| rm.setMaximum(100); |
| rm.setValue(0); |
| } |
| |
| function getDescriptiveString(rm) { |
| return rm.getMinimum() + ' < ' + rm.getValue() + '[' + rm.getExtent() + |
| '] < ' + rm.getMaximum(); |
| } |
| |
| function testValue() { |
| var rm = new goog.ui.RangeModel; |
| |
| assertEquals(0, rm.getValue()); |
| rm.setValue(50); |
| assertEquals(50, rm.getValue()); |
| |
| // setting smaller than min should keep min |
| rm.setValue(-1); |
| assertEquals(0, rm.getValue()); |
| |
| // setting larger than max should keep max - extent |
| rm.setValue(101); |
| assertEquals(100, rm.getValue()); |
| rm.setValue(0); |
| rm.setExtent(10); |
| rm.setValue(100); |
| assertEquals(90, rm.getValue()); |
| |
| //////////////// |
| // Change step |
| reset(rm, 3); |
| |
| assertEquals(0, rm.getValue()); |
| rm.setValue(50); |
| assertEquals(51, rm.getValue()); |
| |
| // setting smaller than min should keep min |
| rm.setValue(-1); |
| assertEquals(0, rm.getValue()); |
| |
| // setting larger than max should keep max - extent |
| rm.setValue(101); |
| assertEquals(99, rm.getValue()); |
| rm.setValue(0); |
| rm.setExtent(10); |
| rm.setValue(100); |
| assertEquals(90, rm.getValue()); |
| |
| } |
| |
| function testMinium() { |
| var rm = new goog.ui.RangeModel; |
| |
| rm.setValue(50); |
| rm.setMinimum(10); |
| assertEquals(10, rm.getMinimum()); |
| |
| reset(rm); |
| |
| // setting larger than value should change value |
| rm.setMinimum(10); |
| assertEquals(10, rm.getMinimum()); |
| assertEquals(10, rm.getValue()); |
| |
| // setting larger than max should set max = min |
| rm.setMinimum(200); |
| assertEquals(200, rm.getMinimum()); |
| assertEquals(200, rm.getValue()); |
| assertEquals(200, rm.getMaximum()); |
| assertEquals(0, rm.getExtent()); |
| |
| reset(rm); |
| |
| // should change extent |
| rm.setExtent(10); |
| rm.setMinimum(95); |
| assertEquals(95, rm.getMinimum()); |
| assertEquals(95, rm.getValue()); |
| assertEquals(100, rm.getMaximum()); |
| assertEquals(5, rm.getExtent()); |
| |
| //////////////// |
| // Change step |
| reset(rm, 3); |
| |
| rm.setValue(50); |
| rm.setMinimum(10); |
| assertEquals(10, rm.getMinimum()); |
| |
| reset(rm, 3); |
| |
| // setting larger than value should change value |
| rm.setMinimum(10); |
| assertEquals(10, rm.getMinimum()); |
| assertEquals(10, rm.getValue()); |
| |
| // setting larger than max should set max = min |
| rm.setMinimum(200); |
| assertEquals(200, rm.getMinimum()); |
| assertEquals(200, rm.getValue()); |
| assertEquals(200, rm.getMaximum()); |
| assertEquals(0, rm.getExtent()); |
| |
| reset(rm, 3); |
| |
| // should change extent |
| rm.setExtent(10); // 0 < 0[9] < 99 |
| rm.setMinimum(95); // 95 < 95[3] < 98 |
| assertEquals(95, rm.getMinimum()); |
| assertEquals(95, rm.getValue()); |
| assertEquals(98, rm.getMaximum()); |
| assertEquals(3, rm.getExtent()); |
| } |
| |
| function testMaximum() { |
| var rm = new goog.ui.RangeModel; |
| |
| rm.setMaximum(50); |
| assertEquals(50, rm.getMaximum()); |
| |
| reset(rm); |
| |
| // setting to smaller than minimum should change minimum, value and extent |
| rm.setValue(5); |
| rm.setExtent(10); |
| rm.setMinimum(50); |
| rm.setMaximum(40); |
| assertEquals(40, rm.getMaximum()); |
| assertEquals(0, rm.getExtent()); |
| assertEquals(40, rm.getValue()); |
| assertEquals(40, rm.getMinimum()); |
| |
| reset(rm); |
| |
| // setting smaller than value should change value to max - extent |
| rm.setExtent(10); |
| rm.setValue(50); |
| rm.setMaximum(40); |
| assertEquals(40, rm.getMaximum()); |
| assertEquals(30, rm.getValue()); |
| |
| reset(rm); |
| |
| // should change value, and keep extent constant, |
| // unless extent is > max - min. |
| rm.setExtent(10); |
| rm.setValue(90); |
| rm.setMaximum(95); |
| assertEquals(95, rm.getMaximum()); |
| assertEquals(10, rm.getExtent()); |
| assertEquals(85, rm.getValue()); |
| |
| //////////////// |
| // Change step |
| reset(rm, 3); |
| |
| rm.setMaximum(50); // 0 < 0[0] < 51 |
| assertEquals(51, rm.getMaximum()); |
| |
| reset(rm, 3); |
| |
| // setting to smaller than minimum should change minimum, value and extent |
| rm.setValue(5); // 0 < 6[0] < 99 |
| rm.setExtent(10); // 0 < 6[9] < 99 |
| rm.setMinimum(50); // 50 < 50[9] < 98 |
| rm.setMaximum(40); // 41 < 41[0] < 41 |
| assertEquals(41, rm.getMaximum()); |
| assertEquals(0, rm.getExtent()); |
| assertEquals(41, rm.getValue()); |
| assertEquals(41, rm.getMinimum()); |
| |
| reset(rm, 3); |
| |
| // setting smaller than value should change value to max - extent |
| rm.setExtent(10); // 0 < 0[9] < 99 |
| rm.setValue(50); // 0 < 51[9] < 99 |
| rm.setMaximum(40); // 0 < 30[9] < 39 |
| assertEquals(39, rm.getMaximum()); |
| assertEquals(30, rm.getValue()); |
| |
| reset(rm, 3); |
| |
| // should change value, and keep extent constant, |
| // unless extent is > max - min. |
| rm.setExtent(10); // 0 < 0[9] < 99 |
| rm.setValue(90); // 0 < 90[9] < 99 |
| rm.setMaximum(95); // 0 < 90[6] < 96 |
| assertEquals(96, rm.getMaximum()); |
| assertEquals(87, rm.getValue()); |
| assertEquals(9, rm.getExtent()); |
| } |
| |
| function testExtent() { |
| var rm = new goog.ui.RangeModel; |
| |
| rm.setExtent(10); |
| assertEquals(10, rm.getExtent()); |
| |
| rm.setExtent(-10); |
| assertEquals(0, rm.getExtent()); |
| |
| rm.setValue(50); |
| rm.setExtent(100); |
| assertEquals(50, rm.getExtent()); |
| assertEquals(50, rm.getValue()); |
| |
| //////////////// |
| // Change step |
| reset(rm, 3); |
| |
| rm.setExtent(10); // 0 < 0[9] < 99 |
| assertEquals(9, rm.getExtent()); |
| |
| rm.setExtent(-10); |
| assertEquals(0, rm.getExtent()); |
| |
| rm.setValue(50); // 0 < 51[9] < 99 |
| rm.setExtent(100); // 0 < 51[48] < 99 |
| assertEquals(48, rm.getExtent()); |
| assertEquals(51, rm.getValue()); |
| } |
| |
| function testRoundToStep() { |
| var rm = new goog.ui.RangeModel; |
| rm.setStep(0.5); |
| |
| assertEquals(1, rm.roundToStep(1)); |
| assertEquals(0.5, rm.roundToStep(0.5)); |
| assertEquals(1, rm.roundToStep(0.75)); |
| assertEquals(0.5, rm.roundToStep(0.74)); |
| } |
| |
| function testRoundToStepWithMin() { |
| var rm = new goog.ui.RangeModel; |
| rm.setStep(0.5); |
| rm.setMinimum(0.25); |
| |
| assertEquals(1.25, rm.roundToStepWithMin(1)); |
| assertEquals(0.75, rm.roundToStepWithMin(0.5)); |
| assertEquals(0.75, rm.roundToStepWithMin(0.75)); |
| assertEquals(0.75, rm.roundToStepWithMin(0.74)); |
| } |