Skip to content

Commit

Permalink
[css-typed-om] Implement CSSSkewY
Browse files Browse the repository at this point in the history
CSSSkewX and CSSSkewY was added in spec.
because result of "skew(X,Y)" is different from
"skewX(X) skewY(Y)".
CSSSkewX was already added at before CL.

https://drafts.css-houdini.org/css-typed-om-1/#cssskewy

Bug: 808321
Change-Id: I2909a34b571647968bc463d55e3a3b38e3c03de3
  • Loading branch information
hwanseung authored and chromium-wpt-export-bot committed Feb 7, 2018
1 parent b7ee882 commit 6819803
Show file tree
Hide file tree
Showing 4 changed files with 73 additions and 2 deletions.
3 changes: 3 additions & 0 deletions css/css-typed-om/resources/testhelper.js
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,9 @@ function assert_style_value_equals(a, b) {
case 'CSSSkewX':
assert_style_value_equals(a.ax, b.ax);
break;
case 'CSSSkewY':
assert_style_value_equals(a.ay, b.ay);
break;
case 'CSSPerspective':
assert_style_value_equals(a.length, b.length);
break;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@
},
{
cssText: 'skewY(90deg)',
expected: new CSSSkew(CSS.deg(0), CSS.deg(90)),
expected: new CSSSkewY(CSS.deg(90)),
desc: 'skewY()'
},
{
Expand All @@ -158,13 +158,14 @@

test(t => {
test_transform_normalization(t,
'translate(1px) rotateX(90deg) perspective(1px) skew(90deg) skewX(20deg) scale3d(1, 2, 3)',
'translate(1px) rotateX(90deg) perspective(1px) skew(90deg) skewX(20deg) skewY(30deg) scale3d(1, 2, 3)',
new CSSTransformValue([
new CSSTranslate(CSS.px(1), CSS.px(0)),
new CSSRotate(CSS.number(1), CSS.number(0), CSS.number(0), CSS.deg(90)),
new CSSPerspective(CSS.px(1)),
new CSSSkew(CSS.deg(90), CSS.deg(0)),
new CSSSkewX(CSS.deg(20)),
new CSSSkewY(CSS.deg(30)),
new CSSScale(CSS.number(1), CSS.number(2), CSS.number(3)),
]));
}, 'Normalizing a <transform-list> returns a CSSTransformValue containing all the transforms');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,11 @@
cssText: 'skewX(90deg)',
desc: 'CSSSkewX'
},
{
value: new CSSSkewY(CSS.deg(90)),
cssText: 'skewY(90deg)',
desc: 'CSSSkewY'
},
{
value: new CSSPerspective(CSS.px(1)),
cssText: 'perspective(1px)',
Expand Down
62 changes: 62 additions & 0 deletions css/css-typed-om/stylevalue-subclasses/cssSkewY.tentative.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
<!doctype html>
<meta charset="utf-8">
<title>CSSSkewY tests</title>
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#cssskewy">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../resources/testhelper.js"></script>
<script>
'use strict';

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

for (const {value, desc} of gInvalidTestCases) {
test(() => {
assert_throws(new TypeError(), () => new CSSSkewY(value));
}, 'Constructing a CSSSkewY with ' + desc + ' throws a TypeError');
}

for (const {value, desc} of gInvalidTestCases) {
test(() => {
let skewY = new CSSSkewY(CSS.deg(0));
assert_throws(new TypeError(), () => skewY.ay = value);
assert_style_value_equals(skewY.ay, CSS.deg(0));
}, 'Updating CSSSkewY.ay with ' + desc + ' throws a TypeError');
}

const gValidTestCases = [
{ value: CSS.deg(-3.14), desc: 'an angle CSSUnitValue' },
{ value: new CSSMathSum(CSS.deg(1)), desc: 'a CSSMathValue of angle type' },
];

for (const {value: ay, desc: ayDesc} of gValidTestCases) {
test(() => {
const skewY = new CSSSkewY(ay);
assert_equals(skewY.ay, ay);
assert_true(skewY.is2D);
}, 'CSSSkewY can be constructed from ' + ayDesc);
}

for (const {value, desc} of gValidTestCases) {
test(() => {
let skewY = new CSSSkewY(CSS.deg(0));
skewY.ay = value;
assert_style_value_equals(skewY.ay, value);
}, 'CSSSkewY.ay can be updated to ' + desc);
}

test(() => {
let skewY = new CSSSkewY(CSS.deg(0));
skewY.is2D = false;
assert_true(skewY.is2D);
}, 'Modifying skewY.is2D is a no-op');

</script>

0 comments on commit 6819803

Please sign in to comment.