|
1 | 1 | import {assert} from '@open-wc/testing'
|
2 |
| -import {RelativeTimeElement} from '../src/index.ts' |
| 2 | +import {RelativeTimeElement, RelativeTimeUpdatedEvent} from '../src/index.ts' |
3 | 3 |
|
4 | 4 | suite('relative-time', function () {
|
5 | 5 | let dateNow
|
@@ -733,6 +733,86 @@ suite('relative-time', function () {
|
733 | 733 | })
|
734 | 734 | })
|
735 | 735 |
|
| 736 | + suite('relative-time-updated event', () => { |
| 737 | + test('dispatches a bubbling+composed relative-time-updated event on each update', async () => { |
| 738 | + const el = document.createElement('relative-time') |
| 739 | + el.setAttribute('datetime', '1970-01-01T00:00:00.000-08:00') |
| 740 | + let event |
| 741 | + el.addEventListener('relative-time-updated', e => (event = e)) |
| 742 | + await Promise.resolve() |
| 743 | + assert.instanceOf(event, RelativeTimeUpdatedEvent) |
| 744 | + assert.propertyVal(event, 'composed', true) |
| 745 | + assert.propertyVal(event, 'bubbles', true) |
| 746 | + }) |
| 747 | + |
| 748 | + test('event contains oldText, newText, oldTitle, newTitle properties', async () => { |
| 749 | + const el = document.createElement('relative-time') |
| 750 | + el.setAttribute('datetime', '1970-01-01T00:00:00.000-08:00') |
| 751 | + let event |
| 752 | + el.addEventListener('relative-time-updated', e => (event = e)) |
| 753 | + await Promise.resolve() |
| 754 | + assert.propertyVal(event, 'oldText', '') |
| 755 | + assert.propertyVal(event, 'newText', 'on Jan 1, 1970') |
| 756 | + assert.propertyVal(event, 'oldTitle', '') |
| 757 | + assert.propertyVal(event, 'newTitle', 'Jan 1, 1970, 12:00 PM GMT+4') |
| 758 | + el.setAttribute('datetime', '1970-01-01T01:00:00.000-08:00') |
| 759 | + await Promise.resolve() |
| 760 | + assert.propertyVal(event, 'oldText', 'on Jan 1, 1970') |
| 761 | + assert.propertyVal(event, 'newText', 'on Jan 1, 1970') |
| 762 | + assert.propertyVal(event, 'oldTitle', 'Jan 1, 1970, 12:00 PM GMT+4') |
| 763 | + assert.propertyVal(event, 'newTitle', 'Jan 1, 1970, 1:00 PM GMT+4') |
| 764 | + }) |
| 765 | + |
| 766 | + test('allows binding of `onrelativetimeupdated` property', async () => { |
| 767 | + const el = document.createElement('relative-time') |
| 768 | + el.setAttribute('datetime', '1970-01-01T00:00:00.000-08:00') |
| 769 | + let event |
| 770 | + el.onRelativeTimeUpdated = e => (event = e) |
| 771 | + await Promise.resolve() |
| 772 | + assert.instanceOf(event, RelativeTimeUpdatedEvent) |
| 773 | + }) |
| 774 | + |
| 775 | + test('unbinds old `onRelativeTimeUpdated` property values', async () => { |
| 776 | + const el = document.createElement('relative-time') |
| 777 | + el.setAttribute('datetime', '1970-01-01T00:00:00.000-08:00') |
| 778 | + let called = false |
| 779 | + const fn = () => (called = true) |
| 780 | + el.onRelativeTimeUpdated = fn |
| 781 | + assert.equal(el.onRelativeTimeUpdated, fn) |
| 782 | + el.onRelativeTimeUpdated = null |
| 783 | + assert.equal(el.onRelativeTimeUpdated, null) |
| 784 | + await Promise.resolve() |
| 785 | + assert.equal(called, false, 'onRelativeTimeUpdated was called but should not have been') |
| 786 | + }) |
| 787 | + |
| 788 | + test('only binds function event listeners on `onRelativeTimeUpdated`', async () => { |
| 789 | + const el = document.createElement('relative-time') |
| 790 | + el.setAttribute('datetime', '1970-01-01T00:00:00.000-08:00') |
| 791 | + let called = false |
| 792 | + const listenerObject = { |
| 793 | + handleEvent() { |
| 794 | + called = true |
| 795 | + }, |
| 796 | + } |
| 797 | + el.onRelativeTimeUpdated = listenerObject |
| 798 | + assert.equal(el.onRelativeTimeUpdated, listenerObject) |
| 799 | + await Promise.resolve() |
| 800 | + assert.equal(called, false, 'onRelativeTimeUpdated was called but should not have been') |
| 801 | + }) |
| 802 | + |
| 803 | + test('calling stopImmediatePropagation() effects onRelativeTimeUpdated property', async () => { |
| 804 | + const el = document.createElement('relative-time') |
| 805 | + el.setAttribute('datetime', '1970-01-01T00:00:00.000-08:00') |
| 806 | + let called = false |
| 807 | + el.addEventListener('relative-time-updated', e => { |
| 808 | + e.stopImmediatePropagation() |
| 809 | + }) |
| 810 | + el.onRelativeTimeUpdated = () => (called = true) |
| 811 | + await Promise.resolve() |
| 812 | + assert.equal(called, false, 'onRelativeTimeUpdated was called but should not have been') |
| 813 | + }) |
| 814 | + }) |
| 815 | + |
736 | 816 | suite('table tests', function () {
|
737 | 817 | const referenceDate = '2022-10-24T14:46:00.000Z'
|
738 | 818 | const tests = new Set([
|
|
0 commit comments