Update web-platform-tests to revision 2b758296541cf4f2209b8c2352cf6c7890c97be3

This commit is contained in:
WPT Sync Bot 2018-10-22 21:28:54 -04:00
parent 2304f02123
commit 835d593cd0
118 changed files with 3269 additions and 703 deletions

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,2 @@
[font-feature-resolution-001.html]
expected: FAIL

View file

@ -0,0 +1,31 @@
[list-interpolation.html]
[Animation between "scale(2) rotate(0deg) translate(100px)" and "rotate(720deg) scale(2) translate(200px)" at progress 0.25]
expected: FAIL
[Animation between "rotate(0deg) translate(100px)" and "rotate(720deg) scale(2) translate(200px)" at progress 0.25]
expected: FAIL
[Animation between "translateX(100px) scaleX(3) translate(500px) scale(2)" and "translateY(200px) scale(5) translateX(100px) scaleY(3)" at progress 0.25]
expected: FAIL
[Animation between "none" and "none" at progress 0.25]
expected: FAIL
[Animation between "translate(200px) rotate(720deg)" and "none" at progress 0.25]
expected: FAIL
[Animation between "translate(100px) rotate(720deg)" and "translate(200px)" at progress 0.25]
expected: FAIL
[Animation between "translate(100px)" and "translate(200px) rotate(720deg)" at progress 0.25]
expected: FAIL
[Animation between "scale(2) rotate(0deg)" and "rotate(720deg) scale(2) translate(200px)" at progress 0.25]
expected: FAIL
[Animation between "none" and "translate(200px) rotate(720deg)" at progress 0.25]
expected: FAIL
[Animation between "scale(2) rotate(360deg) translate(100px) matrix(1, 0, 0, 1, 100, 0) skew(0deg)" and "scale(3) rotate(1080deg) translate(200px) matrix(1, 0, 0, 1, 0, 200) skew(720deg)" at progress 0.25]
expected: FAIL

View file

@ -0,0 +1,2 @@
[dynamic-fixed-pos-cb-change.html]
expected: TIMEOUT

View file

@ -623,6 +623,459 @@
[border-bottom-width length(em) / events] [border-bottom-width length(em) / events]
expected: FAIL expected: FAIL
[visibility visibility(keyword) / values] [outline-width length(px) / values]
expected: FAIL
[border-left-width length(em) / values]
expected: FAIL
[border-bottom-width length(px) / values]
expected: FAIL
[border-top-width length(em) / values]
expected: FAIL
[line-height number(decimal) / values]
expected: FAIL
[word-spacing length(mm) / values]
expected: FAIL
[text-indent length(pc) / values]
expected: FAIL
[opacity number[0,1\](zero-to-one) / values]
expected: FAIL
[line-height number(integer) / values]
expected: FAIL
[outline-offset length(px) / values]
expected: FAIL
[font-size length(pt) / values]
expected: FAIL
[max-height length(px) / values]
expected: FAIL
[vertical-align length(in) / values]
expected: FAIL
[max-height percentage(%) / values]
expected: FAIL
[min-width length(px) / values]
expected: FAIL
[border-top-color color(rgba) / values]
expected: FAIL
[border-right-color color(rgba) / values]
expected: FAIL
[font-size length(ex) / values]
expected: FAIL
[min-height length(pc) / values]
expected: FAIL
[line-height length(px) / values]
expected: FAIL
[word-spacing length(px) / values]
expected: FAIL
[vertical-align percentage(%) / values]
expected: FAIL
[border-right-width length(pc) / values]
expected: FAIL
[line-height length(ex) / values]
expected: FAIL
[color color(rgba) / values]
expected: FAIL
[font-size length(in) / values]
expected: FAIL
[text-indent length(ex) / values]
expected: FAIL
[font-size length(em) / values]
expected: FAIL
[border-left-width length(mm) / values]
expected: FAIL
[vertical-align length(em) / values]
expected: FAIL
[text-indent length(px) / values]
expected: FAIL
[clip rectangle(rectangle) / values]
expected: FAIL
[word-spacing length(em) / values]
expected: FAIL
[border-right-width length(ex) / values]
expected: FAIL
[border-top-width length(cm) / values]
expected: FAIL
[max-width length(em) / values]
expected: FAIL
[font-size length(cm) / values]
expected: FAIL
[border-right-width length(cm) / values]
expected: FAIL
[outline-offset length(ex) / values]
expected: FAIL
[min-width length(cm) / values]
expected: FAIL
[min-height length(px) / values]
expected: FAIL
[min-width length(mm) / values]
expected: FAIL
[border-bottom-width length(in) / values]
expected: FAIL
[vertical-align length(pc) / values]
expected: FAIL
[vertical-align length(cm) / values]
expected: FAIL
[max-height length(ex) / values]
expected: FAIL
[vertical-align length(ex) / values]
expected: FAIL
[min-height percentage(%) / values]
expected: FAIL
[max-height length(pt) / values]
expected: FAIL
[outline-offset length(mm) / values]
expected: FAIL
[font-weight font-weight(keyword) / values]
expected: FAIL
[max-height length(mm) / values]
expected: FAIL
[outline-offset length(pt) / values]
expected: FAIL
[line-height length(mm) / values]
expected: FAIL
[line-height length(cm) / values]
expected: FAIL
[border-top-width length(mm) / values]
expected: FAIL
[letter-spacing length(in) / values]
expected: FAIL
[border-bottom-color color(rgba) / values]
expected: FAIL
[min-width percentage(%) / values]
expected: FAIL
[min-height length(cm) / values]
expected: FAIL
[letter-spacing length(mm) / values]
expected: FAIL
[font-size percentage(%) / values]
expected: FAIL
[letter-spacing length(cm) / values]
expected: FAIL
[vertical-align length(pt) / values]
expected: FAIL
[border-left-color color(rgba) / values]
expected: FAIL
[letter-spacing length(pc) / values]
expected: FAIL
[letter-spacing length(pt) / values]
expected: FAIL
[word-spacing length(ex) / values]
expected: FAIL
[line-height length(pt) / values]
expected: FAIL
[border-top-width length(px) / values]
expected: FAIL
[min-width length(pt) / values]
expected: FAIL
[border-bottom-width length(mm) / values]
expected: FAIL
[border-bottom-width length(cm) / values]
expected: FAIL
[min-width length(em) / values]
expected: FAIL
[min-height length(em) / values]
expected: FAIL
[max-width length(mm) / values]
expected: FAIL
[min-height length(ex) / values]
expected: FAIL
[max-width length(px) / values]
expected: FAIL
[text-indent length(mm) / values]
expected: FAIL
[font-size length(mm) / values]
expected: FAIL
[min-width length(pc) / values]
expected: FAIL
[letter-spacing length(em) / values]
expected: FAIL
[line-height length(em) / values]
expected: FAIL
[border-bottom-width length(pt) / values]
expected: FAIL
[word-spacing length(pc) / values]
expected: FAIL
[outline-offset length(in) / values]
expected: FAIL
[word-spacing length(in) / values]
expected: FAIL
[outline-width length(pt) / values]
expected: FAIL
[border-top-width length(pc) / values]
expected: FAIL
[border-left-width length(px) / values]
expected: FAIL
[font-size length(px) / values]
expected: FAIL
[border-left-width length(cm) / values]
expected: FAIL
[border-right-width length(px) / values]
expected: FAIL
[outline-width length(in) / values]
expected: FAIL
[word-spacing length(pt) / values]
expected: FAIL
[text-indent length(cm) / values]
expected: FAIL
[border-right-width length(mm) / values]
expected: FAIL
[max-width length(in) / values]
expected: FAIL
[outline-color color(rgba) / values]
expected: FAIL
[text-indent length(pt) / values]
expected: FAIL
[border-right-width length(pt) / values]
expected: FAIL
[border-left-width length(in) / values]
expected: FAIL
[text-shadow shadow(shadow) / values]
expected: FAIL
[max-height length(in) / values]
expected: FAIL
[line-height length(in) / values]
expected: FAIL
[border-bottom-width length(em) / values]
expected: FAIL
[outline-width length(ex) / values]
expected: FAIL
[font-size length(pc) / values]
expected: FAIL
[min-width length(in) / values]
expected: FAIL
[outline-width length(cm) / values]
expected: FAIL
[max-width percentage(%) / values]
expected: FAIL
[max-width length(ex) / values]
expected: FAIL
[letter-spacing length(ex) / values]
expected: FAIL
[border-left-width length(ex) / values]
expected: FAIL
[outline-width length(mm) / values]
expected: FAIL
[border-left-width length(pc) / values]
expected: FAIL
[outline-width length(pc) / values]
expected: FAIL
[word-spacing percentage(%) / values]
expected: FAIL
[font-weight font-weight(numeric) / values]
expected: FAIL
[vertical-align length(px) / values]
expected: FAIL
[letter-spacing length(px) / values]
expected: FAIL
[max-width length(pt) / values]
expected: FAIL
[line-height percentage(%) / values]
expected: FAIL
[text-indent length(in) / values]
expected: FAIL
[text-indent length(em) / values]
expected: FAIL
[border-top-width length(pt) / values]
expected: FAIL
[min-height length(mm) / values]
expected: FAIL
[max-height length(cm) / values]
expected: FAIL
[outline-width length(em) / values]
expected: FAIL
[border-right-width length(em) / values]
expected: FAIL
[max-height length(em) / values]
expected: FAIL
[max-width length(cm) / values]
expected: FAIL
[outline-offset length(em) / values]
expected: FAIL
[outline-offset length(cm) / values]
expected: FAIL
[border-top-width length(ex) / values]
expected: FAIL
[border-right-width length(in) / values]
expected: FAIL
[z-index integer(integer) / values]
expected: FAIL
[border-left-width length(pt) / values]
expected: FAIL
[vertical-align length(mm) / values]
expected: FAIL
[border-bottom-width length(pc) / values]
expected: FAIL
[text-indent percentage(%) / values]
expected: FAIL
[line-height length(pc) / values]
expected: FAIL
[border-top-width length(in) / values]
expected: FAIL
[border-bottom-width length(ex) / values]
expected: FAIL
[min-height length(in) / values]
expected: FAIL
[outline-offset length(pc) / values]
expected: FAIL
[max-height length(pc) / values]
expected: FAIL
[background-color color(rgba) / values]
expected: FAIL
[min-height length(pt) / values]
expected: FAIL
[word-spacing length(cm) / values]
expected: FAIL
[max-width length(pc) / values]
expected: FAIL
[min-width length(ex) / values]
expected: FAIL expected: FAIL

View file

@ -458,21 +458,48 @@
[column-width length(em) / values] [column-width length(em) / values]
expected: FAIL expected: FAIL
[display display(block to inline-block) / values] [background-image image(data) / values]
expected: FAIL expected: FAIL
[display display(static to absolute) / events] [transform transform(rotate) / values]
expected: FAIL expected: FAIL
[position position(absolute to fixed) / values] [border-bottom-right-radius border-radius(px-px) / values]
expected: FAIL expected: FAIL
[display display(static to absolute) / values] [background-image image(gradient) / values]
expected: FAIL expected: FAIL
[position position(relative to absolute) / values] [font-stretch font-stretch(keyword) / values]
expected: FAIL expected: FAIL
[position position(static to absolute) / values] [transform-origin horizontal(keyword) / values]
expected: FAIL
[border-top-right-radius border-radius(px) / values]
expected: FAIL
[border-top-left-radius border-radius(px-px) / values]
expected: FAIL
[border-bottom-right-radius border-radius(px) / values]
expected: FAIL
[border-bottom-left-radius border-radius(px-px) / values]
expected: FAIL
[background-image image(url) / values]
expected: FAIL
[border-top-left-radius border-radius(px) / values]
expected: FAIL
[border-bottom-left-radius border-radius(px) / values]
expected: FAIL
[box-shadow box-shadow(shadow) / values]
expected: FAIL
[border-top-right-radius border-radius(px-px) / values]
expected: FAIL expected: FAIL

View file

@ -5,3 +5,48 @@
[background-position length-em(em) / values] [background-position length-em(em) / values]
expected: FAIL expected: FAIL
[border-top-width length-em(em) / values]
expected: FAIL
[max-width length-em(em) / values]
expected: FAIL
[line-height length-em(em) / values]
expected: FAIL
[vertical-align length-em(em) / values]
expected: FAIL
[min-height length-em(em) / values]
expected: FAIL
[border-left-width length-em(em) / values]
expected: FAIL
[word-spacing length-em(em) / values]
expected: FAIL
[outline-width length-em(em) / values]
expected: FAIL
[letter-spacing length-em(em) / values]
expected: FAIL
[max-height length-em(em) / values]
expected: FAIL
[min-width length-em(em) / values]
expected: FAIL
[text-indent length-em(em) / values]
expected: FAIL
[outline-offset length-em(em) / values]
expected: FAIL
[border-right-width length-em(em) / values]
expected: FAIL
[border-bottom-width length-em(em) / values]
expected: FAIL

View file

@ -53,6 +53,459 @@
[background-position length(px) / events] [background-position length(px) / events]
expected: FAIL expected: FAIL
[visibility visibility(keyword) / values] [outline-width length(px) / values]
expected: FAIL
[border-left-width length(em) / values]
expected: FAIL
[border-bottom-width length(px) / values]
expected: FAIL
[border-top-width length(em) / values]
expected: FAIL
[line-height number(decimal) / values]
expected: FAIL
[word-spacing length(mm) / values]
expected: FAIL
[text-indent length(pc) / values]
expected: FAIL
[opacity number[0,1\](zero-to-one) / values]
expected: FAIL
[line-height number(integer) / values]
expected: FAIL
[outline-offset length(px) / values]
expected: FAIL
[font-size length(pt) / values]
expected: FAIL
[max-height length(px) / values]
expected: FAIL
[vertical-align length(in) / values]
expected: FAIL
[max-height percentage(%) / values]
expected: FAIL
[min-width length(px) / values]
expected: FAIL
[border-top-color color(rgba) / values]
expected: FAIL
[border-right-color color(rgba) / values]
expected: FAIL
[font-size length(ex) / values]
expected: FAIL
[min-height length(pc) / values]
expected: FAIL
[line-height length(px) / values]
expected: FAIL
[word-spacing length(px) / values]
expected: FAIL
[vertical-align percentage(%) / values]
expected: FAIL
[border-right-width length(pc) / values]
expected: FAIL
[line-height length(ex) / values]
expected: FAIL
[color color(rgba) / values]
expected: FAIL
[font-size length(in) / values]
expected: FAIL
[text-indent length(ex) / values]
expected: FAIL
[font-size length(em) / values]
expected: FAIL
[border-left-width length(mm) / values]
expected: FAIL
[vertical-align length(em) / values]
expected: FAIL
[text-indent length(px) / values]
expected: FAIL
[clip rectangle(rectangle) / values]
expected: FAIL
[word-spacing length(em) / values]
expected: FAIL
[border-right-width length(ex) / values]
expected: FAIL
[border-top-width length(cm) / values]
expected: FAIL
[max-width length(em) / values]
expected: FAIL
[font-size length(cm) / values]
expected: FAIL
[border-right-width length(cm) / values]
expected: FAIL
[outline-offset length(ex) / values]
expected: FAIL
[min-width length(cm) / values]
expected: FAIL
[min-height length(px) / values]
expected: FAIL
[min-width length(mm) / values]
expected: FAIL
[border-bottom-width length(in) / values]
expected: FAIL
[vertical-align length(pc) / values]
expected: FAIL
[vertical-align length(cm) / values]
expected: FAIL
[max-height length(ex) / values]
expected: FAIL
[vertical-align length(ex) / values]
expected: FAIL
[min-height percentage(%) / values]
expected: FAIL
[max-height length(pt) / values]
expected: FAIL
[outline-offset length(mm) / values]
expected: FAIL
[font-weight font-weight(keyword) / values]
expected: FAIL
[max-height length(mm) / values]
expected: FAIL
[outline-offset length(pt) / values]
expected: FAIL
[line-height length(mm) / values]
expected: FAIL
[line-height length(cm) / values]
expected: FAIL
[border-top-width length(mm) / values]
expected: FAIL
[letter-spacing length(in) / values]
expected: FAIL
[border-bottom-color color(rgba) / values]
expected: FAIL
[min-width percentage(%) / values]
expected: FAIL
[min-height length(cm) / values]
expected: FAIL
[letter-spacing length(mm) / values]
expected: FAIL
[font-size percentage(%) / values]
expected: FAIL
[letter-spacing length(cm) / values]
expected: FAIL
[vertical-align length(pt) / values]
expected: FAIL
[border-left-color color(rgba) / values]
expected: FAIL
[letter-spacing length(pc) / values]
expected: FAIL
[letter-spacing length(pt) / values]
expected: FAIL
[word-spacing length(ex) / values]
expected: FAIL
[line-height length(pt) / values]
expected: FAIL
[border-top-width length(px) / values]
expected: FAIL
[min-width length(pt) / values]
expected: FAIL
[border-bottom-width length(mm) / values]
expected: FAIL
[border-bottom-width length(cm) / values]
expected: FAIL
[min-width length(em) / values]
expected: FAIL
[min-height length(em) / values]
expected: FAIL
[max-width length(mm) / values]
expected: FAIL
[min-height length(ex) / values]
expected: FAIL
[max-width length(px) / values]
expected: FAIL
[text-indent length(mm) / values]
expected: FAIL
[font-size length(mm) / values]
expected: FAIL
[min-width length(pc) / values]
expected: FAIL
[letter-spacing length(em) / values]
expected: FAIL
[line-height length(em) / values]
expected: FAIL
[border-bottom-width length(pt) / values]
expected: FAIL
[word-spacing length(pc) / values]
expected: FAIL
[outline-offset length(in) / values]
expected: FAIL
[word-spacing length(in) / values]
expected: FAIL
[outline-width length(pt) / values]
expected: FAIL
[border-top-width length(pc) / values]
expected: FAIL
[border-left-width length(px) / values]
expected: FAIL
[font-size length(px) / values]
expected: FAIL
[border-left-width length(cm) / values]
expected: FAIL
[border-right-width length(px) / values]
expected: FAIL
[outline-width length(in) / values]
expected: FAIL
[word-spacing length(pt) / values]
expected: FAIL
[text-indent length(cm) / values]
expected: FAIL
[border-right-width length(mm) / values]
expected: FAIL
[max-width length(in) / values]
expected: FAIL
[outline-color color(rgba) / values]
expected: FAIL
[text-indent length(pt) / values]
expected: FAIL
[border-right-width length(pt) / values]
expected: FAIL
[border-left-width length(in) / values]
expected: FAIL
[text-shadow shadow(shadow) / values]
expected: FAIL
[max-height length(in) / values]
expected: FAIL
[line-height length(in) / values]
expected: FAIL
[border-bottom-width length(em) / values]
expected: FAIL
[outline-width length(ex) / values]
expected: FAIL
[font-size length(pc) / values]
expected: FAIL
[min-width length(in) / values]
expected: FAIL
[outline-width length(cm) / values]
expected: FAIL
[max-width percentage(%) / values]
expected: FAIL
[max-width length(ex) / values]
expected: FAIL
[letter-spacing length(ex) / values]
expected: FAIL
[border-left-width length(ex) / values]
expected: FAIL
[outline-width length(mm) / values]
expected: FAIL
[border-left-width length(pc) / values]
expected: FAIL
[outline-width length(pc) / values]
expected: FAIL
[word-spacing percentage(%) / values]
expected: FAIL
[font-weight font-weight(numeric) / values]
expected: FAIL
[vertical-align length(px) / values]
expected: FAIL
[letter-spacing length(px) / values]
expected: FAIL
[max-width length(pt) / values]
expected: FAIL
[line-height percentage(%) / values]
expected: FAIL
[text-indent length(in) / values]
expected: FAIL
[text-indent length(em) / values]
expected: FAIL
[border-top-width length(pt) / values]
expected: FAIL
[min-height length(mm) / values]
expected: FAIL
[max-height length(cm) / values]
expected: FAIL
[outline-width length(em) / values]
expected: FAIL
[border-right-width length(em) / values]
expected: FAIL
[max-height length(em) / values]
expected: FAIL
[max-width length(cm) / values]
expected: FAIL
[outline-offset length(em) / values]
expected: FAIL
[outline-offset length(cm) / values]
expected: FAIL
[border-top-width length(ex) / values]
expected: FAIL
[border-right-width length(in) / values]
expected: FAIL
[z-index integer(integer) / values]
expected: FAIL
[border-left-width length(pt) / values]
expected: FAIL
[vertical-align length(mm) / values]
expected: FAIL
[border-bottom-width length(pc) / values]
expected: FAIL
[text-indent percentage(%) / values]
expected: FAIL
[line-height length(pc) / values]
expected: FAIL
[border-top-width length(in) / values]
expected: FAIL
[border-bottom-width length(ex) / values]
expected: FAIL
[min-height length(in) / values]
expected: FAIL
[outline-offset length(pc) / values]
expected: FAIL
[max-height length(pc) / values]
expected: FAIL
[background-color color(rgba) / values]
expected: FAIL
[min-height length(pt) / values]
expected: FAIL
[word-spacing length(cm) / values]
expected: FAIL
[max-width length(pc) / values]
expected: FAIL
[min-width length(ex) / values]
expected: FAIL expected: FAIL

View file

@ -53,9 +53,6 @@
[right end] [right end]
expected: FAIL expected: FAIL
[left end]
expected: FAIL
[word-spacing intermediate] [word-spacing intermediate]
expected: FAIL expected: FAIL
@ -80,123 +77,15 @@
[text-indent intermediate] [text-indent intermediate]
expected: FAIL expected: FAIL
[margin-right end]
expected: FAIL
[padding-right end] [padding-right end]
expected: FAIL expected: FAIL
[width end]
expected: FAIL
[word-spacing end]
expected: FAIL
[max-height end]
expected: FAIL
[max-width end]
expected: FAIL
[outline-color end]
expected: FAIL
[text-indent end]
expected: FAIL
[height end] [height end]
expected: FAIL expected: FAIL
[outline-offset end]
expected: FAIL
[margin-top end]
expected: FAIL
[line-height end]
expected: FAIL
[min-height end]
expected: FAIL
[padding-left end]
expected: FAIL
[bottom end]
expected: FAIL
[clip end]
expected: FAIL
[top end]
expected: FAIL
[font-weight end]
expected: FAIL
[font-size end]
expected: FAIL
[text-shadow end]
expected: FAIL
[margin-left end]
expected: FAIL
[border-left-color end]
expected: FAIL
[min-width end]
expected: FAIL
[background-color end]
expected: FAIL
[border-top-width end]
expected: FAIL
[border-left-width end] [border-left-width end]
expected: FAIL expected: FAIL
[border-bottom-width end] [opacity end]
expected: FAIL
[padding-top end]
expected: FAIL
[letter-spacing end]
expected: FAIL
[margin-bottom end]
expected: FAIL
[border-bottom-color end]
expected: FAIL
[vertical-align end]
expected: FAIL
[border-right-width end]
expected: FAIL
[border-right-color end]
expected: FAIL
[border-top-color end]
expected: FAIL
[color end]
expected: FAIL
[border-spacing end]
expected: FAIL
[visibility end]
expected: FAIL
[padding-bottom end]
expected: FAIL
[z-index end]
expected: FAIL expected: FAIL

View file

@ -0,0 +1,7 @@
[inheritance.html]
[Property scroll-behavior has initial value auto]
expected: FAIL
[Property scroll-behavior does not inherit]
expected: FAIL

View file

@ -22,6 +22,3 @@
[Legacy listener of animationstart] [Legacy listener of animationstart]
expected: TIMEOUT expected: TIMEOUT
[Listener of transitionend]
expected: FAIL

View file

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

View file

@ -0,0 +1,10 @@
[non-active-document.html]
[DOMParser]
expected: FAIL
[createHTMLDocument]
expected: FAIL
[<template>]
expected: FAIL

View file

@ -0,0 +1,7 @@
[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

@ -1,4 +0,0 @@
[DOMContentLoaded-defer.html]
[The end: DOMContentLoaded and defer scripts]
expected: FAIL

View file

@ -0,0 +1,283 @@
[no-quirks.html]
[top: -\\31 .5]
expected: FAIL
[bottom: -1A]
expected: FAIL
[bottom: -1a]
expected: FAIL
[top: @1]
expected: FAIL
[top: "1a"]
expected: FAIL
[top: @a]
expected: FAIL
[bottom: "1"]
expected: FAIL
[bottom: -/**/1]
expected: FAIL
[top: +/**/1]
expected: FAIL
[bottom: @1a]
expected: FAIL
[top: 1\\31 ]
expected: FAIL
[top: url('1')]
expected: FAIL
[bottom: -\\31 ]
expected: FAIL
[top: calc(1)]
expected: FAIL
[top: \\31 ]
expected: FAIL
[bottom: +1\\31 ]
expected: FAIL
[bottom: 1\\31 .5]
expected: FAIL
[bottom: #0001]
expected: FAIL
[top: calc(2 * 2px)]
expected: FAIL
[bottom: 1a]
expected: FAIL
[bottom: A]
expected: FAIL
[bottom: #01]
expected: FAIL
[top: +\\31 .5]
expected: FAIL
[bottom: #1]
expected: FAIL
[top: -/**/1]
expected: FAIL
[bottom: +\\31 .5]
expected: FAIL
[bottom: \\31 ]
expected: FAIL
[bottom: calc(1)]
expected: FAIL
[top: #001]
expected: FAIL
[top: +\\31 ]
expected: FAIL
[bottom: +\\31 ]
expected: FAIL
[top: +1.5]
expected: FAIL
[top: +1\\31 ]
expected: FAIL
[bottom: @a]
expected: FAIL
[bottom: @1]
expected: FAIL
[top: #1]
expected: FAIL
[top: 1a]
expected: FAIL
[bottom: +1a]
expected: FAIL
[bottom: +1A]
expected: FAIL
[bottom: "a"]
expected: FAIL
[top: #00001]
expected: FAIL
[bottom: -1\\31 .5]
expected: FAIL
[top: "1"]
expected: FAIL
[bottom: 1.5]
expected: FAIL
[bottom: -\\31 .5]
expected: FAIL
[bottom: url('1')]
expected: FAIL
[bottom: -1.5]
expected: FAIL
[top: \\31 .5]
expected: FAIL
[bottom: "1a"]
expected: FAIL
[bottom: calc(2 * 2px)]
expected: FAIL
[bottom: +1\\31 .5]
expected: FAIL
[bottom: 1\\31 ]
expected: FAIL
[bottom: +/**/1]
expected: FAIL
[bottom: #00001]
expected: FAIL
[top: url(1)]
expected: FAIL
[bottom: #001]
expected: FAIL
[top: +1\\31 .5]
expected: FAIL
[top: -1a]
expected: FAIL
[top: -1A]
expected: FAIL
[bottom: url(1)]
expected: FAIL
[top: a]
expected: FAIL
[top: A]
expected: FAIL
[top: #000001]
expected: FAIL
[top: 1]
expected: FAIL
[top: 1\\31 .5]
expected: FAIL
[bottom: a]
expected: FAIL
[bottom: 1]
expected: FAIL
[bottom: +1]
expected: FAIL
[bottom: #000001]
expected: FAIL
[bottom: +a]
expected: FAIL
[bottom: +A]
expected: FAIL
[top: 1.5]
expected: FAIL
[top: +A]
expected: FAIL
[top: +a]
expected: FAIL
[top: +1]
expected: FAIL
[top: -1.5]
expected: FAIL
[top: -1\\31 .5]
expected: FAIL
[top: +1a]
expected: FAIL
[top: +1A]
expected: FAIL
[top: @1a]
expected: FAIL
[bottom: \\31 .5]
expected: FAIL
[top: "a"]
expected: FAIL
[top: #01]
expected: FAIL
[bottom: +1.5]
expected: FAIL
[bottom: -A]
expected: FAIL
[bottom: -a]
expected: FAIL
[bottom: -1\\31 ]
expected: FAIL
[top: #0001]
expected: FAIL
[bottom: -1]
expected: FAIL
[top: -\\31 ]
expected: FAIL
[top: -A]
expected: FAIL
[top: -a]
expected: FAIL
[top: -1]
expected: FAIL
[top: -1\\31 ]
expected: FAIL

View file

@ -1,14 +1,8 @@
[urlencoded-parser.any.html] [urlencoded-parser.any.html]
[response.formData() with input: _charset_=windows-1252&test=%C2x] [request.formData() with input: a&b&c]
expected: FAIL expected: FAIL
[response.formData() with input: a&b&c] [request.formData() with input: _charset_=windows-1252&test=%C2x]
expected: FAIL
[response.formData() with input: a=b&c=d]
expected: FAIL
[response.formData() with input: &&&a=b&&&&c=d&]
expected: FAIL expected: FAIL
@ -16,15 +10,21 @@
[request.formData() with input: a=b&c=d] [request.formData() with input: a=b&c=d]
expected: FAIL expected: FAIL
[request.formData() with input: a=b&c=d&]
expected: FAIL
[request.formData() with input: a&b&c] [request.formData() with input: a&b&c]
expected: FAIL expected: FAIL
[request.formData() with input: _charset_=windows-1252&test=%C2x]
expected: FAIL
[response.formData() with input: a&b&c] [response.formData() with input: a&b&c]
expected: FAIL expected: FAIL
[response.formData() with input: a=b&c=d&]
expected: FAIL
[response.formData() with input: _charset_=windows-1252&test=%C2x]
expected: FAIL
[response.formData() with input: &&&a=b&&&&c=d&]
expected: FAIL
[response.formData() with input: a=b&c=d]
expected: FAIL

View file

@ -282,3 +282,41 @@ backgroundFetchTest(async (test, backgroundFetch) => {
assert_equals(nullResponse, null); assert_equals(nullResponse, null);
}, 'Fetches with mixed content should fail.'); }, 'Fetches with mixed content should fail.');
backgroundFetchTest(async (test, backgroundFetch) => {
const registrationId = 'matchexistingrequest';
const registration =
await backgroundFetch.fetch(registrationId, 'resources/feature-name.txt');
assert_equals(registration.id, registrationId);
const {type, eventRegistration, results} = await getMessageFromServiceWorker();
assert_equals('backgroundfetchsuccess', type);
assert_equals(results.length, 1);
assert_equals(eventRegistration.id, registration.id);
assert_equals(eventRegistration.result, 'success');
assert_equals(eventRegistration.failureReason, '');
assert_true(results[0].url.includes('resources/feature-name.txt'));
assert_equals(results[0].status, 200);
assert_equals(results[0].text, 'Background Fetch');
}, 'Matching to a single request should work');
backgroundFetchTest(async (test, backgroundFetch) => {
const registrationId = 'matchmissingrequest';
const registration =
await backgroundFetch.fetch(registrationId, 'resources/feature-name.txt');
assert_equals(registration.id, registrationId);
const {type, eventRegistration, results} = await getMessageFromServiceWorker();
assert_equals('backgroundfetchsuccess', type);
assert_equals(results.length, 0);
assert_equals(eventRegistration.id, registration.id);
assert_equals(eventRegistration.result, 'success');
assert_equals(eventRegistration.failureReason, '');
}, 'Matching to a non-existing request should work');

View file

@ -13,10 +13,33 @@ async function getFetchResult(record) {
} }
function handleBackgroundFetchEvent(event) { function handleBackgroundFetchEvent(event) {
let matchFunction = null;
switch (event.registration.id) {
case 'matchexistingrequest':
matchFunction = event.registration.match.bind(
event.registration, '/background-fetch/resources/feature-name.txt');
break;
case 'matchmissingrequest':
matchFunction = event.registration.match.bind(
event.registration, '/background-fetch/resources/missing.txt');
break;
default:
matchFunction = event.registration.matchAll.bind(event.registration);
break;
}
event.waitUntil( event.waitUntil(
event.registration.matchAll() matchFunction()
// Format `match(All)?` function results.
.then(records => {
if (!records) return []; // Nothing was matched.
if (!records.map) return [records]; // One entry was returned.
return records; // Already in a list.
})
// Extract responses.
.then(records => .then(records =>
Promise.all(records.map(record => getFetchResult(record)))) Promise.all(records.map(record => getFetchResult(record))))
// Clone registration and send message.
.then(results => { .then(results => {
const registrationCopy = cloneRegistration(event.registration); const registrationCopy = cloneRegistration(event.registration);
sendMessageToDocument( sendMessageToDocument(

View file

@ -43,7 +43,6 @@
{file: "disabled-chromium0020", name: "disabled-chromium0020"}, {file: "disabled-chromium0020", name: "disabled-chromium0020"},
{file: "chromium0021", name: "chromium0021"}, {file: "chromium0021", name: "chromium0021"},
{file: "disabled-chromium0022", name: "disabled-chromium0022"}, {file: "disabled-chromium0022", name: "disabled-chromium0022"},
{file: "disabled-chromium0023", name: "disabled-chromium0023"},
]; ];
for (const i in TEST_CASES) { for (const i in TEST_CASES) {

View file

@ -6,18 +6,18 @@
<link rel="help" href="http://www.w3.org/TR/css-flexbox-1/#flex-items"> <link rel="help" href="http://www.w3.org/TR/css-flexbox-1/#flex-items">
<link rel="match" href="reference/flex-flexitem-percentage-prescation-ref.html"> <link rel="match" href="reference/flex-flexitem-percentage-prescation-ref.html">
<meta name="flags" content="" /> <meta name="flags" content="" />
<meta name="assert" content="no blue color could be seen." /> <meta name="assert" content="no red color could be seen." />
<style type="text/css"> <style type="text/css">
#test #test
{ {
background: blue; background: red;
display: flex; display: flex;
height:300px; height:300px;
width:101px; width:101px;
} }
p { p {
flex:1; flex:1;
background:red; background:olive;
flex-direction:row; flex-direction:row;
margin:0 0 0 0; margin:0 0 0 0;
} }
@ -25,8 +25,8 @@
</head> </head>
<body> <body>
<div id="test"> <div id="test">
<p style="background:green;">damer</p> <p style="background:green;">d</p>
<p>damer</p> <p>d</p>
</div> </div>
</body> </body>
</html> </html>

View file

@ -0,0 +1,49 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>CSS Flexible Box Test: Minimum height of flex items</title>
<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com" />
<link rel="help" href="http://www.w3.org/TR/css-flexbox-1/#min-size-auto" title="4.5. Implied Minimum Size of Flex Items" />
<link rel="match" href="../reference/ref-filled-green-100px-square.xht" />
<meta name="assert" content="Checks that minimum height for flex items is the min-content size." />
<style type="text/css"><![CDATA[
#reference-overlapped-red {
position: absolute;
background-color: red;
width: 100px;
height: 100px;
z-index: -1;
}
#constrained-flex {
display: flex;
flex-direction: column;
width: 100px;
height: 10px;
}
#test-flex-item-overlapping-green {
display: flex;
flex-basis: 0;
color: green;
background-color: green;
font: 50px/1 Ahem;
}
#content-100x100 {
width: 100px;
height: 100px;
}
]]></style>
</head>
<body>
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
<div id="reference-overlapped-red"></div>
<div id="constrained-flex">
<div id="test-flex-item-overlapping-green">
<div id="content-100x100"></div>
</div>
</div>
</body>
</html>

View file

@ -7,7 +7,7 @@
<style> <style>
#test #test
{ {
background: blue; background: red;
position:relative; position:relative;
height:300px; height:300px;
width:101px; width:101px;
@ -23,8 +23,8 @@
<body> <body>
<div id="test"> <div id="test">
<div id="test"> <div id="test">
<p style="background:green;top:0px;height:300px;left:0px;height:300px;width:50.5px;">damer</p> <p style="background:green;top:0px;height:300px;left:0px;height:300px;width:50.5px;">d</p>
<p style="top:0px;left:50.5px;height:300px;background:Red;width:50.5px;">damer</p> <p style="top:0px;left:50.5px;height:300px;background:olive;width:50.5px;">d</p>
</div> </div>
</div> </div>
</body> </body>

View file

@ -0,0 +1,356 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>CSS Test: feature property settings are resolved in the correct order for 'liga'.</title>
<link rel="author" title="Ben Wagner" href="bungeman@chromium.org" />
<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#feature-precedence" />
<style>
@font-face {
font-family: lato-ffs-;
src: url(support/fonts/Lato-Medium.ttf);
}
.test, .ref {
font-family: lato-ffs-;
font-size: 2em;
position: absolute;
}
.test { color: green; }
.ref { color: red; }
.align { width: 1em; }
.ls-0 { letter-spacing: 0em; }
.ls-1 { letter-spacing: 0.1em; }
</style>
</head>
<body>
<p>Test passes if there is no red visible.</p>
<table class="ref"><tr>
<td class="align ff- fvl- ls- ffs- ">&#xfb01;</td>
<td class="align ff- fvl- ls- ffs-n">&#xfb01;</td>
<td class="align ff- fvl- ls- ffs-0">f&zwnj;i</td>
<td class="align ff- fvl- ls- ffs-1">&#xfb01;</td>
<td class="align ff- fvl- ls-0 ffs- ">&#xfb01;</td>
<td class="align ff- fvl- ls-0 ffs-n">&#xfb01;</td>
<td class="align ff- fvl- ls-0 ffs-0">f&zwnj;i</td>
<td class="align ff- fvl- ls-0 ffs-1">&#xfb01;</td>
<td class="align ff- fvl- ls-1 ffs- ">f&zwnj;i</td>
<td class="align ff- fvl- ls-1 ffs-n">f&zwnj;i</td>
<td class="align ff- fvl- ls-1 ffs-0">f&zwnj;i</td>
<td class="align ff- fvl- ls-1 ffs-1">&#xfb01;</td>
</tr><tr>
<td class="align ff- fvl-n ls- ffs- ">&#xfb01;</td>
<td class="align ff- fvl-n ls- ffs-n">&#xfb01;</td>
<td class="align ff- fvl-n ls- ffs-0">f&zwnj;i</td>
<td class="align ff- fvl-n ls- ffs-1">&#xfb01;</td>
<td class="align ff- fvl-n ls-0 ffs- ">&#xfb01;</td>
<td class="align ff- fvl-n ls-0 ffs-n">&#xfb01;</td>
<td class="align ff- fvl-n ls-0 ffs-0">f&zwnj;i</td>
<td class="align ff- fvl-n ls-0 ffs-1">&#xfb01;</td>
<td class="align ff- fvl-n ls-1 ffs- ">f&zwnj;i</td>
<td class="align ff- fvl-n ls-1 ffs-n">f&zwnj;i</td>
<td class="align ff- fvl-n ls-1 ffs-0">f&zwnj;i</td>
<td class="align ff- fvl-n ls-1 ffs-1">&#xfb01;</td>
</tr><tr>
<td class="align ff- fvl-0 ls- ffs- ">f&zwnj;i</td>
<td class="align ff- fvl-0 ls- ffs-n">f&zwnj;i</td>
<td class="align ff- fvl-0 ls- ffs-0">f&zwnj;i</td>
<td class="align ff- fvl-0 ls- ffs-1">&#xfb01;</td>
<td class="align ff- fvl-0 ls-0 ffs- ">f&zwnj;i</td>
<td class="align ff- fvl-0 ls-0 ffs-n">f&zwnj;i</td>
<td class="align ff- fvl-0 ls-0 ffs-0">f&zwnj;i</td>
<td class="align ff- fvl-0 ls-0 ffs-1">&#xfb01;</td>
<td class="align ff- fvl-0 ls-1 ffs- ">f&zwnj;i</td>
<td class="align ff- fvl-0 ls-1 ffs-n">f&zwnj;i</td>
<td class="align ff- fvl-0 ls-1 ffs-0">f&zwnj;i</td>
<td class="align ff- fvl-0 ls-1 ffs-1">&#xfb01;</td>
</tr><tr>
<td class="align ff- fvl-1 ls- ffs- ">&#xfb01;</td>
<td class="align ff- fvl-1 ls- ffs-n">&#xfb01;</td>
<td class="align ff- fvl-1 ls- ffs-0">f&zwnj;i</td>
<td class="align ff- fvl-1 ls- ffs-1">&#xfb01;</td>
<td class="align ff- fvl-1 ls-0 ffs- ">&#xfb01;</td>
<td class="align ff- fvl-1 ls-0 ffs-n">&#xfb01;</td>
<td class="align ff- fvl-1 ls-0 ffs-0">f&zwnj;i</td>
<td class="align ff- fvl-1 ls-0 ffs-1">&#xfb01;</td>
<td class="align ff- fvl-1 ls-1 ffs- ">f&zwnj;i</td>
<td class="align ff- fvl-1 ls-1 ffs-n">f&zwnj;i</td>
<td class="align ff- fvl-1 ls-1 ffs-0">f&zwnj;i</td>
<td class="align ff- fvl-1 ls-1 ffs-1">&#xfb01;</td>
</tr><tr>
<td class="align ff-0 fvl- ls- ffs- ">f&zwnj;i</td>
<td class="align ff-0 fvl- ls- ffs-n">f&zwnj;i</td>
<td class="align ff-0 fvl- ls- ffs-0">f&zwnj;i</td>
<td class="align ff-0 fvl- ls- ffs-1">&#xfb01;</td>
<td class="align ff-0 fvl- ls-0 ffs- ">f&zwnj;i</td>
<td class="align ff-0 fvl- ls-0 ffs-n">f&zwnj;i</td>
<td class="align ff-0 fvl- ls-0 ffs-0">f&zwnj;i</td>
<td class="align ff-0 fvl- ls-0 ffs-1">&#xfb01;</td>
<td class="align ff-0 fvl- ls-1 ffs- ">f&zwnj;i</td>
<td class="align ff-0 fvl- ls-1 ffs-n">f&zwnj;i</td>
<td class="align ff-0 fvl- ls-1 ffs-0">f&zwnj;i</td>
<td class="align ff-0 fvl- ls-1 ffs-1">&#xfb01;</td>
</tr><tr>
<td class="align ff-0 fvl-n ls- ffs- ">f&zwnj;i</td>
<td class="align ff-0 fvl-n ls- ffs-n">f&zwnj;i</td>
<td class="align ff-0 fvl-n ls- ffs-0">f&zwnj;i</td>
<td class="align ff-0 fvl-n ls- ffs-1">&#xfb01;</td>
<td class="align ff-0 fvl-n ls-0 ffs- ">f&zwnj;i</td>
<td class="align ff-0 fvl-n ls-0 ffs-n">f&zwnj;i</td>
<td class="align ff-0 fvl-n ls-0 ffs-0">f&zwnj;i</td>
<td class="align ff-0 fvl-n ls-0 ffs-1">&#xfb01;</td>
<td class="align ff-0 fvl-n ls-1 ffs- ">f&zwnj;i</td>
<td class="align ff-0 fvl-n ls-1 ffs-n">f&zwnj;i</td>
<td class="align ff-0 fvl-n ls-1 ffs-0">f&zwnj;i</td>
<td class="align ff-0 fvl-n ls-1 ffs-1">&#xfb01;</td>
</tr><tr>
<td class="align ff-0 fvl-0 ls- ffs- ">f&zwnj;i</td>
<td class="align ff-0 fvl-0 ls- ffs-n">f&zwnj;i</td>
<td class="align ff-0 fvl-0 ls- ffs-0">f&zwnj;i</td>
<td class="align ff-0 fvl-0 ls- ffs-1">&#xfb01;</td>
<td class="align ff-0 fvl-0 ls-0 ffs- ">f&zwnj;i</td>
<td class="align ff-0 fvl-0 ls-0 ffs-n">f&zwnj;i</td>
<td class="align ff-0 fvl-0 ls-0 ffs-0">f&zwnj;i</td>
<td class="align ff-0 fvl-0 ls-0 ffs-1">&#xfb01;</td>
<td class="align ff-0 fvl-0 ls-1 ffs- ">f&zwnj;i</td>
<td class="align ff-0 fvl-0 ls-1 ffs-n">f&zwnj;i</td>
<td class="align ff-0 fvl-0 ls-1 ffs-0">f&zwnj;i</td>
<td class="align ff-0 fvl-0 ls-1 ffs-1">&#xfb01;</td>
</tr><tr>
<td class="align ff-0 fvl-1 ls- ffs- ">&#xfb01;</td>
<td class="align ff-0 fvl-1 ls- ffs-n">&#xfb01;</td>
<td class="align ff-0 fvl-1 ls- ffs-0">f&zwnj;i</td>
<td class="align ff-0 fvl-1 ls- ffs-1">&#xfb01;</td>
<td class="align ff-0 fvl-1 ls-0 ffs- ">&#xfb01;</td>
<td class="align ff-0 fvl-1 ls-0 ffs-n">&#xfb01;</td>
<td class="align ff-0 fvl-1 ls-0 ffs-0">f&zwnj;i</td>
<td class="align ff-0 fvl-1 ls-0 ffs-1">&#xfb01;</td>
<td class="align ff-0 fvl-1 ls-1 ffs- ">f&zwnj;i</td>
<td class="align ff-0 fvl-1 ls-1 ffs-n">f&zwnj;i</td>
<td class="align ff-0 fvl-1 ls-1 ffs-0">f&zwnj;i</td>
<td class="align ff-0 fvl-1 ls-1 ffs-1">&#xfb01;</td>
</tr><tr>
<td class="align ff-1 fvl- ls- ffs- ">&#xfb01;</td>
<td class="align ff-1 fvl- ls- ffs-n">&#xfb01;</td>
<td class="align ff-1 fvl- ls- ffs-0">f&zwnj;i</td>
<td class="align ff-1 fvl- ls- ffs-1">&#xfb01;</td>
<td class="align ff-1 fvl- ls-0 ffs- ">&#xfb01;</td>
<td class="align ff-1 fvl- ls-0 ffs-n">&#xfb01;</td>
<td class="align ff-1 fvl- ls-0 ffs-0">f&zwnj;i</td>
<td class="align ff-1 fvl- ls-0 ffs-1">&#xfb01;</td>
<td class="align ff-1 fvl- ls-1 ffs- ">f&zwnj;i</td>
<td class="align ff-1 fvl- ls-1 ffs-n">f&zwnj;i</td>
<td class="align ff-1 fvl- ls-1 ffs-0">f&zwnj;i</td>
<td class="align ff-1 fvl- ls-1 ffs-1">&#xfb01;</td>
</tr><tr>
<td class="align ff-1 fvl-n ls- ffs- ">&#xfb01;</td>
<td class="align ff-1 fvl-n ls- ffs-n">&#xfb01;</td>
<td class="align ff-1 fvl-n ls- ffs-0">f&zwnj;i</td>
<td class="align ff-1 fvl-n ls- ffs-1">&#xfb01;</td>
<td class="align ff-1 fvl-n ls-0 ffs- ">&#xfb01;</td>
<td class="align ff-1 fvl-n ls-0 ffs-n">&#xfb01;</td>
<td class="align ff-1 fvl-n ls-0 ffs-0">f&zwnj;i</td>
<td class="align ff-1 fvl-n ls-0 ffs-1">&#xfb01;</td>
<td class="align ff-1 fvl-n ls-1 ffs- ">f&zwnj;i</td>
<td class="align ff-1 fvl-n ls-1 ffs-n">f&zwnj;i</td>
<td class="align ff-1 fvl-n ls-1 ffs-0">f&zwnj;i</td>
<td class="align ff-1 fvl-n ls-1 ffs-1">&#xfb01;</td>
</tr><tr>
<td class="align ff-1 fvl-0 ls- ffs- ">f&zwnj;i</td>
<td class="align ff-1 fvl-0 ls- ffs-n">f&zwnj;i</td>
<td class="align ff-1 fvl-0 ls- ffs-0">f&zwnj;i</td>
<td class="align ff-1 fvl-0 ls- ffs-1">&#xfb01;</td>
<td class="align ff-1 fvl-0 ls-0 ffs- ">f&zwnj;i</td>
<td class="align ff-1 fvl-0 ls-0 ffs-n">f&zwnj;i</td>
<td class="align ff-1 fvl-0 ls-0 ffs-0">f&zwnj;i</td>
<td class="align ff-1 fvl-0 ls-0 ffs-1">&#xfb01;</td>
<td class="align ff-1 fvl-0 ls-1 ffs- ">f&zwnj;i</td>
<td class="align ff-1 fvl-0 ls-1 ffs-n">f&zwnj;i</td>
<td class="align ff-1 fvl-0 ls-1 ffs-0">f&zwnj;i</td>
<td class="align ff-1 fvl-0 ls-1 ffs-1">&#xfb01;</td>
</tr><tr>
<td class="align ff-1 fvl-1 ls- ffs- ">&#xfb01;</td>
<td class="align ff-1 fvl-1 ls- ffs-n">&#xfb01;</td>
<td class="align ff-1 fvl-1 ls- ffs-0">f&zwnj;i</td>
<td class="align ff-1 fvl-1 ls- ffs-1">&#xfb01;</td>
<td class="align ff-1 fvl-1 ls-0 ffs- ">&#xfb01;</td>
<td class="align ff-1 fvl-1 ls-0 ffs-n">&#xfb01;</td>
<td class="align ff-1 fvl-1 ls-0 ffs-0">f&zwnj;i</td>
<td class="align ff-1 fvl-1 ls-0 ffs-1">&#xfb01;</td>
<td class="align ff-1 fvl-1 ls-1 ffs- ">f&zwnj;i</td>
<td class="align ff-1 fvl-1 ls-1 ffs-n">f&zwnj;i</td>
<td class="align ff-1 fvl-1 ls-1 ffs-0">f&zwnj;i</td>
<td class="align ff-1 fvl-1 ls-1 ffs-1">&#xfb01;</td>
</tr></table>
<table class="test"><tr>
<td class="align ff- fvl- ls- ffs- ">&#xfb01;</td>
<td class="align ff- fvl- ls- ffs-n">&#xfb01;</td>
<td class="align ff- fvl- ls- ffs-0">f&zwnj;i</td>
<td class="align ff- fvl- ls- ffs-1">&#xfb01;</td>
<td class="align ff- fvl- ls-0 ffs- ">&#xfb01;</td>
<td class="align ff- fvl- ls-0 ffs-n">&#xfb01;</td>
<td class="align ff- fvl- ls-0 ffs-0">f&zwnj;i</td>
<td class="align ff- fvl- ls-0 ffs-1">&#xfb01;</td>
<td class="align ff- fvl- ls-1 ffs- ">f&zwnj;i</td>
<td class="align ff- fvl- ls-1 ffs-n">f&zwnj;i</td>
<td class="align ff- fvl- ls-1 ffs-0">f&zwnj;i</td>
<td class="align ff- fvl- ls-1 ffs-1">&#xfb01;</td>
</tr><tr>
<td class="align ff- fvl-n ls- ffs- ">&#xfb01;</td>
<td class="align ff- fvl-n ls- ffs-n">&#xfb01;</td>
<td class="align ff- fvl-n ls- ffs-0">f&zwnj;i</td>
<td class="align ff- fvl-n ls- ffs-1">&#xfb01;</td>
<td class="align ff- fvl-n ls-0 ffs- ">&#xfb01;</td>
<td class="align ff- fvl-n ls-0 ffs-n">&#xfb01;</td>
<td class="align ff- fvl-n ls-0 ffs-0">f&zwnj;i</td>
<td class="align ff- fvl-n ls-0 ffs-1">&#xfb01;</td>
<td class="align ff- fvl-n ls-1 ffs- ">f&zwnj;i</td>
<td class="align ff- fvl-n ls-1 ffs-n">f&zwnj;i</td>
<td class="align ff- fvl-n ls-1 ffs-0">f&zwnj;i</td>
<td class="align ff- fvl-n ls-1 ffs-1">&#xfb01;</td>
</tr><tr>
<td class="align ff- fvl-0 ls- ffs- ">f&zwnj;i</td>
<td class="align ff- fvl-0 ls- ffs-n">f&zwnj;i</td>
<td class="align ff- fvl-0 ls- ffs-0">f&zwnj;i</td>
<td class="align ff- fvl-0 ls- ffs-1">&#xfb01;</td>
<td class="align ff- fvl-0 ls-0 ffs- ">f&zwnj;i</td>
<td class="align ff- fvl-0 ls-0 ffs-n">f&zwnj;i</td>
<td class="align ff- fvl-0 ls-0 ffs-0">f&zwnj;i</td>
<td class="align ff- fvl-0 ls-0 ffs-1">&#xfb01;</td>
<td class="align ff- fvl-0 ls-1 ffs- ">f&zwnj;i</td>
<td class="align ff- fvl-0 ls-1 ffs-n">f&zwnj;i</td>
<td class="align ff- fvl-0 ls-1 ffs-0">f&zwnj;i</td>
<td class="align ff- fvl-0 ls-1 ffs-1">&#xfb01;</td>
</tr><tr>
<td class="align ff- fvl-1 ls- ffs- ">&#xfb01;</td>
<td class="align ff- fvl-1 ls- ffs-n">&#xfb01;</td>
<td class="align ff- fvl-1 ls- ffs-0">f&zwnj;i</td>
<td class="align ff- fvl-1 ls- ffs-1">&#xfb01;</td>
<td class="align ff- fvl-1 ls-0 ffs- ">&#xfb01;</td>
<td class="align ff- fvl-1 ls-0 ffs-n">&#xfb01;</td>
<td class="align ff- fvl-1 ls-0 ffs-0">f&zwnj;i</td>
<td class="align ff- fvl-1 ls-0 ffs-1">&#xfb01;</td>
<td class="align ff- fvl-1 ls-1 ffs- ">f&zwnj;i</td>
<td class="align ff- fvl-1 ls-1 ffs-n">f&zwnj;i</td>
<td class="align ff- fvl-1 ls-1 ffs-0">f&zwnj;i</td>
<td class="align ff- fvl-1 ls-1 ffs-1">&#xfb01;</td>
</tr><tr>
<td class="align ff-0 fvl- ls- ffs- ">f&zwnj;i</td>
<td class="align ff-0 fvl- ls- ffs-n">f&zwnj;i</td>
<td class="align ff-0 fvl- ls- ffs-0">f&zwnj;i</td>
<td class="align ff-0 fvl- ls- ffs-1">&#xfb01;</td>
<td class="align ff-0 fvl- ls-0 ffs- ">f&zwnj;i</td>
<td class="align ff-0 fvl- ls-0 ffs-n">f&zwnj;i</td>
<td class="align ff-0 fvl- ls-0 ffs-0">f&zwnj;i</td>
<td class="align ff-0 fvl- ls-0 ffs-1">&#xfb01;</td>
<td class="align ff-0 fvl- ls-1 ffs- ">f&zwnj;i</td>
<td class="align ff-0 fvl- ls-1 ffs-n">f&zwnj;i</td>
<td class="align ff-0 fvl- ls-1 ffs-0">f&zwnj;i</td>
<td class="align ff-0 fvl- ls-1 ffs-1">&#xfb01;</td>
</tr><tr>
<td class="align ff-0 fvl-n ls- ffs- ">f&zwnj;i</td>
<td class="align ff-0 fvl-n ls- ffs-n">f&zwnj;i</td>
<td class="align ff-0 fvl-n ls- ffs-0">f&zwnj;i</td>
<td class="align ff-0 fvl-n ls- ffs-1">&#xfb01;</td>
<td class="align ff-0 fvl-n ls-0 ffs- ">f&zwnj;i</td>
<td class="align ff-0 fvl-n ls-0 ffs-n">f&zwnj;i</td>
<td class="align ff-0 fvl-n ls-0 ffs-0">f&zwnj;i</td>
<td class="align ff-0 fvl-n ls-0 ffs-1">&#xfb01;</td>
<td class="align ff-0 fvl-n ls-1 ffs- ">f&zwnj;i</td>
<td class="align ff-0 fvl-n ls-1 ffs-n">f&zwnj;i</td>
<td class="align ff-0 fvl-n ls-1 ffs-0">f&zwnj;i</td>
<td class="align ff-0 fvl-n ls-1 ffs-1">&#xfb01;</td>
</tr><tr>
<td class="align ff-0 fvl-0 ls- ffs- ">f&zwnj;i</td>
<td class="align ff-0 fvl-0 ls- ffs-n">f&zwnj;i</td>
<td class="align ff-0 fvl-0 ls- ffs-0">f&zwnj;i</td>
<td class="align ff-0 fvl-0 ls- ffs-1">&#xfb01;</td>
<td class="align ff-0 fvl-0 ls-0 ffs- ">f&zwnj;i</td>
<td class="align ff-0 fvl-0 ls-0 ffs-n">f&zwnj;i</td>
<td class="align ff-0 fvl-0 ls-0 ffs-0">f&zwnj;i</td>
<td class="align ff-0 fvl-0 ls-0 ffs-1">&#xfb01;</td>
<td class="align ff-0 fvl-0 ls-1 ffs- ">f&zwnj;i</td>
<td class="align ff-0 fvl-0 ls-1 ffs-n">f&zwnj;i</td>
<td class="align ff-0 fvl-0 ls-1 ffs-0">f&zwnj;i</td>
<td class="align ff-0 fvl-0 ls-1 ffs-1">&#xfb01;</td>
</tr><tr>
<td class="align ff-0 fvl-1 ls- ffs- ">&#xfb01;</td>
<td class="align ff-0 fvl-1 ls- ffs-n">&#xfb01;</td>
<td class="align ff-0 fvl-1 ls- ffs-0">f&zwnj;i</td>
<td class="align ff-0 fvl-1 ls- ffs-1">&#xfb01;</td>
<td class="align ff-0 fvl-1 ls-0 ffs- ">&#xfb01;</td>
<td class="align ff-0 fvl-1 ls-0 ffs-n">&#xfb01;</td>
<td class="align ff-0 fvl-1 ls-0 ffs-0">f&zwnj;i</td>
<td class="align ff-0 fvl-1 ls-0 ffs-1">&#xfb01;</td>
<td class="align ff-0 fvl-1 ls-1 ffs- ">f&zwnj;i</td>
<td class="align ff-0 fvl-1 ls-1 ffs-n">f&zwnj;i</td>
<td class="align ff-0 fvl-1 ls-1 ffs-0">f&zwnj;i</td>
<td class="align ff-0 fvl-1 ls-1 ffs-1">&#xfb01;</td>
</tr><tr>
<td class="align ff-1 fvl- ls- ffs- ">&#xfb01;</td>
<td class="align ff-1 fvl- ls- ffs-n">&#xfb01;</td>
<td class="align ff-1 fvl- ls- ffs-0">f&zwnj;i</td>
<td class="align ff-1 fvl- ls- ffs-1">&#xfb01;</td>
<td class="align ff-1 fvl- ls-0 ffs- ">&#xfb01;</td>
<td class="align ff-1 fvl- ls-0 ffs-n">&#xfb01;</td>
<td class="align ff-1 fvl- ls-0 ffs-0">f&zwnj;i</td>
<td class="align ff-1 fvl- ls-0 ffs-1">&#xfb01;</td>
<td class="align ff-1 fvl- ls-1 ffs- ">f&zwnj;i</td>
<td class="align ff-1 fvl- ls-1 ffs-n">f&zwnj;i</td>
<td class="align ff-1 fvl- ls-1 ffs-0">f&zwnj;i</td>
<td class="align ff-1 fvl- ls-1 ffs-1">&#xfb01;</td>
</tr><tr>
<td class="align ff-1 fvl-n ls- ffs- ">&#xfb01;</td>
<td class="align ff-1 fvl-n ls- ffs-n">&#xfb01;</td>
<td class="align ff-1 fvl-n ls- ffs-0">f&zwnj;i</td>
<td class="align ff-1 fvl-n ls- ffs-1">&#xfb01;</td>
<td class="align ff-1 fvl-n ls-0 ffs- ">&#xfb01;</td>
<td class="align ff-1 fvl-n ls-0 ffs-n">&#xfb01;</td>
<td class="align ff-1 fvl-n ls-0 ffs-0">f&zwnj;i</td>
<td class="align ff-1 fvl-n ls-0 ffs-1">&#xfb01;</td>
<td class="align ff-1 fvl-n ls-1 ffs- ">f&zwnj;i</td>
<td class="align ff-1 fvl-n ls-1 ffs-n">f&zwnj;i</td>
<td class="align ff-1 fvl-n ls-1 ffs-0">f&zwnj;i</td>
<td class="align ff-1 fvl-n ls-1 ffs-1">&#xfb01;</td>
</tr><tr>
<td class="align ff-1 fvl-0 ls- ffs- ">f&zwnj;i</td>
<td class="align ff-1 fvl-0 ls- ffs-n">f&zwnj;i</td>
<td class="align ff-1 fvl-0 ls- ffs-0">f&zwnj;i</td>
<td class="align ff-1 fvl-0 ls- ffs-1">&#xfb01;</td>
<td class="align ff-1 fvl-0 ls-0 ffs- ">f&zwnj;i</td>
<td class="align ff-1 fvl-0 ls-0 ffs-n">f&zwnj;i</td>
<td class="align ff-1 fvl-0 ls-0 ffs-0">f&zwnj;i</td>
<td class="align ff-1 fvl-0 ls-0 ffs-1">&#xfb01;</td>
<td class="align ff-1 fvl-0 ls-1 ffs- ">f&zwnj;i</td>
<td class="align ff-1 fvl-0 ls-1 ffs-n">f&zwnj;i</td>
<td class="align ff-1 fvl-0 ls-1 ffs-0">f&zwnj;i</td>
<td class="align ff-1 fvl-0 ls-1 ffs-1">&#xfb01;</td>
</tr><tr>
<td class="align ff-1 fvl-1 ls- ffs- ">&#xfb01;</td>
<td class="align ff-1 fvl-1 ls- ffs-n">&#xfb01;</td>
<td class="align ff-1 fvl-1 ls- ffs-0">f&zwnj;i</td>
<td class="align ff-1 fvl-1 ls- ffs-1">&#xfb01;</td>
<td class="align ff-1 fvl-1 ls-0 ffs- ">&#xfb01;</td>
<td class="align ff-1 fvl-1 ls-0 ffs-n">&#xfb01;</td>
<td class="align ff-1 fvl-1 ls-0 ffs-0">f&zwnj;i</td>
<td class="align ff-1 fvl-1 ls-0 ffs-1">&#xfb01;</td>
<td class="align ff-1 fvl-1 ls-1 ffs- ">f&zwnj;i</td>
<td class="align ff-1 fvl-1 ls-1 ffs-n">f&zwnj;i</td>
<td class="align ff-1 fvl-1 ls-1 ffs-0">f&zwnj;i</td>
<td class="align ff-1 fvl-1 ls-1 ffs-1">&#xfb01;</td>
</tr></table>
</body>
</html>

View file

@ -0,0 +1,383 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>CSS Test: feature property settings are resolved in the correct order for 'liga'.</title>
<link rel="author" title="Ben Wagner" href="bungeman@chromium.org" />
<link rel="help" href="https://www.w3.org/TR/css-fonts-3/#feature-precedence" />
<link rel="match" href="font-feature-resolution-001-ref.html" />
<meta name="assert" content="default < @font-face < font-variant < letter-spacing < font-feature-settings" />
<style>
@font-face {
font-family: lato-ffs-;
src: url(support/fonts/Lato-Medium.ttf);
}
@font-face {
font-family: lato-ffs-0;
src: url(support/fonts/Lato-Medium.ttf);
font-feature-settings: 'liga' off;
}
@font-face {
font-family: lato-ffs-1;
src: url(support/fonts/Lato-Medium.ttf);
font-feature-settings: 'liga' on;
}
.test, .ref {
font-family: lato-ffs-;
font-size: 2em;
position: absolute;
}
.test { color: green; }
.ref { color: red; }
.align { width: 1em; }
.ff- { font-family: lato-ffs- ; }
.ff-0 { font-family: lato-ffs-0; }
.ff-1 { font-family: lato-ffs-1; }
.fvl- { }
.fvl-n { font-variant-ligatures: normal; }
.fvl-0 { font-variant-ligatures: no-common-ligatures; }
.fvl-1 { font-variant-ligatures: common-ligatures; }
.ls- { }
.ls-0 { letter-spacing: 0em; }
.ls-1 { letter-spacing: 0.1em; }
.ffs- { }
.ffs-n { font-feature-settings: normal; }
.ffs-0 { font-feature-settings: 'liga' off; }
.ffs-1 { font-feature-settings: 'liga' on; }
</style>
</head>
<body>
<p>Test passes if there is no red visible.</p>
<table class="ref"><tr>
<td class="align ff- fvl- ls- ffs- ">&#xfb01;</td>
<td class="align ff- fvl- ls- ffs-n">&#xfb01;</td>
<td class="align ff- fvl- ls- ffs-0">f&zwnj;i</td>
<td class="align ff- fvl- ls- ffs-1">&#xfb01;</td>
<td class="align ff- fvl- ls-0 ffs- ">&#xfb01;</td>
<td class="align ff- fvl- ls-0 ffs-n">&#xfb01;</td>
<td class="align ff- fvl- ls-0 ffs-0">f&zwnj;i</td>
<td class="align ff- fvl- ls-0 ffs-1">&#xfb01;</td>
<td class="align ff- fvl- ls-1 ffs- ">f&zwnj;i</td>
<td class="align ff- fvl- ls-1 ffs-n">f&zwnj;i</td>
<td class="align ff- fvl- ls-1 ffs-0">f&zwnj;i</td>
<td class="align ff- fvl- ls-1 ffs-1">&#xfb01;</td>
</tr><tr>
<td class="align ff- fvl-n ls- ffs- ">&#xfb01;</td>
<td class="align ff- fvl-n ls- ffs-n">&#xfb01;</td>
<td class="align ff- fvl-n ls- ffs-0">f&zwnj;i</td>
<td class="align ff- fvl-n ls- ffs-1">&#xfb01;</td>
<td class="align ff- fvl-n ls-0 ffs- ">&#xfb01;</td>
<td class="align ff- fvl-n ls-0 ffs-n">&#xfb01;</td>
<td class="align ff- fvl-n ls-0 ffs-0">f&zwnj;i</td>
<td class="align ff- fvl-n ls-0 ffs-1">&#xfb01;</td>
<td class="align ff- fvl-n ls-1 ffs- ">f&zwnj;i</td>
<td class="align ff- fvl-n ls-1 ffs-n">f&zwnj;i</td>
<td class="align ff- fvl-n ls-1 ffs-0">f&zwnj;i</td>
<td class="align ff- fvl-n ls-1 ffs-1">&#xfb01;</td>
</tr><tr>
<td class="align ff- fvl-0 ls- ffs- ">f&zwnj;i</td>
<td class="align ff- fvl-0 ls- ffs-n">f&zwnj;i</td>
<td class="align ff- fvl-0 ls- ffs-0">f&zwnj;i</td>
<td class="align ff- fvl-0 ls- ffs-1">&#xfb01;</td>
<td class="align ff- fvl-0 ls-0 ffs- ">f&zwnj;i</td>
<td class="align ff- fvl-0 ls-0 ffs-n">f&zwnj;i</td>
<td class="align ff- fvl-0 ls-0 ffs-0">f&zwnj;i</td>
<td class="align ff- fvl-0 ls-0 ffs-1">&#xfb01;</td>
<td class="align ff- fvl-0 ls-1 ffs- ">f&zwnj;i</td>
<td class="align ff- fvl-0 ls-1 ffs-n">f&zwnj;i</td>
<td class="align ff- fvl-0 ls-1 ffs-0">f&zwnj;i</td>
<td class="align ff- fvl-0 ls-1 ffs-1">&#xfb01;</td>
</tr><tr>
<td class="align ff- fvl-1 ls- ffs- ">&#xfb01;</td>
<td class="align ff- fvl-1 ls- ffs-n">&#xfb01;</td>
<td class="align ff- fvl-1 ls- ffs-0">f&zwnj;i</td>
<td class="align ff- fvl-1 ls- ffs-1">&#xfb01;</td>
<td class="align ff- fvl-1 ls-0 ffs- ">&#xfb01;</td>
<td class="align ff- fvl-1 ls-0 ffs-n">&#xfb01;</td>
<td class="align ff- fvl-1 ls-0 ffs-0">f&zwnj;i</td>
<td class="align ff- fvl-1 ls-0 ffs-1">&#xfb01;</td>
<td class="align ff- fvl-1 ls-1 ffs- ">f&zwnj;i</td>
<td class="align ff- fvl-1 ls-1 ffs-n">f&zwnj;i</td>
<td class="align ff- fvl-1 ls-1 ffs-0">f&zwnj;i</td>
<td class="align ff- fvl-1 ls-1 ffs-1">&#xfb01;</td>
</tr><tr>
<td class="align ff-0 fvl- ls- ffs- ">f&zwnj;i</td>
<td class="align ff-0 fvl- ls- ffs-n">f&zwnj;i</td>
<td class="align ff-0 fvl- ls- ffs-0">f&zwnj;i</td>
<td class="align ff-0 fvl- ls- ffs-1">&#xfb01;</td>
<td class="align ff-0 fvl- ls-0 ffs- ">f&zwnj;i</td>
<td class="align ff-0 fvl- ls-0 ffs-n">f&zwnj;i</td>
<td class="align ff-0 fvl- ls-0 ffs-0">f&zwnj;i</td>
<td class="align ff-0 fvl- ls-0 ffs-1">&#xfb01;</td>
<td class="align ff-0 fvl- ls-1 ffs- ">f&zwnj;i</td>
<td class="align ff-0 fvl- ls-1 ffs-n">f&zwnj;i</td>
<td class="align ff-0 fvl- ls-1 ffs-0">f&zwnj;i</td>
<td class="align ff-0 fvl- ls-1 ffs-1">&#xfb01;</td>
</tr><tr>
<td class="align ff-0 fvl-n ls- ffs- ">f&zwnj;i</td>
<td class="align ff-0 fvl-n ls- ffs-n">f&zwnj;i</td>
<td class="align ff-0 fvl-n ls- ffs-0">f&zwnj;i</td>
<td class="align ff-0 fvl-n ls- ffs-1">&#xfb01;</td>
<td class="align ff-0 fvl-n ls-0 ffs- ">f&zwnj;i</td>
<td class="align ff-0 fvl-n ls-0 ffs-n">f&zwnj;i</td>
<td class="align ff-0 fvl-n ls-0 ffs-0">f&zwnj;i</td>
<td class="align ff-0 fvl-n ls-0 ffs-1">&#xfb01;</td>
<td class="align ff-0 fvl-n ls-1 ffs- ">f&zwnj;i</td>
<td class="align ff-0 fvl-n ls-1 ffs-n">f&zwnj;i</td>
<td class="align ff-0 fvl-n ls-1 ffs-0">f&zwnj;i</td>
<td class="align ff-0 fvl-n ls-1 ffs-1">&#xfb01;</td>
</tr><tr>
<td class="align ff-0 fvl-0 ls- ffs- ">f&zwnj;i</td>
<td class="align ff-0 fvl-0 ls- ffs-n">f&zwnj;i</td>
<td class="align ff-0 fvl-0 ls- ffs-0">f&zwnj;i</td>
<td class="align ff-0 fvl-0 ls- ffs-1">&#xfb01;</td>
<td class="align ff-0 fvl-0 ls-0 ffs- ">f&zwnj;i</td>
<td class="align ff-0 fvl-0 ls-0 ffs-n">f&zwnj;i</td>
<td class="align ff-0 fvl-0 ls-0 ffs-0">f&zwnj;i</td>
<td class="align ff-0 fvl-0 ls-0 ffs-1">&#xfb01;</td>
<td class="align ff-0 fvl-0 ls-1 ffs- ">f&zwnj;i</td>
<td class="align ff-0 fvl-0 ls-1 ffs-n">f&zwnj;i</td>
<td class="align ff-0 fvl-0 ls-1 ffs-0">f&zwnj;i</td>
<td class="align ff-0 fvl-0 ls-1 ffs-1">&#xfb01;</td>
</tr><tr>
<td class="align ff-0 fvl-1 ls- ffs- ">&#xfb01;</td>
<td class="align ff-0 fvl-1 ls- ffs-n">&#xfb01;</td>
<td class="align ff-0 fvl-1 ls- ffs-0">f&zwnj;i</td>
<td class="align ff-0 fvl-1 ls- ffs-1">&#xfb01;</td>
<td class="align ff-0 fvl-1 ls-0 ffs- ">&#xfb01;</td>
<td class="align ff-0 fvl-1 ls-0 ffs-n">&#xfb01;</td>
<td class="align ff-0 fvl-1 ls-0 ffs-0">f&zwnj;i</td>
<td class="align ff-0 fvl-1 ls-0 ffs-1">&#xfb01;</td>
<td class="align ff-0 fvl-1 ls-1 ffs- ">f&zwnj;i</td>
<td class="align ff-0 fvl-1 ls-1 ffs-n">f&zwnj;i</td>
<td class="align ff-0 fvl-1 ls-1 ffs-0">f&zwnj;i</td>
<td class="align ff-0 fvl-1 ls-1 ffs-1">&#xfb01;</td>
</tr><tr>
<td class="align ff-1 fvl- ls- ffs- ">&#xfb01;</td>
<td class="align ff-1 fvl- ls- ffs-n">&#xfb01;</td>
<td class="align ff-1 fvl- ls- ffs-0">f&zwnj;i</td>
<td class="align ff-1 fvl- ls- ffs-1">&#xfb01;</td>
<td class="align ff-1 fvl- ls-0 ffs- ">&#xfb01;</td>
<td class="align ff-1 fvl- ls-0 ffs-n">&#xfb01;</td>
<td class="align ff-1 fvl- ls-0 ffs-0">f&zwnj;i</td>
<td class="align ff-1 fvl- ls-0 ffs-1">&#xfb01;</td>
<td class="align ff-1 fvl- ls-1 ffs- ">f&zwnj;i</td>
<td class="align ff-1 fvl- ls-1 ffs-n">f&zwnj;i</td>
<td class="align ff-1 fvl- ls-1 ffs-0">f&zwnj;i</td>
<td class="align ff-1 fvl- ls-1 ffs-1">&#xfb01;</td>
</tr><tr>
<td class="align ff-1 fvl-n ls- ffs- ">&#xfb01;</td>
<td class="align ff-1 fvl-n ls- ffs-n">&#xfb01;</td>
<td class="align ff-1 fvl-n ls- ffs-0">f&zwnj;i</td>
<td class="align ff-1 fvl-n ls- ffs-1">&#xfb01;</td>
<td class="align ff-1 fvl-n ls-0 ffs- ">&#xfb01;</td>
<td class="align ff-1 fvl-n ls-0 ffs-n">&#xfb01;</td>
<td class="align ff-1 fvl-n ls-0 ffs-0">f&zwnj;i</td>
<td class="align ff-1 fvl-n ls-0 ffs-1">&#xfb01;</td>
<td class="align ff-1 fvl-n ls-1 ffs- ">f&zwnj;i</td>
<td class="align ff-1 fvl-n ls-1 ffs-n">f&zwnj;i</td>
<td class="align ff-1 fvl-n ls-1 ffs-0">f&zwnj;i</td>
<td class="align ff-1 fvl-n ls-1 ffs-1">&#xfb01;</td>
</tr><tr>
<td class="align ff-1 fvl-0 ls- ffs- ">f&zwnj;i</td>
<td class="align ff-1 fvl-0 ls- ffs-n">f&zwnj;i</td>
<td class="align ff-1 fvl-0 ls- ffs-0">f&zwnj;i</td>
<td class="align ff-1 fvl-0 ls- ffs-1">&#xfb01;</td>
<td class="align ff-1 fvl-0 ls-0 ffs- ">f&zwnj;i</td>
<td class="align ff-1 fvl-0 ls-0 ffs-n">f&zwnj;i</td>
<td class="align ff-1 fvl-0 ls-0 ffs-0">f&zwnj;i</td>
<td class="align ff-1 fvl-0 ls-0 ffs-1">&#xfb01;</td>
<td class="align ff-1 fvl-0 ls-1 ffs- ">f&zwnj;i</td>
<td class="align ff-1 fvl-0 ls-1 ffs-n">f&zwnj;i</td>
<td class="align ff-1 fvl-0 ls-1 ffs-0">f&zwnj;i</td>
<td class="align ff-1 fvl-0 ls-1 ffs-1">&#xfb01;</td>
</tr><tr>
<td class="align ff-1 fvl-1 ls- ffs- ">&#xfb01;</td>
<td class="align ff-1 fvl-1 ls- ffs-n">&#xfb01;</td>
<td class="align ff-1 fvl-1 ls- ffs-0">f&zwnj;i</td>
<td class="align ff-1 fvl-1 ls- ffs-1">&#xfb01;</td>
<td class="align ff-1 fvl-1 ls-0 ffs- ">&#xfb01;</td>
<td class="align ff-1 fvl-1 ls-0 ffs-n">&#xfb01;</td>
<td class="align ff-1 fvl-1 ls-0 ffs-0">f&zwnj;i</td>
<td class="align ff-1 fvl-1 ls-0 ffs-1">&#xfb01;</td>
<td class="align ff-1 fvl-1 ls-1 ffs- ">f&zwnj;i</td>
<td class="align ff-1 fvl-1 ls-1 ffs-n">f&zwnj;i</td>
<td class="align ff-1 fvl-1 ls-1 ffs-0">f&zwnj;i</td>
<td class="align ff-1 fvl-1 ls-1 ffs-1">&#xfb01;</td>
</tr></table>
<table class="test"><tr>
<td class="align ff- fvl- ls- ffs- ">fi</td>
<td class="align ff- fvl- ls- ffs-n">fi</td>
<td class="align ff- fvl- ls- ffs-0">fi</td>
<td class="align ff- fvl- ls- ffs-1">fi</td>
<td class="align ff- fvl- ls-0 ffs- ">fi</td>
<td class="align ff- fvl- ls-0 ffs-n">fi</td>
<td class="align ff- fvl- ls-0 ffs-0">fi</td>
<td class="align ff- fvl- ls-0 ffs-1">fi</td>
<td class="align ff- fvl- ls-1 ffs- ">fi</td>
<td class="align ff- fvl- ls-1 ffs-n">fi</td>
<td class="align ff- fvl- ls-1 ffs-0">fi</td>
<td class="align ff- fvl- ls-1 ffs-1">fi</td>
</tr><tr>
<td class="align ff- fvl-n ls- ffs- ">fi</td>
<td class="align ff- fvl-n ls- ffs-n">fi</td>
<td class="align ff- fvl-n ls- ffs-0">fi</td>
<td class="align ff- fvl-n ls- ffs-1">fi</td>
<td class="align ff- fvl-n ls-0 ffs- ">fi</td>
<td class="align ff- fvl-n ls-0 ffs-n">fi</td>
<td class="align ff- fvl-n ls-0 ffs-0">fi</td>
<td class="align ff- fvl-n ls-0 ffs-1">fi</td>
<td class="align ff- fvl-n ls-1 ffs- ">fi</td>
<td class="align ff- fvl-n ls-1 ffs-n">fi</td>
<td class="align ff- fvl-n ls-1 ffs-0">fi</td>
<td class="align ff- fvl-n ls-1 ffs-1">fi</td>
</tr><tr>
<td class="align ff- fvl-0 ls- ffs- ">fi</td>
<td class="align ff- fvl-0 ls- ffs-n">fi</td>
<td class="align ff- fvl-0 ls- ffs-0">fi</td>
<td class="align ff- fvl-0 ls- ffs-1">fi</td>
<td class="align ff- fvl-0 ls-0 ffs- ">fi</td>
<td class="align ff- fvl-0 ls-0 ffs-n">fi</td>
<td class="align ff- fvl-0 ls-0 ffs-0">fi</td>
<td class="align ff- fvl-0 ls-0 ffs-1">fi</td>
<td class="align ff- fvl-0 ls-1 ffs- ">fi</td>
<td class="align ff- fvl-0 ls-1 ffs-n">fi</td>
<td class="align ff- fvl-0 ls-1 ffs-0">fi</td>
<td class="align ff- fvl-0 ls-1 ffs-1">fi</td>
</tr><tr>
<td class="align ff- fvl-1 ls- ffs- ">fi</td>
<td class="align ff- fvl-1 ls- ffs-n">fi</td>
<td class="align ff- fvl-1 ls- ffs-0">fi</td>
<td class="align ff- fvl-1 ls- ffs-1">fi</td>
<td class="align ff- fvl-1 ls-0 ffs- ">fi</td>
<td class="align ff- fvl-1 ls-0 ffs-n">fi</td>
<td class="align ff- fvl-1 ls-0 ffs-0">fi</td>
<td class="align ff- fvl-1 ls-0 ffs-1">fi</td>
<td class="align ff- fvl-1 ls-1 ffs- ">fi</td>
<td class="align ff- fvl-1 ls-1 ffs-n">fi</td>
<td class="align ff- fvl-1 ls-1 ffs-0">fi</td>
<td class="align ff- fvl-1 ls-1 ffs-1">fi</td>
</tr><tr>
<td class="align ff-0 fvl- ls- ffs- ">fi</td>
<td class="align ff-0 fvl- ls- ffs-n">fi</td>
<td class="align ff-0 fvl- ls- ffs-0">fi</td>
<td class="align ff-0 fvl- ls- ffs-1">fi</td>
<td class="align ff-0 fvl- ls-0 ffs- ">fi</td>
<td class="align ff-0 fvl- ls-0 ffs-n">fi</td>
<td class="align ff-0 fvl- ls-0 ffs-0">fi</td>
<td class="align ff-0 fvl- ls-0 ffs-1">fi</td>
<td class="align ff-0 fvl- ls-1 ffs- ">fi</td>
<td class="align ff-0 fvl- ls-1 ffs-n">fi</td>
<td class="align ff-0 fvl- ls-1 ffs-0">fi</td>
<td class="align ff-0 fvl- ls-1 ffs-1">fi</td>
</tr><tr>
<td class="align ff-0 fvl-n ls- ffs- ">fi</td>
<td class="align ff-0 fvl-n ls- ffs-n">fi</td>
<td class="align ff-0 fvl-n ls- ffs-0">fi</td>
<td class="align ff-0 fvl-n ls- ffs-1">fi</td>
<td class="align ff-0 fvl-n ls-0 ffs- ">fi</td>
<td class="align ff-0 fvl-n ls-0 ffs-n">fi</td>
<td class="align ff-0 fvl-n ls-0 ffs-0">fi</td>
<td class="align ff-0 fvl-n ls-0 ffs-1">fi</td>
<td class="align ff-0 fvl-n ls-1 ffs- ">fi</td>
<td class="align ff-0 fvl-n ls-1 ffs-n">fi</td>
<td class="align ff-0 fvl-n ls-1 ffs-0">fi</td>
<td class="align ff-0 fvl-n ls-1 ffs-1">fi</td>
</tr><tr>
<td class="align ff-0 fvl-0 ls- ffs- ">fi</td>
<td class="align ff-0 fvl-0 ls- ffs-n">fi</td>
<td class="align ff-0 fvl-0 ls- ffs-0">fi</td>
<td class="align ff-0 fvl-0 ls- ffs-1">fi</td>
<td class="align ff-0 fvl-0 ls-0 ffs- ">fi</td>
<td class="align ff-0 fvl-0 ls-0 ffs-n">fi</td>
<td class="align ff-0 fvl-0 ls-0 ffs-0">fi</td>
<td class="align ff-0 fvl-0 ls-0 ffs-1">fi</td>
<td class="align ff-0 fvl-0 ls-1 ffs- ">fi</td>
<td class="align ff-0 fvl-0 ls-1 ffs-n">fi</td>
<td class="align ff-0 fvl-0 ls-1 ffs-0">fi</td>
<td class="align ff-0 fvl-0 ls-1 ffs-1">fi</td>
</tr><tr>
<td class="align ff-0 fvl-1 ls- ffs- ">fi</td>
<td class="align ff-0 fvl-1 ls- ffs-n">fi</td>
<td class="align ff-0 fvl-1 ls- ffs-0">fi</td>
<td class="align ff-0 fvl-1 ls- ffs-1">fi</td>
<td class="align ff-0 fvl-1 ls-0 ffs- ">fi</td>
<td class="align ff-0 fvl-1 ls-0 ffs-n">fi</td>
<td class="align ff-0 fvl-1 ls-0 ffs-0">fi</td>
<td class="align ff-0 fvl-1 ls-0 ffs-1">fi</td>
<td class="align ff-0 fvl-1 ls-1 ffs- ">fi</td>
<td class="align ff-0 fvl-1 ls-1 ffs-n">fi</td>
<td class="align ff-0 fvl-1 ls-1 ffs-0">fi</td>
<td class="align ff-0 fvl-1 ls-1 ffs-1">fi</td>
</tr><tr>
<td class="align ff-1 fvl- ls- ffs- ">fi</td>
<td class="align ff-1 fvl- ls- ffs-n">fi</td>
<td class="align ff-1 fvl- ls- ffs-0">fi</td>
<td class="align ff-1 fvl- ls- ffs-1">fi</td>
<td class="align ff-1 fvl- ls-0 ffs- ">fi</td>
<td class="align ff-1 fvl- ls-0 ffs-n">fi</td>
<td class="align ff-1 fvl- ls-0 ffs-0">fi</td>
<td class="align ff-1 fvl- ls-0 ffs-1">fi</td>
<td class="align ff-1 fvl- ls-1 ffs- ">fi</td>
<td class="align ff-1 fvl- ls-1 ffs-n">fi</td>
<td class="align ff-1 fvl- ls-1 ffs-0">fi</td>
<td class="align ff-1 fvl- ls-1 ffs-1">fi</td>
</tr><tr>
<td class="align ff-1 fvl-n ls- ffs- ">fi</td>
<td class="align ff-1 fvl-n ls- ffs-n">fi</td>
<td class="align ff-1 fvl-n ls- ffs-0">fi</td>
<td class="align ff-1 fvl-n ls- ffs-1">fi</td>
<td class="align ff-1 fvl-n ls-0 ffs- ">fi</td>
<td class="align ff-1 fvl-n ls-0 ffs-n">fi</td>
<td class="align ff-1 fvl-n ls-0 ffs-0">fi</td>
<td class="align ff-1 fvl-n ls-0 ffs-1">fi</td>
<td class="align ff-1 fvl-n ls-1 ffs- ">fi</td>
<td class="align ff-1 fvl-n ls-1 ffs-n">fi</td>
<td class="align ff-1 fvl-n ls-1 ffs-0">fi</td>
<td class="align ff-1 fvl-n ls-1 ffs-1">fi</td>
</tr><tr>
<td class="align ff-1 fvl-0 ls- ffs- ">fi</td>
<td class="align ff-1 fvl-0 ls- ffs-n">fi</td>
<td class="align ff-1 fvl-0 ls- ffs-0">fi</td>
<td class="align ff-1 fvl-0 ls- ffs-1">fi</td>
<td class="align ff-1 fvl-0 ls-0 ffs- ">fi</td>
<td class="align ff-1 fvl-0 ls-0 ffs-n">fi</td>
<td class="align ff-1 fvl-0 ls-0 ffs-0">fi</td>
<td class="align ff-1 fvl-0 ls-0 ffs-1">fi</td>
<td class="align ff-1 fvl-0 ls-1 ffs- ">fi</td>
<td class="align ff-1 fvl-0 ls-1 ffs-n">fi</td>
<td class="align ff-1 fvl-0 ls-1 ffs-0">fi</td>
<td class="align ff-1 fvl-0 ls-1 ffs-1">fi</td>
</tr><tr>
<td class="align ff-1 fvl-1 ls- ffs- ">fi</td>
<td class="align ff-1 fvl-1 ls- ffs-n">fi</td>
<td class="align ff-1 fvl-1 ls- ffs-0">fi</td>
<td class="align ff-1 fvl-1 ls- ffs-1">fi</td>
<td class="align ff-1 fvl-1 ls-0 ffs- ">fi</td>
<td class="align ff-1 fvl-1 ls-0 ffs-n">fi</td>
<td class="align ff-1 fvl-1 ls-0 ffs-0">fi</td>
<td class="align ff-1 fvl-1 ls-0 ffs-1">fi</td>
<td class="align ff-1 fvl-1 ls-1 ffs- ">fi</td>
<td class="align ff-1 fvl-1 ls-1 ffs-n">fi</td>
<td class="align ff-1 fvl-1 ls-1 ffs-0">fi</td>
<td class="align ff-1 fvl-1 ls-1 ffs-1">fi</td>
</tr></table>
</body>
</html>

View file

@ -7,6 +7,7 @@
<link rel="help" href="http://www.w3.org/TR/css3-multicol/#column-gap" title="4.1. 'column-gap'" /> <link rel="help" href="http://www.w3.org/TR/css3-multicol/#column-gap" title="4.1. 'column-gap'" />
<link rel="match" href="multicol-gap-fraction-001-ref.xht" /> <link rel="match" href="multicol-gap-fraction-001-ref.xht" />
<meta name="flags" content="ahem" /> <meta name="flags" content="ahem" />
<meta name="assert" content="Test checks that increasing column gaps display consistently" />
<style type="text/css"><![CDATA[ <style type="text/css"><![CDATA[
div div
{ {

View file

@ -7,6 +7,7 @@
<link rel="help" href="http://www.w3.org/TR/css3-multicol/#column-gap" title="4.1 'column-gap" /> <link rel="help" href="http://www.w3.org/TR/css3-multicol/#column-gap" title="4.1 'column-gap" />
<link rel="match" href="multicol-gap-large-002-ref.xht" /> <link rel="match" href="multicol-gap-large-002-ref.xht" />
<meta name="flags" content="ahem" /> <meta name="flags" content="ahem" />
<meta name="assert" content="This test checks that a large column-gap is supported. We should have two 3.5em columns with a 4em gap between them." />
<style type="text/css"><![CDATA[ <style type="text/css"><![CDATA[
div div
{ {

View file

@ -7,6 +7,7 @@
<link rel="help" href="http://www.w3.org/TR/css3-multicol/#column-gap" title="4.1. 'column-gap'" /> <link rel="help" href="http://www.w3.org/TR/css3-multicol/#column-gap" title="4.1. 'column-gap'" />
<link rel="match" href="multicol-gap-002-ref.xht" /> <link rel="match" href="multicol-gap-002-ref.xht" />
<meta name="flags" content="ahem invalid" /> <meta name="flags" content="ahem invalid" />
<meta name="asset" content="Test checks that a negative value is not allowed for column-gap" />
<style type="text/css"><![CDATA[ <style type="text/css"><![CDATA[
div div
{ {

View file

@ -4,7 +4,7 @@
<title>CSS Multi-column Layout Test: multicolumn and inheritance</title> <title>CSS Multi-column Layout Test: multicolumn and inheritance</title>
<link rel="author" title="Opera Software ASA" href="http://www.opera.com/" /> <link rel="author" title="Opera Software ASA" href="http://www.opera.com/" />
<link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2013-08-08 --> <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2013-08-08 -->
<link rel="help" href="http://www.w3.org/TR/css3-multicol/#pseudo-algorithm" title="3.4 Pseudo-algorithm" /> <link rel="help" href="http://www.w3.org/TR/css3-multicol/#the-number-and-width-of-columns" />
<link rel="match" href="multicol-inherit-001-ref.xht" /> <link rel="match" href="multicol-inherit-001-ref.xht" />
<meta name="flags" content="ahem" /> <meta name="flags" content="ahem" />
<style type="text/css"><![CDATA[ <style type="text/css"><![CDATA[

View file

@ -7,7 +7,7 @@
<link rel="help" href="http://www.w3.org/TR/css3-multicol/#the-multi-column-model" title="2. The multi-column model" /> <link rel="help" href="http://www.w3.org/TR/css3-multicol/#the-multi-column-model" title="2. The multi-column model" />
<link rel="match" href="multicol-margin-child-001-ref.xht" /> <link rel="match" href="multicol-margin-child-001-ref.xht" />
<meta name="flags" content="ahem" /> <meta name="flags" content="ahem" />
<meta name="assert" content="This test checks that the margin-bottom of a block child in a multi-column element will collapse with the margin-top of a following block child of that same multi-colum element if those children are vertically adjacent and if no line boxes, no clearance, no padding and no border separate them." /> <meta name="assert" content="This test checks that the margin-bottom of a block child in a multi-column element will collapse with the margin-top of a following block child of that same multi-column element if those children are vertically adjacent and if no line boxes, no clearance, no padding and no border separate them." />
<style type="text/css"><![CDATA[ <style type="text/css"><![CDATA[
div div
{ {

View file

@ -6,6 +6,7 @@
<link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2013-08-27 --> <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2013-08-27 -->
<link rel="help" href="http://www.w3.org/TR/css3-multicol/#column-rule" title="4.5 'column-rule'" /> <link rel="help" href="http://www.w3.org/TR/css3-multicol/#column-rule" title="4.5 'column-rule'" />
<link rel="match" href="multicol-rule-000-ref.xht" /> <link rel="match" href="multicol-rule-000-ref.xht" />
<meta name="assert" content="This test checks that the shorthand column-rule property draws the rule correctly." />
<meta name="flags" content="ahem" /> <meta name="flags" content="ahem" />
<style type="text/css"><![CDATA[ <style type="text/css"><![CDATA[
div div

View file

@ -6,6 +6,7 @@
<link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2013-08-14 --> <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2013-08-14 -->
<link rel="help" href="http://www.w3.org/TR/css3-multicol/#column-gaps-and-rules" title="4. Column gaps and rules" /> <link rel="help" href="http://www.w3.org/TR/css3-multicol/#column-gaps-and-rules" title="4. Column gaps and rules" />
<link rel="match" href="multicol-rule-003-ref.xht" /> <link rel="match" href="multicol-rule-003-ref.xht" />
<meta name="assert" content="Tests that the three column-rule-* longhand properties are correctly applied." />
<meta name="flags" content="ahem" /> <meta name="flags" content="ahem" />
<style type="text/css"><![CDATA[ <style type="text/css"><![CDATA[
div div

View file

@ -7,6 +7,7 @@
<link rel="help" href="http://www.w3.org/TR/css3-multicol/#column-rule" title="4.5 'column-rule'" /> <link rel="help" href="http://www.w3.org/TR/css3-multicol/#column-rule" title="4.5 'column-rule'" />
<link rel="match" href="multicol-rule-color-001-ref.xht" /> <link rel="match" href="multicol-rule-color-001-ref.xht" />
<meta name="flags" content="ahem" /> <meta name="flags" content="ahem" />
<meta name="assert" content="Basic test that the column-rule-color property is applied." />
<style type="text/css"><![CDATA[ <style type="text/css"><![CDATA[
div div
{ {

View file

@ -7,6 +7,7 @@
<link rel="help" href="http://www.w3.org/TR/css3-multicol/#column-rule" title="4.5 'column-rule'" /> <link rel="help" href="http://www.w3.org/TR/css3-multicol/#column-rule" title="4.5 'column-rule'" />
<link rel="match" href="multicol-rule-dashed-000-ref.xht" /> <link rel="match" href="multicol-rule-dashed-000-ref.xht" />
<meta name="flags" content="ahem" /> <meta name="flags" content="ahem" />
<meta name="assert" content="Tests that the dashed value of column-rule-style is correctly rendered when used in the shorthand column-rule property." />
<style type="text/css"><![CDATA[ <style type="text/css"><![CDATA[
div div
{ {

View file

@ -6,6 +6,7 @@
<link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2013-08-27 --> <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2013-08-27 -->
<link rel="help" href="http://www.w3.org/TR/css3-multicol/#column-rule" title="4.5 'column-rule'" /> <link rel="help" href="http://www.w3.org/TR/css3-multicol/#column-rule" title="4.5 'column-rule'" />
<link rel="match" href="multicol-rule-dotted-000-ref.xht" /> <link rel="match" href="multicol-rule-dotted-000-ref.xht" />
<meta name="assert" content="Tests that the dotted value of column-rule-style is correctly rendered when used in the shorthand column-rule property." />
<meta name="flags" content="ahem" /> <meta name="flags" content="ahem" />
<style type="text/css"><![CDATA[ <style type="text/css"><![CDATA[
div div

View file

@ -7,6 +7,7 @@
<link rel="help" href="http://www.w3.org/TR/css3-multicol/#column-rule" title="4.5 'column-rule'" /> <link rel="help" href="http://www.w3.org/TR/css3-multicol/#column-rule" title="4.5 'column-rule'" />
<link rel="match" href="multicol-rule-double-000-ref.xht" /> <link rel="match" href="multicol-rule-double-000-ref.xht" />
<meta name="flags" content="ahem" /> <meta name="flags" content="ahem" />
<meta name="assert" content="Tests that the double value of column-rule-style is correctly rendered when used in the shorthand column-rule property." />
<style type="text/css"><![CDATA[ <style type="text/css"><![CDATA[
div div
{ {

View file

@ -7,6 +7,7 @@
<link rel="help" href="http://www.w3.org/TR/css3-multicol/#crw" title="4.4. 'column-rule-width'" /> <link rel="help" href="http://www.w3.org/TR/css3-multicol/#crw" title="4.4. 'column-rule-width'" />
<link rel="match" href="multicol-rule-fraction-001-ref.xht" /> <link rel="match" href="multicol-rule-fraction-001-ref.xht" />
<meta name="flags" content="ahem" /> <meta name="flags" content="ahem" />
<meta name="assert" content="Basic test for the column-rule-width property, checking that values above 0 but below 1 are allowed." />
<style type="text/css"><![CDATA[ <style type="text/css"><![CDATA[
div div
{ {

View file

@ -7,6 +7,7 @@
<link rel="help" href="http://www.w3.org/TR/css3-multicol/#column-rule" title="4.5 'column-rule'" /> <link rel="help" href="http://www.w3.org/TR/css3-multicol/#column-rule" title="4.5 'column-rule'" />
<link rel="match" href="multicol-rule-groove-000-ref.xht" /> <link rel="match" href="multicol-rule-groove-000-ref.xht" />
<meta name="flags" content="ahem" /> <meta name="flags" content="ahem" />
<meta name="assert" content="Test checks that the value of 'groove' for 'column-rule-style' is drawn correctly." />
<style type="text/css"><![CDATA[ <style type="text/css"><![CDATA[
div div
{ {

View file

@ -7,6 +7,7 @@
<link rel="help" href="http://www.w3.org/TR/css3-multicol/#column-rule" title="4.5 'column-rule'" /> <link rel="help" href="http://www.w3.org/TR/css3-multicol/#column-rule" title="4.5 'column-rule'" />
<link rel="match" href="multicol-rule-hidden-000-ref.xht" /> <link rel="match" href="multicol-rule-hidden-000-ref.xht" />
<meta name="flags" content="ahem" /> <meta name="flags" content="ahem" />
<meta name="assert" content="Test checks that a column-rule-width value of hidden results in no rule being drawn." />
<style type="text/css"><![CDATA[ <style type="text/css"><![CDATA[
div div
{ {

View file

@ -7,6 +7,7 @@
<link rel="help" href="http://www.w3.org/TR/css3-multicol/#column-rule" title="4.5 'column-rule'" /> <link rel="help" href="http://www.w3.org/TR/css3-multicol/#column-rule" title="4.5 'column-rule'" />
<link rel="match" href="multicol-rule-hidden-000-ref.xht" /> <link rel="match" href="multicol-rule-hidden-000-ref.xht" />
<meta name="flags" content="ahem" /> <meta name="flags" content="ahem" />
<meta name="assert" content="Test checks that a column-rule-width value of none results in no rule being drawn." />
<style type="text/css"><![CDATA[ <style type="text/css"><![CDATA[
div div
{ {

View file

@ -7,6 +7,7 @@
<link rel="help" href="http://www.w3.org/TR/css3-multicol/#column-gaps-and-rules"/> <link rel="help" href="http://www.w3.org/TR/css3-multicol/#column-gaps-and-rules"/>
<link rel="match" href="multicol-rule-ref.xht"/> <link rel="match" href="multicol-rule-ref.xht"/>
<meta name="flags" content="ahem"/> <meta name="flags" content="ahem"/>
<meta name="assert" content="Test checks that a column-rule-width value set in pixels is rendered correctly. The width of the rule should be 16px." />
<style type="text/css"><![CDATA[ <style type="text/css"><![CDATA[
body { body {
margin: 0; margin: 0;

View file

@ -7,6 +7,7 @@
<link rel="help" href="http://www.w3.org/TR/css3-multicol/#column-rule" title="4.5 'column-rule'" /> <link rel="help" href="http://www.w3.org/TR/css3-multicol/#column-rule" title="4.5 'column-rule'" />
<link rel="match" href="multicol-rule-ridge-000-ref.xht" /> <link rel="match" href="multicol-rule-ridge-000-ref.xht" />
<meta name="flags" content="ahem" /> <meta name="flags" content="ahem" />
<meta name="assert" content="Test checks that the value of 'ridge' for 'column-rule-style' is drawn correctly." />
<style type="text/css"><![CDATA[ <style type="text/css"><![CDATA[
div div
{ {

View file

@ -7,6 +7,7 @@
<link rel="help" href="http://www.w3.org/TR/css3-multicol/#crw" title="4.4. 'column-rule-width'" /> <link rel="help" href="http://www.w3.org/TR/css3-multicol/#crw" title="4.4. 'column-rule-width'" />
<link rel="match" href="multicol-rule-samelength-001-ref.xht" /> <link rel="match" href="multicol-rule-samelength-001-ref.xht" />
<meta name="flags" content="ahem" /> <meta name="flags" content="ahem" />
<meta name="assert" content="Test that a gap of 5em and a column-rule-width of 5em both take up the same space." />
<style type="text/css"><![CDATA[ <style type="text/css"><![CDATA[
body {margin: 8px;} body {margin: 8px;}

View file

@ -7,6 +7,7 @@
<link rel="help" href="http://www.w3.org/TR/css3-multicol/#crw" title="4.4. 'column-rule-width'" /> <link rel="help" href="http://www.w3.org/TR/css3-multicol/#crw" title="4.4. 'column-rule-width'" />
<link rel="match" href="multicol-rule-samelength-001-ref.xht" /> <link rel="match" href="multicol-rule-samelength-001-ref.xht" />
<meta name="flags" content="ahem invalid" /> <meta name="flags" content="ahem invalid" />
<meta name="assert" content="Tests that column rules are not displayed for invalid properties and values."/>
<style type="text/css"><![CDATA[ <style type="text/css"><![CDATA[
body {margin: 8px;} body {margin: 8px;}

View file

@ -7,7 +7,7 @@
<link rel="help" href=""/> <link rel="help" href=""/>
<link rel="match" href="multicol-rule-shorthand-2-ref.xht"/> <link rel="match" href="multicol-rule-shorthand-2-ref.xht"/>
<meta name="assert" content="Tests that column rules are not displayed for invalid properties and values."/> <meta name="assert" content="Tests that column rules are not displayed for invalid properties and values."/>
<meta name="flags" content="invalid"/> <meta name="flags" content="ahem invalid"/>
<style type="text/css"><![CDATA[ <style type="text/css"><![CDATA[
body { body {
margin: 1em; margin: 1em;

View file

@ -7,6 +7,7 @@
<link rel="help" href="http://www.w3.org/TR/css3-multicol/#column-rule" title="4.5 'column-rule'" /> <link rel="help" href="http://www.w3.org/TR/css3-multicol/#column-rule" title="4.5 'column-rule'" />
<link rel="match" href="multicol-rule-solid-000-ref.xht" /> <link rel="match" href="multicol-rule-solid-000-ref.xht" />
<meta name="flags" content="ahem" /> <meta name="flags" content="ahem" />
<meta name="assert" content="Test checks that a column-rule-style value set as 'solid' is rendered correctly." />
<style type="text/css"><![CDATA[ <style type="text/css"><![CDATA[
div div
{ {

View file

@ -7,6 +7,7 @@
<link rel="help" href="http://www.w3.org/TR/css3-multicol/#column-gaps-and-rules"/> <link rel="help" href="http://www.w3.org/TR/css3-multicol/#column-gaps-and-rules"/>
<link rel="match" href="multicol-rule-stacking-ref.xht"/> <link rel="match" href="multicol-rule-stacking-ref.xht"/>
<meta name="flags" content="ahem"/> <meta name="flags" content="ahem"/>
<meta name="assert" content="The test checks that the span element, which has a higher 'z-index' stacks on top of the other elements in the multicol container." />
<style type="text/css"><![CDATA[ <style type="text/css"><![CDATA[
body { body {
margin: 0; margin: 0;
@ -20,8 +21,6 @@ body>div {
margin: 1em; margin: 1em;
border: 1em solid gray; border: 1em solid gray;
width: 14em; width: 14em;
orphans: 1;
widows: 1;
column-count: 4; column-count: 4;
column-gap: 1em; column-gap: 1em;

View file

@ -7,6 +7,7 @@
<link rel="help" href="http://www.w3.org/TR/css3-multicol/#the-number-and-width-of-columns"/> <link rel="help" href="http://www.w3.org/TR/css3-multicol/#the-number-and-width-of-columns"/>
<link rel="match" href="multicol-rule-ref.xht"/> <link rel="match" href="multicol-rule-ref.xht"/>
<meta name="flags" content="ahem invalid"/> <meta name="flags" content="ahem invalid"/>
<meta name="assert" content="Testing that invalid property names used as a shorthand do not result in column-rules being displayed." />
<style type="text/css"><![CDATA[ <style type="text/css"><![CDATA[
body { body {
margin: 0; margin: 0;
@ -26,8 +27,8 @@ body>div {
column-count: 4; column-count: 4;
column-gap: 1em; column-gap: 1em;
column-rule: solid blue 1em; column-rule: solid blue 1em;
column: normal red 1em; column: normal red 1em; /* column is not a valid property */
columns: normal red 1em; columns: normal red 1em; /* columns is a shorthand for colun-width and column-count */
} }
span { span {
background: blue; background: blue;

View file

@ -7,6 +7,7 @@
<link rel="help" href="http://www.w3.org/TR/css3-multicol/#column-rule" title="4.5 'column-rule'" /> <link rel="help" href="http://www.w3.org/TR/css3-multicol/#column-rule" title="4.5 'column-rule'" />
<link rel="match" href="multicol-span-000-ref.xht" /> <link rel="match" href="multicol-span-000-ref.xht" />
<meta name="flags" content="ahem image" /> <meta name="flags" content="ahem image" />
<meta name="assert" content="Tests that the element with an id of 'column-span' spans across all columns." />
<style type="text/css"><![CDATA[ <style type="text/css"><![CDATA[
div div
{ {

View file

@ -7,6 +7,7 @@
<link rel="help" href="http://www.w3.org/TR/css3-multicol/#column-span" title="6.1. 'column-span'" /> <link rel="help" href="http://www.w3.org/TR/css3-multicol/#column-span" title="6.1. 'column-span'" />
<link rel="match" href="multicol-span-all-001-ref.xht" /> <link rel="match" href="multicol-span-all-001-ref.xht" />
<meta name="flags" content="ahem" /> <meta name="flags" content="ahem" />
<meta name="assert" content="Tests that the h4 set to 'column-span: all' spans across all columns resulting in a black bar across the multicol container." />
<style type="text/css"><![CDATA[ <style type="text/css"><![CDATA[
div div
{ {

View file

@ -7,6 +7,7 @@
<link rel="help" href="http://www.w3.org/TR/css3-multicol/#column-span" title="6.1. 'column-span'" /> <link rel="help" href="http://www.w3.org/TR/css3-multicol/#column-span" title="6.1. 'column-span'" />
<link rel="match" href="multicol-span-all-002-ref.xht" /> <link rel="match" href="multicol-span-all-002-ref.xht" />
<meta name="flags" content="ahem" /> <meta name="flags" content="ahem" />
<meta name="assert" content="Test of the situation where there is not sufficient space for the spanning element, UA may treat the element as 'column-span: none'; in which case, 'overflow: hidden' will take care of overflowed content out of multi-column box." />
<style type="text/css"><![CDATA[ <style type="text/css"><![CDATA[
div div
{ {
@ -66,4 +67,4 @@
</div> </div>
</body> </body>
</html> </html>

View file

@ -7,6 +7,7 @@
<link rel="help" href="http://www.w3.org/TR/css3-multicol/#spanning-columns"/> <link rel="help" href="http://www.w3.org/TR/css3-multicol/#spanning-columns"/>
<link rel="match" href="multicol-span-all-block-sibling-3-ref.xht"/> <link rel="match" href="multicol-span-all-block-sibling-3-ref.xht"/>
<meta name="flags" content="ahem"/> <meta name="flags" content="ahem"/>
<meta name="assert" content="Test that a block element which is a sibling of content in the multicol element acts correctly as a spanner." />
<style type="text/css"><![CDATA[ <style type="text/css"><![CDATA[
body>div { body>div {
font-family: Ahem; font-family: Ahem;

View file

@ -1,7 +1,7 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"> <html xmlns="http://www.w3.org/1999/xhtml">
<head> <head>
<title>CSS Multi-column Layout Test: 'column-span: all' element and width exceeding available multi-colum width (complex)</title> <title>CSS Multi-column Layout Test: 'column-span: all' element and width exceeding available multi-column width (complex)</title>
<link rel="author" title="Opera Software ASA" href="http://www.opera.com/" /> <link rel="author" title="Opera Software ASA" href="http://www.opera.com/" />
<link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2013-08-18 --> <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <!-- 2013-08-18 -->
<link rel="help" href="http://www.w3.org/TR/css3-multicol/#column-span" title="6.1. 'column-span'" /> <link rel="help" href="http://www.w3.org/TR/css3-multicol/#column-span" title="6.1. 'column-span'" />

View file

@ -7,6 +7,7 @@
<link rel="help" href="http://www.w3.org/TR/css3-multicol/#column-span" title="6.1. 'column-span'" /> <link rel="help" href="http://www.w3.org/TR/css3-multicol/#column-span" title="6.1. 'column-span'" />
<link rel="match" href="multicol-span-all-margin-002-ref.xht" /> <link rel="match" href="multicol-span-all-margin-002-ref.xht" />
<meta name="flags" content="ahem" /> <meta name="flags" content="ahem" />
<meta name="assert" content="The spanning element extends only to the width of the multicol element, despite an item in the fourth column extending into the overflow area." />
<style type="text/css"><![CDATA[ <style type="text/css"><![CDATA[
div div
{ {

View file

@ -7,6 +7,7 @@
<link rel="help" href="http://www.w3.org/TR/css3-multicol/#column-span" title="6.1. 'column-span'" /> <link rel="help" href="http://www.w3.org/TR/css3-multicol/#column-span" title="6.1. 'column-span'" />
<link rel="match" href="multicol-span-all-margin-bottom-001-ref.xht" /> <link rel="match" href="multicol-span-all-margin-bottom-001-ref.xht" />
<meta name="flags" content="ahem" /> <meta name="flags" content="ahem" />
<meta name="assert" content="In this test, the glyphs 'or' are painted into 1st column box, the glyphs 'ang' extend outside the box, and should not be clipped. In this test they are overwritten by spans so are not visible." />
<style type="text/css"><![CDATA[ <style type="text/css"><![CDATA[
div div
{ {

View file

@ -7,6 +7,7 @@
<link rel="help" href="http://www.w3.org/TR/css3-multicol/#the-multi-column-model"/> <link rel="help" href="http://www.w3.org/TR/css3-multicol/#the-multi-column-model"/>
<link rel="match" href="multicol-table-cell-vertical-align-ref.xht"/> <link rel="match" href="multicol-table-cell-vertical-align-ref.xht"/>
<meta name="flags" content="ahem"/> <meta name="flags" content="ahem"/>
<meta name="assert" content="This test checks that 'column-count' applies to elements with 'display' set to 'table-cell' which also use 'vertical-align: middle'. The 'vertical-align' property should still apply." />
<style type="text/css"><![CDATA[ <style type="text/css"><![CDATA[
div { div {
font-family: Ahem; font-family: Ahem;

View file

@ -2,6 +2,7 @@
<title>Multicol under vertical-rl scrolling container</title> <title>Multicol under vertical-rl scrolling container</title>
<link rel="match" href="multicol-under-vertical-rl-scroll-ref.html"> <link rel="match" href="multicol-under-vertical-rl-scroll-ref.html">
<link rel="help" href="https://drafts.csswg.org/css-multicol"> <link rel="help" href="https://drafts.csswg.org/css-multicol">
<meta name="assert" content="Test that multicol works as expected when overflow is scrolling in vertical-rl" />
<p>Passes if there are two green squares</p> <p>Passes if there are two green squares</p>
<div style="width: 200px; height: 200px; overflow: scroll; writing-mode: vertical-rl; border: 1px solid black"> <div style="width: 200px; height: 200px; overflow: scroll; writing-mode: vertical-rl; border: 1px solid black">
<div style="columns: 2; column-gap: 20px; width: 80px; height: 180px"> <div style="columns: 2; column-gap: 20px; width: 80px; height: 180px">

View file

@ -46,6 +46,7 @@ assert_valid("<length>", "calc(2px*4 + 10px)");
assert_valid("<length>", "7.1e-4cm"); assert_valid("<length>", "7.1e-4cm");
assert_valid("<length>", "calc(7in - 12px)"); assert_valid("<length>", "calc(7in - 12px)");
assert_valid("<length>+", "2px 7px calc(8px)"); assert_valid("<length>+", "2px 7px calc(8px)");
assert_valid("<length>#", "2px, 7px, calc(8px)");
assert_valid("<percentage>", "-9.3e3%"); assert_valid("<percentage>", "-9.3e3%");
assert_valid("<length-percentage>", "-54%"); assert_valid("<length-percentage>", "-54%");
assert_valid("<length-percentage>", "0"); assert_valid("<length-percentage>", "0");
@ -151,6 +152,8 @@ assert_invalid("<length>", "calc(4px + 3em)");
assert_invalid("<length>", "calc(4px + calc(8 * 2em))"); assert_invalid("<length>", "calc(4px + calc(8 * 2em))");
assert_invalid("<length>+", "calc(2ex + 16px)"); assert_invalid("<length>+", "calc(2ex + 16px)");
assert_invalid("<length>+", "10px calc(20px + 4rem)"); assert_invalid("<length>+", "10px calc(20px + 4rem)");
assert_invalid("<length>+", "");
assert_invalid("<length>#", "");
assert_invalid("<percentage> | <length>+", "calc(100vh - 10px) 30px"); assert_invalid("<percentage> | <length>+", "calc(100vh - 10px) 30px");
assert_invalid("<length>", "10px;"); assert_invalid("<length>", "10px;");
assert_invalid("<length-percentage>", "calc(2px + 10% + 7ex)"); assert_invalid("<length-percentage>", "calc(2px + 10% + 7ex)");

View file

@ -1,28 +0,0 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Text level 3 Test: single preserved white space at the end of the line with white-space:break-spaces overflow-wrap:break-word</title>
<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/">
<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2">
<link rel="help" href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property">
<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-property">
<link rel="match" href="reference/pre-wrap-001-ref.html">
<meta name="assert" content="a single preserved white space at the end of the line is wrapped when the white-space property is set to break-spaces and overflow-wrap is break-word.">
<style>
div {
font-size: 20px;
font-family: Ahem;
line-height: 1em;
white-space: break-spaces;
color: green;
background: linear-gradient(red, red) 1ch 0/2ch 2ch no-repeat;
width: 3ch;
overflow-wrap: break-word;
margin-left: -1ch;
}
</style>
<body>
<p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
<div> XX XX</div>
</body>

View file

@ -1,39 +0,0 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Text level 3 Test: single preserved white space at the end of the line with white-space:break-spaces overflow-wrap:break-word in a textarea</title>
<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/">
<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2">
<link rel="help" href="https://drafts.csswg.org/css-text-3/#overflow-wrap-property">
<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-property">
<link rel="match" href="reference/textarea-pre-wrap-001-ref.html">
<meta name="assert" content="a single preserved white space at the end of the line is wrapped when the white-space property is set to break-spaces and overflow-wrap is break-word in a textarea.">
<style>
textarea {
word-wrap: initial; /*deprecated alias*/
overflow-wrap: initial;
line-break: initial;
word-break: initial;
margin: 0;
padding: 0;
border: none;
outline: none;
resize: none;
overflow: hidden; /* I don't want scrollbars, and overflow:visible isn't typically supported on textarea */
font-size: 20px;
font-family: Ahem;
line-height: 1em;
white-space: break-spaces;
color: green;
background: linear-gradient(red, red) 1ch 0/2ch 2ch no-repeat;
width: 3ch;
overflow-wrap: break-word;
margin-left: -1ch;
}
</style>
<body>
<p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
<textarea> XX XX</textarea>
</body>

View file

@ -0,0 +1,120 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Transform list interpolation</title>
<link rel="help" href="https://drafts.csswg.org/css-transforms-1/#interpolation-of-transforms">
<meta name="assert" content="Interpolation of transform function lists is performed as follows">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/interpolation-testcommon.js"></script>
</head>
<body>
<script>
// none -> none
test_interpolation(
{
property: 'transform',
from: 'none',
to: 'none',
},
[{ at: 0.25, expect: 'none' }]
);
// none -> something
test_interpolation(
{
property: 'transform',
from: 'none',
to: 'translate(200px) rotate(720deg)',
},
[{ at: 0.25, expect: 'translate(50px) rotate(180deg)' }]
);
// something -> none
test_interpolation(
{
property: 'transform',
from: 'translate(200px) rotate(720deg)',
to: 'none',
},
[{ at: 0.25, expect: 'translate(150px) rotate(540deg)' }]
);
// Mismatched lengths (from is shorter), common part matches
test_interpolation(
{
property: 'transform',
from: 'translate(100px)',
to: 'translate(200px) rotate(720deg)',
},
[{ at: 0.25, expect: 'translate(125px) rotate(180deg)' }]
);
// Mismatched lengths (to is shorter), common part matches
test_interpolation(
{
property: 'transform',
from: 'translate(100px) rotate(720deg)',
to: 'translate(200px)',
},
[{ at: 0.25, expect: 'translate(125px) rotate(540deg)' }]
);
// Perfect match
test_interpolation(
{
property: 'transform',
from: 'scale(2) rotate(360deg) translate(100px) matrix(1, 0, 0, 1, 100, 0) skew(0deg)',
to: 'scale(3) rotate(1080deg) translate(200px) matrix(1, 0, 0, 1, 0, 200) skew(720deg)',
},
[
{
at: 0.25,
expect: 'scale(2.25) rotate(540deg) translate(125px) matrix(1, 0, 0, 1, 75, 50) skew(180deg)',
},
]
);
// Matches on primitives
test_interpolation(
{
property: 'transform',
from: 'translateX(100px) scaleX(3) translate(500px) scale(2)',
to: 'translateY(200px) scale(5) translateX(100px) scaleY(3)',
},
[{ at: 0.25, expect: 'translate(75px, 50px) scale(3.5, 2) translate(400px, 0px) scale(1.75, 2.25)' }]
);
// Common prefix
test_interpolation(
{
property: 'transform',
from: 'rotate(0deg) translate(100px)',
to: 'rotate(720deg) scale(2) translate(200px)',
},
[{ at: 0.25, expect: 'rotate(180deg) matrix(1.25, 0, 0, 1.25, 175, 0)' }]
);
// Complete mismatch (except length)
test_interpolation(
{
property: 'transform',
from: 'scale(2) rotate(0deg) translate(100px)',
to: 'rotate(720deg) scale(2) translate(200px)',
},
[{ at: 0.25, expect: 'matrix(2, 0, 0, 2, 250, 0)' }]
);
// Complete mismatch including length
test_interpolation(
{
property: 'transform',
from: 'scale(2) rotate(0deg)',
to: 'rotate(720deg) scale(2) translate(200px)',
},
[{ at: 0.25, expect: 'matrix(2, 0, 0, 2, 100, 0)' }]
);
</script>
</body>
</html>

View file

@ -0,0 +1,47 @@
<!doctype html>
<title>CSS Test Reference</title>
<meta charset="utf-8">
<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
<link rel="author" title="Mozilla" href="https://mozilla.org">
<style>
html,
body {
height: 100%;
overflow: hidden;
margin: 0;
padding: 0;
background-color: #222;
}
body {
display: flex;
transform: scale(0.9);
}
#fixed {
position: fixed;
width: 100%;
height: 100%;
top: 0;
left: 0;
z-index: 1;
background: black;
}
#popup {
position: absolute;
width: 200px;
height: 200px;
left: 0;
top: 0;
z-index: 2;
background: green;
transform: scale( 1.1111 );
}
body, #popup {
transform-origin: 50% 50%;
}
</style>
<div id="popup"></div>
<div id="fixed"></div>

View file

@ -0,0 +1,65 @@
<!doctype html>
<html class="reftest-wait">
<title>CSS Test: Checks that dynamic changes to whether we're a fixed-pos containing block are handled correctly</title>
<meta charset="utf-8">
<link rel="help" href="https://drafts.csswg.org/css-transforms-1/#containing-block-for-all-descendants">
<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1498873">
<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
<link rel="author" title="Mozilla" href="https://mozilla.org">
<link rel="match" href="dynamic-fixed-pos-cb-change-ref.html">
<style>
html,
body {
height: 100%;
overflow: hidden;
margin: 0;
padding: 0;
background-color: #222;
}
body {
display: flex;
}
#fixed {
position: fixed;
width: 100%;
height: 100%;
top: 0;
left: 0;
z-index: 1;
background: black;
}
#popup {
position: absolute;
width: 200px;
height: 200px;
left: 0;
top: 0;
z-index: 2;
background: red;
transform: scale( 1.1111 );
}
body, #popup {
transform-origin: 50% 50%;
}
</style>
<div id="popup">
<!-- Seeing this box change color should not move me or change my size. -->
</div>
<div id="fixed"></div>
<script>
onload = function() {
requestAnimationFrame(() => {
document.body.style.transform = "scale(0.9)";
requestAnimationFrame(() => {
popup.style.backgroundColor = "green";
requestAnimationFrame(() => {
document.documentElement.className = "";
});
});
});
}
</script>

View file

@ -0,0 +1,24 @@
<!doctype html>
<meta charset="utf-8">
<title>CSS Test Reference</title>
<style>
.container {
border: 1px solid green;
width: 100px;
height: 100px;
margin-top: 100px;
display: flex;
position: relative;
}
.abspos {
position: absolute;
top: 0;
left: 0;
background: orange;
height: 20px;
width: 20px;
}
</style>
<div class="container">
<div class="abspos"></div>
</div>

View file

@ -0,0 +1,30 @@
<!doctype html>
<meta charset="utf-8">
<title>CSS Test: will-change: position turns an element in an abspos containing block.</title>
<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
<link rel="author" title="Boris Zbarsky" href="mailto:bzbarsky@mit.edu">
<link rel="author" title="Mozilla" href="https://mozilla.org">
<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1498873">
<link rel="help" href="https://drafts.csswg.org/css-will-change/#will-change">
<link rel="match" href="will-change-abspos-cb-001-ref.html">
<style>
.container {
border: 1px solid green;
width: 100px;
height: 100px;
margin-top: 100px;
display: flex;
will-change: position;
}
.abspos {
position: absolute;
top: 0;
left: 0;
background: orange;
height: 20px;
width: 20px;
}
</style>
<div class="container">
<div class="abspos"></div>
</div>

View file

@ -0,0 +1,34 @@
<!doctype html>
<meta charset="utf-8">
<title>CSS Test: will-change: position turns an element in an abspos containing block when changed dynamically.</title>
<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
<link rel="author" title="Mozilla" href="https://mozilla.org">
<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1499863">
<link rel="help" href="https://drafts.csswg.org/css-will-change/#will-change">
<link rel="match" href="will-change-abspos-cb-001-ref.html">
<style>
.container {
border: 1px solid green;
width: 100px;
height: 100px;
margin-top: 100px;
}
.abspos {
position: absolute;
top: 0;
left: 0;
background: orange;
height: 20px;
width: 20px;
}
</style>
<div class="container">
<div class="abspos"></div>
</div>
<script>
onload = function() {
let container = document.querySelector(".container");
container.offsetTop;
container.style.willChange = "position";
}
</script>

View file

@ -0,0 +1,21 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Inheritance of CSSOM View properties</title>
<link rel="help" href="https://drafts.csswg.org/cssom-view/#property-index">
<meta name="assert" content="Properties inherit or not according to the spec.">
<meta name="assert" content="Properties have initial values according to the spec.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/inheritance-testcommon.js"></script>
</head>
<body>
<div id="container">
<div id="target"></div>
</div>
<script>
assert_not_inherited('scroll-behavior', 'auto', 'smooth');
</script>
</body>
</html>

View file

@ -21,7 +21,6 @@ function test_interpolation(settings, expectations) {
var animationId = 'anim' + i; var animationId = 'anim' + i;
var targetId = 'target' + i; var targetId = 'target' + i;
var referenceId = 'reference' + i; var referenceId = 'reference' + i;
test(function(){ test(function(){
assert_true(CSS.supports(settings.property, expectation), 'Value "' + expectation + '" is supported by ' + settings.property); assert_true(CSS.supports(settings.property, expectation), 'Value "' + expectation + '" is supported by ' + settings.property);
@ -49,7 +48,9 @@ function test_interpolation(settings, expectations) {
reference.style = ''; reference.style = '';
assert_equals(getComputedStyle(target)[settings.property], getComputedStyle(reference)[settings.property]); assert_equals(getComputedStyle(target)[settings.property], getComputedStyle(reference)[settings.property]);
}, 'Animation between "' + settings.from + '" and "' + settings.to + '" at progress ' + progress); }, (settings.test_prefix ? settings.test_prefix : "") +
'Animation between "' + settings.from + '" and "' + settings.to +
'" at progress ' + progress);
} }
} }

View file

@ -20,10 +20,10 @@ Or to run in a specified copy of Firefox:
./wpt run --binary ~/local/firefox/firefox firefox dom/historical.html ./wpt run --binary ~/local/firefox/firefox firefox dom/historical.html
`./wpt run --help` lists the supported products.
For details on the supported products and a large number of other options for For details on the supported products and a large number of other options for
customising the test run, see `./wpt run --help`. customising the test run:
./wpt run --help
Additional browser-specific documentation: Additional browser-specific documentation:

View file

@ -54,6 +54,12 @@ themselves precede any test type flag, but are otherwise unordered.
: (js files only) Indicates that the file generates tests in which it : (js files only) Indicates that the file generates tests in which it
is [run in multiple scopes][multi-global-tests]. is [run in multiple scopes][multi-global-tests].
`.optional`
: Indicates that a test makes assertions about optional behavior in a
specification, typically marked by the [RFC 2119] "MAY" or "OPTIONAL"
keywords. This flag should not be used for "SHOULD"; such requirements
can be tested with regular tests, like "MUST".
`.tentative` `.tentative`
: Indicates that a test makes assertions not yet required by any specification, : Indicates that a test makes assertions not yet required by any specification,
or in contradiction to some specification. This is useful when implementation or in contradiction to some specification. This is useful when implementation
@ -64,3 +70,4 @@ themselves precede any test type flag, but are otherwise unordered.
[server-side substitution]: https://wptserve.readthedocs.io/en/latest/pipes.html#sub [server-side substitution]: https://wptserve.readthedocs.io/en/latest/pipes.html#sub
[multi-global-tests]: {{ site.baseurl }}{% link _writing-tests/testharness.md %}#multi-global-tests [multi-global-tests]: {{ site.baseurl }}{% link _writing-tests/testharness.md %}#multi-global-tests
[RFC 2119]: https://tools.ietf.org/html/rfc2119

View file

@ -18,6 +18,15 @@ the global scope.
NB: presently, testdriver.js only works in the top-level test browsing NB: presently, testdriver.js only works in the top-level test browsing
context (and not therefore in any frame or window opened from it). context (and not therefore in any frame or window opened from it).
### action_sequence
Usage: `test_driver.action_sequence(actions)`
* `actions`: <[Array]<[Object]>> an array of Action objects`
* `action`: <[Object]> A single action. See [spec](https://www.w3.org/TR/webdriver/#actions) for format
This function causes a sequence of actions to be sent to the browser. It is based of the [WebDriver API](https://www.w3.org/TR/webdriver/#actions).
The action can be a keyboard action, a pointer action or a pause. It returns a `Promise` that
resolves after the actions have been sent or rejects if an error was thrown.
### bless ### bless
Usage: `test_driver.bless(intent, action)` Usage: `test_driver.bless(intent, action)`
@ -80,13 +89,5 @@ between the function being called and the promise settling.
To send special keys, one must send the respective key's codepoint. Since this uses the WebDriver protocol, you can find a [list for code points to special keys in the spec](https://w3c.github.io/webdriver/webdriver-spec.html#keyboard-actions). To send special keys, one must send the respective key's codepoint. Since this uses the WebDriver protocol, you can find a [list for code points to special keys in the spec](https://w3c.github.io/webdriver/webdriver-spec.html#keyboard-actions).
For example, to send the tab key you would send "\uE004". For example, to send the tab key you would send "\uE004".
### `test_driver.action_sequence(actions)`
- `actions` <[Array]<[Object]>> an array of Action objects`
- `action` <[Object]> A single action. See [spec](https://www.w3.org/TR/webdriver/#actions) for format
This function causes a sequence of actions to be sent to the browser. It is based of the [WebDriver API](https://www.w3.org/TR/webdriver/#actions).
The action can be a keyboard action, a pointer action or a pause. It returns a `Promise` that
resolves after the actions have been sent or rejects if an error was thrown.
[activation]: https://html.spec.whatwg.org/multipage/interaction.html#activation [activation]: https://html.spec.whatwg.org/multipage/interaction.html#activation
[testharness]: {{ site.baseurl }}{% link _writing-tests/testharness.md %} [testharness]: {{ site.baseurl }}{% link _writing-tests/testharness.md %}

View file

@ -0,0 +1,39 @@
<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/motion/animation/resources/interpolation-testcommon.js"></script>
<title> 'layout-animations' Policy : Correct behavior for affected and unaffected properties when
feature is disabled.
</title>
<body>
<script>
// Sanity-check: Properties which are not affected by the policy 'layout-animations' should be
// interpolated normally (linearly) when the policy is disabled for the document.
test_interpolation(
{
property: "color",
from: "rgba(0, 50, 100, 1)",
to: "rgba(200, 150, 200, 1)",
test_prefix: 'Testing property "color".'
},
[
{at: 0.00, expect: "rgba(0, 50, 100, 1)"},
{at: 0.1, expect: "rgba(20, 60, 110, 1)"},
{at: 0.2, expect: "rgba(40, 70, 120, 1)"},
{at: 0.4, expect: "rgba(80, 90, 140, 1)"},
{at: 0.6, expect: "rgba(120, 110, 160, 1)"},
{at: 0.8, expect: "rgba(160, 130, 180, 1)"},
{at: 0.9, expect: "rgba(180, 140, 190, 1)"},
]);
// There is no interpolation for the affected properties when the policy is disabled.
["bottom", "height", "left", "right", "top", "width"].forEach(
(p) => test_no_interpolation(
{
property: p,
from: "100px",
to: "200px",
test_prefix: `Testing property "${p}".`
}));
</script>
</body>

View file

@ -0,0 +1 @@
Feature-Policy: layout-animations 'none'

View file

@ -0,0 +1,30 @@
<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/motion/animation/resources/interpolation-testcommon.js"></script>
<title> 'layout-animations' Policy : Correct behavior for affected and unaffected properties when
feature is enabled.
</title>
<body>
<script>
// The expectation for all the following properties could be the same (they are all of type length).
let length_expectations_100_to_200 = [
{at: 0.00, expect: "100px"},
{at: 0.1, expect: "110px"},
{at: 0.2, expect: "120px"},
{at: 0.4, expect: "140px"},
{at: 0.6, expect: "160px"},
{at: 0.8, expect: "180px"},
{at: 0.9, expect: "190px"},
];
// Ensure all the affected animations run normally.
["bottom", "height", "left", "right", "top", "width"].forEach(
(p) => test_interpolation({
property: p,
from: "100px",
to: "200px",
test_prefix: `Testing property "${p}".`
},
length_expectations_100_to_200));
</script>
</body>

View file

@ -10,7 +10,7 @@ for(let i = 0; i < 0x21; i++) {
let fail = false, let fail = false,
strip = false strip = false
// REMOVE 0x0B/0x0C exception once https://github.com/w3c/wptserve/issues/111 is fixed // REMOVE 0x0B/0x0C exception once https://github.com/web-platform-tests/wpt/issues/8372 is fixed
if(i === 0x0B || i === 0x0C) if(i === 0x0B || i === 0x0C)
continue continue

View file

@ -1,6 +1,5 @@
def main(request, response): def main(request, response):
headers = [] headers = []
request_headers = []
if "headers" in request.GET: if "headers" in request.GET:
checked_headers = request.GET.first("headers").split("|") checked_headers = request.GET.first("headers").split("|")
for header in checked_headers: for header in checked_headers:

View file

@ -105,7 +105,7 @@ var tests_arr = [
tests_arr.forEach(function(test_obj) { tests_arr.forEach(function(test_obj) {
["<meta>", "Refresh header"].forEach(type => { ["<meta>", "Refresh header"].forEach(type => {
if(type === "Refresh header" && test_obj.input.match("[\n\r\f]")) { // See https://github.com/w3c/wptserve/issues/111 for why \f as well if(type === "Refresh header" && test_obj.input.match("[\n\r\f]")) { // See https://github.com/web-platform-tests/wpt/issues/8372 for why \f as well
return; return;
} }
const filename = type === "<meta>" ? "refresh.sub.html" : "refresh.py"; const filename = type === "<meta>" ? "refresh.sub.html" : "refresh.py";

View file

@ -0,0 +1,52 @@
n<!DOCTYPE html>
<meta charset=utf-8>
<title>Test that &lt;object&gt; renders its own fallback.</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<body>
<script>
// The host exists but the resource is unavailable.
const cross_origin_url_a = "http://{{hosts[alt][www]}}:{{ports[http][0]}}/foo.html";
// The destination does not even exist and the navigation fails.
const cross_origin_url_b = "http://{{hosts[alt][nonexistent]}}:{{ports[http][0]}}/foo.html";
// Returns a promise which is resolved when |callback| returns true. The |callback| is invoked at
// every animation frame.
function for_each_animation_frame(callback) {
return new Promise((resolve) => {
function on_raf() {
if (!callback())
resolve();
window.requestAnimationFrame(on_raf);
}
window.requestAnimationFrame(on_raf);
});
}
// Create an <object> with some fallback content.
function create_object_with_fallback(url) {
var object = document.createElement("object");
var fallback = document.createElement("button");
fallback.textContent = "FALLBACK CONTENT";
object.appendChild(fallback);
object.data = url;
object.type = "text/html";
document.body.appendChild(object);
return object;
}
function area(el) {
let bounds = el.getBoundingClientRect();
return el.width * el.height;
}
promise_test(async() => {
var object = create_object_with_fallback(cross_origin_url_a);
await for_each_animation_frame(() => area(object.firstChild) > 0);
object.parentElement.removeChild(object);
object = create_object_with_fallback(cross_origin_url_b);
await for_each_animation_frame(() => area(object.firstChild) > 0);
object.parentElement.removeChild(object);
}, "Verify fallback content for failed cross-origin navigations is shown correctly.");
</script>
</body>

View file

@ -0,0 +1,23 @@
<!doctype html>
<title>&lt;audio and &lt;video> autoplay</title>
<link rel="help" href="https://html.spec.whatwg.org/multipage/media.html#dom-media-play">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/media.js"></script>
<video></video>
<script>
async_test(t => {
const a = new Audio(getAudioURI("/media/sound_5"));
a.play();
assert_false(a.paused);
a.onplaying = t.step_func_done();
}, "<audio> autoplay");
async_test(t => {
const v = document.querySelector("video");
v.src = getVideoURI("/media/movie_5");
v.play();
assert_false(v.paused);
v.onplaying = t.step_func_done();
}, "<video> autoplay");
</script>

View file

@ -0,0 +1,8 @@
[allowed-to-play.html]
expected:
if product == "safari" or product == "safari_webdriver": ERROR # https://bugs.webkit.org/show_bug.cgi?id=190775
[<audio> autoplay]
expected:
if product == "safari" or product == "safari_webdriver": FAIL # https://bugs.webkit.org/show_bug.cgi?id=190775

View file

@ -0,0 +1,9 @@
[html-elements.html]
[Compare CSS span definitions (only valid if pre-reqs pass)]
expected:
if product == "safari" or product == "safari_webdriver": FAIL # https://webkit.org/show_bug.cgi?id=187052
[Compare CSS div definitions (only valid if pre-reqs pass)]
expected:
if product == "safari" or product == "safari_webdriver": FAIL # https://webkit.org/show_bug.cgi?id=187052

View file

@ -0,0 +1,4 @@
[context.any.sharedworker.html]
[context]
expected:
if product == "safari" or product == "safari_webdriver": FAIL # https://bugs.webkit.org/show_bug.cgi?id=149850

View file

@ -0,0 +1,4 @@
[order-of-metas.any.sharedworker.html]
[foo]
expected:
if product == "safari" or product == "safari_webdriver": FAIL # https://bugs.webkit.org/show_bug.cgi?id=149850

View file

@ -0,0 +1,4 @@
[secure-context.https.any.sharedworker.html]
[secure-context]
expected:
if product == "safari" or product == "safari_webdriver": FAIL # https://bugs.webkit.org/show_bug.cgi?id=149850

View file

@ -0,0 +1,4 @@
[title.any.sharedworker.html]
[foobar]
expected:
if product == "safari" or product == "safari_webdriver": FAIL # https://bugs.webkit.org/show_bug.cgi?id=149850

View file

@ -1,3 +1,3 @@
[elementPosition.html] [elementPosition.html]
expected: expected:
if product == "chrome": ERROR if product == "chrome" or product == "safari" or product == "safari_webdriver": ERROR

View file

@ -1,3 +1,3 @@
[elementTiming.html] [elementTiming.html]
expected: expected:
if product == "chrome": ERROR if product == "chrome" or product == "safari" or product == "safari_webdriver": ERROR

View file

@ -1,3 +1,3 @@
[eventOrder.html] [eventOrder.html]
expected: expected:
if product == "chrome": ERROR if product == "chrome" or product == "safari" or product == "safari_webdriver": ERROR

View file

@ -1,3 +1,3 @@
[multiDevice.html] [multiDevice.html]
expected: expected:
if product == "chrome": ERROR if product == "chrome" or product == "safari" or product == "safari_webdriver": ERROR

View file

@ -1,7 +1,7 @@
// GENERATED CONTENT - DO NOT EDIT // GENERATED CONTENT - DO NOT EDIT
// Content was automatically extracted by Reffy into reffy-reports // Content was automatically extracted by Reffy into reffy-reports
// (https://github.com/tidoust/reffy-reports) // (https://github.com/tidoust/reffy-reports)
// Source: Content Security Policy: Embedded Enforcement (https://w3c.github.io/webappsec-csp/embedded/) // Source: Content Security Policy: Embedded Enforcement (https://w3c.github.io/webappsec-cspee/)
partial interface HTMLIFrameElement { partial interface HTMLIFrameElement {
[CEReactions] attribute DOMString csp; [CEReactions] attribute DOMString csp;

View file

@ -78,12 +78,6 @@ dictionary PaymentItem {
required DOMString label; required DOMString label;
required PaymentCurrencyAmount amount; required PaymentCurrencyAmount amount;
boolean pending = false; boolean pending = false;
// Note: type member is "at risk" of being removed!
PaymentItemType type;
};
enum PaymentItemType {
"tax"
}; };
[SecureContext, Exposed=(Window)] [SecureContext, Exposed=(Window)]
@ -92,8 +86,6 @@ interface PaymentAddress {
readonly attribute DOMString city; readonly attribute DOMString city;
readonly attribute DOMString country; readonly attribute DOMString country;
readonly attribute DOMString dependentLocality; readonly attribute DOMString dependentLocality;
// "languageCode" is a feature at risk
readonly attribute DOMString languageCode;
readonly attribute DOMString organization; readonly attribute DOMString organization;
readonly attribute DOMString phone; readonly attribute DOMString phone;
readonly attribute DOMString postalCode; readonly attribute DOMString postalCode;
@ -113,7 +105,6 @@ dictionary AddressInit {
DOMString dependentLocality; DOMString dependentLocality;
DOMString postalCode; DOMString postalCode;
DOMString sortingCode; DOMString sortingCode;
DOMString languageCode;
DOMString organization; DOMString organization;
DOMString recipient; DOMString recipient;
DOMString phone; DOMString phone;
@ -124,7 +115,6 @@ dictionary AddressErrors {
DOMString city; DOMString city;
DOMString country; DOMString country;
DOMString dependentLocality; DOMString dependentLocality;
DOMString languageCode;
DOMString organization; DOMString organization;
DOMString phone; DOMString phone;
DOMString postalCode; DOMString postalCode;

View file

@ -95,6 +95,7 @@ interface ServiceWorkerGlobalScope : WorkerGlobalScope {
[Exposed=ServiceWorker] [Exposed=ServiceWorker]
interface Client { interface Client {
readonly attribute USVString url; readonly attribute USVString url;
readonly attribute FrameType frameType;
readonly attribute DOMString id; readonly attribute DOMString id;
readonly attribute ClientType type; readonly attribute ClientType type;
void postMessage(any message, optional sequence<object> transfer = []); void postMessage(any message, optional sequence<object> transfer = []);
@ -109,6 +110,13 @@ interface WindowClient : Client {
[NewObject] Promise<WindowClient?> navigate(USVString url); [NewObject] Promise<WindowClient?> navigate(USVString url);
}; };
enum FrameType {
"auxiliary",
"top-level",
"nested",
"none"
};
[Exposed=ServiceWorker] [Exposed=ServiceWorker]
interface Clients { interface Clients {
// The objects returned will be new instances every time // The objects returned will be new instances every time

View file

@ -4,7 +4,7 @@
// Source: Web MIDI API (http://webaudio.github.io/web-midi-api/) // Source: Web MIDI API (http://webaudio.github.io/web-midi-api/)
partial interface Navigator { partial interface Navigator {
Promise<MIDIAccess> requestMIDIAccess(optional MIDIOptions options); [SecureContext] Promise<MIDIAccess> requestMIDIAccess(optional MIDIOptions options);
}; };
dictionary MIDIOptions { dictionary MIDIOptions {
@ -20,14 +20,14 @@ interface MIDIOutputMap {
readonly maplike<DOMString, MIDIOutput>; readonly maplike<DOMString, MIDIOutput>;
}; };
interface MIDIAccess : EventTarget { [SecureContext] interface MIDIAccess : EventTarget {
readonly attribute MIDIInputMap inputs; readonly attribute MIDIInputMap inputs;
readonly attribute MIDIOutputMap outputs; readonly attribute MIDIOutputMap outputs;
attribute EventHandler onstatechange; attribute EventHandler onstatechange;
readonly attribute boolean sysexEnabled; readonly attribute boolean sysexEnabled;
}; };
interface MIDIPort : EventTarget { [SecureContext] interface MIDIPort : EventTarget {
readonly attribute DOMString id; readonly attribute DOMString id;
readonly attribute DOMString? manufacturer; readonly attribute DOMString? manufacturer;
readonly attribute DOMString? name; readonly attribute DOMString? name;
@ -40,11 +40,11 @@ interface MIDIPort : EventTarget {
Promise<MIDIPort> close(); Promise<MIDIPort> close();
}; };
interface MIDIInput : MIDIPort { [SecureContext] interface MIDIInput : MIDIPort {
attribute EventHandler onmidimessage; attribute EventHandler onmidimessage;
}; };
interface MIDIOutput : MIDIPort { [SecureContext] interface MIDIOutput : MIDIPort {
void send(sequence<octet> data, optional DOMHighResTimeStamp timestamp = 0); void send(sequence<octet> data, optional DOMHighResTimeStamp timestamp = 0);
void clear(); void clear();
}; };
@ -65,7 +65,7 @@ enum MIDIPortConnectionState {
"pending", "pending",
}; };
[Constructor(DOMString type, optional MIDIMessageEventInit eventInitDict)] [SecureContext, Constructor(DOMString type, optional MIDIMessageEventInit eventInitDict)]
interface MIDIMessageEvent : Event { interface MIDIMessageEvent : Event {
readonly attribute Uint8Array data; readonly attribute Uint8Array data;
}; };
@ -74,7 +74,7 @@ dictionary MIDIMessageEventInit : EventInit {
Uint8Array data; Uint8Array data;
}; };
[Constructor(DOMString type, optional MIDIConnectionEventInit eventInitDict)] [SecureContext, Constructor(DOMString type, optional MIDIConnectionEventInit eventInitDict)]
interface MIDIConnectionEvent : Event { interface MIDIConnectionEvent : Event {
readonly attribute MIDIPort port; readonly attribute MIDIPort port;
}; };

View file

@ -36,40 +36,40 @@ promise_test(async t => {
}, `Throws if the promise [[state]] is not "interactive"`); }, `Throws if the promise [[state]] is not "interactive"`);
promise_test(async t => { promise_test(async t => {
return test_driver.bless("show payment request", async () => { const request = new PaymentRequest(defaultMethods, defaultDetails);
const request = new PaymentRequest(defaultMethods, defaultDetails); const acceptPromise = test_driver.bless("show payment request", () =>
const acceptPromise = request.show(); request.show()
try { );
await request.abort(); try {
} catch (err) { await request.abort();
assert_unreached("Unexpected promise rejection: " + err.message); } catch (err) {
} assert_unreached("Unexpected promise rejection: " + err.message);
await promise_rejects(t, "AbortError", acceptPromise); }
// As request is now "closed", trying to show it will fail await promise_rejects(t, "AbortError", acceptPromise);
await promise_rejects(t, "InvalidStateError", request.show()); // As request is now "closed", trying to show it will fail
}); await promise_rejects(t, "InvalidStateError", request.show());
}); });
promise_test(async t => { promise_test(async t => {
return test_driver.bless("show payment request", async () => { // request is in "created" state.
// request is in "created" state. const request = new PaymentRequest(defaultMethods, defaultDetails);
const request = new PaymentRequest(defaultMethods, defaultDetails); await promise_rejects(t, "InvalidStateError", request.abort());
await promise_rejects(t, "InvalidStateError", request.abort()); // Call it again, for good measure.
// Call it again, for good measure. await promise_rejects(t, "InvalidStateError", request.abort());
await promise_rejects(t, "InvalidStateError", request.abort()); // The request's state is "created", so let's show it
// The request's state is "created", so let's show it // which changes the state to "interactive.".
// which changes the state to "interactive.". const acceptPromise = test_driver.bless("show payment request", () =>
const acceptPromise = request.show(); request.show()
// Let's set request the state to "closed" by calling .abort() );
try { // Let's set request the state to "closed" by calling .abort()
await request.abort(); try {
} catch (err) { await request.abort();
assert_unreached("Unexpected promise rejection: " + err.message); } catch (err) {
} assert_unreached("Unexpected promise rejection: " + err.message);
// The request is now "closed", so... }
await promise_rejects(t, "InvalidStateError", request.abort()); // The request is now "closed", so...
await promise_rejects(t, "AbortError", acceptPromise); await promise_rejects(t, "InvalidStateError", request.abort());
}); await promise_rejects(t, "AbortError", acceptPromise);
}); });
promise_test(async t => { promise_test(async t => {

View file

@ -8,7 +8,8 @@
<script src="/resources/testdriver.js"></script> <script src="/resources/testdriver.js"></script>
<script> <script>
const basicCard = Object.freeze({ supportedMethods: "basic-card" }); const basicCard = Object.freeze({ supportedMethods: "basic-card" });
const defaultMethods = Object.freeze([basicCard]); const applePay = Object.freeze({ supportedMethods: "https://apple.com/apple-pay" });
const defaultMethods = Object.freeze([basicCard, applePay]);
const defaultDetails = Object.freeze({ const defaultDetails = Object.freeze({
total: { total: {
label: "Total", label: "Total",
@ -41,7 +42,7 @@ promise_test(async t => {
promise_test(async t => { promise_test(async t => {
const request = new PaymentRequest(defaultMethods, defaultDetails); const request = new PaymentRequest(defaultMethods, defaultDetails);
assert_true(await request.canMakePayment(), "basic-card should be supported"); assert_true(await request.canMakePayment(), "one of the methods should be supported");
}, `If payment method identifier and serialized parts are supported, resolve promise with true.`); }, `If payment method identifier and serialized parts are supported, resolve promise with true.`);
promise_test(async t => { promise_test(async t => {
@ -121,63 +122,51 @@ promise_test(async t => {
} }
}, `Optionally, at the user agent's discretion, return a promise rejected with a "NotAllowedError" DOMException.`); }, `Optionally, at the user agent's discretion, return a promise rejected with a "NotAllowedError" DOMException.`);
promise_test(t => { promise_test(async t => {
return test_driver.bless("show payment request", async () => { const request = new PaymentRequest(defaultMethods, defaultDetails);
const request = new PaymentRequest(defaultMethods, defaultDetails); const acceptPromise = test_driver.bless("show payment request", () => {
const acceptPromise = request.show(); // Sets state to "interactive" request.show() // Sets state to "interactive"
const canMakePaymentPromise = request.canMakePayment();
try {
const result = await canMakePaymentPromise;
assert_true(
false,
`canMakePaymentPromise should have thrown InvalidStateError`
);
} catch (err) {
await promise_rejects(t, "InvalidStateError", canMakePaymentPromise);
} finally {
await request.abort();
await promise_rejects(t, "AbortError", acceptPromise);
}
// The state should be "closed"
await promise_rejects(t, "InvalidStateError", request.canMakePayment());
}); });
const canMakePaymentPromise = request.canMakePayment();
try {
const result = await canMakePaymentPromise;
assert_true(
false,
`canMakePaymentPromise should have thrown InvalidStateError`
);
} catch (err) {
await promise_rejects(t, "InvalidStateError", canMakePaymentPromise);
} finally {
await request.abort();
await promise_rejects(t, "AbortError", acceptPromise);
}
// The state should be "closed"
await promise_rejects(t, "InvalidStateError", request.canMakePayment());
}, 'If request.[[state]] is "interactive", then return a promise rejected with an "InvalidStateError" DOMException.'); }, 'If request.[[state]] is "interactive", then return a promise rejected with an "InvalidStateError" DOMException.');
promise_test(t => { promise_test(async t => {
return test_driver.bless("show payment request", async () => { const request = new PaymentRequest(defaultMethods, defaultDetails);
const request = new PaymentRequest(defaultMethods, defaultDetails); const acceptPromise = test_driver.bless("show payment request", () => {
const acceptPromise = request.show(); // The state is now "interactive" request.show() // Sets state to "interactive"
acceptPromise.catch(() => {}); // no-op, just to silence unhandled rejection in devtools.
await request.abort(); // The state is now "closed"
await promise_rejects(t, "InvalidStateError", request.canMakePayment());
try {
const result = await request.canMakePayment();
assert_true(
false,
`should have thrown InvalidStateError, but instead returned "${result}"`
);
} catch (err) {
assert_equals(
err.name,
"InvalidStateError",
"must be an InvalidStateError."
);
}
}); });
acceptPromise.catch(() => {}); // no-op, just to silence unhandled rejection in devtools.
await request.abort(); // The state is now "closed"
await promise_rejects(t, "InvalidStateError", request.canMakePayment());
try {
const result = await request.canMakePayment();
assert_true(
false,
`should have thrown InvalidStateError, but instead returned "${result}"`
);
} catch (err) {
assert_equals(
err.name,
"InvalidStateError",
"must be an InvalidStateError."
);
}
}, 'If request.[[state]] is "closed", then return a promise rejected with an "InvalidStateError" DOMException.'); }, 'If request.[[state]] is "closed", then return a promise rejected with an "InvalidStateError" DOMException.');
test(() => {
const request = new PaymentRequest(
[{ supportedMethods: "basic-card" }],
defaultDetails
);
const promises = new Set([
request.canMakePayment(),
request.canMakePayment(),
request.canMakePayment(),
]);
assert_equals(promises.size, 3, "Must have three unique objects");
}, "Calling canMakePayment() multiple times is always a new object.");
</script> </script>
<small> <small>

View file

@ -4,6 +4,8 @@
<title>PaymentRequest show() rejects if doc is not fully active</title> <title>PaymentRequest show() rejects if doc is not fully active</title>
<script src="/resources/testharness.js"></script> <script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script> <script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<link rel="help" href="https://w3c.github.io/payment-request/#dom-paymentrequest-show()"> <link rel="help" href="https://w3c.github.io/payment-request/#dom-paymentrequest-show()">
<body> <body>
<script> <script>
@ -39,50 +41,45 @@ function getLoadedPaymentRequest(iframe, url) {
} }
promise_test(async t => { promise_test(async t => {
// Check that PaymentRequests can be constructed.
new PaymentRequest(validMethods, validDetails);
const iframe = document.createElement("iframe"); const iframe = document.createElement("iframe");
iframe.allowPaymentRequest = true; iframe.allowPaymentRequest = true;
document.body.appendChild(iframe); document.body.appendChild(iframe);
// We first got to page1.html, grab a PaymentRequest instance. // We first got to page1.html, grab a PaymentRequest instance.
const request1 = await getLoadedPaymentRequest( const request1 = await getLoadedPaymentRequest(
iframe, iframe,
"/payment-request/resources/page1.html" "/payment-request/resources/page1.html"
); );
// We navigate the iframe again, putting request1's document into an inactive state. // We navigate the iframe again, putting request1's document into an inactive state.
const request2 = await getLoadedPaymentRequest( const request2 = await getLoadedPaymentRequest(
iframe, iframe,
"/payment-request/resources/page2.html" "/payment-request/resources/page2.html"
); );
await test_driver.bless("show payment request", async () => {
// Now, request1's relevant global object's document is no longer active. // Now, request1's relevant global object's document is no longer active.
// So, call .show(), and make sure it rejects appropriately. // So, call .show(), and make sure it rejects appropriately.
await promise_rejects( await promise_rejects(
t, t,
"AbortError", "AbortError",
request1.show(), request1.show(),
"Inactive document, so must throw AbortError" "Inactive document, so must throw AbortError"
); );
});
// request2 has an active document tho, so confirm it's working as expected: await test_driver.bless("show payment request", async () => {
request2.show(); // request2 has an active document tho, so confirm it's working as expected:
await request2.abort(); request2.show();
await promise_rejects( await request2.abort();
t, await promise_rejects(
"InvalidStateError", t,
request2.show(), "InvalidStateError",
"Abort already called, so InvalidStateError" request2.show(),
); "Abort already called, so InvalidStateError"
// We are done, so clean up. );
iframe.remove(); // We are done, so clean up.
iframe.remove();
});
}, "PaymentRequest.show() aborts if the document is not active"); }, "PaymentRequest.show() aborts if the document is not active");
promise_test(async t => { promise_test(async t => {
// check that PaymentRequests can be constructed (smoke test).
new PaymentRequest(validMethods, validDetails);
// We nest two iframes and wait for them to load. // We nest two iframes and wait for them to load.
const outerIframe = document.createElement("iframe"); const outerIframe = document.createElement("iframe");
outerIframe.allowPaymentRequest = true; outerIframe.allowPaymentRequest = true;
@ -112,6 +109,10 @@ promise_test(async t => {
outerIframe.addEventListener("load", resolve); outerIframe.addEventListener("load", resolve);
outerIframe.src = "/payment-request/resources/page2.html"; outerIframe.src = "/payment-request/resources/page2.html";
}); });
const showPromise = await test_driver.bless("show payment request", () => {
return request.show();
});
// Now, request's relevant global object's document is still active // Now, request's relevant global object's document is still active
// (it is the active document of the inner iframe), but is not fully active // (it is the active document of the inner iframe), but is not fully active
// (since the parent of the inner iframe is itself no longer active). // (since the parent of the inner iframe is itself no longer active).
@ -119,16 +120,15 @@ promise_test(async t => {
await promise_rejects( await promise_rejects(
t, t,
"AbortError", "AbortError",
request.show(), showPromise,
"Active, but not fully active, so must throw AbortError" "Active, but not fully active, so must throw AbortError"
); );
// We are done, so clean up. // We are done, so clean up.
iframe.remove(); iframe.remove();
}, "PaymentRequest.show() aborts if the document is active, but not fully active"); }, "PaymentRequest.show() aborts if the document is active, but not fully active");
promise_test(async t => { promise_test(async t => {
// Check that PaymentRequests can be constructed.
new PaymentRequest(validMethods, validDetails);
const iframe = document.createElement("iframe"); const iframe = document.createElement("iframe");
iframe.allowPaymentRequest = true; iframe.allowPaymentRequest = true;
document.body.appendChild(iframe); document.body.appendChild(iframe);
@ -137,8 +137,9 @@ promise_test(async t => {
iframe, iframe,
"/payment-request/resources/page1.html" "/payment-request/resources/page1.html"
); );
// Present the payment sheet. const showPromise = await test_driver.bless("show payment request", () => {
const showPromise = request.show(); return request.show();
});
// Navigate the iframe to a new location. Wait for the load event to fire. // Navigate the iframe to a new location. Wait for the load event to fire.
await new Promise(resolve => { await new Promise(resolve => {
iframe.addEventListener("load", resolve); iframe.addEventListener("load", resolve);

View file

@ -10,9 +10,9 @@
const hostInfo = get_host_info() const hostInfo = get_host_info()
const urls = { const urls = {
'same-origin': `${hostInfo.HTTP_ORIGIN}/server-timing/resources/blue.png`, 'same-origin': `${hostInfo.HTTPS_ORIGIN}/server-timing/resources/blue.png`,
'cross-origin': `${hostInfo.HTTP_REMOTE_ORIGIN}/server-timing/resources/blue.png`, 'cross-origin': `${hostInfo.HTTPS_REMOTE_ORIGIN}/server-timing/resources/blue.png`,
'cross-origin-tao': `${hostInfo.HTTP_REMOTE_ORIGIN}/server-timing/resources/blue_tao.png` 'cross-origin-tao': `${hostInfo.HTTPS_REMOTE_ORIGIN}/server-timing/resources/blue_tao.png`
} }
Object.keys(urls).forEach(function(key) { Object.keys(urls).forEach(function(key) {
const img = document.createElement('img') const img = document.createElement('img')

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