blob: 97fb11b681167930d02d0cac15acc09e0849fb46 [file] [log] [blame]
import './index';
import { assert } from 'chai';
import { $$ } from 'common-sk/modules/dom';
import { UniformTimeSk } from './uniform-time-sk';
import { setUpElementUnderTest } from '../test_util';
describe('uniform-time-sk', () => {
const newInstance = setUpElementUnderTest<UniformTimeSk>('uniform-time-sk');
let element: UniformTimeSk;
beforeEach(() => {
element = newInstance();
});
describe('unform-time-sk', () => {
it('throws on invalid uniform', () => {
assert.throws(() => {
element.uniform = {
name: 'iTime',
rows: 2,
columns: 2,
slot: 1,
};
});
});
it('starts in play mode', () => {
element.dateNow = () => 0; // ms
element.time = 10; // s
element.dateNow = () => 200; // ms
// The reported time should advance 0.2 seconds.
assert.equal(10.2, element.time);
});
it('toggles to pause mode', () => {
element.dateNow = () => 0; // ms
element.time = 10; // s
// Switch to pause mode.
$$<HTMLButtonElement>('#playpause', element)!.click();
element.dateNow = () => 200; // ms
// Even though dateNow advanced the reported time should not change.
assert.equal(10, element.time);
});
it('goes to zero on restart while playing', () => {
element.dateNow = () => 0; // ms
element.time = 10; // s
$$<HTMLButtonElement>('#restart', element)!.click();
assert.equal(0, element.time);
});
it('goes to zero on restart while paused', () => {
element.dateNow = () => 0; // ms
element.time = 10; // s
// Switch to pause mode.
$$<HTMLButtonElement>('#playpause', element)!.click();
element.dateNow = () => 200; // ms
// Even though dateNow advanced the reported time should not change.
assert.equal(10, element.time);
// The time goes to zero even though we are paused.
$$<HTMLButtonElement>('#restart', element)!.click();
assert.equal(0, element.time);
});
it('applied uniforms correctly', () => {
element.dateNow = () => 0; // ms
element.time = 10; // s
// Make uniforms longer than needed to show we don't disturb other values.
const uniforms = [0, 0, 0];
// The control defaults to a value of 0.5.
element.uniform = {
name: 'iTime',
columns: 1,
rows: 1,
slot: 1,
};
element.applyUniformValues(uniforms);
assert.deepEqual(uniforms, [0, 10, 0]);
});
it('needs raf updates', () => {
assert.isTrue(element.needsRAF());
});
it('updates on a call to onRAF', () => {
element.dateNow = () => 0; // ms
element.time = 10; // s
element.onRAF();
assert.equal('10.000', $$('#ms', element)?.textContent);
});
});
});