Skip to content

Commit 9e5e794

Browse files
committed
feat(cdk/testing): support modifiers for right clicking on a TestElement
Adds the ability to provide modifier keys when right clicking on a TestElement
1 parent f15de07 commit 9e5e794

File tree

8 files changed

+25
-12
lines changed

8 files changed

+25
-12
lines changed

src/cdk/testing/protractor/protractor-element.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,8 @@ export class ProtractorElement implements TestElement {
8686
await this._dispatchClickEventSequence(args, Button.LEFT);
8787
}
8888

89-
async rightClick(...args: [] | ['center'] | [number, number]): Promise<void> {
89+
async rightClick(...args: [ModifierKeys?] | ['center', ModifierKeys?] |
90+
[number, number, ModifierKeys?]): Promise<void> {
9091
await this._dispatchClickEventSequence(args, Button.RIGHT);
9192
}
9293

src/cdk/testing/test-element.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,16 +85,18 @@ export interface TestElement {
8585
* Click the element at the specified coordinates relative to the top-left of the element.
8686
* @param relativeX Coordinate within the element, along the X-axis at which to click.
8787
* @param relativeY Coordinate within the element, along the Y-axis at which to click.
88+
* @param modifiers Modifier keys held while clicking
8889
*/
89-
click(relativeX: number, relativeY: number, modifiers?: ModifierKeys, ): Promise<void>;
90+
click(relativeX: number, relativeY: number, modifiers?: ModifierKeys ): Promise<void>;
9091

9192
/**
9293
* Right clicks on the element at the specified coordinates relative to the top-left of it.
9394
* @param relativeX Coordinate within the element, along the X-axis at which to click.
9495
* @param relativeY Coordinate within the element, along the Y-axis at which to click.
96+
* @param modifiers Modifier keys held while clicking
9597
* @breaking-change 11.0.0 To become a required method.
9698
*/
97-
rightClick?(relativeX: number, relativeY: number): Promise<void>;
99+
rightClick?(relativeX: number, relativeY: number, modifiers?: ModifierKeys): Promise<void>;
98100

99101
/** Focus the element. */
100102
focus(): Promise<void>;

src/cdk/testing/testbed/unit-test-element.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,8 @@ export class UnitTestElement implements TestElement {
8686
await this._stabilize();
8787
}
8888

89-
async rightClick(...args: [] | ['center'] | [number, number]): Promise<void> {
89+
async rightClick(...args: [ModifierKeys?] | ['center', ModifierKeys?] |
90+
[number, number, ModifierKeys?]): Promise<void> {
9091
await this._dispatchMouseEventSequence('contextmenu', args, 2);
9192
await this._stabilize();
9293
}

src/cdk/testing/tests/cross-environment.spec.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -372,6 +372,13 @@ export function crossEnvironmentSpecs(
372372
expect(await contextmenuTestResult.text()).toBe('50-50-2');
373373
});
374374

375+
it('should be able to right click with modifiers', async () => {
376+
const clickTest = await harness.clickTest();
377+
const modifiersResult = await harness.clickModifiersResult();
378+
await clickTest.rightClick!(50, 50, {alt: true, control: true});
379+
expect(await modifiersResult.text()).toBe('-alt-control-');
380+
});
381+
375382
it('should be able to send key', async () => {
376383
const input = await harness.input();
377384
const value = await harness.value();

src/cdk/testing/tests/test-main-component.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,9 @@ export class TestMainComponent implements OnDestroy {
100100
onRightClick(event: MouseEvent) {
101101
this.rightClickResult.button = event.button;
102102
this._assignRelativeCoordinates(event, this.rightClickResult);
103+
104+
this.modifiers = ['Shift', 'Alt', 'Control', 'Meta']
105+
.map(key => event.getModifierState(key) ? key.toLowerCase() : '').join('-');
103106
}
104107

105108
onCustomEvent(event: any) {

tools/public_api_guard/cdk/testing.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ export interface TestElement {
150150
isFocused(): Promise<boolean>;
151151
matchesSelector(selector: string): Promise<boolean>;
152152
mouseAway(): Promise<void>;
153-
rightClick?(relativeX: number, relativeY: number): Promise<void>;
153+
rightClick?(relativeX: number, relativeY: number, modifiers?: ModifierKeys): Promise<void>;
154154
selectOptions?(...optionIndexes: number[]): Promise<void>;
155155
sendKeys(...keys: (string | TestKey)[]): Promise<void>;
156156
sendKeys(modifiers: ModifierKeys, ...keys: (string | TestKey)[]): Promise<void>;

tools/public_api_guard/cdk/testing/protractor.d.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ export declare class ProtractorElement implements TestElement {
1919
isFocused(): Promise<boolean>;
2020
matchesSelector(selector: string): Promise<boolean>;
2121
mouseAway(): Promise<void>;
22-
rightClick(...args: [] | ['center'] | [number, number]): Promise<void>;
22+
rightClick(...args: [ModifierKeys?] | ['center', ModifierKeys?] |
23+
[number, number, ModifierKeys?]): Promise<void>;
2324
selectOptions(...optionIndexes: number[]): Promise<void>;
2425
sendKeys(...keys: (string | TestKey)[]): Promise<void>;
2526
sendKeys(modifiers: ModifierKeys, ...keys: (string | TestKey)[]): Promise<void>;

tools/public_api_guard/cdk/testing/testbed.d.ts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,8 @@ export declare class UnitTestElement implements TestElement {
2121
constructor(element: Element, _stabilize: () => Promise<void>);
2222
blur(): Promise<void>;
2323
clear(): Promise<void>;
24-
click(...args: [ModifierKeys?] | ['center', ModifierKeys?] | [
25-
number,
26-
number,
27-
ModifierKeys?
28-
]): Promise<void>;
24+
click(...args: [ModifierKeys?] | ['center', ModifierKeys?] |
25+
[number, number, ModifierKeys?]): Promise<void>;
2926
dispatchEvent(name: string, data?: Record<string, EventData>): Promise<void>;
3027
focus(): Promise<void>;
3128
getAttribute(name: string): Promise<string | null>;
@@ -37,7 +34,8 @@ export declare class UnitTestElement implements TestElement {
3734
isFocused(): Promise<boolean>;
3835
matchesSelector(selector: string): Promise<boolean>;
3936
mouseAway(): Promise<void>;
40-
rightClick(...args: [] | ['center'] | [number, number]): Promise<void>;
37+
rightClick(...args: [ModifierKeys?] | ['center', ModifierKeys?] |
38+
[number, number, ModifierKeys?]): Promise<void>;
4139
selectOptions(...optionIndexes: number[]): Promise<void>;
4240
sendKeys(...keys: (string | TestKey)[]): Promise<void>;
4341
sendKeys(modifiers: ModifierKeys, ...keys: (string | TestKey)[]): Promise<void>;

0 commit comments

Comments
 (0)