Update web-platform-tests to revision 2660fc486f7027c913863d48a8843942f0c0365e

This commit is contained in:
WPT Sync Bot 2019-09-12 10:30:30 +00:00
parent 96de31b463
commit c413a1139e
455 changed files with 8535 additions and 2067 deletions

View file

@ -7,7 +7,7 @@
expected: FAIL
[Opening a blob URL in a new window immediately before revoking it works.]
expected: TIMEOUT
expected: FAIL
[Opening a blob URL in a noopener about:blank window immediately before revoking it works.]
expected: FAIL

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,2 @@
[vertical-align-negative-leading-001.html]
expected: FAIL

View file

@ -0,0 +1,4 @@
[vertical-align-top-bottom-001.html]
[vertical-align-top-bottom-001]
expected: FAIL

View file

@ -0,0 +1,4 @@
[inline-static-position-001.html]
[CSS Test: Static positions and line wrapping]
expected: FAIL

View file

@ -0,0 +1,28 @@
[border-radius-computed.html]
[Property border-radius value '1px 2% 3px 4%' computes to '1px 2% 3px 4%']
expected: FAIL
[Property border-radius value '1px 2% 1px 1px' computes to '1px 2% 1px 1px']
expected: FAIL
[Property border-radius value '1px 1px 1px 1px / 1px 1px 2% 1px' computes to '1px / 1px 1px 2%']
expected: FAIL
[Property border-radius value '1px 2% 3px 4% / 5em' computes to '1px 2% 3px 4% / 200px']
expected: FAIL
[Property border-radius value '1px' computes to '1px']
expected: FAIL
[Property border-radius value '1px 1px 2% 2%' computes to '1px 1px 2% 2%']
expected: FAIL
[Property border-radius value '5em / 1px 2% 3px 4%' computes to '200px / 1px 2% 3px 4%']
expected: FAIL
[Property border-radius value '1px 1px 1px 2% / 1px 2% 1px 2%' computes to '1px 1px 1px 2% / 1px 2%']
expected: FAIL
[Property border-radius value '1px 2% 2% 2% / 1px 2% 3px 2%' computes to '1px 2% 2% / 1px 2% 3px']
expected: FAIL

View file

@ -0,0 +1,946 @@
[font-computed.html]
[Property font value '900 10px/normal cursive' computes to ['normal normal 900 normal 10px/normal cursive' or 'normal normal 900 normal 10px / normal cursive'\]]
expected: FAIL
[Property font value 'small-caps lighter semi-condensed normal xx-small fantasy' computes to ['normal small-caps 700 semi-condensed 9.6px/normal fantasy' or 'normal small-caps 700 semi-condensed 9.6px / normal fantasy'\]]
expected: FAIL
[Property font value 'normal ultra-expanded italic lighter smaller sans-serif' computes to ['italic normal 700 ultra-expanded 33.3333px/normal sans-serif' or 'italic normal 700 ultra-expanded 33.3333px / normal sans-serif'\]]
expected: FAIL
[Property font value 'italic normal normal normal xx-small "Non-Generic Example Family Name"' computes to ['italic normal 400 normal 9.6px/normal "Non-Generic Example Family Name"' or 'italic normal 400 normal 9.6px / normal "Non-Generic Example Family Name"'\]]
expected: FAIL
[Property font value 'normal normal italic bolder smaller Menu' computes to ['italic normal 900 normal 33.3333px/normal Menu' or 'italic normal 900 normal 33.3333px / normal Menu'\]]
expected: FAIL
[Property font value 'normal extra-expanded larger/calc(120% + 1.2em) "Non-Generic Example Family Name"' computes to ['normal normal 400 extra-expanded 48px/115.2px "Non-Generic Example Family Name"' or 'normal normal 400 extra-expanded 48px / 115.2px "Non-Generic Example Family Name"'\]]
expected: FAIL
[Property font value 'bolder small-caps normal normal 10px/normal "Non-Generic Example Family Name"' computes to ['normal small-caps 900 normal 10px/normal "Non-Generic Example Family Name"' or 'normal small-caps 900 normal 10px / normal "Non-Generic Example Family Name"'\]]
expected: FAIL
[Property font value 'normal bold italic normal xx-small cursive' computes to ['italic normal 700 normal 9.6px/normal cursive' or 'italic normal 700 normal 9.6px / normal cursive'\]]
expected: FAIL
[Property font value 'normal extra-expanded italic small-caps larger/calc(120% + 1.2em) serif' computes to ['italic small-caps 400 extra-expanded 48px/115.2px serif' or 'italic small-caps 400 extra-expanded 48px / 115.2px serif'\]]
expected: FAIL
[Property font value 'italic extra-expanded small-caps larger/calc(120% + 1.2em) serif' computes to ['italic small-caps 400 extra-expanded 48px/115.2px serif' or 'italic small-caps 400 extra-expanded 48px / 115.2px serif'\]]
expected: FAIL
[Property font value 'italic normal normal ultra-condensed larger/calc(120% + 1.2em) cursive' computes to ['italic normal 400 ultra-condensed 48px/115.2px cursive' or 'italic normal 400 ultra-condensed 48px / 115.2px cursive'\]]
expected: FAIL
[Property font value 'small-caps extra-expanded lighter normal larger/calc(120% + 1.2em) serif' computes to ['normal small-caps 700 extra-expanded 48px/115.2px serif' or 'normal small-caps 700 extra-expanded 48px / 115.2px serif'\]]
expected: FAIL
[Property font value 'small-caps extra-condensed normal 900 20%/1.2 cursive' computes to ['normal small-caps 900 extra-condensed 8px/1.2 cursive' or 'normal small-caps 900 extra-condensed 8px / 1.2 cursive'\]]
expected: FAIL
[Property font value 'italic bold ultra-condensed small-caps 10px/normal sans-serif' computes to ['italic small-caps 700 ultra-condensed 10px/normal sans-serif' or 'italic small-caps 700 ultra-condensed 10px / normal sans-serif'\]]
expected: FAIL
[Property font value 'small-caps italic normal normal 20%/1.2 "Non-Generic Example Family Name"' computes to ['italic small-caps 400 normal 8px/1.2 "Non-Generic Example Family Name"' or 'italic small-caps 400 normal 8px / 1.2 "Non-Generic Example Family Name"'\]]
expected: FAIL
[Property font value 'normal italic small-caps condensed 20%/1.2 fantasy' computes to ['italic small-caps 400 condensed 8px/1.2 fantasy' or 'italic small-caps 400 condensed 8px / 1.2 fantasy'\]]
expected: FAIL
[Property font value 'small-caps 100 italic smaller "Non-Generic Example Family Name"' computes to ['italic small-caps 100 normal 33.3333px/normal "Non-Generic Example Family Name"' or 'italic small-caps 100 normal 33.3333px / normal "Non-Generic Example Family Name"'\]]
expected: FAIL
[Property font value '900 italic small-caps normal 20%/1.2 "Non-Generic Example Family Name"' computes to ['italic small-caps 900 normal 8px/1.2 "Non-Generic Example Family Name"' or 'italic small-caps 900 normal 8px / 1.2 "Non-Generic Example Family Name"'\]]
expected: FAIL
[Property font value 'italic semi-condensed normal normal xx-small monospace' computes to ['italic normal 400 semi-condensed 9.6px/normal monospace' or 'italic normal 400 semi-condensed 9.6px / normal monospace'\]]
expected: FAIL
[Property font value '900 normal italic extra-condensed calc(30% - 40px)/calc(120% + 1.2em) Menu' computes to ['italic normal 900 extra-condensed 0px/0px Menu' or 'italic normal 900 extra-condensed 0px / 0px Menu'\]]
expected: FAIL
[Property font value 'normal italic extra-expanded small-caps 10px/normal fantasy' computes to ['italic small-caps 400 extra-expanded 10px/normal fantasy' or 'italic small-caps 400 extra-expanded 10px / normal fantasy'\]]
expected: FAIL
[Property font value 'small-caps normal italic normal medium/normal serif' computes to ['italic small-caps 400 normal 16px/normal serif' or 'italic small-caps 400 normal 16px / normal serif'\]]
expected: FAIL
[Property font value 'normal small-caps calc(30% - 40px)/calc(120% + 1.2em) Menu' computes to ['normal small-caps 400 normal 0px/0px Menu' or 'normal small-caps 400 normal 0px / 0px Menu'\]]
expected: FAIL
[Property font value 'expanded 100 xx-large/1.2 monospace' computes to ['normal normal 100 expanded 32px/1.2 monospace' or 'normal normal 100 expanded 32px / 1.2 monospace'\]]
expected: FAIL
[Property font value 'ultra-condensed bolder normal italic 10px/normal serif' computes to ['italic normal 900 ultra-condensed 10px/normal serif' or 'italic normal 900 ultra-condensed 10px / normal serif'\]]
expected: FAIL
[message-box should be a supported system font.]
expected: FAIL
[Property font value 'italic small-caps bolder 10px/normal "Non-Generic Example Family Name"' computes to ['italic small-caps 900 normal 10px/normal "Non-Generic Example Family Name"' or 'italic small-caps 900 normal 10px / normal "Non-Generic Example Family Name"'\]]
expected: FAIL
[Property font value '100 small-caps ultra-expanded normal smaller "Non-Generic Example Family Name"' computes to ['normal small-caps 100 ultra-expanded 33.3333px/normal "Non-Generic Example Family Name"' or 'normal small-caps 100 ultra-expanded 33.3333px / normal "Non-Generic Example Family Name"'\]]
expected: FAIL
[Property font value 'normal bolder italic small-caps medium/normal fantasy' computes to ['italic small-caps 900 normal 16px/normal fantasy' or 'italic small-caps 900 normal 16px / normal fantasy'\]]
expected: FAIL
[Property font value 'small-caps expanded xx-large/1.2 Menu' computes to ['normal small-caps 400 expanded 32px/1.2 Menu' or 'normal small-caps 400 expanded 32px / 1.2 Menu'\]]
expected: FAIL
[Property font value 'normal italic small-caps bold 10px/normal cursive' computes to ['italic small-caps 700 normal 10px/normal cursive' or 'italic small-caps 700 normal 10px / normal cursive'\]]
expected: FAIL
[Property font value 'normal italic normal small-caps xx-small monospace' computes to ['italic small-caps 400 normal 9.6px/normal monospace' or 'italic small-caps 400 normal 9.6px / normal monospace'\]]
expected: FAIL
[Property font value 'normal small-caps normal xx-small "Non-Generic Example Family Name"' computes to ['normal small-caps 400 normal 9.6px/normal "Non-Generic Example Family Name"' or 'normal small-caps 400 normal 9.6px / normal "Non-Generic Example Family Name"'\]]
expected: FAIL
[Property font value 'ultra-expanded italic bold smaller monospace' computes to ['italic normal 700 ultra-expanded 33.3333px/normal monospace' or 'italic normal 700 ultra-expanded 33.3333px / normal monospace'\]]
expected: FAIL
[Property font value 'italic lighter normal normal 10px/normal serif' computes to ['italic normal 700 normal 10px/normal serif' or 'italic normal 700 normal 10px / normal serif'\]]
expected: FAIL
[Property font value 'semi-condensed normal 900 xx-small "Non-Generic Example Family Name"' computes to ['normal normal 900 semi-condensed 9.6px/normal "Non-Generic Example Family Name"' or 'normal normal 900 semi-condensed 9.6px / normal "Non-Generic Example Family Name"'\]]
expected: FAIL
[Property font value 'italic normal small-caps smaller fantasy' computes to ['italic small-caps 400 normal 33.3333px/normal fantasy' or 'italic small-caps 400 normal 33.3333px / normal fantasy'\]]
expected: FAIL
[Property font value 'extra-expanded 900 normal larger/calc(120% + 1.2em) Menu' computes to ['normal normal 900 extra-expanded 48px/115.2px Menu' or 'normal normal 900 extra-expanded 48px / 115.2px Menu'\]]
expected: FAIL
[Property font value 'condensed italic normal small-caps calc(30% - 40px)/calc(120% + 1.2em) "Non-Generic Example Family Name"' computes to ['italic small-caps 400 condensed 0px/0px "Non-Generic Example Family Name"' or 'italic small-caps 400 condensed 0px / 0px "Non-Generic Example Family Name"'\]]
expected: FAIL
[status-bar should be a supported system font.]
expected: FAIL
[Property font value 'bolder normal expanded italic 20%/1.2 Menu' computes to ['italic normal 900 expanded 8px/1.2 Menu' or 'italic normal 900 expanded 8px / 1.2 Menu'\]]
expected: FAIL
[Property font value 'italic normal bolder normal medium/normal sans-serif' computes to ['italic normal 900 normal 16px/normal sans-serif' or 'italic normal 900 normal 16px / normal sans-serif'\]]
expected: FAIL
[Property font value 'normal small-caps italic lighter calc(30% - 40px)/calc(120% + 1.2em) "Non-Generic Example Family Name"' computes to ['italic small-caps 700 normal 0px/0px "Non-Generic Example Family Name"' or 'italic small-caps 700 normal 0px / 0px "Non-Generic Example Family Name"'\]]
expected: FAIL
[Property font value 'normal small-caps bold italic larger/calc(120% + 1.2em) fantasy' computes to ['italic small-caps 700 normal 48px/115.2px fantasy' or 'italic small-caps 700 normal 48px / 115.2px fantasy'\]]
expected: FAIL
[Property font value 'italic 900 ultra-expanded normal smaller serif' computes to ['italic normal 900 ultra-expanded 33.3333px/normal serif' or 'italic normal 900 ultra-expanded 33.3333px / normal serif'\]]
expected: FAIL
[Property font value 'normal normal small-caps condensed xx-large/1.2 monospace' computes to ['normal small-caps 400 condensed 32px/1.2 monospace' or 'normal small-caps 400 condensed 32px / 1.2 monospace'\]]
expected: FAIL
[Property font value 'bolder italic normal small-caps larger/calc(120% + 1.2em) fantasy' computes to ['italic small-caps 900 normal 48px/115.2px fantasy' or 'italic small-caps 900 normal 48px / 115.2px fantasy'\]]
expected: FAIL
[Property font value 'small-caps lighter normal ultra-condensed larger/calc(120% + 1.2em) Menu' computes to ['normal small-caps 700 ultra-condensed 48px/115.2px Menu' or 'normal small-caps 700 ultra-condensed 48px / 115.2px Menu'\]]
expected: FAIL
[Property font value 'italic small-caps normal medium/normal cursive' computes to ['italic small-caps 400 normal 16px/normal cursive' or 'italic small-caps 400 normal 16px / normal cursive'\]]
expected: FAIL
[Property font value 'italic normal small-caps extra-condensed calc(30% - 40px)/calc(120% + 1.2em) "Non-Generic Example Family Name"' computes to ['italic small-caps 400 extra-condensed 0px/0px "Non-Generic Example Family Name"' or 'italic small-caps 400 extra-condensed 0px / 0px "Non-Generic Example Family Name"'\]]
expected: FAIL
[Property font value 'lighter ultra-condensed italic small-caps 10px/normal sans-serif' computes to ['italic small-caps 700 ultra-condensed 10px/normal sans-serif' or 'italic small-caps 700 ultra-condensed 10px / normal sans-serif'\]]
expected: FAIL
[Property font value '900 expanded normal small-caps xx-large/1.2 Menu' computes to ['normal small-caps 900 expanded 32px/1.2 Menu' or 'normal small-caps 900 expanded 32px / 1.2 Menu'\]]
expected: FAIL
[Property font value 'italic normal normal small-caps medium/normal serif' computes to ['italic small-caps 400 normal 16px/normal serif' or 'italic small-caps 400 normal 16px / normal serif'\]]
expected: FAIL
[Property font value 'normal 900 small-caps normal smaller "Non-Generic Example Family Name"' computes to ['normal small-caps 900 normal 33.3333px/normal "Non-Generic Example Family Name"' or 'normal small-caps 900 normal 33.3333px / normal "Non-Generic Example Family Name"'\]]
expected: FAIL
[Property font value 'bolder small-caps italic expanded xx-large/1.2 monospace' computes to ['italic small-caps 900 expanded 32px/1.2 monospace' or 'italic small-caps 900 expanded 32px / 1.2 monospace'\]]
expected: FAIL
[Property font value 'normal small-caps extra-expanded lighter xx-small sans-serif' computes to ['normal small-caps 700 extra-expanded 9.6px/normal sans-serif' or 'normal small-caps 700 extra-expanded 9.6px / normal sans-serif'\]]
expected: FAIL
[Property font value 'small-caps italic smaller monospace' computes to ['italic small-caps 400 normal 33.3333px/normal monospace' or 'italic small-caps 400 normal 33.3333px / normal monospace'\]]
expected: FAIL
[Property font value 'normal normal normal small-caps 20%/1.2 "Non-Generic Example Family Name"' computes to ['normal small-caps 400 normal 8px/1.2 "Non-Generic Example Family Name"' or 'normal small-caps 400 normal 8px / 1.2 "Non-Generic Example Family Name"'\]]
expected: FAIL
[Property font value 'bold italic small-caps ultra-condensed calc(30% - 40px)/calc(120% + 1.2em) serif' computes to ['italic small-caps 700 ultra-condensed 0px/0px serif' or 'italic small-caps 700 ultra-condensed 0px / 0px serif'\]]
expected: FAIL
[Property font value 'normal italic small-caps larger/calc(120% + 1.2em) serif' computes to ['italic small-caps 400 normal 48px/115.2px serif' or 'italic small-caps 400 normal 48px / 115.2px serif'\]]
expected: FAIL
[Property font value 'bold italic normal normal xx-large/1.2 cursive' computes to ['italic normal 700 normal 32px/1.2 cursive' or 'italic normal 700 normal 32px / 1.2 cursive'\]]
expected: FAIL
[Property font value 'lighter normal extra-expanded small-caps calc(30% - 40px)/calc(120% + 1.2em) "Non-Generic Example Family Name"' computes to ['normal small-caps 700 extra-expanded 0px/0px "Non-Generic Example Family Name"' or 'normal small-caps 700 extra-expanded 0px / 0px "Non-Generic Example Family Name"'\]]
expected: FAIL
[Property font value 'normal italic normal extra-condensed xx-large/1.2 "Non-Generic Example Family Name"' computes to ['italic normal 400 extra-condensed 32px/1.2 "Non-Generic Example Family Name"' or 'italic normal 400 extra-condensed 32px / 1.2 "Non-Generic Example Family Name"'\]]
expected: FAIL
[Property font value 'small-caps normal condensed lighter larger/calc(120% + 1.2em) fantasy' computes to ['normal small-caps 700 condensed 48px/115.2px fantasy' or 'normal small-caps 700 condensed 48px / 115.2px fantasy'\]]
expected: FAIL
[Property font value 'normal normal small-caps italic xx-small cursive' computes to ['italic small-caps 400 normal 9.6px/normal cursive' or 'italic small-caps 400 normal 9.6px / normal cursive'\]]
expected: FAIL
[Property font value 'italic normal normal 100 xx-large/1.2 sans-serif' computes to ['italic normal 100 normal 32px/1.2 sans-serif' or 'italic normal 100 normal 32px / 1.2 sans-serif'\]]
expected: FAIL
[Property font value 'bolder italic extra-condensed xx-small sans-serif' computes to ['italic normal 900 extra-condensed 9.6px/normal sans-serif' or 'italic normal 900 extra-condensed 9.6px / normal sans-serif'\]]
expected: FAIL
[Property font value 'normal 900 semi-expanded italic medium/normal monospace' computes to ['italic normal 900 semi-expanded 16px/normal monospace' or 'italic normal 900 semi-expanded 16px / normal monospace'\]]
expected: FAIL
[Property font value 'semi-condensed 900 italic normal xx-small fantasy' computes to ['italic normal 900 semi-condensed 9.6px/normal fantasy' or 'italic normal 900 semi-condensed 9.6px / normal fantasy'\]]
expected: FAIL
[Property font value 'bold normal small-caps xx-small "Non-Generic Example Family Name"' computes to ['normal small-caps 700 normal 9.6px/normal "Non-Generic Example Family Name"' or 'normal small-caps 700 normal 9.6px / normal "Non-Generic Example Family Name"'\]]
expected: FAIL
[Property font value 'semi-expanded italic small-caps medium/normal sans-serif' computes to ['italic small-caps 400 semi-expanded 16px/normal sans-serif' or 'italic small-caps 400 semi-expanded 16px / normal sans-serif'\]]
expected: FAIL
[Property font value 'expanded normal xx-large/1.2 "Non-Generic Example Family Name"' computes to ['normal normal 400 expanded 32px/1.2 "Non-Generic Example Family Name"' or 'normal normal 400 expanded 32px / 1.2 "Non-Generic Example Family Name"'\]]
expected: FAIL
[menu should be a supported system font.]
expected: FAIL
[Property font value 'normal medium/normal sans-serif' computes to ['normal normal 400 normal 16px/normal sans-serif' or 'normal normal 400 normal 16px / normal sans-serif'\]]
expected: FAIL
[Property font value 'normal normal italic normal xx-large/1.2 fantasy' computes to ['italic normal 400 normal 32px/1.2 fantasy' or 'italic normal 400 normal 32px / 1.2 fantasy'\]]
expected: FAIL
[Property font value 'normal normal bold italic 10px/normal serif' computes to ['italic normal 700 normal 10px/normal serif' or 'italic normal 700 normal 10px / normal serif'\]]
expected: FAIL
[Property font value 'italic small-caps 100 ultra-condensed calc(30% - 40px)/calc(120% + 1.2em) sans-serif' computes to ['italic small-caps 100 ultra-condensed 0px/0px sans-serif' or 'italic small-caps 100 ultra-condensed 0px / 0px sans-serif'\]]
expected: FAIL
[Property font value 'normal bolder small-caps extra-condensed 20%/1.2 sans-serif' computes to ['normal small-caps 900 extra-condensed 8px/1.2 sans-serif' or 'normal small-caps 900 extra-condensed 8px / 1.2 sans-serif'\]]
expected: FAIL
[Property font value 'normal extra-condensed normal italic 20%/1.2 cursive' computes to ['italic normal 400 extra-condensed 8px/1.2 cursive' or 'italic normal 400 extra-condensed 8px / 1.2 cursive'\]]
expected: FAIL
[Property font value 'small-caps bolder condensed calc(30% - 40px)/calc(120% + 1.2em) cursive' computes to ['normal small-caps 900 condensed 0px/0px cursive' or 'normal small-caps 900 condensed 0px / 0px cursive'\]]
expected: FAIL
[Property font value 'italic small-caps lighter normal 20%/1.2 serif' computes to ['italic small-caps 700 normal 8px/1.2 serif' or 'italic small-caps 700 normal 8px / 1.2 serif'\]]
expected: FAIL
[Property font value 'normal small-caps 100 medium/normal sans-serif' computes to ['normal small-caps 100 normal 16px/normal sans-serif' or 'normal small-caps 100 normal 16px / normal sans-serif'\]]
expected: FAIL
[Property font value 'italic normal semi-condensed smaller monospace' computes to ['italic normal 400 semi-condensed 33.3333px/normal monospace' or 'italic normal 400 semi-condensed 33.3333px / normal monospace'\]]
expected: FAIL
[Property font value 'lighter normal italic normal 10px/normal fantasy' computes to ['italic normal 700 normal 10px/normal fantasy' or 'italic normal 700 normal 10px / normal fantasy'\]]
expected: FAIL
[Property font value 'extra-expanded normal lighter small-caps larger/calc(120% + 1.2em) cursive' computes to ['normal small-caps 700 extra-expanded 48px/115.2px cursive' or 'normal small-caps 700 extra-expanded 48px / 115.2px cursive'\]]
expected: FAIL
[Property font value 'small-caps normal bold italic 20%/1.2 Menu' computes to ['italic small-caps 700 normal 8px/1.2 Menu' or 'italic small-caps 700 normal 8px / 1.2 Menu'\]]
expected: FAIL
[Property font value 'semi-condensed small-caps bolder normal xx-small cursive' computes to ['normal small-caps 900 semi-condensed 9.6px/normal cursive' or 'normal small-caps 900 semi-condensed 9.6px / normal cursive'\]]
expected: FAIL
[Property font value 'small-caps normal normal bolder 20%/1.2 monospace' computes to ['normal small-caps 900 normal 8px/1.2 monospace' or 'normal small-caps 900 normal 8px / 1.2 monospace'\]]
expected: FAIL
[Property font value 'lighter small-caps extra-expanded larger/calc(120% + 1.2em) Menu' computes to ['normal small-caps 700 extra-expanded 48px/115.2px Menu' or 'normal small-caps 700 extra-expanded 48px / 115.2px Menu'\]]
expected: FAIL
[Property font value 'italic bolder small-caps normal medium/normal monospace' computes to ['italic small-caps 900 normal 16px/normal monospace' or 'italic small-caps 900 normal 16px / normal monospace'\]]
expected: FAIL
[Property font value 'italic semi-expanded normal small-caps medium/normal Menu' computes to ['italic small-caps 400 semi-expanded 16px/normal Menu' or 'italic small-caps 400 semi-expanded 16px / normal Menu'\]]
expected: FAIL
[Property font value 'italic normal 100 condensed larger/calc(120% + 1.2em) fantasy' computes to ['italic normal 100 condensed 48px/115.2px fantasy' or 'italic normal 100 condensed 48px / 115.2px fantasy'\]]
expected: FAIL
[Property font value 'normal 100 semi-condensed normal xx-small fantasy' computes to ['normal normal 100 semi-condensed 9.6px/normal fantasy' or 'normal normal 100 semi-condensed 9.6px / normal fantasy'\]]
expected: FAIL
[Property font value 'normal expanded italic normal xx-large/1.2 "Non-Generic Example Family Name"' computes to ['italic normal 400 expanded 32px/1.2 "Non-Generic Example Family Name"' or 'italic normal 400 expanded 32px / 1.2 "Non-Generic Example Family Name"'\]]
expected: FAIL
[Property font value 'italic small-caps semi-condensed 900 xx-large/1.2 monospace' computes to ['italic small-caps 900 semi-condensed 32px/1.2 monospace' or 'italic small-caps 900 semi-condensed 32px / 1.2 monospace'\]]
expected: FAIL
[Property font value 'bold normal normal ultra-condensed larger/calc(120% + 1.2em) sans-serif' computes to ['normal normal 700 ultra-condensed 48px/115.2px sans-serif' or 'normal normal 700 ultra-condensed 48px / 115.2px sans-serif'\]]
expected: FAIL
[Property font value 'expanded normal italic small-caps xx-large/1.2 serif' computes to ['italic small-caps 400 expanded 32px/1.2 serif' or 'italic small-caps 400 expanded 32px / 1.2 serif'\]]
expected: FAIL
[Property font value 'small-caps ultra-expanded normal normal smaller serif' computes to ['normal small-caps 400 ultra-expanded 33.3333px/normal serif' or 'normal small-caps 400 ultra-expanded 33.3333px / normal serif'\]]
expected: FAIL
[Property font value 'condensed normal normal bolder calc(30% - 40px)/calc(120% + 1.2em) monospace' computes to ['normal normal 900 condensed 0px/0px monospace' or 'normal normal 900 condensed 0px / 0px monospace'\]]
expected: FAIL
[Property font value 'extra-expanded normal normal larger/calc(120% + 1.2em) serif' computes to ['normal normal 400 extra-expanded 48px/115.2px serif' or 'normal normal 400 extra-expanded 48px / 115.2px serif'\]]
expected: FAIL
[Property font value 'italic bold small-caps xx-small fantasy' computes to ['italic small-caps 700 normal 9.6px/normal fantasy' or 'italic small-caps 700 normal 9.6px / normal fantasy'\]]
expected: FAIL
[Property font value 'normal condensed small-caps italic calc(30% - 40px)/calc(120% + 1.2em) monospace' computes to ['italic small-caps 400 condensed 0px/0px monospace' or 'italic small-caps 400 condensed 0px / 0px monospace'\]]
expected: FAIL
[Property font value 'italic bolder normal smaller "Non-Generic Example Family Name"' computes to ['italic normal 900 normal 33.3333px/normal "Non-Generic Example Family Name"' or 'italic normal 900 normal 33.3333px / normal "Non-Generic Example Family Name"'\]]
expected: FAIL
[Property font value 'semi-expanded small-caps normal normal medium/normal cursive' computes to ['normal small-caps 400 semi-expanded 16px/normal cursive' or 'normal small-caps 400 semi-expanded 16px / normal cursive'\]]
expected: FAIL
[Property font value 'ultra-condensed small-caps italic normal 10px/normal "Non-Generic Example Family Name"' computes to ['italic small-caps 400 ultra-condensed 10px/normal "Non-Generic Example Family Name"' or 'italic small-caps 400 ultra-condensed 10px / normal "Non-Generic Example Family Name"'\]]
expected: FAIL
[Property font value 'normal italic expanded normal smaller cursive' computes to ['italic normal 400 expanded 33.3333px/normal cursive' or 'italic normal 400 expanded 33.3333px / normal cursive'\]]
expected: FAIL
[Property font value 'extra-expanded lighter small-caps normal larger/calc(120% + 1.2em) "Non-Generic Example Family Name"' computes to ['normal small-caps 700 extra-expanded 48px/115.2px "Non-Generic Example Family Name"' or 'normal small-caps 700 extra-expanded 48px / 115.2px "Non-Generic Example Family Name"'\]]
expected: FAIL
[Property font value 'normal condensed normal small-caps calc(30% - 40px)/calc(120% + 1.2em) fantasy' computes to ['normal small-caps 400 condensed 0px/0px fantasy' or 'normal small-caps 400 condensed 0px / 0px fantasy'\]]
expected: FAIL
[Property font value '900 small-caps ultra-condensed italic 10px/normal serif' computes to ['italic small-caps 900 ultra-condensed 10px/normal serif' or 'italic small-caps 900 ultra-condensed 10px / normal serif'\]]
expected: FAIL
[Property font value 'small-caps ultra-condensed normal italic 10px/normal sans-serif' computes to ['italic small-caps 400 ultra-condensed 10px/normal sans-serif' or 'italic small-caps 400 ultra-condensed 10px / normal sans-serif'\]]
expected: FAIL
[Property font value 'semi-condensed normal italic xx-small Menu' computes to ['italic normal 400 semi-condensed 9.6px/normal Menu' or 'italic normal 400 semi-condensed 9.6px / normal Menu'\]]
expected: FAIL
[Property font value 'small-caps normal 900 normal 10px/normal monospace' computes to ['normal small-caps 900 normal 10px/normal monospace' or 'normal small-caps 900 normal 10px / normal monospace'\]]
expected: FAIL
[Property font value 'normal normal semi-expanded xx-small fantasy' computes to ['normal normal 400 semi-expanded 9.6px/normal fantasy' or 'normal normal 400 semi-expanded 9.6px / normal fantasy'\]]
expected: FAIL
[Property font value 'normal normal ultra-condensed 100 smaller serif' computes to ['normal normal 100 ultra-condensed 33.3333px/normal serif' or 'normal normal 100 ultra-condensed 33.3333px / normal serif'\]]
expected: FAIL
[Property font value 'italic 900 normal semi-expanded calc(30% - 40px)/calc(120% + 1.2em) cursive' computes to ['italic normal 900 semi-expanded 0px/0px cursive' or 'italic normal 900 semi-expanded 0px / 0px cursive'\]]
expected: FAIL
[icon should be a supported system font.]
expected: FAIL
[Property font value 'normal italic small-caps normal smaller sans-serif' computes to ['italic small-caps 400 normal 33.3333px/normal sans-serif' or 'italic small-caps 400 normal 33.3333px / normal sans-serif'\]]
expected: FAIL
[Property font value 'normal small-caps bolder condensed smaller monospace' computes to ['normal small-caps 900 condensed 33.3333px/normal monospace' or 'normal small-caps 900 condensed 33.3333px / normal monospace'\]]
expected: FAIL
[Property font value 'normal normal ultra-expanded small-caps larger/calc(120% + 1.2em) "Non-Generic Example Family Name"' computes to ['normal small-caps 400 ultra-expanded 48px/115.2px "Non-Generic Example Family Name"' or 'normal small-caps 400 ultra-expanded 48px / 115.2px "Non-Generic Example Family Name"'\]]
expected: FAIL
[Property font value 'italic small-caps normal ultra-expanded smaller Menu' computes to ['italic small-caps 400 ultra-expanded 33.3333px/normal Menu' or 'italic small-caps 400 ultra-expanded 33.3333px / normal Menu'\]]
expected: FAIL
[Property font value 'normal semi-expanded italic medium/normal Menu' computes to ['italic normal 400 semi-expanded 16px/normal Menu' or 'italic normal 400 semi-expanded 16px / normal Menu'\]]
expected: FAIL
[Property font value 'normal semi-expanded 900 medium/normal "Non-Generic Example Family Name"' computes to ['normal normal 900 semi-expanded 16px/normal "Non-Generic Example Family Name"' or 'normal normal 900 semi-expanded 16px / normal "Non-Generic Example Family Name"'\]]
expected: FAIL
[Property font value 'normal italic ultra-expanded bold 20%/1.2 monospace' computes to ['italic normal 700 ultra-expanded 8px/1.2 monospace' or 'italic normal 700 ultra-expanded 8px / 1.2 monospace'\]]
expected: FAIL
[Property font value 'normal bold normal normal larger/calc(120% + 1.2em) monospace' computes to ['normal normal 700 normal 48px/115.2px monospace' or 'normal normal 700 normal 48px / 115.2px monospace'\]]
expected: FAIL
[small-caption should be a supported system font.]
expected: FAIL
[Property font value 'normal normal 900 normal smaller "Non-Generic Example Family Name"' computes to ['normal normal 900 normal 33.3333px/normal "Non-Generic Example Family Name"' or 'normal normal 900 normal 33.3333px / normal "Non-Generic Example Family Name"'\]]
expected: FAIL
[Property font value 'ultra-expanded 100 small-caps italic smaller serif' computes to ['italic small-caps 100 ultra-expanded 33.3333px/normal serif' or 'italic small-caps 100 ultra-expanded 33.3333px / normal serif'\]]
expected: FAIL
[Property font value 'italic ultra-condensed small-caps lighter 10px/normal cursive' computes to ['italic small-caps 700 ultra-condensed 10px/normal cursive' or 'italic small-caps 700 ultra-condensed 10px / normal cursive'\]]
expected: FAIL
[Property font value 'condensed small-caps calc(30% - 40px)/calc(120% + 1.2em) serif' computes to ['normal small-caps 400 condensed 0px/0px serif' or 'normal small-caps 400 condensed 0px / 0px serif'\]]
expected: FAIL
[Property font value 'normal 100 normal ultra-expanded 20%/1.2 serif' computes to ['normal normal 100 ultra-expanded 8px/1.2 serif' or 'normal normal 100 ultra-expanded 8px / 1.2 serif'\]]
expected: FAIL
[Property font value 'normal normal small-caps lighter medium/normal fantasy' computes to ['normal small-caps 700 normal 16px/normal fantasy' or 'normal small-caps 700 normal 16px / normal fantasy'\]]
expected: FAIL
[Property font value 'small-caps medium/normal "Non-Generic Example Family Name"' computes to ['normal small-caps 400 normal 16px/normal "Non-Generic Example Family Name"' or 'normal small-caps 400 normal 16px / normal "Non-Generic Example Family Name"'\]]
expected: FAIL
[Property font value 'normal lighter italic ultra-condensed xx-large/1.2 monospace' computes to ['italic normal 700 ultra-condensed 32px/1.2 monospace' or 'italic normal 700 ultra-condensed 32px / 1.2 monospace'\]]
expected: FAIL
[Property font value 'condensed small-caps bold calc(30% - 40px)/calc(120% + 1.2em) sans-serif' computes to ['normal small-caps 700 condensed 0px/0px sans-serif' or 'normal small-caps 700 condensed 0px / 0px sans-serif'\]]
expected: FAIL
[Property font value 'italic 10px/normal fantasy' computes to ['italic normal 400 normal 10px/normal fantasy' or 'italic normal 400 normal 10px / normal fantasy'\]]
expected: FAIL
[Property font value 'semi-expanded medium/normal Menu' computes to ['normal normal 400 semi-expanded 16px/normal Menu' or 'normal normal 400 semi-expanded 16px / normal Menu'\]]
expected: FAIL
[Property font value 'small-caps 100 calc(30% - 40px)/calc(120% + 1.2em) sans-serif' computes to ['normal small-caps 100 normal 0px/0px sans-serif' or 'normal small-caps 100 normal 0px / 0px sans-serif'\]]
expected: FAIL
[Property font value 'italic condensed 900 normal calc(30% - 40px)/calc(120% + 1.2em) monospace' computes to ['italic normal 900 condensed 0px/0px monospace' or 'italic normal 900 condensed 0px / 0px monospace'\]]
expected: FAIL
[Property font value '900 normal normal small-caps xx-large/1.2 serif' computes to ['normal small-caps 900 normal 32px/1.2 serif' or 'normal small-caps 900 normal 32px / 1.2 serif'\]]
expected: FAIL
[Property font value 'italic small-caps normal bold larger/calc(120% + 1.2em) monospace' computes to ['italic small-caps 700 normal 48px/115.2px monospace' or 'italic small-caps 700 normal 48px / 115.2px monospace'\]]
expected: FAIL
[Property font value 'normal 900 normal xx-large/1.2 fantasy' computes to ['normal normal 900 normal 32px/1.2 fantasy' or 'normal normal 900 normal 32px / 1.2 fantasy'\]]
expected: FAIL
[Property font value 'small-caps extra-expanded normal larger/calc(120% + 1.2em) "Non-Generic Example Family Name"' computes to ['normal small-caps 400 extra-expanded 48px/115.2px "Non-Generic Example Family Name"' or 'normal small-caps 400 extra-expanded 48px / 115.2px "Non-Generic Example Family Name"'\]]
expected: FAIL
[Property font value '900 small-caps italic xx-small cursive' computes to ['italic small-caps 900 normal 9.6px/normal cursive' or 'italic small-caps 900 normal 9.6px / normal cursive'\]]
expected: FAIL
[Property font value 'expanded bolder small-caps xx-large/1.2 Menu' computes to ['normal small-caps 900 expanded 32px/1.2 Menu' or 'normal small-caps 900 expanded 32px / 1.2 Menu'\]]
expected: FAIL
[Property font value 'small-caps normal ultra-condensed normal medium/normal sans-serif' computes to ['normal small-caps 400 ultra-condensed 16px/normal sans-serif' or 'normal small-caps 400 ultra-condensed 16px / normal sans-serif'\]]
expected: FAIL
[Property font value 'small-caps italic normal 100 calc(30% - 40px)/calc(120% + 1.2em) serif' computes to ['italic small-caps 100 normal 0px/0px serif' or 'italic small-caps 100 normal 0px / 0px serif'\]]
expected: FAIL
[Property font value 'normal normal expanded normal medium/normal monospace' computes to ['normal normal 400 expanded 16px/normal monospace' or 'normal normal 400 expanded 16px / normal monospace'\]]
expected: FAIL
[Property font value 'small-caps ultra-expanded 100 italic smaller sans-serif' computes to ['italic small-caps 100 ultra-expanded 33.3333px/normal sans-serif' or 'italic small-caps 100 ultra-expanded 33.3333px / normal sans-serif'\]]
expected: FAIL
[Property font value 'bolder normal normal calc(30% - 40px)/calc(120% + 1.2em) monospace' computes to ['normal normal 900 normal 0px/0px monospace' or 'normal normal 900 normal 0px / 0px monospace'\]]
expected: FAIL
[Property font value 'semi-condensed italic normal 100 xx-small serif' computes to ['italic normal 100 semi-condensed 9.6px/normal serif' or 'italic normal 100 semi-condensed 9.6px / normal serif'\]]
expected: FAIL
[Property font value 'normal ultra-expanded normal smaller serif' computes to ['normal normal 400 ultra-expanded 33.3333px/normal serif' or 'normal normal 400 ultra-expanded 33.3333px / normal serif'\]]
expected: FAIL
[Property font value 'small-caps normal italic xx-small "Non-Generic Example Family Name"' computes to ['italic small-caps 400 normal 9.6px/normal "Non-Generic Example Family Name"' or 'italic small-caps 400 normal 9.6px / normal "Non-Generic Example Family Name"'\]]
expected: FAIL
[Property font value 'lighter semi-condensed normal normal xx-small fantasy' computes to ['normal normal 700 semi-condensed 9.6px/normal fantasy' or 'normal normal 700 semi-condensed 9.6px / normal fantasy'\]]
expected: FAIL
[Property font value 'small-caps italic normal semi-condensed xx-small sans-serif' computes to ['italic small-caps 400 semi-condensed 9.6px/normal sans-serif' or 'italic small-caps 400 semi-condensed 9.6px / normal sans-serif'\]]
expected: FAIL
[Property font value 'normal 100 medium/normal cursive' computes to ['normal normal 100 normal 16px/normal cursive' or 'normal normal 100 normal 16px / normal cursive'\]]
expected: FAIL
[Property font value 'normal bolder normal italic smaller Menu' computes to ['italic normal 900 normal 33.3333px/normal Menu' or 'italic normal 900 normal 33.3333px / normal Menu'\]]
expected: FAIL
[Property font value 'small-caps normal normal semi-expanded calc(30% - 40px)/calc(120% + 1.2em) Menu' computes to ['normal small-caps 400 semi-expanded 0px/0px Menu' or 'normal small-caps 400 semi-expanded 0px / 0px Menu'\]]
expected: FAIL
[Property font value '100 normal normal italic medium/normal "Non-Generic Example Family Name"' computes to ['italic normal 100 normal 16px/normal "Non-Generic Example Family Name"' or 'italic normal 100 normal 16px / normal "Non-Generic Example Family Name"'\]]
expected: FAIL
[Property font value 'normal bold small-caps italic 10px/normal serif' computes to ['italic small-caps 700 normal 10px/normal serif' or 'italic small-caps 700 normal 10px / normal serif'\]]
expected: FAIL
[Property font value 'italic bold larger/calc(120% + 1.2em) Menu' computes to ['italic normal 700 normal 48px/115.2px Menu' or 'italic normal 700 normal 48px / 115.2px Menu'\]]
expected: FAIL
[Property font value 'extra-expanded small-caps normal 100 larger/calc(120% + 1.2em) monospace' computes to ['normal small-caps 100 extra-expanded 48px/115.2px monospace' or 'normal small-caps 100 extra-expanded 48px / 115.2px monospace'\]]
expected: FAIL
[Property font value 'normal 100 small-caps larger/calc(120% + 1.2em) Menu' computes to ['normal small-caps 100 normal 48px/115.2px Menu' or 'normal small-caps 100 normal 48px / 115.2px Menu'\]]
expected: FAIL
[Property font value 'small-caps normal italic expanded larger/calc(120% + 1.2em) cursive' computes to ['italic small-caps 400 expanded 48px/115.2px cursive' or 'italic small-caps 400 expanded 48px / 115.2px cursive'\]]
expected: FAIL
[Property font value 'normal normal normal ultra-condensed xx-small sans-serif' computes to ['normal normal 400 ultra-condensed 9.6px/normal sans-serif' or 'normal normal 400 ultra-condensed 9.6px / normal sans-serif'\]]
expected: FAIL
[Property font value 'italic normal semi-expanded normal 10px/normal Menu' computes to ['italic normal 400 semi-expanded 10px/normal Menu' or 'italic normal 400 semi-expanded 10px / normal Menu'\]]
expected: FAIL
[Property font value 'normal normal normal bold calc(30% - 40px)/calc(120% + 1.2em) serif' computes to ['normal normal 700 normal 0px/0px serif' or 'normal normal 700 normal 0px / 0px serif'\]]
expected: FAIL
[Property font value 'normal 900 italic calc(30% - 40px)/calc(120% + 1.2em) sans-serif' computes to ['italic normal 900 normal 0px/0px sans-serif' or 'italic normal 900 normal 0px / 0px sans-serif'\]]
expected: FAIL
[Property font value 'normal expanded bold normal xx-large/1.2 serif' computes to ['normal normal 700 expanded 32px/1.2 serif' or 'normal normal 700 expanded 32px / 1.2 serif'\]]
expected: FAIL
[Property font value 'expanded normal bolder italic xx-large/1.2 sans-serif' computes to ['italic normal 900 expanded 32px/1.2 sans-serif' or 'italic normal 900 expanded 32px / 1.2 sans-serif'\]]
expected: FAIL
[Property font value 'small-caps bolder normal italic xx-large/1.2 monospace' computes to ['italic small-caps 900 normal 32px/1.2 monospace' or 'italic small-caps 900 normal 32px / 1.2 monospace'\]]
expected: FAIL
[Property font value 'normal normal italic medium/normal cursive' computes to ['italic normal 400 normal 16px/normal cursive' or 'italic normal 400 normal 16px / normal cursive'\]]
expected: FAIL
[Property font value '100 italic semi-condensed small-caps xx-large/1.2 fantasy' computes to ['italic small-caps 100 semi-condensed 32px/1.2 fantasy' or 'italic small-caps 100 semi-condensed 32px / 1.2 fantasy'\]]
expected: FAIL
[Property font value 'normal normal extra-expanded italic xx-large/1.2 Menu' computes to ['italic normal 400 extra-expanded 32px/1.2 Menu' or 'italic normal 400 extra-expanded 32px / 1.2 Menu'\]]
expected: FAIL
[Property font value 'italic normal normal calc(30% - 40px)/calc(120% + 1.2em) Menu' computes to ['italic normal 400 normal 0px/0px Menu' or 'italic normal 400 normal 0px / 0px Menu'\]]
expected: FAIL
[Property font value '900 normal semi-condensed smaller fantasy' computes to ['normal normal 900 semi-condensed 33.3333px/normal fantasy' or 'normal normal 900 semi-condensed 33.3333px / normal fantasy'\]]
expected: FAIL
[Property font value 'italic normal expanded small-caps 20%/1.2 "Non-Generic Example Family Name"' computes to ['italic small-caps 400 expanded 8px/1.2 "Non-Generic Example Family Name"' or 'italic small-caps 400 expanded 8px / 1.2 "Non-Generic Example Family Name"'\]]
expected: FAIL
[Property font value 'normal italic lighter normal xx-small Menu' computes to ['italic normal 700 normal 9.6px/normal Menu' or 'italic normal 700 normal 9.6px / normal Menu'\]]
expected: FAIL
[Property font value '100 small-caps normal semi-expanded calc(30% - 40px)/calc(120% + 1.2em) sans-serif' computes to ['normal small-caps 100 semi-expanded 0px/0px sans-serif' or 'normal small-caps 100 semi-expanded 0px / 0px sans-serif'\]]
expected: FAIL
[Property font value 'normal small-caps normal italic xx-large/1.2 sans-serif' computes to ['italic small-caps 400 normal 32px/1.2 sans-serif' or 'italic small-caps 400 normal 32px / 1.2 sans-serif'\]]
expected: FAIL
[Property font value 'normal semi-condensed normal bolder xx-small monospace' computes to ['normal normal 900 semi-condensed 9.6px/normal monospace' or 'normal normal 900 semi-condensed 9.6px / normal monospace'\]]
expected: FAIL
[Property font value 'extra-condensed italic normal normal 20%/1.2 Menu' computes to ['italic normal 400 extra-condensed 8px/1.2 Menu' or 'italic normal 400 extra-condensed 8px / 1.2 Menu'\]]
expected: FAIL
[Property font value 'normal small-caps italic normal 20%/1.2 Menu' computes to ['italic small-caps 400 normal 8px/1.2 Menu' or 'italic small-caps 400 normal 8px / 1.2 Menu'\]]
expected: FAIL
[Property font value 'normal italic 100 small-caps medium/normal "Non-Generic Example Family Name"' computes to ['italic small-caps 100 normal 16px/normal "Non-Generic Example Family Name"' or 'italic small-caps 100 normal 16px / normal "Non-Generic Example Family Name"'\]]
expected: FAIL
[Property font value 'italic ultra-expanded small-caps normal smaller sans-serif' computes to ['italic small-caps 400 ultra-expanded 33.3333px/normal sans-serif' or 'italic small-caps 400 ultra-expanded 33.3333px / normal sans-serif'\]]
expected: FAIL
[Property font value 'small-caps bold normal normal medium/normal fantasy' computes to ['normal small-caps 700 normal 16px/normal fantasy' or 'normal small-caps 700 normal 16px / normal fantasy'\]]
expected: FAIL
[Property font value 'normal normal 100 larger/calc(120% + 1.2em) Menu' computes to ['normal normal 100 normal 48px/115.2px Menu' or 'normal normal 100 normal 48px / 115.2px Menu'\]]
expected: FAIL
[Property font value 'small-caps normal italic lighter xx-large/1.2 sans-serif' computes to ['italic small-caps 700 normal 32px/1.2 sans-serif' or 'italic small-caps 700 normal 32px / 1.2 sans-serif'\]]
expected: FAIL
[Property font value 'small-caps expanded bolder xx-large/1.2 "Non-Generic Example Family Name"' computes to ['normal small-caps 900 expanded 32px/1.2 "Non-Generic Example Family Name"' or 'normal small-caps 900 expanded 32px / 1.2 "Non-Generic Example Family Name"'\]]
expected: FAIL
[Property font value 'small-caps italic ultra-expanded lighter 20%/1.2 serif' computes to ['italic small-caps 700 ultra-expanded 8px/1.2 serif' or 'italic small-caps 700 ultra-expanded 8px / 1.2 serif'\]]
expected: FAIL
[Property font value 'small-caps 900 italic normal 10px/normal serif' computes to ['italic small-caps 900 normal 10px/normal serif' or 'italic small-caps 900 normal 10px / normal serif'\]]
expected: FAIL
[Property font value '100 extra-condensed small-caps 20%/1.2 cursive' computes to ['normal small-caps 100 extra-condensed 8px/1.2 cursive' or 'normal small-caps 100 extra-condensed 8px / 1.2 cursive'\]]
expected: FAIL
[Property font value '100 italic xx-small serif' computes to ['italic normal 100 normal 9.6px/normal serif' or 'italic normal 100 normal 9.6px / normal serif'\]]
expected: FAIL
[Property font value 'small-caps italic bold normal xx-large/1.2 fantasy' computes to ['italic small-caps 700 normal 32px/1.2 fantasy' or 'italic small-caps 700 normal 32px / 1.2 fantasy'\]]
expected: FAIL
[Property font value 'lighter small-caps normal italic 20%/1.2 serif' computes to ['italic small-caps 700 normal 8px/1.2 serif' or 'italic small-caps 700 normal 8px / 1.2 serif'\]]
expected: FAIL
[Property font value 'italic expanded normal bolder xx-large/1.2 "Non-Generic Example Family Name"' computes to ['italic normal 900 expanded 32px/1.2 "Non-Generic Example Family Name"' or 'italic normal 900 expanded 32px / 1.2 "Non-Generic Example Family Name"'\]]
expected: FAIL
[Property font value 'small-caps 100 semi-expanded italic medium/normal monospace' computes to ['italic small-caps 100 semi-expanded 16px/normal monospace' or 'italic small-caps 100 semi-expanded 16px / normal monospace'\]]
expected: FAIL
[Property font value 'normal semi-condensed small-caps 100 xx-small Menu' computes to ['normal small-caps 100 semi-condensed 9.6px/normal Menu' or 'normal small-caps 100 semi-condensed 9.6px / normal Menu'\]]
expected: FAIL
[Property font value 'extra-condensed normal small-caps italic 20%/1.2 monospace' computes to ['italic small-caps 400 extra-condensed 8px/1.2 monospace' or 'italic small-caps 400 extra-condensed 8px / 1.2 monospace'\]]
expected: FAIL
[Property font value 'small-caps condensed italic calc(30% - 40px)/calc(120% + 1.2em) fantasy' computes to ['italic small-caps 400 condensed 0px/0px fantasy' or 'italic small-caps 400 condensed 0px / 0px fantasy'\]]
expected: FAIL
[Property font value 'normal ultra-expanded lighter small-caps smaller cursive' computes to ['normal small-caps 700 ultra-expanded 33.3333px/normal cursive' or 'normal small-caps 700 ultra-expanded 33.3333px / normal cursive'\]]
expected: FAIL
[Property font value 'semi-expanded normal bold normal medium/normal serif' computes to ['normal normal 700 semi-expanded 16px/normal serif' or 'normal normal 700 semi-expanded 16px / normal serif'\]]
expected: FAIL
[Property font value 'italic extra-condensed 100 20%/1.2 fantasy' computes to ['italic normal 100 extra-condensed 8px/1.2 fantasy' or 'italic normal 100 extra-condensed 8px / 1.2 fantasy'\]]
expected: FAIL
[Property font value '100 normal italic small-caps 20%/1.2 monospace' computes to ['italic small-caps 100 normal 8px/1.2 monospace' or 'italic small-caps 100 normal 8px / 1.2 monospace'\]]
expected: FAIL
[Property font value 'normal small-caps expanded italic calc(30% - 40px)/calc(120% + 1.2em) serif' computes to ['italic small-caps 400 expanded 0px/0px serif' or 'italic small-caps 400 expanded 0px / 0px serif'\]]
expected: FAIL
[Property font value 'lighter italic normal ultra-expanded smaller monospace' computes to ['italic normal 700 ultra-expanded 33.3333px/normal monospace' or 'italic normal 700 ultra-expanded 33.3333px / normal monospace'\]]
expected: FAIL
[Property font value 'italic extra-condensed 20%/1.2 cursive' computes to ['italic normal 400 extra-condensed 8px/1.2 cursive' or 'italic normal 400 extra-condensed 8px / 1.2 cursive'\]]
expected: FAIL
[Property font value 'extra-condensed small-caps italic 900 20%/1.2 serif' computes to ['italic small-caps 900 extra-condensed 8px/1.2 serif' or 'italic small-caps 900 extra-condensed 8px / 1.2 serif'\]]
expected: FAIL
[Property font value 'normal italic normal 20%/1.2 cursive' computes to ['italic normal 400 normal 8px/1.2 cursive' or 'italic normal 400 normal 8px / 1.2 cursive'\]]
expected: FAIL
[Property font value 'normal extra-condensed small-caps normal 20%/1.2 fantasy' computes to ['normal small-caps 400 extra-condensed 8px/1.2 fantasy' or 'normal small-caps 400 extra-condensed 8px / 1.2 fantasy'\]]
expected: FAIL
[Property font value 'ultra-expanded small-caps italic smaller Menu' computes to ['italic small-caps 400 ultra-expanded 33.3333px/normal Menu' or 'italic small-caps 400 ultra-expanded 33.3333px / normal Menu'\]]
expected: FAIL
[Property font value 'lighter italic condensed normal medium/normal cursive' computes to ['italic normal 700 condensed 16px/normal cursive' or 'italic normal 700 condensed 16px / normal cursive'\]]
expected: FAIL
[Property font value 'normal normal italic extra-condensed 10px/normal "Non-Generic Example Family Name"' computes to ['italic normal 400 extra-condensed 10px/normal "Non-Generic Example Family Name"' or 'italic normal 400 extra-condensed 10px / normal "Non-Generic Example Family Name"'\]]
expected: FAIL
[Property font value 'bold small-caps italic normal medium/normal fantasy' computes to ['italic small-caps 700 normal 16px/normal fantasy' or 'italic small-caps 700 normal 16px / normal fantasy'\]]
expected: FAIL
[Property font value 'condensed normal small-caps 100 calc(30% - 40px)/calc(120% + 1.2em) Menu' computes to ['normal small-caps 100 condensed 0px/0px Menu' or 'normal small-caps 100 condensed 0px / 0px Menu'\]]
expected: FAIL
[Property font value 'xx-small serif' computes to ['normal normal 400 normal 9.6px/normal serif' or 'normal normal 400 normal 9.6px / normal serif'\]]
expected: FAIL
[Property font value 'bold semi-condensed small-caps italic xx-small monospace' computes to ['italic small-caps 700 semi-condensed 9.6px/normal monospace' or 'italic small-caps 700 semi-condensed 9.6px / normal monospace'\]]
expected: FAIL
[Property font value '100 semi-expanded normal italic medium/normal monospace' computes to ['italic normal 100 semi-expanded 16px/normal monospace' or 'italic normal 100 semi-expanded 16px / normal monospace'\]]
expected: FAIL
[caption should be a supported system font.]
expected: FAIL
[Property font value 'normal small-caps italic extra-condensed xx-small serif' computes to ['italic small-caps 400 extra-condensed 9.6px/normal serif' or 'italic small-caps 400 extra-condensed 9.6px / normal serif'\]]
expected: FAIL
[Property font value 'small-caps italic normal 10px/normal Menu' computes to ['italic small-caps 400 normal 10px/normal Menu' or 'italic small-caps 400 normal 10px / normal Menu'\]]
expected: FAIL
[Property font value 'normal italic 900 semi-condensed xx-large/1.2 serif' computes to ['italic normal 900 semi-condensed 32px/1.2 serif' or 'italic normal 900 semi-condensed 32px / 1.2 serif'\]]
expected: FAIL
[Property font value 'ultra-expanded bold normal normal smaller "Non-Generic Example Family Name"' computes to ['normal normal 700 ultra-expanded 33.3333px/normal "Non-Generic Example Family Name"' or 'normal normal 700 ultra-expanded 33.3333px / normal "Non-Generic Example Family Name"'\]]
expected: FAIL
[Property font value 'small-caps italic expanded smaller Menu' computes to ['italic small-caps 400 expanded 33.3333px/normal Menu' or 'italic small-caps 400 expanded 33.3333px / normal Menu'\]]
expected: FAIL
[Property font value 'small-caps italic extra-expanded normal 10px/normal "Non-Generic Example Family Name"' computes to ['italic small-caps 400 extra-expanded 10px/normal "Non-Generic Example Family Name"' or 'italic small-caps 400 extra-expanded 10px / normal "Non-Generic Example Family Name"'\]]
expected: FAIL
[Property font value 'ultra-expanded normal small-caps smaller cursive' computes to ['normal small-caps 400 ultra-expanded 33.3333px/normal cursive' or 'normal small-caps 400 ultra-expanded 33.3333px / normal cursive'\]]
expected: FAIL
[Property font value 'italic normal small-caps 900 20%/1.2 Menu' computes to ['italic small-caps 900 normal 8px/1.2 Menu' or 'italic small-caps 900 normal 8px / 1.2 Menu'\]]
expected: FAIL
[Property font value 'small-caps italic bolder semi-expanded larger/calc(120% + 1.2em) monospace' computes to ['italic small-caps 900 semi-expanded 48px/115.2px monospace' or 'italic small-caps 900 semi-expanded 48px / 115.2px monospace'\]]
expected: FAIL
[Property font value 'semi-expanded bold italic small-caps medium/normal monospace' computes to ['italic small-caps 700 semi-expanded 16px/normal monospace' or 'italic small-caps 700 semi-expanded 16px / normal monospace'\]]
expected: FAIL
[Property font value 'italic condensed normal calc(30% - 40px)/calc(120% + 1.2em) fantasy' computes to ['italic normal 400 condensed 0px/0px fantasy' or 'italic normal 400 condensed 0px / 0px fantasy'\]]
expected: FAIL
[Property font value 'normal small-caps normal bolder larger/calc(120% + 1.2em) cursive' computes to ['normal small-caps 900 normal 48px/115.2px cursive' or 'normal small-caps 900 normal 48px / 115.2px cursive'\]]
expected: FAIL
[Property font value 'bold small-caps normal smaller Menu' computes to ['normal small-caps 700 normal 33.3333px/normal Menu' or 'normal small-caps 700 normal 33.3333px / normal Menu'\]]
expected: FAIL
[Property font value 'normal small-caps 900 normal xx-large/1.2 cursive' computes to ['normal small-caps 900 normal 32px/1.2 cursive' or 'normal small-caps 900 normal 32px / 1.2 cursive'\]]
expected: FAIL
[Property font value 'normal small-caps semi-condensed 10px/normal Menu' computes to ['normal small-caps 400 semi-condensed 10px/normal Menu' or 'normal small-caps 400 semi-condensed 10px / normal Menu'\]]
expected: FAIL
[Property font value 'ultra-condensed normal small-caps normal 10px/normal fantasy' computes to ['normal small-caps 400 ultra-condensed 10px/normal fantasy' or 'normal small-caps 400 ultra-condensed 10px / normal fantasy'\]]
expected: FAIL
[Property font value 'normal italic normal normal calc(30% - 40px)/calc(120% + 1.2em) fantasy' computes to ['italic normal 400 normal 0px/0px fantasy' or 'italic normal 400 normal 0px / 0px fantasy'\]]
expected: FAIL
[Property font value 'italic normal extra-expanded 900 calc(30% - 40px)/calc(120% + 1.2em) serif' computes to ['italic normal 900 extra-expanded 0px/0px serif' or 'italic normal 900 extra-expanded 0px / 0px serif'\]]
expected: FAIL
[Property font value 'normal normal small-caps normal calc(30% - 40px)/calc(120% + 1.2em) sans-serif' computes to ['normal small-caps 400 normal 0px/0px sans-serif' or 'normal small-caps 400 normal 0px / 0px sans-serif'\]]
expected: FAIL
[Property font value 'bolder condensed normal calc(30% - 40px)/calc(120% + 1.2em) cursive' computes to ['normal normal 900 condensed 0px/0px cursive' or 'normal normal 900 condensed 0px / 0px cursive'\]]
expected: FAIL
[Property font value 'condensed 100 italic calc(30% - 40px)/calc(120% + 1.2em) cursive' computes to ['italic normal 100 condensed 0px/0px cursive' or 'italic normal 100 condensed 0px / 0px cursive'\]]
expected: FAIL
[Property font value 'small-caps italic 900 medium/normal cursive' computes to ['italic small-caps 900 normal 16px/normal cursive' or 'italic small-caps 900 normal 16px / normal cursive'\]]
expected: FAIL
[Property font value 'normal normal lighter semi-condensed calc(30% - 40px)/calc(120% + 1.2em) cursive' computes to ['normal normal 700 semi-condensed 0px/0px cursive' or 'normal normal 700 semi-condensed 0px / 0px cursive'\]]
expected: FAIL
[Property font value 'normal ultra-condensed small-caps 10px/normal cursive' computes to ['normal small-caps 400 ultra-condensed 10px/normal cursive' or 'normal small-caps 400 ultra-condensed 10px / normal cursive'\]]
expected: FAIL
[Property font value 'italic semi-condensed bold small-caps xx-small Menu' computes to ['italic small-caps 700 semi-condensed 9.6px/normal Menu' or 'italic small-caps 700 semi-condensed 9.6px / normal Menu'\]]
expected: FAIL
[Property font value 'small-caps bold italic extra-condensed 20%/1.2 sans-serif' computes to ['italic small-caps 700 extra-condensed 8px/1.2 sans-serif' or 'italic small-caps 700 extra-condensed 8px / 1.2 sans-serif'\]]
expected: FAIL
[Property font value 'bold normal semi-expanded normal 10px/normal monospace' computes to ['normal normal 700 semi-expanded 10px/normal monospace' or 'normal normal 700 semi-expanded 10px / normal monospace'\]]
expected: FAIL
[Property font value 'normal bold expanded small-caps xx-large/1.2 Menu' computes to ['normal small-caps 700 expanded 32px/1.2 Menu' or 'normal small-caps 700 expanded 32px / 1.2 Menu'\]]
expected: FAIL
[Property font value 'normal normal bolder small-caps 20%/1.2 sans-serif' computes to ['normal small-caps 900 normal 8px/1.2 sans-serif' or 'normal small-caps 900 normal 8px / 1.2 sans-serif'\]]
expected: FAIL
[Property font value 'normal normal italic small-caps larger/calc(120% + 1.2em) monospace' computes to ['italic small-caps 400 normal 48px/115.2px monospace' or 'italic small-caps 400 normal 48px / 115.2px monospace'\]]
expected: FAIL
[Property font value 'small-caps 900 normal xx-small cursive' computes to ['normal small-caps 900 normal 9.6px/normal cursive' or 'normal small-caps 900 normal 9.6px / normal cursive'\]]
expected: FAIL
[Property font value 'semi-expanded normal italic normal medium/normal "Non-Generic Example Family Name"' computes to ['italic normal 400 semi-expanded 16px/normal "Non-Generic Example Family Name"' or 'italic normal 400 semi-expanded 16px / normal "Non-Generic Example Family Name"'\]]
expected: FAIL
[Property font value 'small-caps normal 100 smaller fantasy' computes to ['normal small-caps 100 normal 33.3333px/normal fantasy' or 'normal small-caps 100 normal 33.3333px / normal fantasy'\]]
expected: FAIL
[Property font value 'normal small-caps normal ultra-condensed smaller fantasy' computes to ['normal small-caps 400 ultra-condensed 33.3333px/normal fantasy' or 'normal small-caps 400 ultra-condensed 33.3333px / normal fantasy'\]]
expected: FAIL
[Property font value 'normal italic bolder calc(30% - 40px)/calc(120% + 1.2em) monospace' computes to ['italic normal 900 normal 0px/0px monospace' or 'italic normal 900 normal 0px / 0px monospace'\]]
expected: FAIL
[Property font value 'italic normal lighter small-caps xx-large/1.2 cursive' computes to ['italic small-caps 700 normal 32px/1.2 cursive' or 'italic small-caps 700 normal 32px / 1.2 cursive'\]]
expected: FAIL
[Property font value 'italic normal 20%/1.2 monospace' computes to ['italic normal 400 normal 8px/1.2 monospace' or 'italic normal 400 normal 8px / 1.2 monospace'\]]
expected: FAIL
[Property font value 'bold normal 20%/1.2 fantasy' computes to ['normal normal 700 normal 8px/1.2 fantasy' or 'normal normal 700 normal 8px / 1.2 fantasy'\]]
expected: FAIL
[Property font value 'ultra-condensed normal normal italic 10px/normal cursive' computes to ['italic normal 400 ultra-condensed 10px/normal cursive' or 'italic normal 400 ultra-condensed 10px / normal cursive'\]]
expected: FAIL
[Property font value 'normal lighter normal small-caps 10px/normal "Non-Generic Example Family Name"' computes to ['normal small-caps 700 normal 10px/normal "Non-Generic Example Family Name"' or 'normal small-caps 700 normal 10px / normal "Non-Generic Example Family Name"'\]]
expected: FAIL
[Property font value 'normal italic semi-expanded larger/calc(120% + 1.2em) sans-serif' computes to ['italic normal 400 semi-expanded 48px/115.2px sans-serif' or 'italic normal 400 semi-expanded 48px / 115.2px sans-serif'\]]
expected: FAIL
[Property font value 'extra-expanded italic small-caps 900 larger/calc(120% + 1.2em) fantasy' computes to ['italic small-caps 900 extra-expanded 48px/115.2px fantasy' or 'italic small-caps 900 extra-expanded 48px / 115.2px fantasy'\]]
expected: FAIL
[Property font value 'extra-condensed normal normal small-caps 20%/1.2 fantasy' computes to ['normal small-caps 400 extra-condensed 8px/1.2 fantasy' or 'normal small-caps 400 extra-condensed 8px / 1.2 fantasy'\]]
expected: FAIL
[Property font value 'normal small-caps semi-expanded normal 20%/1.2 "Non-Generic Example Family Name"' computes to ['normal small-caps 400 semi-expanded 8px/1.2 "Non-Generic Example Family Name"' or 'normal small-caps 400 semi-expanded 8px / 1.2 "Non-Generic Example Family Name"'\]]
expected: FAIL
[Property font value 'extra-expanded normal italic lighter larger/calc(120% + 1.2em) sans-serif' computes to ['italic normal 700 extra-expanded 48px/115.2px sans-serif' or 'italic normal 700 extra-expanded 48px / 115.2px sans-serif'\]]
expected: FAIL
[Property font value 'small-caps semi-condensed italic normal xx-small monospace' computes to ['italic small-caps 400 semi-condensed 9.6px/normal monospace' or 'italic small-caps 400 semi-condensed 9.6px / normal monospace'\]]
expected: FAIL
[Property font value 'small-caps normal extra-condensed italic xx-large/1.2 cursive' computes to ['italic small-caps 400 extra-condensed 32px/1.2 cursive' or 'italic small-caps 400 extra-condensed 32px / 1.2 cursive'\]]
expected: FAIL
[Property font value 'normal ultra-condensed normal normal 10px/normal sans-serif' computes to ['normal normal 400 ultra-condensed 10px/normal sans-serif' or 'normal normal 400 ultra-condensed 10px / normal sans-serif'\]]
expected: FAIL
[Property font value 'normal normal normal italic 10px/normal Menu' computes to ['italic normal 400 normal 10px/normal Menu' or 'italic normal 400 normal 10px / normal Menu'\]]
expected: FAIL
[Property font value 'small-caps normal normal italic 10px/normal fantasy' computes to ['italic small-caps 400 normal 10px/normal fantasy' or 'italic small-caps 400 normal 10px / normal fantasy'\]]
expected: FAIL
[Property font value 'normal extra-expanded bolder italic larger/calc(120% + 1.2em) sans-serif' computes to ['italic normal 900 extra-expanded 48px/115.2px sans-serif' or 'italic normal 900 extra-expanded 48px / 115.2px sans-serif'\]]
expected: FAIL
[Property font value 'ultra-condensed italic normal 10px/normal monospace' computes to ['italic normal 400 ultra-condensed 10px/normal monospace' or 'italic normal 400 ultra-condensed 10px / normal monospace'\]]
expected: FAIL
[Property font value 'normal italic 10px/normal sans-serif' computes to ['italic normal 400 normal 10px/normal sans-serif' or 'italic normal 400 normal 10px / normal sans-serif'\]]
expected: FAIL
[Property font value 'semi-expanded small-caps lighter italic medium/normal fantasy' computes to ['italic small-caps 700 semi-expanded 16px/normal fantasy' or 'italic small-caps 700 semi-expanded 16px / normal fantasy'\]]
expected: FAIL
[Property font value 'italic 100 extra-expanded larger/calc(120% + 1.2em) "Non-Generic Example Family Name"' computes to ['italic normal 100 extra-expanded 48px/115.2px "Non-Generic Example Family Name"' or 'italic normal 100 extra-expanded 48px / 115.2px "Non-Generic Example Family Name"'\]]
expected: FAIL
[Property font value '100 italic small-caps 10px/normal Menu' computes to ['italic small-caps 100 normal 10px/normal Menu' or 'italic small-caps 100 normal 10px / normal Menu'\]]
expected: FAIL
[Property font value '900 small-caps larger/calc(120% + 1.2em) monospace' computes to ['normal small-caps 900 normal 48px/115.2px monospace' or 'normal small-caps 900 normal 48px / 115.2px monospace'\]]
expected: FAIL
[Property font value 'bold extra-expanded italic larger/calc(120% + 1.2em) "Non-Generic Example Family Name"' computes to ['italic normal 700 extra-expanded 48px/115.2px "Non-Generic Example Family Name"' or 'italic normal 700 extra-expanded 48px / 115.2px "Non-Generic Example Family Name"'\]]
expected: FAIL
[Property font value 'expanded italic small-caps normal xx-large/1.2 cursive' computes to ['italic small-caps 400 expanded 32px/1.2 cursive' or 'italic small-caps 400 expanded 32px / 1.2 cursive'\]]
expected: FAIL
[Property font value 'expanded small-caps normal italic xx-large/1.2 fantasy' computes to ['italic small-caps 400 expanded 32px/1.2 fantasy' or 'italic small-caps 400 expanded 32px / 1.2 fantasy'\]]
expected: FAIL
[Property font value 'small-caps normal ultra-expanded xx-small serif' computes to ['normal small-caps 400 ultra-expanded 9.6px/normal serif' or 'normal small-caps 400 ultra-expanded 9.6px / normal serif'\]]
expected: FAIL
[Property font value 'small-caps normal bolder extra-expanded calc(30% - 40px)/calc(120% + 1.2em) "Non-Generic Example Family Name"' computes to ['normal small-caps 900 extra-expanded 0px/0px "Non-Generic Example Family Name"' or 'normal small-caps 900 extra-expanded 0px / 0px "Non-Generic Example Family Name"'\]]
expected: FAIL
[Property font value 'ultra-expanded normal normal normal smaller sans-serif' computes to ['normal normal 400 ultra-expanded 33.3333px/normal sans-serif' or 'normal normal 400 ultra-expanded 33.3333px / normal sans-serif'\]]
expected: FAIL
[Property font value 'semi-condensed small-caps normal xx-small sans-serif' computes to ['normal small-caps 400 semi-condensed 9.6px/normal sans-serif' or 'normal small-caps 400 semi-condensed 9.6px / normal sans-serif'\]]
expected: FAIL
[Property font value 'normal normal small-caps 20%/1.2 serif' computes to ['normal small-caps 400 normal 8px/1.2 serif' or 'normal small-caps 400 normal 8px / 1.2 serif'\]]
expected: FAIL
[Property font value 'normal small-caps normal normal medium/normal serif' computes to ['normal small-caps 400 normal 16px/normal serif' or 'normal small-caps 400 normal 16px / normal serif'\]]
expected: FAIL
[Property font value 'normal lighter condensed calc(30% - 40px)/calc(120% + 1.2em) cursive' computes to ['normal normal 700 condensed 0px/0px cursive' or 'normal normal 700 condensed 0px / 0px cursive'\]]
expected: FAIL
[Property font value 'small-caps normal normal larger/calc(120% + 1.2em) sans-serif' computes to ['normal small-caps 400 normal 48px/115.2px sans-serif' or 'normal small-caps 400 normal 48px / 115.2px sans-serif'\]]
expected: FAIL
[Property font value 'normal normal normal normal smaller monospace' computes to ['normal normal 400 normal 33.3333px/normal monospace' or 'normal normal 400 normal 33.3333px / normal monospace'\]]
expected: FAIL
[Property font value 'small-caps normal xx-large/1.2 serif' computes to ['normal small-caps 400 normal 32px/1.2 serif' or 'normal small-caps 400 normal 32px / 1.2 serif'\]]
expected: FAIL
[Property font value '900 condensed small-caps normal calc(30% - 40px)/calc(120% + 1.2em) fantasy' computes to ['normal small-caps 900 condensed 0px/0px fantasy' or 'normal small-caps 900 condensed 0px / 0px fantasy'\]]
expected: FAIL
[Property font value 'bolder normal italic smaller cursive' computes to ['italic normal 900 normal 33.3333px/normal cursive' or 'italic normal 900 normal 33.3333px / normal cursive'\]]
expected: FAIL
[Property font value 'normal normal normal larger/calc(120% + 1.2em) fantasy' computes to ['normal normal 400 normal 48px/115.2px fantasy' or 'normal normal 400 normal 48px / 115.2px fantasy'\]]
expected: FAIL
[Property font value 'italic small-caps extra-condensed xx-small cursive' computes to ['italic small-caps 400 extra-condensed 9.6px/normal cursive' or 'italic small-caps 400 extra-condensed 9.6px / normal cursive'\]]
expected: FAIL
[Property font value 'italic normal bold xx-small serif' computes to ['italic normal 700 normal 9.6px/normal serif' or 'italic normal 700 normal 9.6px / normal serif'\]]
expected: FAIL
[Property font value '900 italic normal medium/normal sans-serif' computes to ['italic normal 900 normal 16px/normal sans-serif' or 'italic normal 900 normal 16px / normal sans-serif'\]]
expected: FAIL
[Property font value 'ultra-expanded italic smaller fantasy' computes to ['italic normal 400 ultra-expanded 33.3333px/normal fantasy' or 'italic normal 400 ultra-expanded 33.3333px / normal fantasy'\]]
expected: FAIL
[Property font value 'normal small-caps italic 10px/normal monospace' computes to ['italic small-caps 400 normal 10px/normal monospace' or 'italic small-caps 400 normal 10px / normal monospace'\]]
expected: FAIL
[Property font value 'bolder ultra-expanded italic normal smaller serif' computes to ['italic normal 900 ultra-expanded 33.3333px/normal serif' or 'italic normal 900 ultra-expanded 33.3333px / normal serif'\]]
expected: FAIL
[Property font value 'italic small-caps normal normal xx-large/1.2 fantasy' computes to ['italic small-caps 400 normal 32px/1.2 fantasy' or 'italic small-caps 400 normal 32px / 1.2 fantasy'\]]
expected: FAIL
[Property font value 'lighter normal normal normal xx-small Menu' computes to ['normal normal 700 normal 9.6px/normal Menu' or 'normal normal 700 normal 9.6px / normal Menu'\]]
expected: FAIL
[Property font value 'italic small-caps condensed normal medium/normal fantasy' computes to ['italic small-caps 400 condensed 16px/normal fantasy' or 'italic small-caps 400 condensed 16px / normal fantasy'\]]
expected: FAIL
[Property font value '100 normal small-caps condensed larger/calc(120% + 1.2em) cursive' computes to ['normal small-caps 100 condensed 48px/115.2px cursive' or 'normal small-caps 100 condensed 48px / 115.2px cursive'\]]
expected: FAIL
[Property font value 'small-caps semi-expanded italic bold medium/normal Menu' computes to ['italic small-caps 700 semi-expanded 16px/normal Menu' or 'italic small-caps 700 semi-expanded 16px / normal Menu'\]]
expected: FAIL
[Property font value 'lighter normal small-caps italic xx-large/1.2 sans-serif' computes to ['italic small-caps 700 normal 32px/1.2 sans-serif' or 'italic small-caps 700 normal 32px / 1.2 sans-serif'\]]
expected: FAIL
[Property font value 'extra-condensed italic lighter small-caps 20%/1.2 "Non-Generic Example Family Name"' computes to ['italic small-caps 700 extra-condensed 8px/1.2 "Non-Generic Example Family Name"' or 'italic small-caps 700 extra-condensed 8px / 1.2 "Non-Generic Example Family Name"'\]]
expected: FAIL
[Property font value 'ultra-condensed italic bolder normal 10px/normal Menu' computes to ['italic normal 900 ultra-condensed 10px/normal Menu' or 'italic normal 900 ultra-condensed 10px / normal Menu'\]]
expected: FAIL
[Property font value 'extra-condensed lighter normal small-caps 20%/1.2 sans-serif' computes to ['normal small-caps 700 extra-condensed 8px/1.2 sans-serif' or 'normal small-caps 700 extra-condensed 8px / 1.2 sans-serif'\]]
expected: FAIL
[Property font value 'bold extra-condensed 20%/1.2 sans-serif' computes to ['normal normal 700 extra-condensed 8px/1.2 sans-serif' or 'normal normal 700 extra-condensed 8px / 1.2 sans-serif'\]]
expected: FAIL
[Property font value 'bolder normal small-caps normal medium/normal serif' computes to ['normal small-caps 900 normal 16px/normal serif' or 'normal small-caps 900 normal 16px / normal serif'\]]
expected: FAIL
[Property font value 'small-caps normal normal normal smaller cursive' computes to ['normal small-caps 400 normal 33.3333px/normal cursive' or 'normal small-caps 400 normal 33.3333px / normal cursive'\]]
expected: FAIL
[Property font value 'normal normal xx-large/1.2 cursive' computes to ['normal normal 400 normal 32px/1.2 cursive' or 'normal normal 400 normal 32px / 1.2 cursive'\]]
expected: FAIL
[Property font value 'normal italic normal 900 medium/normal Menu' computes to ['italic normal 900 normal 16px/normal Menu' or 'italic normal 900 normal 16px / normal Menu'\]]
expected: FAIL
[Property font value 'italic lighter small-caps expanded xx-large/1.2 Menu' computes to ['italic small-caps 700 expanded 32px/1.2 Menu' or 'italic small-caps 700 expanded 32px / 1.2 Menu'\]]
expected: FAIL
[Property font value 'italic small-caps xx-small sans-serif' computes to ['italic small-caps 400 normal 9.6px/normal sans-serif' or 'italic small-caps 400 normal 9.6px / normal sans-serif'\]]
expected: FAIL
[Property font value 'italic normal small-caps normal 10px/normal monospace' computes to ['italic small-caps 400 normal 10px/normal monospace' or 'italic small-caps 400 normal 10px / normal monospace'\]]
expected: FAIL
[Property font value 'italic 100 normal small-caps 20%/1.2 sans-serif' computes to ['italic small-caps 100 normal 8px/1.2 sans-serif' or 'italic small-caps 100 normal 8px / 1.2 sans-serif'\]]
expected: FAIL

View file

@ -23,3 +23,33 @@
[Property text-decoration value 'currentcolor' computes to 'none solid rgb(0, 0, 255)']
expected: FAIL
[Property text-decoration value 'line-through' computes to 'line-through rgb(0, 0, 255)']
expected: FAIL
[Property text-decoration value 'underline overline line-through red' computes to 'underline overline line-through rgb(255, 0, 0)']
expected: FAIL
[Property text-decoration value '10px' computes to 'rgb(0, 0, 255) 10px']
expected: FAIL
[Property text-decoration value 'auto' computes to 'rgb(0, 0, 255)']
expected: FAIL
[Property text-decoration value 'from-font' computes to 'rgb(0, 0, 255) from-font']
expected: FAIL
[Property text-decoration value 'none' computes to 'rgb(0, 0, 255)']
expected: FAIL
[Property text-decoration value 'underline red from-font' computes to 'underline rgb(255, 0, 0) from-font']
expected: FAIL
[Property text-decoration value 'currentcolor' computes to 'rgb(0, 0, 255)']
expected: FAIL
[Property text-decoration value 'solid' computes to 'rgb(0, 0, 255)']
expected: FAIL
[Property text-decoration value 'rgba(10, 20, 30, 0.4) dotted' computes to 'dotted rgba(10, 20, 30, 0.4)']
expected: FAIL

View file

@ -113,3 +113,6 @@
[Testing 'writing-mode'.]
expected: FAIL
[Testing 'text-decoration-style'.]
expected: FAIL

View file

@ -1,5 +1,5 @@
[elementsFromPoint-iframes.html]
expected: TIMEOUT
expected: CRASH
[elementsFromPoint on the root document for points in iframe elements]
expected: FAIL

View file

@ -0,0 +1,2 @@
[matchMedia-display-none-iframe.html]
expected: ERROR

View file

@ -2,3 +2,27 @@
[CSSOM - CSSStyleSheet interface]
expected: FAIL
[addRule with no argument adds "undefined" selector]
expected: FAIL
[removeRule on empty style sheet throws]
expected: FAIL
[cssRules and rules are the same object]
expected: FAIL
[addRule with index greater than length throws]
expected: FAIL
[addRule with #foo selectors]
expected: FAIL
[removeRule(1)]
expected: FAIL
[removeRule with no argument removes first rule]
expected: FAIL
[addRule with @media rule]
expected: FAIL

View file

@ -0,0 +1,2 @@
[contenttype_txt.html]
expected: CRASH

View file

@ -312,15 +312,6 @@
[<iframe>: separate response Content-Type: */* text/html]
expected: FAIL
[<iframe>: combined response Content-Type: */* text/html]
expected: FAIL
[<iframe>: combined response Content-Type: text/html */*]
expected: FAIL
[<iframe>: separate response Content-Type: text/html;x=" text/plain]
expected: FAIL
[<iframe>: separate response Content-Type: text/html;" \\" text/plain]
[<iframe>: separate response Content-Type: text/html;" text/plain]
expected: FAIL

View file

@ -56,6 +56,3 @@
[separate text/javascript x/x]
expected: FAIL
[separate text/javascript;charset=windows-1252 error text/javascript]
expected: FAIL

View file

@ -0,0 +1,4 @@
[navigation-unload-same-origin-fragment.html]
[Tests that a fragment navigation in the unload handler will not block the initial navigation]
expected: FAIL

View file

@ -0,0 +1,4 @@
[traverse_the_history_5.html]
[Multiple history traversals, last would be aborted]
expected: FAIL

View file

@ -1,7 +1,11 @@
[form-submission-algorithm.html]
expected: TIMEOUT
[If form's firing submission events is true, then return; 'submit' event]
expected: FAIL
[If form's firing submission events is true, then return; 'invalid' event]
expected: FAIL
[Cannot navigate (after constructing the entry list)]
expected: TIMEOUT

View file

@ -1,7 +0,0 @@
[toggleEvent.html]
[Calling open twice on 'details' fires only one toggle event]
expected: FAIL
[Setting open=true to opened 'details' element should not fire a toggle event at the 'details' element]
expected: FAIL

View file

@ -0,0 +1,2 @@
[transition_calc_implicit.html]
expected: TIMEOUT

View file

@ -328,7 +328,7 @@ jobs:
- template: tools/ci/azure/update_hosts.yml
- template: tools/ci/azure/update_manifest.yml
# --exclude is a workaround for https://github.com/web-platform-tests/wpt/issues/16229
- script: no_proxy='*' ./wpt run --no-manifest-update --no-restart-on-unexpected --no-fail-on-unexpected --this-chunk=$(System.JobPositionInPhase) --total-chunks=$(System.TotalJobsInPhase) --chunk-type hash --log-wptreport $(Build.ArtifactStagingDirectory)/wpt_report_$(System.JobPositionInPhase).json --log-wptscreenshot $(Build.ArtifactStagingDirectory)/wpt_screenshot_$(System.JobPositionInPhase).txt --log-tbpl - --log-tbpl-level info safari --exclude /inert/inert-retargeting.tentative.html --exclude /inert/inert-retargeting-iframe.tentative.html
- script: no_proxy='*' ./wpt run --no-manifest-update --no-restart-on-unexpected --no-fail-on-unexpected --this-chunk=$(System.JobPositionInPhase) --total-chunks=$(System.TotalJobsInPhase) --chunk-type hash --log-wptreport $(Build.ArtifactStagingDirectory)/wpt_report_$(System.JobPositionInPhase).json --log-wptscreenshot $(Build.ArtifactStagingDirectory)/wpt_screenshot_$(System.JobPositionInPhase).txt --log-tbpl - --log-tbpl-level info safari --exclude /inert/inert-retargeting.tentative.html --exclude /inert/inert-retargeting-iframe.tentative.html --exclude /web-share/share-sharePromise-internal-slot.https.html
displayName: 'Run tests'
- task: PublishBuildArtifacts@1
displayName: 'Publish results'
@ -361,7 +361,7 @@ jobs:
- template: tools/ci/azure/update_hosts.yml
- template: tools/ci/azure/update_manifest.yml
# --exclude is a workaround for https://github.com/web-platform-tests/wpt/issues/16229
- script: no_proxy='*' ./wpt run --no-manifest-update --no-restart-on-unexpected --no-fail-on-unexpected --this-chunk=$(System.JobPositionInPhase) --total-chunks=$(System.TotalJobsInPhase) --chunk-type hash --log-wptreport $(Build.ArtifactStagingDirectory)/wpt_report_$(System.JobPositionInPhase).json --log-wptscreenshot $(Build.ArtifactStagingDirectory)/wpt_screenshot_$(System.JobPositionInPhase).txt --log-tbpl - --log-tbpl-level info --channel preview safari --exclude /inert/inert-retargeting.tentative.html --exclude /inert/inert-retargeting-iframe.tentative.html --exclude /payment-request/
- script: no_proxy='*' ./wpt run --no-manifest-update --no-restart-on-unexpected --no-fail-on-unexpected --this-chunk=$(System.JobPositionInPhase) --total-chunks=$(System.TotalJobsInPhase) --chunk-type hash --log-wptreport $(Build.ArtifactStagingDirectory)/wpt_report_$(System.JobPositionInPhase).json --log-wptscreenshot $(Build.ArtifactStagingDirectory)/wpt_screenshot_$(System.JobPositionInPhase).txt --log-tbpl - --log-tbpl-level info --channel preview safari --exclude /inert/inert-retargeting.tentative.html --exclude /inert/inert-retargeting-iframe.tentative.html --exclude /payment-request/ --exclude /web-share/share-sharePromise-internal-slot.https.html
displayName: 'Run tests'
- task: PublishBuildArtifacts@1
displayName: 'Publish results'

View file

@ -2,9 +2,9 @@ on: pull_request
name: Synchronize the Pull Request Preview
jobs:
update-pr-preview:
runs-on: ubuntu-latest
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@v1.0.0
- uses: actions/checkout@v1
with:
ref: refs/heads/master
fetch-depth: 1

View file

@ -1,10 +1,15 @@
on: push
on:
push:
branches:
- master
name: Build & Publish Documentation Website
jobs:
website-build-and-publish:
runs-on: ubuntu-latest
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@master
- uses: actions/checkout@v1
with:
fetch-depth: 1
- name: website-build-and-publish
uses: ./tools/docker/documentation
env:

View file

@ -1,10 +1,15 @@
on: push
on:
push:
branches:
- master
name: Build & Release Manifest
jobs:
manifest-build-and-tag:
runs-on: ubuntu-latest
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@master
- uses: actions/checkout@v1
with:
fetch-depth: 1
- name: manifest-build-and-tag
uses: ./tools/docker/github
env:

View file

@ -76,8 +76,6 @@ tasks:
public/results:
path: /home/test/artifacts
type: directory
env:
TASK_EVENT: "${event_str}"
command:
- /bin/bash
- --login
@ -106,6 +104,9 @@ tasks:
--test-type=${chunk[0]}
--this-chunk=${chunk[1]}
--total-chunks=${chunk[2]};
extra:
github_event: "${event_str}"
- $if: tasks_for == "github-pull-request"
# PR tasks that run the tests in various configurations
then:
@ -168,8 +169,6 @@ tasks:
public/results:
path: /home/test/artifacts
type: directory
env:
TASK_EVENT: "${event_str}"
# Fetch the GitHub-provided merge commit (rather than the pull
# request branch) so that the tasks simulate the behavior of the
# submitted patch after it is merged. Using the merge commit also
@ -199,6 +198,9 @@ tasks:
--
--channel=${browser.channel}
${operation.extra_args};
extra:
github_event: "${event_str}"
- $map:
# This is the main point to define new CI checks other than stability checks
- name: lint
@ -334,8 +336,6 @@ tasks:
public/results:
path: /home/test/artifacts
type: directory
env:
TASK_EVENT: "${event_str}"
command:
- /bin/bash
- --login
@ -347,3 +347,5 @@ tasks:
${checkout_ref};
cd ~/web-platform-tests;
${operation.script};
extra:
github_event: "${event_str}"

View file

@ -0,0 +1,49 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>Tests Stale While Revalidate is not executed for fetch API</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/utils.js"></script>
<script>
function wait25ms(test) {
return new Promise(resolve => {
test.step_timeout(() => {
resolve();
}, 25);
});
}
promise_test(async (test) => {
var request_token = token();
var client_hint_headers = [
"device-memory",
"dpr",
"width",
"viewport-width",
"rtt",
"downlink",
"ect",
"sec-ch-lang",
"sec-ch-ua",
"sec-ch-ua-arch",
"sec-ch-ua-platform",
"sec-ch-ua-model",
];
const response = await fetch(`resources/stale-echo-client-hints.py?token=` + request_token);
const response2 = await fetch(`resources/stale-echo-client-hints.py?token=` + request_token);
assert_equals(response.headers.get('Unique-Id'), response2.headers.get('Unique-Id'));
while(true) {
const revalidation_check = await fetch(`resources/stale-echo-client-hints.py?query&token=` + request_token);
if (revalidation_check.headers.get('Count') == '2') {
client_hint_headers.forEach(header => {
assert_equals(revalidation_check.headers.get(header+"-recieved"), revalidation_check.headers.get(header+"-previous"));
});
break;
}
await wait25ms(test);
}
}, 'Same headers sent for revalidation request');
</script>

View file

@ -0,0 +1 @@
Accept-CH: dpr,device-memory,viewport-width,rtt,downlink,ect,lang,ua,arch,platform,model

View file

@ -0,0 +1,60 @@
import random
import string
def id_token():
letters = string.ascii_lowercase
return ''.join(random.choice(letters) for i in range(20))
def main(request, response):
client_hint_headers = [
"device-memory",
"dpr",
"width",
"viewport-width",
"rtt",
"downlink",
"ect",
"sec-ch-lang",
"sec-ch-ua",
"sec-ch-ua-arch",
"sec-ch-ua-platform",
"sec-ch-ua-model",
]
client_hints_curr = {i:request.headers.get(i) for i in client_hint_headers}
token = request.GET.first("token", None)
is_query = request.GET.first("query", None) is not None
with request.server.stash.lock:
stash = request.server.stash.take(token)
if stash != None:
(value, client_hints_prev) = stash
count = int(value)
else:
count = 0
client_hints_prev = {}
if is_query:
if count < 2:
request.server.stash.put(token, (count, client_hints_curr))
else:
count = count + 1
request.server.stash.put(token, (count, client_hints_curr))
for header in client_hint_headers:
if client_hints_curr[header] is not None:
response.headers.set(header+"-recieved", client_hints_curr[header])
if (header in client_hints_prev) and (client_hints_prev[header] is not None):
response.headers.set(header+"-previous", client_hints_prev[header])
if is_query:
headers = [("Count", count)]
content = ""
return 200, headers, content
else:
unique_id = id_token()
headers = [("Content-Type", "text/html"),
("Cache-Control", "private, max-age=0, stale-while-revalidate=60"),
("Unique-Id", unique_id)]
content = "report('{}')".format(unique_id)
return 200, headers, content

View file

@ -857,11 +857,11 @@ const subresourceMap = {
path: "/common/security-features/subresource/audio.py",
invoker: requestViaAudio,
},
"beacon-request": {
"beacon": {
path: "/common/security-features/subresource/empty.py",
invoker: requestViaSendBeacon,
},
"fetch-request": {
"fetch": {
path: "/common/security-features/subresource/xhr.py",
invoker: requestViaFetch,
},
@ -901,45 +901,40 @@ const subresourceMap = {
path: "/common/security-features/subresource/video.py",
invoker: requestViaVideo,
},
"xhr-request": {
"xhr": {
path: "/common/security-features/subresource/xhr.py",
invoker: requestViaXhr,
},
"worker-request": {
"worker-classic": {
path: "/common/security-features/subresource/worker.py",
invoker: url => requestViaDedicatedWorker(url),
},
// TODO: Merge "module-worker" and "module-worker-top-level".
"module-worker": {
"worker-module": {
path: "/common/security-features/subresource/worker.py",
invoker: url => requestViaDedicatedWorker(url, {type: "module"}),
},
"module-worker-top-level": {
path: "/common/security-features/subresource/worker.py",
invoker: url => requestViaDedicatedWorker(url, {type: "module"}),
},
"module-data-worker-import": {
"worker-import-data": {
path: "/common/security-features/subresource/worker.py",
invoker: url =>
requestViaDedicatedWorker(workerUrlThatImports(url), {type: "module"}),
},
"shared-worker": {
"sharedworker-classic": {
path: "/common/security-features/subresource/shared-worker.py",
invoker: requestViaSharedWorker,
},
"websocket-request": {
"websocket": {
path: "/stash_responder",
invoker: requestViaWebSocket,
},
};
for (const workletType of ['animation', 'audio', 'layout', 'paint']) {
subresourceMap[`worklet-${workletType}-top-level`] = {
subresourceMap[`worklet-${workletType}`] = {
path: "/common/security-features/subresource/worker.py",
invoker: url => requestViaWorklet(workletType, url)
};
subresourceMap[`worklet-${workletType}-data-import`] = {
subresourceMap[`worklet-${workletType}-import-data`] = {
path: "/common/security-features/subresource/worker.py",
invoker: url =>
requestViaWorklet(workletType, workerUrlThatImports(url))
@ -956,6 +951,70 @@ for (const workletType of ['animation', 'audio', 'layout', 'paint']) {
/common/security-features/subresource/subresource.py for valid values.
*/
/**
Construct subresource (and related) origin.
@param {string} originType
@returns {object} the origin of the subresource.
*/
function getSubresourceOrigin(originType) {
const httpProtocol = "http";
const httpsProtocol = "https";
const wsProtocol = "ws";
const wssProtocol = "wss";
const sameOriginHost = "{{host}}";
const crossOriginHost = "{{domains[www1]}}";
// These values can evaluate to either empty strings or a ":port" string.
const httpPort = getNormalizedPort(parseInt("{{ports[http][0]}}", 10));
const httpsRawPort = parseInt("{{ports[https][0]}}", 10);
const httpsPort = getNormalizedPort(httpsRawPort);
const wsPort = getNormalizedPort(parseInt("{{ports[ws][0]}}", 10));
const wssRawPort = parseInt("{{ports[wss][0]}}", 10);
const wssPort = getNormalizedPort(wssRawPort);
/**
@typedef OriginType
@type {string}
Represents the origin of the subresource request URL.
The keys of `originMap` below are the valid values.
Note that there can be redirects from the specified origin
(see RedirectionType), and thus the origin of the subresource
response URL might be different from what is specified by OriginType.
*/
const originMap = {
"same-https": httpsProtocol + "://" + sameOriginHost + httpsPort,
"same-http": httpProtocol + "://" + sameOriginHost + httpPort,
"cross-https": httpsProtocol + "://" + crossOriginHost + httpsPort,
"cross-http": httpProtocol + "://" + crossOriginHost + httpPort,
"same-wss": wssProtocol + "://" + sameOriginHost + wssPort,
"same-ws": wsProtocol + "://" + sameOriginHost + wsPort,
"cross-wss": wssProtocol + "://" + crossOriginHost + wssPort,
"cross-ws": wsProtocol + "://" + crossOriginHost + wsPort,
// The following origin types are used for upgrade-insecure-requests tests:
// These rely on some unintuitive cleverness due to WPT's test setup:
// 'Upgrade-Insecure-Requests' does not upgrade the port number,
// so we use URLs in the form `http://[domain]:[https-port]`,
// which will be upgraded to `https://[domain]:[https-port]`.
// If the upgrade fails, the load will fail, as we don't serve HTTP over
// the secure port.
"same-http-downgrade":
httpProtocol + "://" + sameOriginHost + ":" + httpsRawPort,
"cross-http-downgrade":
httpProtocol + "://" + crossOriginHost + ":" + httpsRawPort,
"same-ws-downgrade":
wsProtocol + "://" + sameOriginHost + ":" + wssRawPort,
"cross-ws-downgrade":
wsProtocol + "://" + crossOriginHost + ":" + wssRawPort,
};
return originMap[originType];
}
/**
Construct subresource (and related) URLs.

View file

@ -32,9 +32,14 @@ def __get_swapped_origin_netloc(netloc, subdomain_prefix = "www1."):
# current request URL `request.url`, except for:
# - When `swap_scheme` or `swap_origin` is True, its scheme/origin is changed
# to the other one. (http <-> https, ws <-> wss, etc.)
# - For `downgrade`, we redirect to a URL that would be successfully loaded
# if and only if upgrade-insecure-request is applied.
# - `query_parameter_to_remove` parameter is removed from query part.
# Its default is "redirection" to avoid redirect loops.
def create_url(request, swap_scheme = False, swap_origin = False,
def create_url(request,
swap_scheme=False,
swap_origin=False,
downgrade=False,
query_parameter_to_remove="redirection"):
parsed = urlparse.urlsplit(request.url)
destination_netloc = parsed.netloc
@ -46,6 +51,24 @@ def create_url(request, swap_scheme = False, swap_origin = False,
port = request.server.config["ports"][scheme][0]
destination_netloc = ":".join([hostname, str(port)])
if downgrade:
# These rely on some unintuitive cleverness due to WPT's test setup:
# 'Upgrade-Insecure-Requests' does not upgrade the port number,
# so we use URLs in the form `http://[domain]:[https-port]`,
# which will be upgraded to `https://[domain]:[https-port]`.
# If the upgrade fails, the load will fail, as we don't serve HTTP over
# the secure port.
if parsed.scheme == "https":
scheme = "http"
elif parsed.scheme == "wss":
scheme = "ws"
else:
raise ValueError("Downgrade redirection: Invalid scheme '%s'" %
parsed.scheme)
hostname = parsed.netloc.split(':')[0]
port = request.server.config["ports"][parsed.scheme][0]
destination_netloc = ":".join([hostname, str(port)])
if swap_origin:
destination_netloc = __get_swapped_origin_netloc(destination_netloc)
@ -71,13 +94,15 @@ def preprocess_redirection(request, response):
if redirection == "no-redirect":
return False
elif redirection == "keep-scheme-redirect":
elif redirection == "keep-scheme":
redirect_url = create_url(request, swap_scheme=False)
elif redirection == "swap-scheme-redirect":
elif redirection == "swap-scheme":
redirect_url = create_url(request, swap_scheme=True)
elif redirection == "keep-origin-redirect":
elif redirection == "downgrade":
redirect_url = create_url(request, downgrade=True)
elif redirection == "keep-origin":
redirect_url = create_url(request, swap_origin=False)
elif redirection == "swap-origin-redirect":
elif redirection == "swap-origin":
redirect_url = create_url(request, swap_origin=True)
else:
raise ValueError("Invalid redirection type '%s'" % redirection)

View file

@ -205,15 +205,20 @@ def validate(spec_json, details):
test_expansion_schema, 'source_context_list',
spec_json['source_context_list_schema'].keys())
# Should be consistent with `preprocess_redirection` in
# `/common/security-features/subresource/subresource.py`.
assert_atom_or_list_items_from(test_expansion_schema, 'redirection', [
'no-redirect', 'keep-origin', 'swap-origin', 'keep-scheme',
'swap-scheme'
'swap-scheme', 'downgrade'
])
for subresource in leaf_values(test_expansion_schema['subresource']):
assert subresource in valid_subresource_names, "Invalid subresource %s" % subresource
# Should be consistent with getSubresourceOrigin() in
# `/common/security-features/resources/common.sub.js`.
assert_atom_or_list_items_from(test_expansion_schema, 'origin', [
'same-http', 'same-https', 'same-ws', 'same-wss', 'cross-http',
'cross-https', 'cross-ws', 'cross-wss'
'cross-https', 'cross-ws', 'cross-wss', 'same-http-downgrade',
'cross-http-downgrade', 'same-ws-downgrade', 'cross-ws-downgrade'
])
# Validate excluded tests.

View file

@ -0,0 +1,34 @@
<!DOCTYPE html>
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style>
.container {
margin: 30px 0;
color: orange;
background-color: blue;
line-height: 10px;
font-size: 30px;
font-family: Ahem;
}
.lh20 { line-height: 20px; }
.lh30 { line-height: 30px; }
.up5 { position: relative; top: -5px; }
.up10 { position: relative; top: -10px; }
.down5 { position: relative; top: 5px; }
.down10 { position: relative; top: 10px; }
</style>
<body>
<div class="container">
<span>XX</span>
<span>XX</span>
<span>XX</span>
</div>
<div class="container lh30">
<span class="up10">XX</span>
<span>XX</span>
<span class="down10">XX</span>
</div>
<div class="container"><span>XX</span></div>
<div class="container"><span>XX</span></div>
<div class="container lh20"><span class="up5">XX</span></div>
<div class="container lh20"><span class="down5">XX</span></div>
</body>

View file

@ -0,0 +1,37 @@
<!DOCTYPE html>
<title>Test vertical-align: top and bottom do not affect the line height</title>
<link rel="match" href="vertical-align-negative-leading-001-ref.html">
<link rel="help" href="https://drafts.csswg.org/css2/visudet.html#propdef-vertical-align">
<link rel="author" href="mailto:kojii@chromium.org">
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style>
.container {
margin: 30px 0;
color: orange;
background-color: blue;
line-height: 10px;
font-size: 30px;
font-family: Ahem;
}
span { background: purple; }
.top { vertical-align: top; }
.bottom { vertical-align: bottom; }
.text-top { vertical-align: text-top; }
.text-bottom { vertical-align: text-bottom; }
</style>
<body>
<div class="container">
<span class="top">XX</span>
<span>XX</span>
<span class="bottom">XX</span>
</div>
<div class="container">
<span class="text-top">XX</span>
<span>XX</span>
<span class="text-bottom">XX</span>
</div>
<div class="container"><span class="top">XX</span></div>
<div class="container"><span class="bottom">XX</span></div>
<div class="container"><span class="text-top">XX</span></div>
<div class="container"><span class="text-bottom">XX</span></div>
</body>

View file

@ -0,0 +1,87 @@
<!DOCTYPE html>
<link rel="help" href="https://drafts.csswg.org/css2/visudet.html#propdef-vertical-align" />
<link rel="author" href="mailto:kojii@chromium.org">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style>
section.test {
display: inline-block;
font-size: 20px;
line-height: 1.5;
font-family: Arial;
font-family: Ahem;
}
section.test > div {
background: blue;
margin-bottom: 1em;
}
.filler {
display: inline-block;
background: cyan;
height: 3em;
width: 1em;
}
.target {
display: inline-block;
background: orange;
width: 1em;
height: 1em;
}
div.top, section.top .target { vertical-align: top; }
div.text-top, section.text-top .target { vertical-align: text-top; }
div.text-bottom, section.text-bottom .target { vertical-align: text-bottom; }
div.bottom, section.bottom .target { vertical-align: bottom; }
.test .fail {
outline: red solid 5px;
}
</style>
<body>
<section class="test top">
<div><div class="filler"></div><div class="target" data-y="0"></div></div>
<div><div class="filler top"></div><div class="target" data-y="0"></div></div>
<div><div class="filler text-top"></div><div class="target" data-y="0"></div></div>
<div><div class="filler bottom"></div><div class="target" data-y="0"></div></div>
<div><div class="filler text-bottom"></div><div class="target" data-y="0"></div></div>
</section>
<section class="test text-top">
<div><div class="filler"></div><div class="target" data-y="44"></div></div>
<div><div class="filler top"></div><div class="target" data-y="5"></div></div>
<div><div class="filler text-top"></div><div class="target" data-y="5"></div></div>
<div><div class="filler bottom"></div><div class="target" data-y="35"></div></div>
<div><div class="filler text-bottom"></div><div class="target" data-y="40"></div></div>
</section>
<section class="test text-bottom">
<div><div class="filler"></div><div class="target" data-y="44"></div></div>
<div><div class="filler top"></div><div class="target" data-y="5"></div></div>
<div><div class="filler text-top"></div><div class="target" data-y="5"></div></div>
<div><div class="filler bottom"></div><div class="target" data-y="35"></div></div>
<div><div class="filler text-bottom"></div><div class="target" data-y="40"></div></div>
</section>
<section class="test bottom">
<div><div class="filler"></div><div class="target" data-y="49"></div></div>
<div><div class="filler top"></div><div class="target" data-y="40"></div></div>
<div><div class="filler text-top"></div><div class="target" data-y="45"></div></div>
<div><div class="filler bottom"></div><div class="target" data-y="40"></div></div>
<div><div class="filler text-bottom"></div><div class="target" data-y="45"></div></div>
</section>
<script>
setup({explicit_done: true});
document.fonts.ready.then(()=> {
for (let target of document.getElementsByClassName('target')) {
let container = target.parentElement;
let filler = container.firstElementChild;
let section = container.parentElement;
let pass = false;
test(() => {
let y = target.offsetTop - container.offsetTop;
assert_approx_equals(y, target.dataset.y, 0);
pass = true;
}, `${section.className.substr(5)}+${filler.className.substr(7)}`);
if (!pass)
container.classList.add('fail');
}
done();
});
</script>
</body>

View file

@ -0,0 +1,50 @@
<!DOCTYPE html>
<title>CSS Test: Static positions and line wrapping</title>
<link rel="author" title="Koji Ishii" href="mailto:kojii@chromium.org">
<link rel="help" href="https://drafts.csswg.org/css2/visudet.html#static-position">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/check-layout-th.js"></script>
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style>
.tests, .no-tests {
margin-bottom: 1em;
font-family: Ahem;
font-size: 10px;
line-height: 1;
}
.tests > div, .no-tests > div {
position: relative;
width: 10ch;
border: 1px solid blue;
}
.abs {
position: absolute;
color: orange;
}
</style>
<body>
<section class="tests">
<div>12345<span class="abs" data-offset-x="50" data-offset-y="0">span</span>54321</div>
<div>123456<span class="abs" data-offset-x="60" data-offset-y="0">span</span>654321</div>
<div>12345<span class="abs" data-offset-x="50" data-offset-y="0">span</span> 54321</div>
<div>12345&nbsp;<span class="abs" data-offset-x="60" data-offset-y="0">span</span> 54321</div>
<div>12345&nbsp;<span class="abs" data-offset-x="60" data-offset-y="0">span</span>&nbsp;54321</div>
</section>
<section class="tests">
<!-- offsetTop is interoperable but offsetLeft is not due to white space collapsing. -->
<div>12345 <span class="abs" data-offset-y="0">span</span> 54321</div>
</section>
<section class="no-tests">
<!-- These tests are not interoperable. -->
<div>12345 <span class="abs">span</span>54321</div>
<div>12345 <span class="abs">span</span>&nbsp;54321</div>
<div>123456789012&nbsp;<span class="abs">span</span>&nbsp;54321</div>
<div>123456789012&nbsp;<span class="abs">span</span>&nbsp;543210987654321</div>
</section>
<script>
document.fonts.ready.then(()=> {
checkLayout('.tests .abs');
});
</script>
</body>

View file

@ -45,18 +45,20 @@ test_interpolation({
{at: 1.25, expect: '90px 90px, 90px 90px, 90px 90px, 90px 90px'},
]);
// background-position's initial value is 0% 0%, and calcs involving percentages
// are never resolved by the calc spec (even when the percentage is 0%).
test_interpolation({
property: 'background-position',
from: 'initial',
to: '80px 80px, 80px 80px, 80px 80px, 80px 80px',
}, [
{at: -0.25, expect: '-20px -20px, -20px -20px, -20px -20px, -20px -20px'},
{at: 0, expect: ' 0% 0% , 0% 0% , 0% 0% , 0% 0% '}, // TODO(alancutter): Should these be 0px?
{at: 0.25, expect: ' 20px 20px, 20px 20px, 20px 20px, 20px 20px'},
{at: 0.5, expect: ' 40px 40px, 40px 40px, 40px 40px, 40px 40px'},
{at: 0.75, expect: ' 60px 60px, 60px 60px, 60px 60px, 60px 60px'},
{at: 1, expect: ' 80px 80px, 80px 80px, 80px 80px, 80px 80px'},
{at: 1.25, expect: '100px 100px, 100px 100px, 100px 100px, 100px 100px'},
{at: -0.25, expect: 'calc(0% - 20px) calc(0% - 20px), calc(0% - 20px) calc(0% - 20px), calc(0% - 20px) calc(0% - 20px), calc(0% - 20px) calc(0% - 20px)'},
{at: 0, expect: '0% 0%, 0% 0%, 0% 0%, 0% 0%'},
{at: 0.25, expect: 'calc(0% + 20px) calc(0% + 20px), calc(0% + 20px) calc(0% + 20px), calc(0% + 20px) calc(0% + 20px), calc(0% + 20px) calc(0% + 20px)'},
{at: 0.5, expect: 'calc(0% + 40px) calc(0% + 40px), calc(0% + 40px) calc(0% + 40px), calc(0% + 40px) calc(0% + 40px), calc(0% + 40px) calc(0% + 40px)'},
{at: 0.75, expect: 'calc(0% + 60px) calc(0% + 60px), calc(0% + 60px) calc(0% + 60px), calc(0% + 60px) calc(0% + 60px), calc(0% + 60px) calc(0% + 60px)'},
{at: 1, expect: 'calc(0% + 80px) calc(0% + 80px), calc(0% + 80px) calc(0% + 80px), calc(0% + 80px) calc(0% + 80px), calc(0% + 80px) calc(0% + 80px)'},
{at: 1.25, expect: 'calc(0% + 100px) calc(0% + 100px), calc(0% + 100px) calc(0% + 100px), calc(0% + 100px) calc(0% + 100px), calc(0% + 100px) calc(0% + 100px)'},
]);
test_interpolation({
@ -73,18 +75,19 @@ test_interpolation({
{at: 1.25, expect: '85px 85px, 85px 85px, 85px 85px, 85px 85px'},
]);
// background-position is not inherited, so 'unset' is equivalent to initial.
test_interpolation({
property: 'background-position',
from: 'unset',
to: '80px 80px, 80px 80px, 80px 80px, 80px 80px',
}, [
{at: -0.25, expect: '-20px -20px, -20px -20px, -20px -20px, -20px -20px'},
{at: -0.25, expect: 'calc(0% - 20px) calc(0% - 20px), calc(0% - 20px) calc(0% - 20px), calc(0% - 20px) calc(0% - 20px), calc(0% - 20px) calc(0% - 20px)'},
{at: 0, expect: '0% 0%, 0% 0%, 0% 0%, 0% 0%'},
{at: 0.25, expect: ' 20px 20px, 20px 20px, 20px 20px, 20px 20px'},
{at: 0.5, expect: ' 40px 40px, 40px 40px, 40px 40px, 40px 40px'},
{at: 0.75, expect: ' 60px 60px, 60px 60px, 60px 60px, 60px 60px'},
{at: 1, expect: ' 80px 80px, 80px 80px, 80px 80px, 80px 80px'},
{at: 1.25, expect: '100px 100px, 100px 100px, 100px 100px, 100px 100px'},
{at: 0.25, expect: 'calc(0% + 20px) calc(0% + 20px), calc(0% + 20px) calc(0% + 20px), calc(0% + 20px) calc(0% + 20px), calc(0% + 20px) calc(0% + 20px)'},
{at: 0.5, expect: 'calc(0% + 40px) calc(0% + 40px), calc(0% + 40px) calc(0% + 40px), calc(0% + 40px) calc(0% + 40px), calc(0% + 40px) calc(0% + 40px)'},
{at: 0.75, expect: 'calc(0% + 60px) calc(0% + 60px), calc(0% + 60px) calc(0% + 60px), calc(0% + 60px) calc(0% + 60px), calc(0% + 60px) calc(0% + 60px)'},
{at: 1, expect: 'calc(0% + 80px) calc(0% + 80px), calc(0% + 80px) calc(0% + 80px), calc(0% + 80px) calc(0% + 80px), calc(0% + 80px) calc(0% + 80px)'},
{at: 1.25, expect: 'calc(0% + 100px) calc(0% + 100px), calc(0% + 100px) calc(0% + 100px), calc(0% + 100px) calc(0% + 100px), calc(0% + 100px) calc(0% + 100px)'},
]);
// Test equal number of position values as background images.

View file

@ -12,7 +12,11 @@
</head>
<body>
<script>
// <bg-layer> does not allow a <color>.
test_invalid_value("background", "red, green");
// A `/ <bg-size>` is only allowed directly after a <bg-position>.
test_invalid_value("background", "black 0 url(https://example.invalid/) / cover");
</script>
</body>
</html>

View file

@ -0,0 +1,37 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Backgrounds and Borders Module Level 3: getComputedStyle().borderRadius</title>
<link rel="help" href="https://drafts.csswg.org/css-backgrounds/#border-radius">
<meta name="assert" content="Computed value has computed length-percentage values.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/computed-testcommon.js"></script>
<style>
#target {
font-size: 40px;
}
</style>
</head>
<body>
<div id="target"></div>
<script>
test_computed_value("border-radius", "1px");
test_computed_value("border-radius", "1px 2% 3px 4%");
test_computed_value("border-radius", "5em / 1px 2% 3px 4%", "200px / 1px 2% 3px 4%");
test_computed_value("border-radius", "1px 2% 3px 4% / 5em", "1px 2% 3px 4% / 200px");
test_computed_value("border-radius", "1px 1px 1px 2% / 1px 2% 1px 2%", "1px 1px 1px 2% / 1px 2%");
test_computed_value("border-radius", "1px 1px 1px 1px / 1px 1px 2% 1px", "1px / 1px 1px 2%");
test_computed_value("border-radius", "1px 1px 2% 2%");
test_computed_value("border-radius", "1px 2% 1px 1px");
test_computed_value("border-radius", "1px 2% 2% 2% / 1px 2% 3px 2%", "1px 2% 2% / 1px 2% 3px");
test_computed_value("border-top-left-radius", "calc(-0.5em + 10px)", "0px");
test_computed_value("border-top-right-radius", "20%");
test_computed_value("border-bottom-right-radius", "calc(0.5em + 10px) 40%", "30px 40%");
test_computed_value("border-bottom-left-radius", "50% 60px");
</script>
</body>
</html>

View file

@ -3,7 +3,6 @@
<head>
<meta charset="utf-8">
<title>CSS Backgrounds and Borders Module Level 3: parsing border-radius with invalid values</title>
<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
<link rel="help" href="https://drafts.csswg.org/css-backgrounds/#border-radius">
<meta name="assert" content="border-radius supports only the grammar '<length-percentage>{1,4} [ / <length-percentage>{1,4} ]?'.">
<script src="/resources/testharness.js"></script>
@ -12,12 +11,14 @@
</head>
<body>
<script>
test_invalid_value("border-radius", "auto");
test_invalid_value("border-radius", "none");
test_invalid_value("border-radius", "1px 2px 3px 4px 5px");
test_invalid_value("border-radius", "-1px");
test_invalid_value("border-radius", "1px -2px");
test_invalid_value("border-radius", "1em /");
test_invalid_value("border-radius", "1px / 2px / 3px");
test_invalid_value("border-radius", "4 / 5");
test_invalid_value("border-radius", "5em 1px 5em 2% 5em 3px 5em 4%");
test_invalid_value("border-radius", "1px 5em 2% 5em 3px 5em 4% 5em");

View file

@ -3,7 +3,6 @@
<head>
<meta charset="utf-8">
<title>CSS Backgrounds and Borders Module Level 3: parsing border-radius with valid values</title>
<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
<link rel="help" href="https://drafts.csswg.org/css-backgrounds/#border-radius">
<meta name="assert" content="border-radius supports the full grammar '<length-percentage>{1,4} [ / <length-percentage>{1,4} ]?'.">
<script src="/resources/testharness.js"></script>
@ -14,8 +13,14 @@
<script>
test_valid_value("border-radius", "1px");
test_valid_value("border-radius", "1px 2% 3px 4%");
test_valid_value("border-radius", "5em / 1px 2% 3px 4%"); // Blink and Webkit fail by serializing as "5em 1px 5em 2% 5em 3px 5em 4%"
test_valid_value("border-radius", "1px 2% 3px 4% / 5em"); // Blink and Webkit fail by serializing as "1px 5em 2% 5em 3px 5em 4% 5em"
test_valid_value("border-radius", "5em / 1px 2% 3px 4%");
test_valid_value("border-radius", "1px 2% 3px 4% / 5em");
test_valid_value("border-radius", "1px 1px 1px 2% / 1px 2% 1px 2%", "1px 1px 1px 2% / 1px 2%");
test_valid_value("border-radius", "1px 1px 1px 1px / 1px 1px 2% 1px", "1px / 1px 1px 2%");
test_valid_value("border-radius", "1px 1px 2% 2%");
test_valid_value("border-radius", "1px 2% 1px 1px");
test_valid_value("border-radius", "1px 2% 2% 2% / 1px 2% 3px 2%", "1px 2% 2% / 1px 2% 3px");
test_valid_value("border-top-left-radius", "10px");
test_valid_value("border-top-right-radius", "20%");

View file

@ -1,4 +1,5 @@
spec: https://drafts.csswg.org/css-conditional/
suggested_reviewers:
- arkhi
- dbaron
- frivoal

View file

@ -0,0 +1,32 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>CSS Conditional Test: Disjunction token `or` should not immediately precede its following opening paren.</title>
<link rel="author" title="Fabien Basmaison" href="https://arkhi.org/">
<link rel="help" href="https://www.w3.org/TR/css3-conditional/#at-supports">
<link rel="match" href="at-supports-001-ref.html">
<meta name="flags" content="invalid">
<meta name="assert" content="This tests that the `or` token requires at least one whitespace on its right hand. A string followed immediately by an opening paren is reserved for the functional notation syntax.">
<style>
div {
background-color: green;
height: 100px;
width: 100px;
}
@supports ( ( background-color: red ) or( background-color: green ) ) {
div { background-color: red; }
}
</style>
</head>
<body>
<p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
<div></div>
</body>
</html>

View file

@ -0,0 +1,261 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Fonts Module Level 4: getComputedStyle().font</title>
<link rel="help" href="https://drafts.csswg.org/css-fonts-4/#font-prop">
<meta name="assert" content="font computed value round-trips.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/computed-testcommon.js"></script>
<style>
#container {
font-weight: 800;
font-size: 40px;
}
</style>
</head>
<body>
<div id="container">
<div id="target"></div>
</div>
<script>
'use strict';
const initial_style = 'normal';
const initial_variant = 'normal';
const initial_weight = 'normal';
const initial_stretch = 'normal';
const initial_line_height = 'normal';
// Firefox and Edge 18 serialize these as supplied.
// Blink and Safari have implementation-dependent or platform-dependent serializations.
function test_system_font(keyword) {
test(() => {
const target = document.getElementById('target');
const previousValue = 'italic xx-large/0px fantasy';
target.style.font = previousValue;
target.style.font = keyword;
const readValue = getComputedStyle(target).font;
assert_not_equals(readValue, '', 'font should be set');
assert_not_equals(readValue, previousValue, 'font should be updated');
target.style.font = previousValue;
target.style.font = readValue;
assert_equals(getComputedStyle(target).font, readValue, "serialization should round-trip");
}, keyword + ' should be a supported system font.');
}
test_system_font('caption');
test_system_font('icon');
test_system_font('menu');
test_system_font('message-box');
test_system_font('small-caption');
test_system_font('status-bar');
// a value other than normal
const generate_style = () => 'italic';
// value other than normal
const generate_variant = () => 'small-caps';
// values other than normal
const generate_weight = (() => {
const alternatives = [
'bold',
'bolder',
'lighter',
'100',
'900'
];
let counter = 0;
return () => alternatives[counter++ % alternatives.length];
})();
const compute_weight = (() => {
const cache = {}
return (weight) => {
if (!(weight in cache)) {
const weight_reference = document.createElement('div');
document.getElementById('container').appendChild(weight_reference);
weight_reference.style.fontWeight = weight;
cache[weight] = getComputedStyle(weight_reference).fontWeight;
weight_reference.remove();
}
return cache[weight];
}
})();
// values other than normal
const generate_stretch = (() => {
const alternatives = [
'ultra-condensed',
'extra-condensed',
'condensed',
'semi-condensed',
'semi-expanded',
'expanded',
'extra-expanded',
'ultra-expanded'
];
let counter = 0;
return () => alternatives[counter++ % alternatives.length];
})();
const generate_size = (() => {
const alternatives = [
// <absolute-size>
'xx-small',
'medium',
'xx-large',
// <relative-size>
'larger',
'smaller',
// <length-percentage>
'10px',
'20%',
'calc(30% - 40px)',
];
let counter = 0;
return () => alternatives[counter++ % alternatives.length];
})();
const generate_line_height = (() => {
const alternatives = [
null,
'normal',
'1.2',
'calc(120% + 1.2em)'
];
let counter = 0;
return () => alternatives[counter++ % alternatives.length];
})();
const generate_family = (() => {
const alternatives = [
'serif',
'sans-serif',
'cursive',
'fantasy',
'monospace',
'Menu',
'"Non-Generic Example Family Name"'
];
let counter = 0;
return () => alternatives[counter++ % alternatives.length];
})();
function test_specific(prefix) {
const reference = document.createElement('div');
document.getElementById('container').appendChild(reference);
let parts = [];
let canonical = [];
let style = null;
let variant = null;
let weight = null;
let stretch = null;
for (let entry of prefix) {
if (entry === 'style') {
style = generate_style();
parts.push(style);
} else if (entry === 'variant') {
variant = generate_variant();
parts.push(variant);
} else if (entry === 'weight') {
weight = generate_weight();
parts.push(weight);
} else if (entry === 'stretch') {
stretch = generate_stretch();
parts.push(stretch);
} else {
// normal
parts.push('normal');
}
}
if (style) {
canonical.push(style);
reference.style.fontStyle = style;
} else {
canonical.push(initial_style);
}
if (variant) {
canonical.push(variant);
reference.style.fontVariant = style;
} else {
canonical.push(initial_variant);
}
if (weight) {
canonical.push(compute_weight(weight));
reference.style.fontWeight = style;
} else {
canonical.push(compute_weight(initial_weight));
}
if (stretch) {
canonical.push(stretch);
reference.style.fontStretch = style;
} else {
canonical.push(initial_stretch);
}
const size = generate_size();
reference.style.fontSize = size;
const line_height = generate_line_height();
if (line_height) {
parts.push(size + '/' + line_height);
reference.style.lineHeight = line_height;
} else {
parts.push(size);
}
const family = generate_family();
parts.push(family);
reference.style.fontFamily = family;
canonical.push(getComputedStyle(reference).fontSize + '/' + getComputedStyle(reference).lineHeight);
canonical.push(family);
reference.remove();
// Implementations differ on adjacent space when serializing '/'
// https://github.com/w3c/csswg-drafts/issues/4282
const expected = canonical.join(' ');
test_computed_value('font', parts.join(' '), [expected, expected.replace('/', ' / ')]);
}
// Font style, variant, weight and stretch may appear in any order.
// Any or all may be omitted. Each accepts the keyword 'normal'.
// We generate every permutation of these four properties, treating
// the cases of a property value being omitted or being explicitly
// 'normal' as being distinct permutations from when the property
// has a value other than 'normal'.
function test_various(prefix) {
test_specific(prefix);
if (prefix.length === 4) {
// Font style, variant, weight and stretch may not appear
// more than once.
return;
}
const alternatives = [
'normal',
'style',
'variant',
'weight',
'stretch'
];
for (let alternative of alternatives) {
// Since this is called recursively, check prefix for existing
// alternatives, otherwise we may have two styles or two variants, etc.
if (alternative === 'normal' || !prefix.includes(alternative))
test_various(prefix.concat(alternative));
}
}
test_various([]);
</script>
</body>
</html>

View file

@ -39,12 +39,14 @@
document.fonts.ready.then(() => {
item1.setAttribute("data-offset-x", "50");
item2.setAttribute("data-offset-x", "325");
checkLayout('#grid');
checkLayout('#grid', false);
item2.style.fontSize = "30px";
item1.setAttribute("data-offset-x", "50");
item2.setAttribute("data-offset-x", "275");
checkLayout('#grid');
checkLayout('#grid', false);
done();
});
</script>

View file

@ -38,12 +38,14 @@
document.fonts.ready.then(() => {
item1.setAttribute("data-offset-x", "80");
item2.setAttribute("data-offset-x", "340");
checkLayout('#grid');
checkLayout('#grid', false);
grid.style.fontSize = "25px";
item1.setAttribute("data-offset-x", "50");
item2.setAttribute("data-offset-x", "325");
checkLayout('#grid');
checkLayout('#grid', false);
done();
});
</script>

View file

@ -0,0 +1,44 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Inheritance replaces existing value of counter properties</title>
<link rel="help" href="https://drafts.csswg.org/css-lists/#property-index">
<meta name="assert" content="Inheritance replaces existing value of counter properties.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
#container {
counter-reset: first 1;
counter-increment: second 2;
counter-set: third 3;
}
.target {
counter-reset: fourth 4;
counter-increment: fifth 5;
counter-set: sixth 6;
}
</style>
</head>
<body>
<div id="container">
<div id="target"></div>
</div>
<script>
'use strict';
const container = document.getElementById('container');
// 'counter-set' can be added.
for (let property of ['counter-reset', 'counter-increment']) {
test(() => {
const target = document.createElement('div');
target.classList += 'target';
container.appendChild(target);
target.style[property] = 'inherit';
assert_equals(getComputedStyle(target)[property], getComputedStyle(container)[property]);
}, 'Inheritance of ' + property + ' replaces existing value');
}
</script>
</body>
</html>

View file

@ -29,7 +29,7 @@
</style>
<article>
<div class="container" style="border-bottom: none; height: 200px;">
<div class="container" style="border-bottom: none; height: 200px; margin-top: 1em;">
<div class="block">block1</div>
</div>
</article>

View file

@ -18,6 +18,7 @@
height: 250px;
background-color: pink;
border: 20px solid purple;
margin-top: 1em;
}
div.block {
width: 100px;

View file

@ -0,0 +1,37 @@
<!DOCTYPE html>
<html class="reftest-wait">
<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/">
<link rel="match" href="parse-input-arguments-ref.html">
<style>
.container {
width: 100px;
height: 100px;
}
#canvas-geometry {
--foo:100;
background-image: paint(geometry);
}
</style>
<script src="/common/reftest-wait.js"></script>
<script src="/common/worklet-reftest.js"></script>
<body>
<div id="canvas-geometry" class="container"></div>
<script id="code" type="text/worklet">
registerPaint('geometry', class {
static get inputProperties() { return ['--foo']; }
paint(ctx, geom, properties) {
let fooValue = parseFloat(properties.get('--foo').toString());
ctx.strokeStyle = 'green';
ctx.lineWidth = 4;
ctx.strokeRect(0, 0, fooValue, fooValue);
}
});
</script>
<script>
importWorkletAndTerminateTestAfterAsyncPaint(CSS.paintWorklet, document.getElementById('code').textContent);
</script>
</body>
</html>

View file

@ -0,0 +1,20 @@
<!DOCTYPE html>
<meta charset="utf-8">
<html lang="en">
<head>
<title>initial-letter width test</title>
<style>
span {
position: absolute;
color: transparent;
}
#control {
background-color: green;
}
</style>
</head>
<body>
<p>There should be no red</p>
<span id="control">Test.</span>
</body>
</html>

View file

@ -0,0 +1,38 @@
<!DOCTYPE html>
<meta charset="utf-8">
<html lang="en">
<head>
<title>initial-letter width test</title>
<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=362880">
<link rel="help" href="https://drafts.csswg.org/css-pseudo-4/#first-letter-styling">
<link rel="match" href="first-letter-width-ref.html">
<meta name="assert" content="The width of an element with first-letter styling should render correctly.">
<style>
div {
position: relative;
}
span {
position: absolute;
color: transparent;
}
#control {
background-color: green;
}
#test {
background-color: red;
line-height: 1;
top: 1px;
}
#test::first-letter {
text-transform: uppercase;
}
</style>
</head>
<body>
<p>There should be no red</p>
<div>
<span id="test">Test</span>
<span id="control">Test.</span>
</div>
</body>
</html>

View file

@ -0,0 +1,14 @@
<!DOCTYPE html>
<link rel="help" href="http://crbug.com/1001083">
<link rel="match" href="../reference/ref-filled-green-100px-square-only.html">
<p>Test passes if there is a filled green square.</p>
<table style="width: 100px; height: 100px; background: green;">
<tr>
<td style="height: 20px;"></td>
</tr>
<tr>
<td style="height: 100%;">
<img style="width: 100%; height: 100%; visibility: hidden;" />
</td>
</tr>
</table>

View file

@ -3,7 +3,7 @@
<head>
<meta charset="utf-8">
<title>CSS Text Decoration Test: getComputedStyle().textDecoration</title>
<link rel="help" href="https://drafts.csswg.org/css-text-decor-4/#text-decoration-line-property">
<link rel="help" href="https://drafts.csswg.org/css-text-decor-3/#text-decoration-property">
<meta name="assert" content="text-decoration computed value is as specified.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
@ -19,14 +19,20 @@
<script>
'use strict';
const currentColor = "rgb(0, 0, 255)";
test_computed_value("text-decoration", "none", "none solid " + currentColor);
test_computed_value("text-decoration", "line-through", "line-through solid " + currentColor);
test_computed_value("text-decoration", "solid", "none solid " + currentColor);
test_computed_value("text-decoration", "currentcolor", "none solid " + currentColor);
test_computed_value("text-decoration", "none", currentColor);
test_computed_value("text-decoration", "line-through", "line-through " + currentColor);
test_computed_value("text-decoration", "solid", currentColor);
test_computed_value("text-decoration", "currentcolor", currentColor);
test_computed_value("text-decoration", "double overline underline", "underline overline double " + currentColor);
test_computed_value("text-decoration", "underline overline line-through red", "underline overline line-through solid rgb(255, 0, 0)");
test_computed_value("text-decoration", "rgba(10, 20, 30, 0.4) dotted", "none dotted rgba(10, 20, 30, 0.4)");
test_computed_value("text-decoration", "underline overline line-through red", "underline overline line-through rgb(255, 0, 0)");
test_computed_value("text-decoration", "rgba(10, 20, 30, 0.4) dotted", "dotted rgba(10, 20, 30, 0.4)");
test_computed_value("text-decoration", "underline dashed rgb(0, 255, 0)");
// Add text-decoration-thickness in [css-text-decor-4].
test_computed_value("text-decoration", "auto", currentColor);
test_computed_value("text-decoration", "from-font", currentColor + " from-font");
test_computed_value("text-decoration", "10px", currentColor + " 10px");
test_computed_value("text-decoration", "underline red from-font", "underline rgb(255, 0, 0) from-font");
</script>

View file

@ -8,10 +8,11 @@
<script>
test(() => {
const style = getComputedStyle(document.querySelector('div'));
// Chrome serializes as "underline solid rgb(0, 0, 0)" while Edge, Firefox an
// Safari use "underline", which Chrome used to do as well. The spec should
// probably require "underline":
// https://github.com/w3c/csswg-drafts/issues/1564
assert_equals(style.getPropertyValue("text-decoration"), "underline");
const currentColor = "rgb(0, 0, 0)"; // The default color value is black.
// The default computed value of text-decoration-color is depended on the
// current color value, and it is an rgb() value, instead of `currentcolor`.
// This is an ambiguous part in the spec, anyway.
assert_equals(style.getPropertyValue("text-decoration"),
"underline " + currentColor);
});
</script>

View file

@ -0,0 +1,40 @@
<!DOCTYPE html>
<title>CSS Text Test: A combination of `overflow-wrap: break-word` and `white-space` should not crash</title>
<link rel="help" href="https://crbug.com/1001359">
<link rel="author" title="Koji Ishii" href="mailto:kojii@chromium.org">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
.container {
font-family: sans-serif;
font-size: 14px;
width: 680px;
word-wrap: break-word;
}
spacer {
display: inline-block;
width: 620px;
}
pre-wrap {
white-space: pre-wrap;
}
nowrap {
white-space: nowrap;
}
inline-block {
display: inline-block;
}
</style>
<body>
<div class="container">
<spacer></spacer>
<nowrap><span><pre-wrap><inline-block></inline-block></pre-wrap></span>123456</nowrap>987654321
</div>
<script>
test(() => { });
</script>
</body>

View file

@ -1,33 +0,0 @@
<!doctype html>
<link rel="help" href="https://drafts.csswg.org/css-values-4/#comp-func">
<link rel="author" title="Xiaocheng Hu" href="mailto:xiaochengh@chromium.org">
<link rel="match" href="../reference/ref-filled-green-100px-square-only.html">
<title>Tests interpolation between CSS comparison functions</title>
<style>
@keyframes anim {
from {
width: min(50px, 30%);
height: min(75%, 160px);
}
to {
width: max(75%, 100px);
height: max(50px, 20%);
}
}
.test {
background-color: green;
animation: anim 2000000s linear;
animation-delay: -1000000s;
}
.container {
position: absolute;
width: 200px;
height: 200px;
}
</style>
<p>Test passes if there is a filled green square.</p>
<div class="container">
<div class="test"></div>
</div>

View file

@ -91,7 +91,8 @@
{ property: "stroke-opacity", valuesToTest:["0.221"], default: "1" },
{ property: "stroke-width", valuesToTest:["88%", "31px"], default: "1px" },
{ property: "text-anchor", valuesToTest:["start", "middle", "end"], default: "start" },
{ property: "text-decoration", valuesToTest:["none", "underline", "overline", "line-through"], default: "none" },
{ property: "text-decoration-line", valuesToTest:["none", "underline", "overline", "line-through"], default: "none" },
{ property: "text-decoration-style", valuesToTest:["solid", "double", "dotted", "dashed", "wavy"], default: "solid" },
{ property: "visibility", valuesToTest:["visible", "hidden", "collapse"], default: "visible" },
{ property: "word-spacing", valuesToTest:["31px"], default: "0px" },
{ property: "writing-mode", valuesToTest:["lr-tb", "rl-tb"], default: "lr-tb" },

View file

@ -4,25 +4,37 @@
<meta charset="utf-8">
<title>CSSOM - CSSStyleSheet interface</title>
<link rel="help" href="https://drafts.csswg.org/cssom/#the-cssstylesheet-interface">
<link rel="help" href="https://drafts.csswg.org/cssom/#legacy-css-style-sheet-members">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style id="my-stylesheet">
body { width: 50%; }
#foo { height: 100px; }
</style>
<style id="empty-stylesheet"></style>
<script>
test(function () {
var styleSheet = document.styleSheets[0];
var styleSheet, emptyStyleSheet;
setup(function() {
styleSheet = document.styleSheets[0];
styleSheet.cssRules[0].randomProperty = 1;
styleSheet.cssRules[1].randomProperty = 2;
emptyStyleSheet = document.styleSheets[1];
});
test(function() {
assert_equals(styleSheet, document.getElementById("my-stylesheet").sheet, "CSSStyleSheet and LinkStyle's sheet attribute");
assert_equals(styleSheet.cssRules.length, 2, "CSSStyleSheet cssRules attribute");
assert_equals(styleSheet.cssRules[0].cssText, "body { width: 50%; }", "CSSStyleSheet cssRules attribute");
assert_equals(styleSheet.cssRules[1].cssText, "#foo { height: 100px; }", "CSSStyleSheet cssRules attribute");
assert_equals(styleSheet.cssRules[2], undefined, "CSSStyleSheet cssRules attribute");
assert_equals(emptyStyleSheet, document.getElementById("empty-stylesheet").sheet, "CSSStyleSheet and LinkStyle's sheet attribute");
assert_equals(emptyStyleSheet.cssRules.length, 0, "CSSStyleSheet cssRules attribute");
}, "preconditions");
test(function() {
styleSheet.insertRule("#bar { margin: 10px; }", 1);
assert_equals(styleSheet.cssRules.length, 3, "CSSStyleSheet cssRules attribute after insertRule function");
assert_equals(styleSheet.cssRules[0].cssText, "body { width: 50%; }", "CSSStyleSheet cssRules attribute");
@ -30,7 +42,19 @@
assert_equals(styleSheet.cssRules[2].cssText, "#foo { height: 100px; }", "CSSStyleSheet cssRules attribute after insertRule function");
assert_equals(styleSheet.cssRules[0].randomProperty, 1, "[SameObject] cssRules attribute after insertRule function");
assert_equals(styleSheet.cssRules[2].randomProperty, 2, "[SameObject] cssRules attribute after insertRule function");
}, 'insertRule with #bar selector');
test(function() {
assert_throws(new TypeError, function() { styleSheet.insertRule() });
}, 'insertRule with no argument throws');
test(function() {
assert_throws("IndexSizeError", function() {
styleSheet.insertRule("#bar { margin: 10px; }", styleSheet.cssRules.length + 1)
});
}, 'insertRule with index greater than length throws');
test(function() {
styleSheet.deleteRule(1);
assert_equals(styleSheet.cssRules.length, 2, "CSSStyleSheet cssRules attribute after deleteRule function");
assert_equals(styleSheet.cssRules[0].cssText, "body { width: 50%; }", "CSSStyleSheet cssRules attribute after deleteRule function");
@ -38,19 +62,39 @@
assert_equals(styleSheet.cssRules[2], undefined, "CSSStyleSheet cssRules attribute after deleteRule function");
assert_equals(styleSheet.cssRules[0].randomProperty, 1, "[SameObject] cssRules attribute after deleteRule function");
assert_equals(styleSheet.cssRules[1].randomProperty, 2, "[SameObject] cssRules attribute after deleteRule function");
}, 'deleteRule(1)');
test(function() {
assert_throws(new TypeError, function() { styleSheet.deleteRule() });
}, 'deleteRule with no argument throws');
test(function() {
assert_throws("IndexSizeError", function() { emptyStyleSheet.deleteRule(0) });
}, 'deleteRule on empty style sheet throws');
test(function() {
styleSheet.removeRule();
assert_equals(styleSheet.cssRules.length, 1, "CSSStyleSheet cssRules attribute after removeRule function");
assert_equals(styleSheet.cssRules[0].cssText, "#foo { height: 100px; }", "CSSStyleSheet cssRules attribute after removeRule function");
}, 'removeRule with no argument removes first rule');
test(function() {
assert_throws("IndexSizeError", function() { emptyStyleSheet.removeRule(0) });
}, 'removeRule on empty style sheet throws');
test(function() {
assert_equals(styleSheet.addRule("@media all", "#foo { color: red }"), -1);
assert_equals(styleSheet.cssRules.length, 2, "CSSStyleSheet cssRules attribute after addRule function");
assert_true(styleSheet.cssRules[1] instanceof CSSMediaRule, "CSSStyleSheet addRule does some silly string concatenation");
}, 'addRule with @media rule');
test(function() {
styleSheet.removeRule(1);
assert_equals(styleSheet.cssRules.length, 1, "CSSStyleSheet cssRules attribute after removeRule function with index");
assert_equals(styleSheet.cssRules[0].cssText, "#foo { height: 100px; }", "CSSStyleSheet cssRules attribute after deleteRule function with index");
}, 'removeRule(1)');
test(function() {
assert_equals(styleSheet.addRule("#foo", "color: red"), -1);
assert_equals(styleSheet.cssRules.length, 2, "CSSStyleSheet cssRules attribute after addRule function with simple selector");
assert_equals(styleSheet.cssRules[1].cssText, "#foo { color: red; }", "CSSStyleSheet cssRules attribute after addRule function without index appends to the end");
@ -58,13 +102,31 @@
assert_equals(styleSheet.addRule("#foo", "color: blue", 0), -1);
assert_equals(styleSheet.cssRules.length, 3, "CSSStyleSheet cssRules attribute after addRule function with simple selector with index");
assert_equals(styleSheet.cssRules[0].cssText, "#foo { color: blue; }", "addRule function with index performs an insertion");
}, 'addRule with #foo selectors');
test(function() {
assert_equals(styleSheet.addRule(), -1);
assert_equals(styleSheet.cssRules.length, 4, "CSSStyleSheet cssRules attribute after addRule function without arguments");
assert_equals(styleSheet.cssRules[3].cssText, "undefined { }", "addRule arguments default to undefined");
}, 'addRule with no argument adds "undefined" selector');
assert_equals(styleSheet.cssRules, styleSheet.rules, "CSSStyleSheet.rules returns the same object as CSSStyleSheet.cssRules");
test(function() {
assert_throws("IndexSizeError", function() {
styleSheet.addRule("#foo", "color: red", styleSheet.cssRules.length + 1);
});
}, 'addRule with index greater than length throws');
test(function() {
assert_equals(styleSheet.cssRules, styleSheet.rules);
}, "cssRules and rules are the same object");
test(function() {
assert_equals(styleSheet.cssRules, styleSheet.cssRules);
}, "cssRules returns the same object twice");
test(function() {
assert_equals(styleSheet.rules, styleSheet.rules);
}, "rules returns the same object twice");
</script>
</head>
</html>

View file

@ -0,0 +1,37 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Motion Path Module Level 1: getComputedStyle().offsetAnchor</title>
<link rel="help" href="https://drafts.fxtf.org/motion-1/#offset-anchor-property">
<meta name="assert" content="offset-anchor is 'auto' or a computed position.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/computed-testcommon.js"></script>
<style>
#target {
font-size: 40px;
}
</style>
</head>
<body>
<div id="target"></div>
<script>
test_computed_value("offset-anchor", "auto");
test_computed_value("offset-anchor", "left bottom", "0% 100%");
test_computed_value("offset-anchor", "center center", "50% 50%");
test_computed_value("offset-anchor", "right center", "100% 50%");
test_computed_value("offset-anchor", "center top", "50% 0%");
test_computed_value("offset-anchor", "center bottom", "50% 100%");
test_computed_value("offset-anchor", "calc(20% - 5em) center", "calc(20% - 200px) 50%");
test_computed_value("offset-anchor", "right 4em", "100% 160px");
test_computed_value("offset-anchor", "10px 20%");
test_computed_value("offset-anchor", "left -10px top -20%", "-10px -20%");
test_computed_value("offset-anchor", "right 10% bottom 20em", "90% calc(100% - 800px)");
test_computed_value("offset-anchor", "top 10px right -20%", "120% 10px");
test_computed_value("offset-anchor", "left 10% bottom 20em", "10% calc(100% - 800px)");
test_computed_value('offset-anchor', 'calc(10px - 0.5em) calc(10px + 0.5em)', '-10px 30px');
</script>
</body>
</html>

View file

@ -0,0 +1,29 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Motion Path Module Level 1: getComputedStyle().offsetDistance</title>
<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
<link rel="help" href="https://drafts.fxtf.org/motion-1/#offset-distance-property">
<meta name="assert" content="offset-distance is a computed '<length-percentage>'.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/computed-testcommon.js"></script>
<style>
#target {
font-size: 40px;
}
</style>
</head>
<body>
<div id="target"></div>
<script>
test_computed_value("offset-distance", "10px");
test_computed_value("offset-distance", "20%");
test_computed_value("offset-distance", "calc(40% - 30px)");
test_computed_value("offset-distance", "0", "0px");
test_computed_value('offset-distance', 'calc(10px - 0.5em)', '-10px');
test_computed_value('offset-distance', 'calc(10px + 0.5em)', '30px');
</script>
</body>
</html>

View file

@ -0,0 +1,35 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Motion Path Module Level 1: getComputedStyle().offsetPath</title>
<link rel="help" href="https://drafts.fxtf.org/motion-1/#offset-path-property">
<meta name="assert" content="offset-path has absolute path commands.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/computed-testcommon.js"></script>
</head>
<body>
<div id="target"></div>
<script>
test_computed_value("offset-path", "none");
test_computed_value("offset-path", "ray(0rad closest-side)", "ray(0deg closest-side)");
test_computed_value("offset-path", "ray(0.25turn closest-corner contain)", "ray(90deg closest-corner contain)");
test_computed_value("offset-path", "ray(200grad farthest-side)", "ray(180deg farthest-side)");
test_computed_value("offset-path", "ray(270deg farthest-corner contain)");
test_computed_value("offset-path", "ray(-720deg sides)");
test_computed_value("offset-path", "ray(calc(180deg - 45deg) farthest-side)", "ray(calc(135deg) farthest-side)");
test_computed_value("offset-path", 'path("m 20 0 h -100")', 'path("M 20 0 H -80")');
test_computed_value("offset-path", 'path("M 0 0 L 100 100 M 100 200 L 200 200 Z L 300 300 Z")');
test_computed_value("offset-path", 'path("m 10 20 q 30 60 40 50 q 100 70 90 80")', 'path("M 10 20 Q 40 80 50 70 Q 150 140 140 150")');
test_computed_value("offset-path", 'path("M 0 0 L 100 100 m 0 100 l 100 0 Z l 160 20 Z")', 'path("M 0 0 L 100 100 M 100 200 L 200 200 Z L 260 220 Z")');
test_computed_value("offset-path", 'path("m 10 20 l 20 30 Z l 50 60 Z m 70 80 l 90 60 Z t 70 120")', 'path("M 10 20 L 30 50 Z L 60 80 Z M 80 100 L 170 160 Z T 150 220")');
test_computed_value("offset-path", 'path("m 10 170 h 90 v 30 m 0 0 s 1 2 3 4 z c 9 8 7 6 5 4")', 'path("M 10 170 H 100 V 200 M 100 200 S 101 202 103 204 Z C 109 208 107 206 105 204")');
test_computed_value("offset-path", 'path("m 10 20 a 10 20 30 1 0 40 50 a 110 120 30 1 1 140 50")', 'path("M 10 20 A 10 20 30 1 0 50 70 A 110 120 30 1 1 190 120")');
// url, shape and geometry-box paths are not yet supported by implementations.
</script>
</body>
</html>

View file

@ -0,0 +1,37 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Motion Path Module Level 1: getComputedStyle().offsetPosition</title>
<link rel="help" href="https://drafts.fxtf.org/motion-1/#offset-position-property">
<meta name="assert" content="offset-position is 'auto' or a computed position.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/computed-testcommon.js"></script>
<style>
#target {
font-size: 40px;
}
</style>
</head>
<body>
<div id="target"></div>
<script>
test_computed_value("offset-position", "auto");
test_computed_value("offset-position", "left bottom", "0% 100%");
test_computed_value("offset-position", "center center", "50% 50%");
test_computed_value("offset-position", "right center", "100% 50%");
test_computed_value("offset-position", "center top", "50% 0%");
test_computed_value("offset-position", "center bottom", "50% 100%");
test_computed_value("offset-position", "calc(5em + 20%) center", "calc(20% + 200px) 50%");
test_computed_value("offset-position", "right 3em", "100% 120px");
test_computed_value("offset-position", "10px 20%");
test_computed_value("offset-position", "left -10px top -20%", "-10px -20%");
test_computed_value("offset-position", "right 10% bottom 5em", "90% calc(100% - 200px)");
test_computed_value("offset-position", "top 10px right -20%", "120% 10px");
test_computed_value("offset-position", "left 10% bottom 2em", "10% calc(100% - 80px)");
test_computed_value('offset-position', 'calc(10px - 0.5em) calc(10px + 0.5em)', '-10px 30px');
</script>
</body>
</html>

View file

@ -40,7 +40,7 @@
}
</style>
<body class="container">
<main class="container">
<div class="longbox"></div> <!-- Saturate the margin space -->
<div class="shape"></div>
<div class="box"></div>
@ -58,5 +58,5 @@
<div class="box"></div>
<div class="box"></div>
<div class="longbox"></div> <!-- Saturate the margin space -->
</body>
</main>
</html>

View file

@ -44,7 +44,7 @@
}
</style>
<body class="container">
<main class="container">
<div class="shape"></div>
<div class="shape"></div>
<div class="longbox"></div> <!-- Saturate the margin space -->
@ -62,5 +62,5 @@
<div class="box"></div>
<div class="box"></div>
<div class="longbox"></div> <!-- Saturate the margin space -->
</body>
</main>
</html>

View file

@ -41,7 +41,7 @@
}
</style>
<body class="container">
<main class="container">
<div class="longbox"></div> <!-- Saturate the margin space -->
<div class="shape"></div>
<div class="box"></div>
@ -59,5 +59,5 @@
<div class="box"></div>
<div class="box"></div>
<div class="longbox"></div> <!-- Saturate the margin space -->
</body>
</main>
</html>

View file

@ -45,7 +45,7 @@
}
</style>
<body class="container">
<main class="container">
<div class="shape"></div>
<div class="shape"></div>
<div class="longbox"></div> <!-- Saturate the margin space -->
@ -63,5 +63,5 @@
<div class="box"></div>
<div class="box"></div>
<div class="longbox"></div> <!-- Saturate the margin space -->
</body>
</main>
</html>

View file

@ -41,7 +41,7 @@
}
</style>
<body class="container">
<main class="container">
<div class="shape"></div>
<div class="longbox" style="top: 0; left: 0;"></div> <!-- Saturate the margin space -->
<div class="box" style="height: 24px; top: 20px; left: 128px;"></div> <!-- Box at corner -->
@ -49,5 +49,5 @@
<div class="box" style="height: 36px; top: 80px; left: 140px;"></div>
<div class="box" style="height: 24px; top: 116px; left: 128px;"></div> <!-- Box at corner -->
<div class="longbox" style="top: 140px; left: 0;"></div> <!-- Saturate the margin space -->
</body>
</main>
</html>

View file

@ -44,7 +44,7 @@
}
</style>
<body class="container">
<main class="container">
<div class="shape"></div>
<div class="longbox"></div> <!-- Saturate the margin space -->
<div class="box" style="height: 24px;"></div> <!-- Box at corner -->
@ -52,5 +52,5 @@
<div class="box" style="height: 36px;"></div>
<div class="box" style="height: 24px;"></div> <!-- Box at corner -->
<div class="longbox"></div> <!-- Saturate the margin space -->
</body>
</main>
</html>

View file

@ -33,11 +33,11 @@
}
</style>
<body class="container">
<main class="container">
<div class="shape"></div>
<div class="box" style="height: 24px; top: 0px; left: 108px;"></div> <!-- Box at corner -->
<div class="box" style="height: 36px; top: 24px; left: 120px;"></div>
<div class="box" style="height: 36px; top: 60px; left: 120px;"></div>
<div class="box" style="height: 24px; top: 96px; left: 108px;"></div> <!-- Box at corner -->
</body>
</main>
</html>

View file

@ -37,11 +37,11 @@
}
</style>
<body class="container">
<main class="container">
<div class="shape"></div>
<div class="box" style="height: 24px;"></div> <!-- Box at corner -->
<div class="box" style="height: 36px;"></div>
<div class="box" style="height: 36px;"></div>
<div class="box" style="height: 24px;"></div> <!-- Box at corner -->
</body>
</main>
</html>

View file

@ -42,7 +42,7 @@
}
</style>
<body class="container">
<main class="container">
<div class="shape"></div>
<div class="longbox" style="top: 0; right: 0;"></div> <!-- Saturate the margin space -->
<div class="box" style="height: 24px; top: 20px; right: 128px;"></div> <!-- Box at corner -->
@ -50,5 +50,5 @@
<div class="box" style="height: 36px; top: 80px; right: 140px;"></div>
<div class="box" style="height: 24px; top: 116px; right: 128px;"></div> <!-- Box at corner -->
<div class="longbox" style="top: 140px; right: 0;"></div> <!-- Saturate the margin space -->
</body>
</main>
</html>

View file

@ -45,7 +45,7 @@
}
</style>
<body class="container">
<main class="container">
<div class="shape"></div>
<div class="longbox"></div> <!-- Saturate the margin space -->
<div class="box" style="height: 24px;"></div> <!-- Box at corner -->
@ -53,5 +53,5 @@
<div class="box" style="height: 36px;"></div>
<div class="box" style="height: 24px;"></div> <!-- Box at corner -->
<div class="longbox"></div> <!-- Saturate the margin space -->
</body>
</main>
</html>

View file

@ -34,11 +34,11 @@
}
</style>
<body class="container">
<main class="container">
<div class="shape"></div>
<div class="box" style="height: 24px; top: 0px; right: 108px;"></div> <!-- Box at corner -->
<div class="box" style="height: 36px; top: 24px; right: 120px;"></div>
<div class="box" style="height: 36px; top: 60px; right: 120px;"></div>
<div class="box" style="height: 24px; top: 96px; right: 108px;"></div> <!-- Box at corner -->
</body>
</main>
</html>

View file

@ -38,11 +38,11 @@
}
</style>
<body class="container">
<main class="container">
<div class="shape"></div>
<div class="box" style="height: 24px;"></div> <!-- Box at corner -->
<div class="box" style="height: 36px;"></div>
<div class="box" style="height: 36px;"></div>
<div class="box" style="height: 24px;"></div> <!-- Box at corner -->
</body>
</main>
</html>

View file

@ -42,7 +42,7 @@
}
</style>
<body class="container">
<main class="container">
<div class="shape"></div>
<div class="longbox" style="inset-block-start: 0; inset-inline-start: 0;"></div> <!-- Saturate the margin space -->
<div class="box" style="block-size: 24px; inset-block-start: 20px; inset-inline-start: 128px;"></div> <!-- Box at corner -->
@ -50,5 +50,5 @@
<div class="box" style="block-size: 36px; inset-block-start: 80px; inset-inline-start: 140px;"></div>
<div class="box" style="block-size: 24px; inset-block-start: 116px; inset-inline-start: 140px;"></div> <!-- Box at corner -->
<div class="longbox" style="inset-block-start: 140px; inset-inline-start: 0;"></div> <!-- Saturate the margin space -->
</body>
</main>
</html>

View file

@ -45,7 +45,7 @@
}
</style>
<body class="container">
<main class="container">
<div class="shape"></div>
<div class="longbox"></div> <!-- Saturate the margin space -->
<div class="box" style="block-size: 24px;"></div> <!-- Box at corner -->
@ -53,5 +53,5 @@
<div class="box" style="block-size: 36px;"></div>
<div class="box" style="block-size: 24px;"></div> <!-- Box at corner -->
<div class="longbox"></div> <!-- Saturate the margin space -->
</body>
</main>
</html>

View file

@ -43,7 +43,7 @@
}
</style>
<body class="container">
<main class="container">
<div class="shape"></div>
<div class="longbox" style="inset-block-start: 0; inset-inline-start: 0;"></div> <!-- Saturate the margin space -->
<div class="box" style="block-size: 24px; inset-block-start: 20px; inset-inline-start: 128px;"></div> <!-- Box at corner -->
@ -51,5 +51,5 @@
<div class="box" style="block-size: 36px; inset-block-start: 80px; inset-inline-start: 140px;"></div>
<div class="box" style="block-size: 24px; inset-block-start: 116px; inset-inline-start: 140px;"></div> <!-- Box at corner -->
<div class="longbox" style="inset-block-start: 140px; inset-inline-start: 0;"></div> <!-- Saturate the margin space -->
</body>
</main>
</html>

View file

@ -46,7 +46,7 @@
}
</style>
<body class="container">
<main class="container">
<div class="shape"></div>
<div class="longbox"></div> <!-- Saturate the margin space -->
<div class="box" style="block-size: 24px;"></div> <!-- Box at corner -->
@ -54,5 +54,5 @@
<div class="box" style="block-size: 36px;"></div>
<div class="box" style="block-size: 24px;"></div> <!-- Box at corner -->
<div class="longbox"></div> <!-- Saturate the margin space -->
</body>
</main>
</html>

View file

@ -42,7 +42,7 @@
}
</style>
<body class="container">
<main class="container">
<div class="shape"></div>
<div class="longbox" style="inset-block-start: 0; inset-inline-start: 0;"></div> <!-- Saturate the margin space -->
<div class="box" style="block-size: 24px; inset-block-start: 20px; inset-inline-start: 140px;"></div> <!-- Box at corner -->
@ -50,5 +50,5 @@
<div class="box" style="block-size: 36px; inset-block-start: 80px; inset-inline-start: 140px;"></div>
<div class="box" style="block-size: 24px; inset-block-start: 116px; inset-inline-start: 132px;"></div> <!-- Box at corner -->
<div class="longbox" style="inset-block-start: 140px; inset-inline-start: 0;"></div> <!-- Saturate the margin space -->
</body>
</main>
</html>

View file

@ -45,7 +45,7 @@
}
</style>
<body class="container">
<main class="container">
<div class="shape"></div>
<div class="longbox"></div> <!-- Saturate the margin space -->
<div class="box" style="block-size: 24px;"></div> <!-- Box at corner -->
@ -53,5 +53,5 @@
<div class="box" style="block-size: 36px;"></div>
<div class="box" style="block-size: 24px;"></div> <!-- Box at corner -->
<div class="longbox"></div> <!-- Saturate the margin space -->
</body>
</main>
</html>

View file

@ -43,7 +43,7 @@
}
</style>
<body class="container">
<main class="container">
<div class="shape"></div>
<div class="longbox" style="inset-block-start: 0; inset-inline-start: 0;"></div> <!-- Saturate the margin space -->
<div class="box" style="block-size: 24px; inset-block-start: 20px; inset-inline-start: 140px;"></div> <!-- Box at corner -->
@ -51,5 +51,5 @@
<div class="box" style="block-size: 36px; inset-block-start: 80px; inset-inline-start: 140px;"></div>
<div class="box" style="block-size: 24px; inset-block-start: 116px; inset-inline-start: 132px;"></div> <!-- Box at corner -->
<div class="longbox" style="inset-block-start: 140px; inset-inline-start: 0;"></div> <!-- Saturate the margin space -->
</body>
</main>
</html>

View file

@ -46,7 +46,7 @@
}
</style>
<body class="container">
<main class="container">
<div class="shape"></div>
<div class="longbox"></div> <!-- Saturate the margin space -->
<div class="box" style="block-size: 24px;"></div> <!-- Box at corner -->
@ -54,5 +54,5 @@
<div class="box" style="block-size: 36px;"></div>
<div class="box" style="block-size: 24px;"></div> <!-- Box at corner -->
<div class="longbox"></div> <!-- Saturate the margin space -->
</body>
</main>
</html>

View file

@ -42,7 +42,7 @@
}
</style>
<body class="container">
<main class="container">
<div class="shape"></div>
<div class="longbox" style="inset-block-start: 0; inset-inline-start: 0;"></div> <!-- Saturate the margin space -->
<div class="box" style="block-size: 24px; inset-block-start: 20px; inset-inline-start: 132px;"></div> <!-- Box at corner -->
@ -50,5 +50,5 @@
<div class="box" style="block-size: 36px; inset-block-start: 80px; inset-inline-start: 140px;"></div>
<div class="box" style="block-size: 24px; inset-block-start: 116px; inset-inline-start: 140px;"></div> <!-- Box at corner -->
<div class="longbox" style="inset-block-start: 140px; inset-inline-start: 0;"></div> <!-- Saturate the margin space -->
</body>
</main>
</html>

View file

@ -45,7 +45,7 @@
}
</style>
<body class="container">
<main class="container">
<div class="shape"></div>
<div class="longbox"></div> <!-- Saturate the margin space -->
<div class="box" style="block-size: 24px;"></div> <!-- Box at corner -->
@ -53,5 +53,5 @@
<div class="box" style="block-size: 36px;"></div>
<div class="box" style="block-size: 24px;"></div> <!-- Box at corner -->
<div class="longbox"></div> <!-- Saturate the margin space -->
</body>
</main>
</html>

View file

@ -43,7 +43,7 @@
}
</style>
<body class="container">
<main class="container">
<div class="shape"></div>
<div class="longbox" style="inset-block-start: 0; inset-inline-start: 0;"></div> <!-- Saturate the margin space -->
<div class="box" style="block-size: 24px; inset-block-start: 20px; inset-inline-start: 132px;"></div> <!-- Box at corner -->
@ -51,5 +51,5 @@
<div class="box" style="block-size: 36px; inset-block-start: 80px; inset-inline-start: 140px;"></div>
<div class="box" style="block-size: 24px; inset-block-start: 116px; inset-inline-start: 140px;"></div> <!-- Box at corner -->
<div class="longbox" style="inset-block-start: 140px; inset-inline-start: 0;"></div> <!-- Saturate the margin space -->
</body>
</main>
</html>

View file

@ -46,7 +46,7 @@
}
</style>
<body class="container">
<main class="container">
<div class="shape"></div>
<div class="longbox"></div> <!-- Saturate the margin space -->
<div class="box" style="block-size: 24px;"></div> <!-- Box at corner -->
@ -54,5 +54,5 @@
<div class="box" style="block-size: 36px;"></div>
<div class="box" style="block-size: 24px;"></div> <!-- Box at corner -->
<div class="longbox"></div> <!-- Saturate the margin space -->
</body>
</main>
</html>

View file

@ -42,7 +42,7 @@
}
</style>
<body class="container">
<main class="container">
<div class="shape"></div>
<div class="longbox" style="inset-block-start: 0; inset-inline-start: 0;"></div> <!-- Saturate the margin space -->
<div class="box" style="block-size: 24px; inset-block-start: 20px; inset-inline-start: 140px;"></div> <!-- Box at corner -->
@ -50,5 +50,5 @@
<div class="box" style="block-size: 36px; inset-block-start: 80px; inset-inline-start: 140px;"></div>
<div class="box" style="block-size: 24px; inset-block-start: 116px; inset-inline-start: 132px;"></div> <!-- Box at corner -->
<div class="longbox" style="inset-block-start: 140px; inset-inline-start: 0;"></div> <!-- Saturate the margin space -->
</body>
</main>
</html>

View file

@ -45,7 +45,7 @@
}
</style>
<body class="container">
<main class="container">
<div class="shape"></div>
<div class="longbox"></div> <!-- Saturate the margin space -->
<div class="box" style="block-size: 24px;"></div> <!-- Box at corner -->
@ -53,5 +53,5 @@
<div class="box" style="block-size: 36px;"></div>
<div class="box" style="block-size: 24px;"></div> <!-- Box at corner -->
<div class="longbox"></div> <!-- Saturate the margin space -->
</body>
</main>
</html>

View file

@ -43,7 +43,7 @@
}
</style>
<body class="container">
<main class="container">
<div class="shape"></div>
<div class="longbox" style="inset-block-start: 0; inset-inline-start: 0;"></div> <!-- Saturate the margin space -->
<div class="box" style="block-size: 24px; inset-block-start: 20px; inset-inline-start: 140px;"></div> <!-- Box at corner -->
@ -51,5 +51,5 @@
<div class="box" style="block-size: 36px; inset-block-start: 80px; inset-inline-start: 140px;"></div>
<div class="box" style="block-size: 24px; inset-block-start: 116px; inset-inline-start: 132px;"></div> <!-- Box at corner -->
<div class="longbox" style="inset-block-start: 140px; inset-inline-start: 0;"></div> <!-- Saturate the margin space -->
</body>
</main>
</html>

View file

@ -46,7 +46,7 @@
}
</style>
<body class="container">
<main class="container">
<div class="shape"></div>
<div class="longbox"></div> <!-- Saturate the margin space -->
<div class="box" style="block-size: 24px;"></div> <!-- Box at corner -->
@ -54,5 +54,5 @@
<div class="box" style="block-size: 36px;"></div>
<div class="box" style="block-size: 24px;"></div> <!-- Box at corner -->
<div class="longbox"></div> <!-- Saturate the margin space -->
</body>
</main>
</html>

View file

@ -37,7 +37,7 @@
}
</style>
<body class="container">
<main class="container">
<div class="shape"></div>
<div class="shape"></div>
<div class="box" style="height: 36px; top: 0px; left: 60px;"></div>
@ -47,5 +47,5 @@
<div class="box" style="height: 36px; top: 120px; left: 60px;"></div>
<div class="box" style="height: 12px; top: 156px; left: 48px;"></div> <!-- Box at corner -->
<div class="box" style="height: 12px; top: 168px; left: 36px;"></div> <!-- Box at corner -->
</body>
</main>
</html>

View file

@ -40,7 +40,7 @@
}
</style>
<body class="container">
<main class="container">
<div class="shape"></div>
<div class="shape"></div>
<div class="box" style="height: 36px;"></div>
@ -50,5 +50,5 @@
<div class="box" style="height: 36px;"></div>
<div class="box" style="height: 12px;"></div> <!-- Box at corner -->
<div class="box" style="height: 12px;"></div> <!-- Box at corner -->
</body>
</main>
</html>

View file

@ -37,7 +37,7 @@
}
</style>
<body class="container">
<main class="container">
<div class="shape"></div>
<div class="shape"></div>
<div class="long box" style="height: 60px; top: 0px; left: 0px;"></div> <!-- Fill the space above the first float -->
@ -48,5 +48,5 @@
<div class="box" style="height: 36px; top: 180px; left: 120px;"></div>
<div class="box" style="height: 12px; top: 216px; left: 120px;"></div>
<div class="box" style="height: 12px; top: 228px; left: 120px;"></div>
</body>
</main>
</html>

View file

@ -40,7 +40,7 @@
}
</style>
<body class="container">
<main class="container">
<div class="shape"></div>
<div class="shape"></div>
<div class="long box" style="height: 60px;"></div> <!-- Fill the space above the first float -->
@ -51,5 +51,5 @@
<div class="box" style="height: 36px;"></div>
<div class="box" style="height: 12px;"></div>
<div class="box" style="height: 12px;"></div>
</body>
</main>
</html>

View file

@ -38,7 +38,7 @@
}
</style>
<body class="container">
<main class="container">
<div class="shape"></div>
<div class="shape"></div>
<div class="box" style="height: 36px; top: 0px; right: 60px;"></div>
@ -48,5 +48,5 @@
<div class="box" style="height: 36px; top: 120px; right: 60px;"></div>
<div class="box" style="height: 12px; top: 156px; right: 48px;"></div>
<div class="box" style="height: 12px; top: 168px; right: 36px;"></div>
</body>
</main>
</html>

View file

@ -41,7 +41,7 @@
}
</style>
<body class="container">
<main class="container">
<div class="shape"></div>
<div class="shape"></div>
<div class="box" style="height: 36px;"></div>
@ -51,5 +51,5 @@
<div class="box" style="height: 36px;"></div>
<div class="box" style="height: 12px;"></div>
<div class="box" style="height: 12px;"></div>
</body>
</main>
</html>

View file

@ -38,7 +38,7 @@
}
</style>
<body class="container">
<main class="container">
<div class="shape"></div>
<div class="shape"></div>
<div class="long box" style="height: 60px; top: 0px; right: 0px;"></div> <!-- Fill the space above the first float -->
@ -49,5 +49,5 @@
<div class="box" style="height: 36px; top: 180px; right: 120px;"></div>
<div class="box" style="height: 12px; top: 216px; right: 120px;"></div>
<div class="box" style="height: 12px; top: 228px; right: 120px;"></div>
</body>
</main>
</html>

View file

@ -41,7 +41,7 @@
}
</style>
<body class="container">
<main class="container">
<div class="shape"></div>
<div class="shape"></div>
<div class="long box" style="height: 60px;"></div> <!-- Fill the space above the first float -->
@ -52,5 +52,5 @@
<div class="box" style="height: 36px;"></div>
<div class="box" style="height: 12px;"></div>
<div class="box" style="height: 12px;"></div>
</body>
</main>
</html>

View file

@ -33,7 +33,7 @@
}
</style>
<body class="container">
<main class="container">
<div class="shape"></div>
<div class="box" style="height: 12px; top: 0px; left: 96px;"></div> <!-- Box at corner -->
<div class="box" style="height: 12px; top: 12px; left: 108px;"></div> <!-- Box at corner -->
@ -41,5 +41,5 @@
<div class="box" style="height: 36px; top: 60px; left: 120px;"></div>
<div class="box" style="height: 12px; top: 96px; left: 108px;"></div> <!-- Box at corner -->
<div class="box" style="height: 12px; top: 108px; left: 96px;"></div> <!-- Box at corner -->
</body>
</main>
</html>

View file

@ -36,7 +36,7 @@
}
</style>
<body class="container">
<main class="container">
<div class="shape"></div>
<div class="box" style="height: 12px;"></div> <!-- Box at corner -->
<div class="box" style="height: 12px;"></div> <!-- Box at corner -->
@ -44,5 +44,5 @@
<div class="box" style="height: 36px;"></div>
<div class="box" style="height: 12px;"></div> <!-- Box at corner -->
<div class="box" style="height: 12px;"></div> <!-- Box at corner -->
</body>
</main>
</html>

Some files were not shown because too many files have changed in this diff Show more