|
1 | 1 | import { expect } from '@vaadin/chai-plugins'; |
2 | | -import { esc, fixtureSync, nextRender, nextUpdate, outsideClick } from '@vaadin/testing-helpers'; |
| 2 | +import { esc, fixtureSync, nextRender, nextUpdate, oneEvent, outsideClick } from '@vaadin/testing-helpers'; |
3 | 3 | import sinon from 'sinon'; |
4 | 4 | import './not-animated-styles.js'; |
5 | 5 | import '../vaadin-popover.js'; |
@@ -91,6 +91,64 @@ describe('popover', () => { |
91 | 91 | await nextUpdate(popover); |
92 | 92 | expect(overlay.restoreFocusNode).to.eql(target); |
93 | 93 | }); |
| 94 | + |
| 95 | + it('should restore focus when target is set on already opened popover', async () => { |
| 96 | + // Focus target before opening |
| 97 | + target.focus(); |
| 98 | + |
| 99 | + // Open popover |
| 100 | + popover.renderer = (root) => { |
| 101 | + if (!root.firstChild) { |
| 102 | + const input = document.createElement('input'); |
| 103 | + root.appendChild(input); |
| 104 | + } |
| 105 | + }; |
| 106 | + popover.opened = true; |
| 107 | + await oneEvent(overlay, 'vaadin-overlay-open'); |
| 108 | + |
| 109 | + // Set target |
| 110 | + popover.target = target; |
| 111 | + await nextUpdate(popover); |
| 112 | + |
| 113 | + overlay.querySelector('input').focus(); |
| 114 | + |
| 115 | + // Close popover |
| 116 | + popover.opened = false; |
| 117 | + await nextRender(); |
| 118 | + |
| 119 | + expect(document.activeElement).to.equal(target); |
| 120 | + }); |
| 121 | + |
| 122 | + it('should not restore focus when target is cleared on already opened popover', async () => { |
| 123 | + // Focus target before opening |
| 124 | + target.focus(); |
| 125 | + |
| 126 | + // Open popover |
| 127 | + popover.renderer = (root) => { |
| 128 | + if (!root.firstChild) { |
| 129 | + const input = document.createElement('input'); |
| 130 | + root.appendChild(input); |
| 131 | + } |
| 132 | + }; |
| 133 | + popover.opened = true; |
| 134 | + await oneEvent(overlay, 'vaadin-overlay-open'); |
| 135 | + |
| 136 | + // Set target |
| 137 | + popover.target = target; |
| 138 | + await nextUpdate(popover); |
| 139 | + |
| 140 | + overlay.querySelector('input').focus(); |
| 141 | + |
| 142 | + // Clear target |
| 143 | + popover.target = null; |
| 144 | + await nextUpdate(popover); |
| 145 | + |
| 146 | + // Close popover |
| 147 | + popover.opened = false; |
| 148 | + await nextRender(); |
| 149 | + |
| 150 | + expect(document.activeElement).to.not.equal(target); |
| 151 | + }); |
94 | 152 | }); |
95 | 153 |
|
96 | 154 | describe('for', () => { |
|
0 commit comments