import './index';
import { assert } from 'chai';
import { $$ } from 'common-sk/modules/dom';
import { UniformGenericSk } from './uniform-generic-sk';

import { setUpElementUnderTest } from '../test_util';

describe('uniform-generic-sk', () => {
  const newInstance = setUpElementUnderTest<UniformGenericSk>('uniform-generic-sk');

  let element: UniformGenericSk;
  beforeEach(() => {
    element = newInstance();
  });

  describe('uniform-generic-sk', () => {
    it('handles non-square uniforms', () => {
      // Make uniforms longer than needed to show we don't disturb other values.
      const uniforms: number[] = [0, 0, 0, 0, 0, 0, 0, 0];

      // The control defaults to values of 0.5.
      element.uniform = {
        name: 'nonsquare',
        columns: 3,
        rows: 2,
        slot: 1,
      };
      element.applyUniformValues(uniforms);
      assert.deepEqual(uniforms, [0, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0]);
    });

    it('handles square uniforms', () => {
      // Make uniforms longer than needed to show we don't disturb other values.
      const uniforms: number[] = [0, 0, 0, 0, 0, 0];

      // The control defaults to the identity matrix for square uniforms.
      element.uniform = {
        name: 'square',
        columns: 2,
        rows: 2,
        slot: 1,
      };
      element.applyUniformValues(uniforms);
      assert.deepEqual(uniforms, [0, 1, 0, 0, 1, 0]);
    });

    it('applies uniform values in column major order', () => {
      // Make uniforms longer than needed to show we don't disturb other values.
      const uniforms: number[] = [0, 0, 0, 0, 0, 0];

      // The control defaults to the identity matrix for square uniforms.
      element.uniform = {
        name: 'square',
        columns: 2,
        rows: 2,
        slot: 1,
      };
      $$<HTMLInputElement>('#square_1_0', element)!.value = '0.5'; // row=1 col=0
      element.applyUniformValues(uniforms);
      assert.deepEqual(uniforms, [0, 1, 0.5, 0, 1, 0]);
    });

    it('restores uniform values in column major order', () => {
      // The control defaults to the identity matrix for square uniforms.
      element.uniform = {
        name: 'square',
        columns: 2,
        rows: 2,
        slot: 1,
      };
      element.restoreUniformValues([0, 1, 0.5, 0.3, 1, 0]);
      const uniforms: number[] = [0, 0, 0, 0, 0, 0];
      element.applyUniformValues(uniforms);
      assert.deepEqual(uniforms, [0, 1, 0.5, 0.3, 1, 0]);
    });

    it('does not need raf updates', () => {
      assert.isFalse(element.needsRAF());
    });
  });
});
