| <!DOCTYPE html> |
| <link rel="help" href="https://drafts.csswg.org/css-ruby/#rubypos"> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <body> |
| |
| <p> |
| <ruby id="a1"> |
| base |
| <rtc><rt>annotation1</rt></rtc> |
| <rtc><rt>annotation2</rt></rtc> |
| <rtc><rt>annotation3</rt></rtc> |
| </ruby> |
| </p> |
| |
| <script> |
| for (const value of ['', 'alternate', 'alternate over', 'over alternate']) { |
| test(() => { |
| const a1 = document.querySelector('#a1'); |
| a1.style.rubyPosition = value; |
| const [rt1, rt2, rt3] = a1.querySelectorAll('rt'); |
| assert_rt_is_over(rt1, a1); |
| assert_rt_is_under(rt2, a1); |
| assert_rt_is_over(rt3, a1); |
| a1.style.rubyPosition = ''; |
| }, `ruby-position "${value}" alternate from over`); |
| } |
| |
| for (const value of ['alternate under', 'under alternate']) { |
| test(() => { |
| const a1 = document.querySelector('#a1'); |
| a1.style.rubyPosition = value; |
| const [rt1, rt2, rt3] = a1.querySelectorAll('rt'); |
| assert_rt_is_under(rt1, a1); |
| assert_rt_is_over(rt2, a1); |
| assert_rt_is_under(rt3, a1); |
| a1.style.rubyPosition = ''; |
| }, `ruby-position "${value}" alternate from under`); |
| } |
| |
| test(() => { |
| const a1 = document.querySelector('#a1'); |
| const [rtc1, rtc2] = a1.querySelectorAll('rtc'); |
| const [rt1, rt2, rt3] = a1.querySelectorAll('rt'); |
| |
| rtc1.style.rubyPosition = 'under'; |
| assert_rt_is_under(rt1, a1); |
| assert_rt_is_over(rt2, a1); |
| assert_rt_is_under(rt3, a1); |
| |
| rtc1.style.rubyPosition = 'over'; |
| assert_rt_is_over(rt1, a1); |
| assert_rt_is_under(rt2, a1); |
| assert_rt_is_over(rt3, a1); |
| |
| rtc1.style.rubyPosition = 'alternate'; |
| rtc2.style.rubyPosition = 'under'; |
| assert_rt_is_over(rt1, a1); |
| assert_rt_is_under(rt2, a1); |
| assert_rt_is_over(rt3, a1); |
| |
| rtc1.style.rubyPosition = ''; |
| rtc2.style.rubyPosition = ''; |
| }, 'ruby-position alternate from previous ruby text container'); |
| |
| function assert_rt_is_over(rt, ruby) { |
| assert_true(rt.getBoundingClientRect().top < ruby.getBoundingClientRect().top); |
| } |
| |
| function assert_rt_is_under(rt, ruby) { |
| assert_true(rt.getBoundingClientRect().bottom > ruby.getBoundingClientRect().bottom); |
| } |
| |
| </script> |
| </body> |