Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix(dropdown): execute user (click) handlers on Enter and Space (#3573)
Fixes #3570
- Loading branch information
1 parent
9a11107
commit f845951
Showing
6 changed files
with
116 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
32 changes: 32 additions & 0 deletions
32
e2e-app/src/app/dropdown/click/dropdown-click.component.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
import {Component} from '@angular/core'; | ||
|
||
@Component({ | ||
template: ` | ||
<form> | ||
<div class="form-group form-inline"> | ||
<input type="text" class="form-control mr-1" style="width: 100px" placeholder="before" id="before"/> | ||
<div class="input-group"> | ||
<div ngbDropdown class="d-inline-block mr-3"> | ||
<button class="btn btn-outline-secondary" id="dropdown" ngbDropdownToggle>Choose one</button> | ||
<div ngbDropdownMenu aria-labelledby="dropdown"> | ||
<a href ngbDropdownItem (keydown.enter)="enterKey = true" (click)="enterClick = true; $event.preventDefault()">Enter</a> | ||
<button ngbDropdownItem (keyup.space)="spaceKey = true" (click)="spaceClick = true">Space</button> | ||
</div> | ||
</div> | ||
</div> | ||
<span id="space-click" *ngIf="spaceClick" class="ml-3">SPACE-CLICK</span> | ||
<span id="enter-click" *ngIf="enterClick" class="ml-3">ENTER-CLICK</span> | ||
<span id="enter-key" *ngIf="enterKey" class="ml-3">ENTER-KEY</span> | ||
<span id="space-key" *ngIf="spaceKey" class="ml-3">SPACE-KEY</span> | ||
</div> | ||
</form> | ||
` | ||
}) | ||
export class DropdownClickComponent { | ||
enterClick = false; | ||
spaceClick = false; | ||
enterKey = false; | ||
spaceKey = false; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
import {browser, ElementFinder, Key, protractor} from 'protractor'; | ||
import {openUrl, sendKey} from '../../tools.po'; | ||
import {DropdownClickPage} from './dropdown-click.po'; | ||
|
||
describe(`Dropdown user (click) handler`, () => { | ||
|
||
let page: DropdownClickPage; | ||
let dropdown: ElementFinder; | ||
|
||
beforeAll(() => page = new DropdownClickPage()); | ||
|
||
beforeEach(async() => { | ||
await openUrl('dropdown/click'); | ||
dropdown = page.getDropdown(); | ||
}); | ||
|
||
it(`should call user (click) handler on 'Enter'`, async() => { | ||
await page.toggleItem(0); | ||
|
||
await sendKey(Key.ENTER); | ||
expect(await page.isOpened(dropdown)).toBeFalsy(`Dropdown should be hidden on Enter`); | ||
browser.wait( | ||
protractor.ExpectedConditions.presenceOf(page.getEnterClickLabel()), 0, | ||
`User click handler should have been called`); | ||
browser.wait( | ||
protractor.ExpectedConditions.presenceOf(page.getEnterKeyLabel()), 0, | ||
`User keydown.enter handler should have been called`); | ||
}); | ||
|
||
it(`should call user (click) handler on 'Space'`, async() => { | ||
await page.toggleItem(1); | ||
|
||
await sendKey(Key.SPACE); | ||
expect(await page.isOpened(dropdown)).toBeFalsy(`Dropdown should be hidden on Space`); | ||
browser.wait( | ||
protractor.ExpectedConditions.presenceOf(page.getSpaceClickLabel()), 0, | ||
`User click handler should have been called`); | ||
browser.wait( | ||
protractor.ExpectedConditions.presenceOf(page.getSpaceKeyLabel()), 0, | ||
`User keyup.space handler should have been called`); | ||
}); | ||
|
||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
import {$, $$, Key} from 'protractor'; | ||
import {DropdownPage} from '../dropdown.po'; | ||
import {expectFocused, sendKey} from '../../tools.po'; | ||
|
||
export class DropdownClickPage extends DropdownPage { | ||
async toggleItem(index: number) { | ||
await $('#before').click(); | ||
await sendKey(Key.TAB); | ||
await expectFocused(this.getDropdownToggle(), `dropdown should be focused`); | ||
for (let i = 0; i <= index; ++i) { | ||
await sendKey(Key.ARROW_DOWN); | ||
} | ||
await sendKey(Key.TAB); | ||
await expectFocused(this.getDropdownItem(index), `Item should be focused`); | ||
} | ||
|
||
getDropdownItem(index: number) { return $$(`[ngbDropdownItem]`).get(index); } | ||
|
||
getSpaceClickLabel() { return $('#space-click'); } | ||
|
||
getEnterClickLabel() { return $('#enter-click'); } | ||
|
||
getEnterKeyLabel() { return $('#enter-key'); } | ||
|
||
getSpaceKeyLabel() { return $('#space-key'); } | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters