2 <script src=
"../../resources/js-test.js"></script>
5 scroll-snap-type: mandatory;
6 scroll-snap-points-x: repeat(
20%);
7 scroll-snap-points-y: repeat(
20%);
8 scroll-snap-destination:
20px
20px;
9 scroll-snap-coordinate:
10px
10px;
13 <!-- test initial and inherited values first -->
15 <div class=
"test" property=
"scroll-snap-type" style=
"scroll-snap-type: inherit;" expected=
"mandatory" desc=
"inherited type" ></div>
16 <div class=
"test" property=
"scroll-snap-type" style=
"scroll-snap-type: initial;" expected=
"none" desc=
"initial type" ></div>
17 <div class=
"test" property=
"scroll-snap-points-x" style=
"scroll-snap-points-x: inherit;" expected=
"repeat(20%)" desc=
"inherited points-x" ></div>
18 <div class=
"test" property=
"scroll-snap-points-x" style=
"scroll-snap-points-x: initial;" expected=
"none" desc=
"initial points-x" ></div>
19 <div class=
"test" property=
"scroll-snap-points-y" style=
"scroll-snap-points-y: inherit;" expected=
"repeat(20%)" desc=
"inherited points-y" ></div>
20 <div class=
"test" property=
"scroll-snap-points-y" style=
"scroll-snap-points-y: initial;" expected=
"none" desc=
"initial points-y" ></div>
21 <div class=
"test" property=
"scroll-snap-destination" style=
"scroll-snap-destination: inherit;" expected=
"20px 20px" desc=
"inherited destination" ></div>
22 <div class=
"test" property=
"scroll-snap-destination" style=
"scroll-snap-destination: initial;" expected=
"0px 0px" desc=
"initial destination" ></div>
23 <div class=
"test" property=
"scroll-snap-coordinate" style=
"scroll-snap-coordinate: inherit;" expected=
"10px 10px" desc=
"inherited coordinate" ></div>
24 <div class=
"test" property=
"scroll-snap-coordinate" style=
"scroll-snap-coordinate: initial;" expected=
"none" desc=
"initial coordinate" ></div>
27 <div class=
"test" property=
"scroll-snap-type" style=
"scroll-snap-type: mandatory;" expected=
"mandatory" desc=
"mandatory type" ></div>
28 <div class=
"test" property=
"scroll-snap-type" style=
"scroll-snap-type: proximity;" expected=
"proximity" desc=
"proximity type" ></div>
29 <div class=
"test" property=
"scroll-snap-type" style=
"scroll-snap-type: none;" expected=
"none" desc=
"none type" ></div>
31 <div class=
"test" property=
"scroll-snap-points-x" style=
"scroll-snap-points-x: repeat(100%);" expected=
"repeat(100%)" desc=
"percentage points repeat along x axis" ></div>
32 <div class=
"test" property=
"scroll-snap-points-x" style=
"scroll-snap-points-x: repeat(25px);" expected=
"repeat(25px)" desc=
"pixel points repeat along x axis" ></div>
33 <div class=
"test" property=
"scroll-snap-points-y" style=
"scroll-snap-points-y: repeat(100%);" expected=
"repeat(100%)" desc=
"percentage points repeat along y axis" ></div>
34 <div class=
"test" property=
"scroll-snap-points-y" style=
"scroll-snap-points-y: repeat(25px);" expected=
"repeat(25px)" desc=
"pixel points repeat along y axis" ></div>
35 <div class=
"test" property=
"scroll-snap-points-y" style=
"scroll-snap-points-y: repeat(calc(25px + 1%));" expected=
"repeat(calc(25px + 1%))" desc=
"calc repeat along y axis" ></div>
36 <div class=
"test" property=
"scroll-snap-points-y" style=
"scroll-snap-points-x: repeat(0px);" expected=
"none" desc=
"reject zero" ></div>
37 <div class=
"test" property=
"scroll-snap-points-y" style=
"scroll-snap-points-y: repeat(-1px);" expected=
"none" desc=
"reject negative" ></div>
41 <div class=
"test" property=
"scroll-snap-destination" style=
"scroll-snap-destination: 10px 50px;" expected=
"10px 50px" desc=
"pixel/pixel destination" ></div>
42 <div class=
"test" property=
"scroll-snap-destination" style=
"scroll-snap-destination: 20px 40%;" expected=
"20px 40%" desc=
"pixel/percentage destination" ></div>
43 <div class=
"test" property=
"scroll-snap-destination" style=
"scroll-snap-destination: 0 10px;" expected=
"0px 10px" desc=
"unitless/pixel destination" ></div>
44 <div class=
"test" property=
"scroll-snap-destination" style=
"scroll-snap-destination: 0% 0px;" expected=
"0% 0px" desc=
"percentage/pixel destination" ></div>
45 <div class=
"test" property=
"scroll-snap-destination" style=
"scroll-snap-destination: 5% 100%;" expected=
"5% 100%" desc=
"percentage/percentage destination" ></div>
46 <div class=
"test" property=
"scroll-snap-destination" style=
"scroll-snap-destination: calc(10% + 20px) 40%;" expected=
"calc(20px + 10%) 40%" desc=
"calc/percentage destination" ></div>
48 <div class=
"test" property=
"scroll-snap-destination" style=
"scroll-snap-destination: left top 50%;" expected=
"0% 50%" desc=
"3 piece percentage destination" ></div>
49 <div class=
"test" property=
"scroll-snap-destination" style=
"scroll-snap-destination: top;" expected=
"50% 0%" desc=
"1 piece destination with implied center" ></div>
51 <div class=
"test" property=
"scroll-snap-coordinate" style=
"scroll-snap-coordinate: 50px 100px;" expected=
"50px 100px" desc=
"single pixel coordinate" ></div>
52 <div class=
"test" property=
"scroll-snap-coordinate" style=
"scroll-snap-coordinate: 50% 100%;" expected=
"50% 100%" desc=
"single percentage coordinate" ></div>
53 <div class=
"test" property=
"scroll-snap-coordinate" style=
"scroll-snap-coordinate: left top 50%;" expected=
"0% 50%" desc=
"3 piece percentage coordinate" ></div>
54 <div class=
"test" property=
"scroll-snap-coordinate" style=
"scroll-snap-coordinate: left 10px top 15px;" expected=
"10px 15px" desc=
"4 piece pixel coordinate" ></div>
55 <div class=
"test" property=
"scroll-snap-coordinate" style=
"scroll-snap-coordinate: left;" expected=
"0% 50%" desc=
"1 piece coordinate with implied center" ></div>
57 <div class=
"test" property=
"scroll-snap-coordinate" style=
"scroll-snap-coordinate: 50px 100px, 150px 100px, left 200px top 100px;" expected=
"50px 100px, 150px 100px, 200px 100px" desc=
"multiple pixel coordinates" ></div>
58 <div class=
"test" property=
"scroll-snap-coordinate" style=
"scroll-snap-coordinate: 50% 100%, left top 100%, 200% 100%;" expected=
"50% 100%, 0% 100%, 200% 100%" desc=
"multiple percentage coordinates" ></div>
59 <div class=
"test" property=
"scroll-snap-coordinate" style=
"scroll-snap-coordinate: calc(10% + 100px) 100%, 150%, 200px calc(5% + 10px);" expected=
"calc(100px + 10%) 100%, 150% 50%, 200px calc(10px + 5%)" desc=
"multiple mixed pixel/percentage/calc coordinates" ></div>
60 <div class=
"test" property=
"scroll-snap-coordinate" style=
"scroll-snap-coordinate: 50px 100px, junk;" expected=
"none" desc=
"reject invalid position list" ></div>
61 <div class=
"test" property=
"scroll-snap-coordinate" style=
"scroll-snap-coordinate: 50px 100px / 1px 1px;" expected=
"none" desc=
"reject invalid position separator" ></div>
62 <div class=
"test" property=
"scroll-snap-coordinate" style=
"scroll-snap-coordinate: 50px 100px,;" expected=
"none" desc=
"reject invalid position with terminating comma" ></div>
66 description("Test the parsing and application of the scroll-snap-* properties.");
68 var tests
= document
.querySelectorAll('.test');
70 for (var i
= 0; i
< tests
.length
; i
++) {
71 debug('Test case: ' + tests
[i
].attributes
.desc
.value
);
72 var property
= camelCase(tests
[i
].attributes
.property
.value
);
73 style
= window
.getComputedStyle(tests
[i
]);
74 shouldBeEqualToString('style.' + property
, tests
[i
].attributes
.expected
.value
);
78 function camelCase(str
) {
79 return str
.replace(/-([a-z])/g, function (m
, w
) {
80 return w
.toUpperCase();