<!DOCTYPE html>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<script src="resources/comparisons.js"></script>

<script>
var EPSILON = 1e-6; // float epsilon
var testParams = [
  {
    input: new CSSScale(0, 0),
    x: 0, y: 0, z: 1,
    is2D: true,
    cssText: "scale(0, 0)"
  },
  {
    input: new CSSScale(1, 2),
    x: 1, y: 2, z: 1,
    is2D: true,
    cssText: "scale(1, 2)"
  },
  {
    input: new CSSScale(-2, -4),
    x: -2, y: -4, z: 1,
    is2D: true,
    cssText: "scale(-2, -4)"
  },
  {
    input: new CSSScale(3.4, 2.7),
    x: 3.4, y: 2.7, z: 1,
    is2D: true,
    cssText: "scale(3.4, 2.7)"
  },
  {
    input: new CSSScale(0, 0, 0),
    x: 0, y: 0, z: 0,
    is2D: false,
    cssText: "scale3d(0, 0, 0)"
  },
  {
    input: new CSSScale(1, 2, 3),
    x: 1, y: 2, z: 3,
    is2D: false,
    cssText: "scale3d(1, 2, 3)"
  },
  {
    input: new CSSScale(3.5, -2.7, -2),
    x: 3.5, y: -2.7, z: -2,
    is2D: false,
    cssText: "scale3d(3.5, -2.7, -2)"
  }
];

for (let params of testParams) {
  test(() => {
    assert_equals(params.input.toString(), params.cssText);
  }, "toString is correct for " + params.cssText);
}

test(() => {
  assert_throws(new TypeError(), () => { new CSSScale(); });
  assert_throws(new TypeError(), () => { new CSSScale(1); });
}, "Invalid number of arguments to constructor throws an exception.");

/* FIXME: The spec doesn't say these are invalid.
   https://drafts.css-houdini.org/css-typed-om-1/#dom-cssscale-cssscale */
test(() => {
  assert_throws(new TypeError(), () => { new CSSScale(NaN, 0); });
  assert_throws(new TypeError(), () => { new CSSScale(0, NaN); });
  assert_throws(new TypeError(), () => { new CSSScale(NaN, NaN); });
  assert_throws(new TypeError(), () => { new CSSScale(Infinity, 0); });
  assert_throws(new TypeError(), () => { new CSSScale(-Infinity, 0); });
  assert_throws(new TypeError(), () => { new CSSScale(undefined, 0); });

  assert_throws(new TypeError(), () => { new CSSScale(0, NaN, 0); });
  assert_throws(new TypeError(), () => { new CSSScale(0, Infinity, 0); });
  assert_throws(new TypeError(), () => { new CSSScale(0, 0, NaN); });
  assert_throws(new TypeError(), () => { new CSSScale(0, 0, Infinity); });
  assert_throws(new TypeError(), () => { new CSSScale(0, 0, -Infinity); });
  assert_throws(new TypeError(), () => {
    new CSSScale(undefined, undefined, 0);
  });
  assert_throws(new TypeError(), () => { new CSSScale(NaN, undefined, 0); });
  assert_throws(new TypeError(), () => { new CSSScale(NaN, 0, NaN); });
  assert_throws(new TypeError(), () => { new CSSScale(NaN, NaN, NaN); });
}, "Invalid input throws an exception.");

</script>
