<!doctype html>
<meta charset="utf-8">
<title>CSSPositionValue Error Handling</title>
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#positionvalue-objects">
<meta name="assert" content="Test CSSPositionValue constructor and attributes error handling" />
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<body>
<div id="log">
<script>
'use strict';

const gTestArguments = [
  {
    description: 'a keyword',
    value: 'auto',
  },
  {
    description: 'a double',
    value: 3.14,
  },
  {
    description: 'a unitless zero',
    value: 0,
  },
  {
    description: 'a string length',
    value: '10px',
  },
  {
    description: 'a number CSSUnitValue',
    value: CSS.number(10),
  },
  {
    description: 'a time CSSUnitValue',
    value: CSS.s(10),
  },
  {
    description: 'a CSSMathValue of angle type',
    value: new CSSMathSum(CSS.deg(1)),
  },
];

for (const {value, description} of gTestArguments) {
  test(() => {
    assert_throws_js(TypeError, () => new CSSPositionValue(value, CSS.px(0)));
    assert_throws_js(TypeError, () => new CSSPositionValue(CSS.px(0), value));
  }, `Constructing a CSSPositionValue with ${description} throws a TypeError`);

  test(() => {
    let position = new CSSPositionValue(CSS.px(0), CSS.px(0));
    assert_throws_js(TypeError, () => position.x = value);

    assert_equals(position.x.value, 0,
        'X member should not have changed');
  }, `Updating CSSPositionValue.x with ${description} throws a TypeError`);

  test(() => {
    let position = new CSSPositionValue(CSS.px(0), CSS.px(0));
    assert_throws_js(TypeError, () => position.y = value);

    assert_equals(position.y.value, 0,
        'Y member should not have changed');
  }, `Updating CSSPositionValue.y with ${description} throws a TypeError`);
}

</script>
