diff --git a/testing/web-platform/tests/html/dom/elements/global-attributes/dir-assorted.window.js b/testing/web-platform/tests/html/dom/elements/global-attributes/dir-assorted.window.js index 65a1a2e063bea..ee7e01fd128b6 100644 --- a/testing/web-platform/tests/html/dom/elements/global-attributes/dir-assorted.window.js +++ b/testing/web-platform/tests/html/dom/elements/global-attributes/dir-assorted.window.js @@ -289,3 +289,157 @@ direction " ) ; +test +( +( +) += +> +{ +let +container1 += +document +. +createElement +( +" +div +" +) +; +document +. +body +. +appendChild +( +container1 +) +; +let +container2 += +document +. +createElement +( +" +div +" +) +; +for +( +let +container +of +[ +container1 +container2 +] +) +{ +container +. +dir += +" +rtl +" +; +let +e += +document +. +createElement +( +" +div +" +) +; +assert_true +( +e +. +matches +( +" +: +dir +( +ltr +) +" +) +) +; +container +. +appendChild +( +e +) +; +assert_false +( +e +. +matches +( +" +: +dir +( +ltr +) +" +) +) +; +e +. +remove +( +) +; +assert_true +( +e +. +matches +( +" +: +dir +( +ltr +) +" +) +) +; +} +container1 +. +remove +( +) +; +} +" +dir +inheritance +is +correct +after +insertion +and +removal +from +document +" +) +; diff --git a/testing/web-platform/tests/html/dom/elements/global-attributes/dir-auto-dynamic-changes.window.js b/testing/web-platform/tests/html/dom/elements/global-attributes/dir-auto-dynamic-changes.window.js new file mode 100644 index 0000000000000..14592bdfe9688 --- /dev/null +++ b/testing/web-platform/tests/html/dom/elements/global-attributes/dir-auto-dynamic-changes.window.js @@ -0,0 +1,1960 @@ +function +setup_tree +( +light_tree +shadow_tree +) +{ +let +body += +document +. +body +; +let +old_length += +body +. +childNodes +. +length +; +body +. +insertAdjacentHTML +( +" +beforeend +" +light_tree +. +trim +( +) +) +; +if +( +body +. +childNodes +. +length +! += +old_length ++ +1 +) +{ +throw +" +unexpected +markup +" +; +} +let +result += +body +. +lastChild +; +if +( +shadow_tree +) +{ +let +shadow += +result +. +querySelector +( +" +# +root +" +) +. +attachShadow +( +{ +mode +: +" +open +" +} +) +; +shadow +. +innerHTML += +shadow_tree +. +trim +( +) +; +return +[ +result +shadow +] +; +} +return +result +; +} +test +( +t += +> +{ +let +a += +setup_tree +( +< +div +id += +" +a +" +dir += +" +auto +" +> +< +div +id += +" +b +" +> +< +/ +div +> +hello +< +/ +div +> +) +; +let +acs += +getComputedStyle +( +a +) +; +assert_true +( +a +. +matches +( +" +: +dir +( +ltr +) +" +) +" +: +dir +( +ltr +) +matches +before +insertion +" +) +; +assert_false +( +a +. +matches +( +" +: +dir +( +rtl +) +" +) +" +: +dir +( +rtl +) +does +not +match +before +insertion +" +) +; +assert_equals +( +acs +. +direction +" +ltr +" +" +CSSdirection +before +insertion +" +) +; +b +. +innerHTML += +" +\ +u05D0 +" +; +assert_false +( +a +. +matches +( +" +: +dir +( +ltr +) +" +) +" +: +dir +( +ltr +) +does +not +match +after +insertion +" +) +; +assert_true +( +a +. +matches +( +" +: +dir +( +rtl +) +" +) +" +: +dir +( +rtl +) +matches +after +insertion +" +) +; +assert_equals +( +acs +. +direction +" +rtl +" +" +CSSdirection +after +insertion +" +) +; +a +. +remove +( +) +; +} +" +dynamic +insertion +of +RTL +text +in +a +child +element +" +) +; +test +( +( +) += +> +{ +let +div_rtlchar += +document +. +createElement +( +" +div +" +) +; +div_rtlchar +. +innerHTML += +" +\ +u05D0 +" +; +let +container1 += +document +. +createElement +( +" +div +" +) +; +document +. +body +. +appendChild +( +container1 +) +; +let +container2 += +document +. +createElement +( +" +div +" +) +; +for +( +let +container +of +[ +container1 +container2 +] +) +{ +container +. +dir += +" +auto +" +; +assert_true +( +container +. +matches +( +" +: +dir +( +ltr +) +" +) +) +; +container +. +appendChild +( +div_rtlchar +) +; +assert_false +( +container +. +matches +( +" +: +dir +( +ltr +) +" +) +) +; +div_rtlchar +. +remove +( +) +; +assert_true +( +container +. +matches +( +" +: +dir +( +ltr +) +" +) +) +; +} +container1 +. +remove +( +) +; +} +" +dir += +auto +changes +for +content +insertion +and +removal +in +and +out +of +document +" +) +; +test +( +( +) += +> +{ +let +tree +shadow +; +[ +tree +shadow +] += +setup_tree +( +< +div +> +< +div +id += +" +root +" +> +< +span +id += +" +l +" +> +A +< +/ +span +> +< +span +id += +" +r +" +> +\ +u05D0 +< +/ +span +> +< +/ +div +> +< +/ +div +> +< +slot +id += +" +one +" +name += +" +one +" +dir += +" +auto +" +> +\ +u05D0 +< +/ +slot +> +< +slot +id += +" +two +" +dir += +" +auto +" +> +< +/ +slot +> +) +; +let +one += +shadow +. +getElementById +( +" +one +" +) +; +let +two += +shadow +. +getElementById +( +" +two +" +) +; +let +l += +tree +. +querySelector +( +" +# +l +" +) +; +let +r += +tree +. +querySelector +( +" +# +r +" +) +; +assert_false +( +one +. +matches +( +" +: +dir +( +ltr +) +" +) +" +# +one +while +empty +" +) +; +assert_true +( +two +. +matches +( +" +: +dir +( +ltr +) +" +) +" +# +two +with +both +spans +" +) +; +l +. +slot += +" +one +" +; +assert_true +( +one +. +matches +( +" +: +dir +( +ltr +) +" +) +" +# +one +with +LTR +child +span +" +) +; +assert_false +( +two +. +matches +( +" +: +dir +( +ltr +) +" +) +" +# +two +with +RTL +child +span +" +) +; +r +. +slot += +" +one +" +; +assert_true +( +one +. +matches +( +" +: +dir +( +ltr +) +" +) +" +# +one +with +both +child +spans +" +) +; +assert_true +( +two +. +matches +( +" +: +dir +( +ltr +) +" +) +" +# +two +while +empty +" +) +; +l +. +slot += +" +" +; +assert_false +( +one +. +matches +( +" +: +dir +( +ltr +) +" +) +" +# +one +with +RTL +child +span +" +) +; +assert_true +( +two +. +matches +( +" +: +dir +( +ltr +) +" +) +" +# +two +with +LTR +child +span +" +) +; +tree +. +remove +( +) +; +} +" +dir += +auto +changes +for +slot +reassignment +" +) +; +test +( +( +) += +> +{ +let +tree +shadow +; +[ +tree +shadow +] += +setup_tree +( +< +div +dir += +auto +> +< +div +id += +root +> +< +div +id += +text +> +A +< +/ +div +> +< +/ +div +> +< +/ +div +> +< +div +dir += +ltr +> +< +slot +id += +slot +dir += +auto +> +< +/ +slot +> +< +/ +div +> +) +; +let +text += +tree +. +querySelector +( +" +# +text +" +) +; +let +slot += +shadow +. +querySelector +( +" +# +slot +" +) +; +assert_true +( +tree +. +matches +( +" +: +dir +( +ltr +) +" +) +" +node +tree +ancestor +before +first +text +change +" +) +; +assert_true +( +slot +. +matches +( +" +: +dir +( +ltr +) +" +) +" +slot +before +first +text +change +" +) +; +text +. +innerText += +" +\ +u05D0 +" +; +assert_false +( +tree +. +matches +( +" +: +dir +( +ltr +) +" +) +" +node +tree +ancestor +after +first +text +change +" +) +; +assert_false +( +slot +. +matches +( +" +: +dir +( +ltr +) +" +) +" +slot +after +first +text +change +" +) +; +tree +. +dir += +" +rtl +" +; +assert_false +( +tree +. +matches +( +" +: +dir +( +ltr +) +" +) +" +node +tree +ancestor +before +second +text +change +" +) +; +assert_false +( +slot +. +matches +( +" +: +dir +( +ltr +) +" +) +" +slot +before +second +text +change +" +) +; +text +. +innerText += +" +A +" +; +assert_false +( +tree +. +matches +( +" +: +dir +( +ltr +) +" +) +" +node +tree +ancestor +after +second +text +change +" +) +; +assert_true +( +slot +. +matches +( +" +: +dir +( +ltr +) +" +) +" +slot +after +second +text +change +" +) +; +slot +. +dir += +" +ltr +" +; +assert_false +( +tree +. +matches +( +" +: +dir +( +ltr +) +" +) +" +node +tree +ancestor +before +third +text +change +" +) +; +assert_true +( +slot +. +matches +( +" +: +dir +( +ltr +) +" +) +" +slot +before +third +text +change +" +) +; +text +. +innerText += +" +\ +u05D0 +" +; +assert_false +( +tree +. +matches +( +" +: +dir +( +ltr +) +" +) +" +node +tree +ancestor +after +third +text +change +" +) +; +assert_true +( +slot +. +matches +( +" +: +dir +( +ltr +) +" +) +" +slot +after +third +text +change +" +) +; +slot +. +dir += +" +auto +" +; +tree +. +dir += +" +auto +" +; +assert_false +( +tree +. +matches +( +" +: +dir +( +ltr +) +" +) +" +node +tree +ancestor +after +fourth +text +change +" +) +; +assert_false +( +slot +. +matches +( +" +: +dir +( +ltr +) +" +) +" +slot +after +fourth +text +change +" +) +; +text +. +innerText += +" +A +" +; +assert_true +( +tree +. +matches +( +" +: +dir +( +ltr +) +" +) +" +node +tree +ancestor +before +fourth +text +change +" +) +; +assert_true +( +slot +. +matches +( +" +: +dir +( +ltr +) +" +) +" +slot +before +fourth +text +change +" +) +; +slot +. +dir += +" +rtl +" +; +assert_true +( +tree +. +matches +( +" +: +dir +( +ltr +) +" +) +" +node +tree +ancestor +before +fifth +text +change +" +) +; +assert_false +( +slot +. +matches +( +" +: +dir +( +ltr +) +" +) +" +slot +before +fifth +text +change +" +) +; +text +. +innerText += +" +\ +u05D0 +" +; +assert_false +( +tree +. +matches +( +" +: +dir +( +ltr +) +" +) +" +node +tree +ancestor +before +fifth +text +change +" +) +; +assert_false +( +slot +. +matches +( +" +: +dir +( +ltr +) +" +) +" +slot +before +fifth +text +change +" +) +; +} +" +text +changes +affecting +both +slot +and +ancestor +with +dir += +auto +" +) +; +test +( +( +) += +> +{ +let +tree += +setup_tree +( +< +div +dir += +" +auto +" +> +< +span +id += +" +a1 +" +> +A +< +/ +span +> +< +span +id += +" +aleph1 +" +> +\ +u05D0 +< +/ +span +> +< +span +id += +" +a2 +" +> +A +< +/ +span +> +< +span +id += +" +aleph2 +" +> +\ +u05D0 +< +/ +span +> +< +/ +div +> +) +; +let +a1 += +tree +. +querySelector +( +" +# +a1 +" +) +; +let +aleph1 += +tree +. +querySelector +( +" +# +aleph1 +" +) +; +assert_true +( +tree +. +matches +( +" +: +dir +( +ltr +) +" +) +" +initial +state +" +) +; +assert_false +( +tree +. +matches +( +" +: +dir +( +rtl +) +" +) +" +initial +state +" +) +; +a1 +. +dir += +" +ltr +" +; +assert_false +( +tree +. +matches +( +" +: +dir +( +ltr +) +" +) +" +after +change +1 +" +) +; +a1 +. +dir += +" +invalid +" +; +assert_true +( +tree +. +matches +( +" +: +dir +( +ltr +) +" +) +" +after +change +2 +" +) +; +a1 +. +dir += +" +rtl +" +; +assert_false +( +tree +. +matches +( +" +: +dir +( +ltr +) +" +) +" +after +change +3 +" +) +; +a1 +. +removeAttribute +( +" +dir +" +) +; +assert_true +( +tree +. +matches +( +" +: +dir +( +ltr +) +" +) +" +after +change +4 +" +) +; +a1 +. +dir += +" +invalid +" +; +assert_true +( +tree +. +matches +( +" +: +dir +( +ltr +) +" +) +" +after +change +5 +" +) +; +a1 +. +dir += +" +rtl +" +; +assert_false +( +tree +. +matches +( +" +: +dir +( +ltr +) +" +) +" +after +change +6 +" +) +; +aleph1 +. +dir += +" +auto +" +; +assert_true +( +tree +. +matches +( +" +: +dir +( +ltr +) +" +) +" +after +change +7 +" +) +; +aleph1 +. +dir += +" +invalid +" +; +assert_false +( +tree +. +matches +( +" +: +dir +( +ltr +) +" +) +" +after +change +8 +" +) +; +} +" +dynamic +changes +to +subtrees +excluded +as +a +result +of +the +dir +attribute +" +) +;