<!DOCTYPE html>
<script src='../../../resources/testharness.js'></script>
<script src='../../../resources/testharnessreport.js'></script>
<script src='property-suite.js'></script>

<div id="testElement"></div>

<script>

let zeroAngle = new CSSUnitValue(0, 'deg');

function angleValue(value, unit) {
  return new CSSUnitValue(value, unit);
}

function cssTransformWithRotate(angleValue) {
  return new CSSTransformValue([
      new CSSRotation(angleValue)]);
}

function cssTransformWithRotate3D(x, y, z, angleValue) {
  return new CSSTransformValue([
      new CSSRotation(x, y, z, angleValue)]);
}

runInlineStylePropertyMapTests( {
  property: 'transform',
  validKeywords: [
    'none',
  ],
  validObjects: [
    // Translations
    // TODO(meade)
    // Scales
    // TODO(meade)
    // Skews
    new CSSTransformValue([new CSSSkew(angleValue(30, 'deg'), zeroAngle)]),
    new CSSTransformValue([new CSSSkew(angleValue(10, 'rad'), zeroAngle)]),
    new CSSTransformValue([new CSSSkew(angleValue(2, 'grad'), zeroAngle)]),
    new CSSTransformValue([new CSSSkew(angleValue(0.2, 'turn'), zeroAngle)]),
    new CSSTransformValue([new CSSSkew(zeroAngle, angleValue(30, 'deg'))]),
    new CSSTransformValue([new CSSSkew(zeroAngle, angleValue(10, 'rad'))]),
    new CSSTransformValue([new CSSSkew(zeroAngle, angleValue(2, 'grad'))]),
    new CSSTransformValue([new CSSSkew(zeroAngle, angleValue(0.2, 'turn'))]),
    // Rotations
    cssTransformWithRotate(angleValue(30, 'deg')),
    cssTransformWithRotate(angleValue(10, 'rad')),
    cssTransformWithRotate(angleValue(2, 'grad')),
    cssTransformWithRotate(angleValue(0.2, 'turn')),
    cssTransformWithRotate3D(1, 2, 3, angleValue(30, 'deg')),
    cssTransformWithRotate3D(1, 2, 3, angleValue(10, 'rad')),
    cssTransformWithRotate3D(1, 2, 3, angleValue(2, 'grad')),
    cssTransformWithRotate3D(1, 2, 3, angleValue(0.2, 'turn')),
    // Perspectives
    new CSSTransformValue([new CSSPerspective(CSS.px(10))]),
    new CSSTransformValue([new CSSPerspective(CSS.em(5))]),
  ],
  // Values with these strings aren't used in Typed OM, but can also be
  // represented by the specified values.
  validStringMappings: {
    // Skews
    'skew(45deg)':
      new CSSTransformValue([new CSSSkew(angleValue(45, 'deg'), zeroAngle)]),
    'skew(1rad)':
      new CSSTransformValue([new CSSSkew(angleValue(1, 'rad'), zeroAngle)]),
    'skew(6.2grad)':
      new CSSTransformValue([new CSSSkew(angleValue(6.2, 'grad'), zeroAngle)]),
    'skew(0.31turn)':
      new CSSTransformValue([new CSSSkew(angleValue(0.31, 'turn'), zeroAngle)]),
    'skewX(45deg)':
      new CSSTransformValue([new CSSSkew(angleValue(45, 'deg'), zeroAngle)]),
    'skewX(1rad)':
      new CSSTransformValue([new CSSSkew(angleValue(1, 'rad'), zeroAngle)]),
    'skewX(6.2grad)':
      new CSSTransformValue([new CSSSkew(angleValue(6.2, 'grad'), zeroAngle)]),
    'skewX(0.31turn)':
      new CSSTransformValue([new CSSSkew(angleValue(0.31, 'turn'), zeroAngle)]),
    'skewY(45deg)':
      new CSSTransformValue([new CSSSkew(zeroAngle, angleValue(45, 'deg'))]),
    'skewY(1rad)':
      new CSSTransformValue([new CSSSkew(zeroAngle, angleValue(1, 'rad'))]),
    'skewY(6.2grad)':
      new CSSTransformValue([new CSSSkew(zeroAngle, angleValue(6.2, 'grad'))]),
    'skewY(0.31turn)':
      new CSSTransformValue([new CSSSkew(zeroAngle, angleValue(0.31, 'turn'))]),
    // Rotations
    'rotateX(45deg)': cssTransformWithRotate3D(1, 0, 0, angleValue(45, 'deg')),
    'rotateX(1rad)': cssTransformWithRotate3D(1, 0, 0, angleValue(1, 'rad')),
    'rotateX(6.2grad)':
      cssTransformWithRotate3D(1, 0, 0, angleValue(6.2, 'grad')),
    'rotateX(0.31turn)':
      cssTransformWithRotate3D(1, 0, 0, angleValue(0.31, 'turn')),
    'rotateY(45deg)': cssTransformWithRotate3D(0, 1, 0, angleValue(45, 'deg')),
    'rotateY(1rad)': cssTransformWithRotate3D(0, 1, 0, angleValue(1, 'rad')),
    'rotateY(6.2grad)':
      cssTransformWithRotate3D(0, 1, 0, angleValue(6.2, 'grad')),
    'rotateY(0.31turn)':
      cssTransformWithRotate3D(0, 1, 0, angleValue(0.31, 'turn')),
    'rotateZ(45deg)': cssTransformWithRotate3D(0, 0, 1, angleValue(45, 'deg')),
    'rotateZ(1rad)': cssTransformWithRotate3D(0, 0, 1, angleValue(1, 'rad')),
    'rotateZ(6.2grad)':
      cssTransformWithRotate3D(0, 0, 1, angleValue(6.2, 'grad')),
    'rotateZ(0.31turn)':
      cssTransformWithRotate3D(0, 0, 1, angleValue(0.31, 'turn')),
  },
  supportsMultiple: false,
  invalidObjects: [new CSSUnitValue(4, 'px')]
});

let crashTestStrings = {
  'rotate(calc(45deg + 1rad))': 'rotate(calc(102.296deg))',
  'rotate3d(1, 2, 3, calc(45deg + 1rad))': 'rotate3d(1, 2, 3, calc(102.296deg))',
  'skew(calc(5deg + 0.1rad))': 'skew(calc(10.7296deg))',
  'skew(calc(5deg + 0.1rad), 5deg)': 'skew(calc(10.7296deg), 5deg)',
  'skew(5deg, calc(5deg + 0.1rad))': 'skew(5deg, calc(10.7296deg))',
  'skewX(calc(5deg + 0.1rad))': 'skewX(calc(10.7296deg))',
  'skewY(calc(5deg + 0.1rad))': 'skewY(calc(10.7296deg))',
  'perspective(calc(10px + 5em))': 'perspective(calc(10px + 5em))',
};

for (let inputString in crashTestStrings) {
  test(() => {
    testElement.style.transform = inputString;
    let result = testElement.styleMap.get('transform');
    assert_equals(result.constructor, CSSStyleValue,
        'result is a base CSSStyleValue');
    assert_equals(result.toString(), crashTestStrings[inputString]);
  }, "Getting transform when it is set to " + inputString + " does not crash");
}

// TODO(meade): Remove/update this test once translate is supported.
test(function() {
  testElement.style.transform = 'translateY(50px)';
  testElement.styleMap.entries();
}, "Unhandled translate case doesn't crash.");

test(function() {
  // Clear transform
  let transform = new CSSTransformValue([new CSSPerspective(CSS.px(-5))]);
  assert_throws(new TypeError(), () => {
    testElement.styleMap.set('transform', transform);
  });
}, "Invalid perspective (negative length) doesn't crash");

</script>
