Skip to content

Commit

Permalink
[css-grid] Parse various grid properties
Browse files Browse the repository at this point in the history
Spec: https://drafts.csswg.org/css-grid/

These tests highlight the following 5 issues:

Spec
[cssom] [css-grid] Serialization of custom identifiers
w3c/csswg-drafts#2858

Spec
[css-grid] grid-line custom identifier auto?
w3c/csswg-drafts#2856

Edge
grid-area should reject non-integer numbers
https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/18112694/

Firefox
grid-auto-columns/rows should accept multiple track-size values
https://bugzilla.mozilla.org/show_bug.cgi?id=1339672

WebKit
[CSS Grid Layout] Fix grid-{row, column, area} shorthand CSSOM serialization
https://bugs.webkit.org/show_bug.cgi?id=149890

Note that some properties such as grid and grid-template are not yet tested.
  • Loading branch information
ericwilligers committed Aug 22, 2018
1 parent 6aef667 commit 80075fb
Show file tree
Hide file tree
Showing 13 changed files with 476 additions and 0 deletions.
19 changes: 19 additions & 0 deletions css/css-grid/parsing/display-invalid.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Grid Layout Module Level 1: parsing display with invalid values</title>
<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
<link rel="help" href="https://drafts.csswg.org/css-grid/#propdef-display">
<meta name="assert" content="display supports the new values 'grid | inline-grid'.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/parsing-testcommon.js"></script>
</head>
<body>
<script>
test_invalid_value("display", "grid inline-grid");
test_invalid_value("display", "none grid");
</script>
</body>
</html>
38 changes: 38 additions & 0 deletions css/css-grid/parsing/display-valid.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Grid Layout Module Level 1: parsing display with valid values</title>
<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
<link rel="help" href="https://drafts.csswg.org/css-grid/#propdef-display">
<link rel="help" href="https://drafts.csswg.org/css2/visuren.html#display-prop">
<meta name="assert" content="display supports the new values 'grid | inline-grid'.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/parsing-testcommon.js"></script>
</head>
<body>
<script>
// https://drafts.csswg.org/css-grid/#propdef-display
test_valid_value("display", "grid");
test_valid_value("display", "inline-grid");

// https://drafts.csswg.org/css2/visuren.html#display-prop
test_valid_value("display", "inline");
test_valid_value("display", "block");
test_valid_value("display", "list-item");
test_valid_value("display", "inline-block");
test_valid_value("display", "table");
test_valid_value("display", "inline-table");
test_valid_value("display", "table-row-group");
test_valid_value("display", "table-header-group");
test_valid_value("display", "table-footer-group");
test_valid_value("display", "table-row");
test_valid_value("display", "table-column-group");
test_valid_value("display", "table-column");
test_valid_value("display", "table-cell");
test_valid_value("display", "table-caption");
test_valid_value("display", "none");
</script>
</body>
</html>
45 changes: 45 additions & 0 deletions css/css-grid/parsing/grid-area-invalid.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Grid Layout Module Level 1: parsing grid-area with invalid values</title>
<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
<link rel="help" href="https://drafts.csswg.org/css-grid/#propdef-grid-area">
<meta name="assert" content="grid-area supports only the grammar '<grid-line> [ / <grid-line> ]{0,3}'.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/parsing-testcommon.js"></script>
</head>
<body>
<script>
test_invalid_value("grid-area", "'string'");
test_invalid_value("grid-row", "1.0");
test_invalid_value("grid-column", "1 2");
test_invalid_value("grid-row-start", "+-3");
test_invalid_value("grid-column-start", "0");
test_invalid_value("grid-row-end", "span");
test_invalid_value("grid-column-end", "sPaN");
test_invalid_value("grid-column-end", '"1st"');
test_invalid_value("grid-column-end", "1st");

test_invalid_value("grid-area", "auto / initial");
test_invalid_value("grid-row", "auto / inherit");
test_invalid_value("grid-column", "auto / unset");

test_invalid_value("grid-area", "auto / auto / auto / auto / auto");
test_invalid_value("grid-row", "1 / 2 / 3")
test_invalid_value("grid-column", "a / b / c");
test_invalid_value("grid-row-end", "span 1 / span 2");
test_invalid_value("grid-area", "auto 2 auto 4");
test_invalid_value("grid-row", "33 -A0 auto");
test_invalid_value("grid-row", "auto i 2 j span 3 k");

// The following values are rejected by Blink/WebKit and accepted by Edge/Firefox
// https://github.com/w3c/csswg-drafts/issues/2856
// test_invalid_value("grid-row-end", "1 auto");
// test_invalid_value("grid-row-end", "span 1 auto");
// test_invalid_value("grid-row-end", "span auto 1");
// test_invalid_value("grid-row-end", "1 auto span");
</script>
</body>
</html>
67 changes: 67 additions & 0 deletions css/css-grid/parsing/grid-area-valid.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Grid Layout Module Level 1: parsing grid-area with valid values</title>
<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
<link rel="help" href="https://drafts.csswg.org/css-grid/#propdef-grid-area">
<meta name="assert" content="grid-area supports the full grammar '<grid-line> [ / <grid-line> ]{0,3}'.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/parsing-testcommon.js"></script>
</head>
<body>
<script>
// auto
test_valid_value("grid-area", "auto", "auto / auto / auto / auto");
test_valid_value("grid-area", "AuTo", "auto / auto / auto / auto");
test_valid_value("grid-row", "auto", "auto / auto");
test_valid_value("grid-column-end", "AuTo", "auto");

// <custom-ident>
test_valid_value("grid-area", "--a", "--a / --a / --a / --a");
test_valid_value("grid-row", "-zπ", "-zπ / -zπ");
test_valid_value("grid-row-start", "AZ");
test_valid_value("grid-column-start", "-_π");
test_valid_value("grid-row-end", "_9");


// <integer> && <custom-ident>?
test_valid_value("grid-area", "1", "1 / auto / auto / auto");
test_valid_value("grid-area", "+90 -a-", "90 -a- / auto / auto / auto");
test_valid_value("grid-row", "az 2", "2 az / auto");
test_valid_value("grid-column", "9", "9 / auto");
test_valid_value("grid-column", "-19 zA", "-19 zA / auto");
test_valid_value("grid-column", "-A0 33", "33 -A0 / auto");
test_valid_value("grid-row-start", "-19");
test_valid_value("grid-row-start", "9 -Z_");
test_valid_value("grid-column-start", "+90", "90");
test_valid_value("grid-column-start", "Z -44", "-44 Z");
test_valid_value("grid-row-end", "1 -πA");
test_valid_value("grid-column-end", "π_ +5", "5 π_");

// span && [ <integer> || <custom-ident> ]
test_valid_value("grid-area", "span 2 i", "span 2 i / auto / auto / auto");
test_valid_value("grid-area", "i 2 SpAn", "span 2 i / auto / auto / auto");
test_valid_value("grid-row", "span 2", "span 2 / auto");
test_valid_value("grid-column", "i SpAn", "span i / auto");
test_valid_value("grid-row-start", "span i", "span i");
test_valid_value("grid-column-start", "SpAn i 2", "span 2 i");
test_valid_value("grid-row-end", "2 i span", "span 2 i");
test_valid_value("grid-column-end", "2 SpAn", "span 2");

// <grid-line> [ / <grid-line> ]{0,3}
test_valid_value("grid-area", "auto / i", "auto / i / auto / i");
test_valid_value("grid-area", "auto / i / 2 j", "auto / i / 2 j / i");
test_valid_value("grid-area", "auto / i / 2 j / span 3 k");
test_valid_value("grid-row", "auto / i");
test_valid_value("grid-column", "2 j / span 3 k");


// https://github.com/w3c/csswg-drafts/issues/2858
// '\\31 st' in Blink, Firefox, '1st' in Edge, '"1st"' in Safari.
test_valid_value("grid-column-end", "\\31st", ["\\31 st", "1st", '"1st"']);
test_valid_value("grid-column-end", "\\31 st", ["\\31 st", "1st", '"1st"']);
</script>
</body>
</html>
37 changes: 37 additions & 0 deletions css/css-grid/parsing/grid-auto-columns-invalid.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Grid Layout Module Level 1: parsing grid-auto-columns with invalid values</title>
<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
<link rel="help" href="https://drafts.csswg.org/css-grid/#propdef-grid-auto-columns">
<meta name="assert" content="grid-auto-columns supports only the grammar '<track-size>+'.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/parsing-testcommon.js"></script>
</head>
<body>
<script>
// <track-breadth>
test_invalid_value("grid-auto-columns", "none");
test_invalid_value("grid-auto-columns", "-1px");
test_invalid_value("grid-auto-columns", "-4%");

// minmax( <inflexible-breadth> , <track-breadth> )
test_invalid_value("grid-auto-columns", "minmax(1px)");
test_invalid_value("grid-auto-columns", "minmax(1px, 2px, 3px)");
test_invalid_value("grid-auto-columns", "minmax(5fr, 1px)");
test_invalid_value("grid-auto-columns", "minmax(6px, -7%)");
test_invalid_value("grid-auto-columns", "minmax(8px, -9fr)");

// fit-content( <length-percentage> )
test_invalid_value("grid-auto-columns", "fit-content(-1px)");
test_invalid_value("grid-auto-columns", "fit-content(1px, 2px)");
test_invalid_value("grid-auto-columns", "fit-content(1px auto)");

// <track-size>+
test_invalid_value("grid-auto-columns", "2em / 3em");
test_invalid_value("grid-auto-columns", "auto, 10%");
</script>
</body>
</html>
54 changes: 54 additions & 0 deletions css/css-grid/parsing/grid-auto-columns-valid.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Grid Layout Module Level 1: parsing grid-auto-columns with valid values</title>
<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
<link rel="help" href="https://drafts.csswg.org/css-grid/#propdef-grid-auto-columns">
<meta name="assert" content="grid-auto-columns supports the full grammar '<track-size>+'.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/parsing-testcommon.js"></script>
</head>
<body>
<script>
// <track-breadth>
// <track-breadth> = <length-percentage> | <flex> | min-content | max-content | auto
test_valid_value("grid-auto-columns", "1px");
test_valid_value("grid-auto-columns", "2em");
test_valid_value("grid-auto-columns", "calc(2em + 3ex)");
test_valid_value("grid-auto-columns", "4%");
test_valid_value("grid-auto-columns", "5fr");
test_valid_value("grid-auto-columns", "min-content");
test_valid_value("grid-auto-columns", "max-content");
test_valid_value("grid-auto-columns", "auto");

// minmax( <inflexible-breadth> , <track-breadth> )
// <inflexible-breadth> = <length-percentage> | min-content | max-content | auto
test_valid_value("grid-auto-columns", "minmax(1px, 5fr)");
test_valid_value("grid-auto-columns", "minmax(2em, min-content)");
test_valid_value("grid-auto-columns", "minmax(calc(2em + 3ex), max-content)");
test_valid_value("grid-auto-columns", "minmax(4%, auto)");
test_valid_value("grid-auto-columns", "minmax(5vmin, 1px)");
test_valid_value("grid-auto-columns", "minmax(min-content, 2em)");
test_valid_value("grid-auto-columns", "minmax(max-content, calc(2em + 3ex))");
test_valid_value("grid-auto-columns", "minmax(auto, 4%)");

// fit-content( <length-percentage> )
test_valid_value("grid-auto-columns", "fit-content(1px)");
test_valid_value("grid-auto-columns", "fit-content(2em)");
test_valid_value("grid-auto-columns", "fit-content(calc(2em + 3ex))");
test_valid_value("grid-auto-columns", "fit-content(4%)");

test_valid_value("grid-auto-columns", "0px");
test_valid_value("grid-auto-columns", "0%");
test_valid_value("grid-auto-columns", "0fr");
test_valid_value("grid-auto-columns", "minmax(auto, 0%)");
test_valid_value("grid-auto-columns", "fit-content(0px)");

// <track-size>+
test_valid_value("grid-auto-columns", "1px 2px 3px 0px");
test_valid_value("grid-auto-columns", "fit-content(1px) minmax(2px, 3px) 4px");
</script>
</body>
</html>
20 changes: 20 additions & 0 deletions css/css-grid/parsing/grid-auto-flow-invalid.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Grid Layout Module Level 1: parsing grid-auto-flow with invalid values</title>
<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
<link rel="help" href="https://drafts.csswg.org/css-grid/#propdef-grid-auto-flow">
<meta name="assert" content="grid-auto-flow supports only the grammar '[ row | column ] || dense'.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/parsing-testcommon.js"></script>
</head>
<body>
<script>
test_invalid_value("grid-auto-flow", "auto");
test_invalid_value("grid-auto-flow", "row dense column");
test_invalid_value("grid-auto-flow", "dense row dense");
</script>
</body>
</html>
24 changes: 24 additions & 0 deletions css/css-grid/parsing/grid-auto-flow-valid.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Grid Layout Module Level 1: parsing grid-auto-flow with valid values</title>
<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
<link rel="help" href="https://drafts.csswg.org/css-grid/#propdef-grid-auto-flow">
<meta name="assert" content="grid-auto-flow supports the full grammar '[ row | column ] || dense'.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/parsing-testcommon.js"></script>
</head>
<body>
<script>
test_valid_value("grid-auto-flow", "row");
test_valid_value("grid-auto-flow", "column");
test_valid_value("grid-auto-flow", "row dense");
test_valid_value("grid-auto-flow", "dense column", "column dense");

// Blink/WebKit "dense", Edge/Firefox "row dense"
test_valid_value("grid-auto-flow", "dense", ["dense", "row dense"]);
</script>
</body>
</html>
36 changes: 36 additions & 0 deletions css/css-grid/parsing/grid-auto-rows-invalid.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Grid Layout Module Level 1: parsing grid-auto-rows with invalid values</title>
<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
<link rel="help" href="https://drafts.csswg.org/css-grid/#propdef-grid-auto-rows">
<meta name="assert" content="grid-auto-rows supports only the grammar '<track-size>+'.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/parsing-testcommon.js"></script>
</head>
<body>
<script>
// <track-breadth>
test_invalid_value("grid-auto-rows", "none");
test_invalid_value("grid-auto-rows", "-1px");
test_invalid_value("grid-auto-rows", "-4%");

// minmax( <inflexible-breadth> , <track-breadth> )
test_invalid_value("grid-auto-rows", "minmax(1px)");
test_invalid_value("grid-auto-rows", "minmax(1px, 2px, 3px)");
test_invalid_value("grid-auto-rows", "minmax(5fr, 1px)");
test_invalid_value("grid-auto-rows", "minmax(6px, -7%)");

// fit-content( <length-percentage> )
test_invalid_value("grid-auto-rows", "fit-content(-1px)");
test_invalid_value("grid-auto-rows", "fit-content(1px, 2px)");
test_invalid_value("grid-auto-rows", "fit-content(1px auto)");

// <track-size>+
test_invalid_value("grid-auto-rows", "2em / 3em");
test_invalid_value("grid-auto-rows", "auto, 10%");
</script>
</body>
</html>
48 changes: 48 additions & 0 deletions css/css-grid/parsing/grid-auto-rows-valid.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Grid Layout Module Level 1: parsing grid-auto-rows with valid values</title>
<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
<link rel="help" href="https://drafts.csswg.org/css-grid/#propdef-grid-auto-rows">
<meta name="assert" content="grid-auto-rows supports the full grammar '<track-size>+'.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/parsing-testcommon.js"></script>
</head>
<body>
<script>
// <track-breadth>
// <track-breadth> = <length-percentage> | <flex> | min-content | max-content | auto
test_valid_value("grid-auto-rows", "1px");
test_valid_value("grid-auto-rows", "2em");
test_valid_value("grid-auto-rows", "calc(2em + 3ex)");
test_valid_value("grid-auto-rows", "4%");
test_valid_value("grid-auto-rows", "5fr");
test_valid_value("grid-auto-rows", "min-content");
test_valid_value("grid-auto-rows", "max-content");
test_valid_value("grid-auto-rows", "auto");

// minmax( <inflexible-breadth> , <track-breadth> )
// <inflexible-breadth> = <length-percentage> | min-content | max-content | auto
test_valid_value("grid-auto-rows", "minmax(1px, 5fr)");
test_valid_value("grid-auto-rows", "minmax(2em, min-content)");
test_valid_value("grid-auto-rows", "minmax(calc(2em + 3ex), max-content)");
test_valid_value("grid-auto-rows", "minmax(4%, auto)");
test_valid_value("grid-auto-rows", "minmax(5vmin, 1px)");
test_valid_value("grid-auto-rows", "minmax(min-content, 2em)");
test_valid_value("grid-auto-rows", "minmax(max-content, calc(2em + 3ex))");
test_valid_value("grid-auto-rows", "minmax(auto, 4%)");

// fit-content( <length-percentage> )
test_valid_value("grid-auto-rows", "fit-content(1px)");
test_valid_value("grid-auto-rows", "fit-content(2em)");
test_valid_value("grid-auto-rows", "fit-content(calc(2em + 3ex))");
test_valid_value("grid-auto-rows", "fit-content(4%)");

// <track-size>+
test_valid_value("grid-auto-rows", "1px 2px 3px 0px");
test_valid_value("grid-auto-rows", "fit-content(1px) minmax(2px, 3px) 4px");
</script>
</body>
</html>
Loading

0 comments on commit 80075fb

Please sign in to comment.