@@ -215,6 +215,20 @@ describe(FormatRelativeTime.metadata.tag, () => {
215215 expect ( time ! . textContent ! . trim ( ) ) . toContain ( 'Tag' ) ;
216216 } ) ;
217217
218+ it ( 'should use the browser locale when locale and document lang are omitted' , async ( ) => {
219+ document . documentElement . lang = '' ;
220+ removeFixture ( fixture ) ;
221+
222+ fixture = await createFixture (
223+ html `< nve-format-relative-time date ="2023-07-27T12:00:00.000Z "> </ nve-format-relative-time > `
224+ ) ;
225+ element = fixture . querySelector ( FormatRelativeTime . metadata . tag ) ;
226+ await elementIsStable ( element ) ;
227+
228+ const time = element . shadowRoot ! . querySelector ( 'time' ) ;
229+ expect ( time ! . textContent ! . trim ( ) ) . toBe ( '1 day ago' ) ;
230+ } ) ;
231+
218232 it ( 'should format with de-DE locale' , async ( ) => {
219233 removeFixture ( fixture ) ;
220234
@@ -305,6 +319,49 @@ describe(FormatRelativeTime.metadata.tag, () => {
305319 expect ( element . shadowRoot ! . querySelector ( 'time' ) ! . textContent ! . trim ( ) ) . toBe ( '2 minutes ago' ) ;
306320 } ) ;
307321
322+ it ( 'should start sync when connected with the sync attribute' , async ( ) => {
323+ removeFixture ( fixture ) ;
324+
325+ fixture = await createFixture (
326+ html `< nve-format-relative-time locale ="en-US " sync date ="2023-07-28T11:59:30.000Z "> </ nve-format-relative-time > `
327+ ) ;
328+ element = fixture . querySelector ( FormatRelativeTime . metadata . tag ) ;
329+ await elementIsStable ( element ) ;
330+
331+ vi . setSystemTime ( new Date ( '2023-07-28T12:01:00.000Z' ) ) ;
332+ vi . advanceTimersByTime ( 10000 ) ;
333+ await elementIsStable ( element ) ;
334+
335+ expect ( element . shadowRoot ! . querySelector ( 'time' ) ! . textContent ! . trim ( ) ) . toBe ( '2 minutes ago' ) ;
336+ } ) ;
337+
338+ it ( 'should use the hourly sync interval for day-or-greater distances' , async ( ) => {
339+ element . date = '2023-07-26T12:00:00.000Z' ;
340+ element . sync = true ;
341+ await elementIsStable ( element ) ;
342+
343+ vi . advanceTimersByTime ( 300000 ) ;
344+ await elementIsStable ( element ) ;
345+ expect ( element . shadowRoot ! . querySelector ( 'time' ) ! . textContent ! . trim ( ) ) . toBe ( '2 days ago' ) ;
346+
347+ vi . advanceTimersByTime ( 3600000 ) ;
348+ await elementIsStable ( element ) ;
349+ expect ( element . shadowRoot ! . querySelector ( 'time' ) ! . textContent ! . trim ( ) ) . toBe ( '2 days ago' ) ;
350+ } ) ;
351+
352+ it ( 'should use the default sync interval when the date is empty' , async ( ) => {
353+ removeFixture ( fixture ) ;
354+
355+ fixture = await createFixture ( html `< nve-format-relative-time locale ="en-US " sync > </ nve-format-relative-time > ` ) ;
356+ element = fixture . querySelector ( FormatRelativeTime . metadata . tag ) ;
357+ await elementIsStable ( element ) ;
358+
359+ vi . advanceTimersByTime ( 60000 ) ;
360+ await elementIsStable ( element ) ;
361+
362+ expect ( element . shadowRoot ! . querySelector ( 'time' ) ! . textContent ! . trim ( ) ) . toBe ( '' ) ;
363+ } ) ;
364+
308365 it ( 'should adapt interval as time distance grows' , async ( ) => {
309366 element . date = '2023-07-28T11:59:50.000Z' ;
310367 element . sync = true ;
0 commit comments