@@ -31,6 +31,7 @@ suite('relative-time', function () {
3131 } )
3232
3333 teardown ( ( ) => {
34+ document . body . removeAttribute ( 'data-prefers-absolute-time' )
3435 fixture . innerHTML = ''
3536 if ( dateNow ) {
3637 // eslint-disable-next-line no-global-assign
@@ -1884,6 +1885,53 @@ suite('relative-time', function () {
18841885 }
18851886 } )
18861887
1888+ suite ( 'experimental: [data-prefers-absolute-time]' , async ( ) => {
1889+ test ( 'formats with absolute time when data-prefers-absolute-time="true"' , async ( ) => {
1890+ document . documentElement . setAttribute ( 'data-prefers-absolute-time' , 'true' )
1891+ const el = document . createElement ( 'relative-time' )
1892+ el . setAttribute ( 'datetime' , '2022-01-01T12:00:00.000Z' )
1893+ await Promise . resolve ( )
1894+
1895+ assert . match ( el . shadowRoot . textContent , / [ A - Z ] [ a - z ] { 2 } \d { 1 , 2 } , \d { 4 } , \d { 1 , 2 } : \d { 2 } ( A M | P M ) / )
1896+ } )
1897+
1898+ test ( 'does not format with absolute time when format is elapsed or duration' , async ( ) => {
1899+ document . documentElement . setAttribute ( 'data-prefers-absolute-time' , 'true' )
1900+ const el = document . createElement ( 'relative-time' )
1901+ el . setAttribute ( 'datetime' , '2022-01-01T12:00:00.000Z' )
1902+ el . setAttribute ( 'format' , 'elapsed' )
1903+ await Promise . resolve ( )
1904+
1905+ assert . notMatch ( el . shadowRoot . textContent , / [ A - Z ] [ a - z ] { 2 } \d { 1 , 2 } , \d { 4 } , \d { 1 , 2 } : \d { 2 } ( A M | P M ) / )
1906+ } )
1907+
1908+ test ( 'does not format with absolute time when data-prefers-absolute-time="false"' , async ( ) => {
1909+ document . documentElement . setAttribute ( 'data-prefers-absolute-time' , 'false' )
1910+ const el = document . createElement ( 'relative-time' )
1911+ el . setAttribute ( 'datetime' , new Date ( Date . now ( ) - 3 * 60 * 60 * 24 * 1000 ) . toISOString ( ) )
1912+ await Promise . resolve ( )
1913+
1914+ assert . equal ( el . shadowRoot . textContent , '3 days ago' )
1915+ } )
1916+
1917+ test ( 'does not format with absolute time when data-prefers-absolute-time attribute is not set' , async ( ) => {
1918+ const el = document . createElement ( 'relative-time' )
1919+ el . setAttribute ( 'datetime' , new Date ( Date . now ( ) - 3 * 60 * 60 * 24 * 1000 ) . toISOString ( ) )
1920+ await Promise . resolve ( )
1921+
1922+ assert . equal ( el . shadowRoot . textContent , '3 days ago' )
1923+ } )
1924+
1925+ test ( 'supports data-prefers-absolute-time="true" on body element too' , async ( ) => {
1926+ document . body . setAttribute ( 'data-prefers-absolute-time' , 'true' )
1927+ const el = document . createElement ( 'relative-time' )
1928+ el . setAttribute ( 'datetime' , '2022-01-01T12:00:00.000Z' )
1929+ await Promise . resolve ( )
1930+
1931+ assert . match ( el . shadowRoot . textContent , / [ A - Z ] [ a - z ] { 2 } \d { 1 , 2 } , \d { 4 } , \d { 1 , 2 } : \d { 2 } ( A M | P M ) / )
1932+ } )
1933+ } )
1934+
18871935 suite ( '[aria-hidden]' , async ( ) => {
18881936 test ( '[aria-hidden="true"] applies to shadow root' , async ( ) => {
18891937 const now = new Date ( ) . toISOString ( )
0 commit comments