| <!doctype html> |
| <meta charset="utf-8"> |
| <title>CSSMathValue subclass tests</title> |
| <link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#complex-numeric"> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="../../resources/testhelper.js"></script> |
| <script> |
| 'use strict'; |
| |
| const gVariadicMathValueSubclasses = [ |
| { subclass: CSSMathSum, operator: 'sum' }, |
| { subclass: CSSMathProduct, operator: 'product' }, |
| { subclass: CSSMathMin, operator: 'min' }, |
| { subclass: CSSMathMax, operator: 'max' }, |
| ]; |
| |
| for (const {subclass, operator} of gVariadicMathValueSubclasses) { |
| test(() => { |
| assert_throws(new SyntaxError(), () => new subclass()); |
| }, 'Constructing a ' + subclass.name + ' with no arguments throws a SyntaxError'); |
| |
| test(() => { |
| const result = new subclass(CSS.number(0)); |
| assert_equals(result.operator, operator); |
| assert_style_value_array_equals(result.values, [CSS.number(0)]); |
| }, subclass.name + ' can be constructed from a single number CSSUnitValue'); |
| |
| test(() => { |
| const args = [CSS.number(1), CSS.number(2), CSS.number(3), CSS.number(4), CSS.number(5)] |
| const result = new subclass(...args); |
| assert_equals(result.operator, operator); |
| assert_style_value_array_equals(result.values, args); |
| }, subclass.name + ' can be constructed from more than one number CSSUnitValue'); |
| |
| test(() => { |
| let result = new subclass(CSS.number(1), CSS.number(2)); |
| assert_throws(new TypeError(), () => result.operator = 'foo'); |
| }, subclass.name + '.operator is readonly'); |
| } |
| |
| const gUnaryMathValueSubclasses = [ |
| { subclass: CSSMathNegate, operator: 'negate' }, |
| { subclass: CSSMathInvert, operator: 'invert' }, |
| ] |
| |
| for (const {subclass, operator} of gUnaryMathValueSubclasses) { |
| test(() => { |
| const result1 = new subclass(CSS.number(0)); |
| assert_equals(result1.operator, operator); |
| assert_style_value_equals(result1.value, CSS.number(0)); |
| |
| const result2 = new subclass(0); |
| assert_equals(result2.operator, operator); |
| assert_style_value_equals(result2.value, CSS.number(0)); |
| }, subclass.name + ' can be constructed from a single numberish value'); |
| |
| test(() => { |
| let result = new subclass(CSS.number(1)); |
| assert_throws(new TypeError(), () => result.operator = 'foo'); |
| }, subclass.name + '.operator is readonly'); |
| |
| test(() => { |
| let result = new subclass(0); |
| result.value = CSS.number(1); |
| assert_style_value_equals(result.value, CSS.number(1)); |
| |
| result.value = 2; |
| assert_style_value_equals(result.value, CSS.number(2)); |
| }, subclass.name + '.value can be updated with a numberish value'); |
| } |
| |
| </script> |