Skip to content

Commit 788fc7a

Browse files
authored
Blazor Fix Missing EventArgs.Type (#38792)
* Blazor Fix Missing EventArgs.Type * E2E Test * Consolidate E2E Tests * Quarantine TouchEvent_CanTrigger * Unquarantine TouchEvent_CanTrigger * Add support for focus event * blazor.*.js * Update EventTest.cs * ClipboardEventArgs
1 parent 238854f commit 788fc7a

File tree

9 files changed

+70
-76
lines changed

9 files changed

+70
-76
lines changed

src/Components/Web.JS/dist/Release/blazor.server.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Components/Web.JS/dist/Release/blazor.webview.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Components/Web.JS/src/Rendering/Events/EventTypes.ts

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,13 +60,17 @@ registerBuiltInEventType(['input', 'change'], {
6060
createEventArgs: parseChangeEvent
6161
});
6262

63-
registerBuiltInEventType(['copy', 'cut', 'paste'], createBlankEventArgsOptions);
63+
registerBuiltInEventType(['copy', 'cut', 'paste'], {
64+
createEventArgs: e => parseClipboardEvent(e as ClipboardEvent)
65+
});
6466

6567
registerBuiltInEventType(['drag', 'dragend', 'dragenter', 'dragleave', 'dragover', 'dragstart', 'drop'], {
6668
createEventArgs: e => parseDragEvent(e as DragEvent)
6769
});
6870

69-
registerBuiltInEventType(['focus', 'blur', 'focusin', 'focusout'], createBlankEventArgsOptions);
71+
registerBuiltInEventType(['focus', 'blur', 'focusin', 'focusout'], {
72+
createEventArgs: e => parseFocusEvent(e as FocusEvent)
73+
});
7074

7175
registerBuiltInEventType(['keydown', 'keyup', 'keypress'], {
7276
createEventArgs: e => parseKeyboardEvent(e as KeyboardEvent)
@@ -154,11 +158,24 @@ function parseTouchEvent(event: TouchEvent): TouchEventArgs {
154158
};
155159
}
156160

161+
function parseFocusEvent(event: FocusEvent): FocusEventArgs {
162+
return {
163+
type: event.type
164+
};
165+
}
166+
167+
function parseClipboardEvent(event: ClipboardEvent): ClipboardEventArgs {
168+
return {
169+
type: event.type
170+
};
171+
}
172+
157173
function parseProgressEvent(event: ProgressEvent<EventTarget>): ProgressEventArgs {
158174
return {
159175
lengthComputable: event.lengthComputable,
160176
loaded: event.loaded,
161177
total: event.total,
178+
type: event.type,
162179
};
163180
}
164181

@@ -168,6 +185,7 @@ function parseErrorEvent(event: ErrorEvent): ErrorEventArgs {
168185
filename: event.filename,
169186
lineno: event.lineno,
170187
colno: event.colno,
188+
type: event.type,
171189
};
172190
}
173191

@@ -181,6 +199,7 @@ function parseKeyboardEvent(event: KeyboardEvent): KeyboardEventArgs {
181199
shiftKey: event.shiftKey,
182200
altKey: event.altKey,
183201
metaKey: event.metaKey,
202+
type: event.type,
184203
};
185204
}
186205

@@ -232,6 +251,7 @@ function parseMouseEvent(event: MouseEvent): MouseEventArgs {
232251
shiftKey: event.shiftKey,
233252
altKey: event.altKey,
234253
metaKey: event.metaKey,
254+
type: event.type,
235255
};
236256
}
237257

@@ -313,6 +333,7 @@ interface ErrorEventArgs {
313333
filename: string;
314334
lineno: number;
315335
colno: number;
336+
type: string;
316337

317338
// omitting 'error' here since we'd have to serialize it, and it's not clear we will want to
318339
// do that. https://developer.mozilla.org/en-US/docs/Web/API/ErrorEvent
@@ -327,6 +348,7 @@ interface KeyboardEventArgs {
327348
shiftKey: boolean;
328349
altKey: boolean;
329350
metaKey: boolean;
351+
type: string;
330352
}
331353

332354
interface MouseEventArgs {
@@ -345,6 +367,7 @@ interface MouseEventArgs {
345367
shiftKey: boolean;
346368
altKey: boolean;
347369
metaKey: boolean;
370+
type: string;
348371
}
349372

350373
interface PointerEventArgs extends MouseEventArgs {
@@ -362,6 +385,7 @@ interface ProgressEventArgs {
362385
lengthComputable: boolean;
363386
loaded: number;
364387
total: number;
388+
type: string;
365389
}
366390

367391
interface TouchEventArgs {
@@ -392,3 +416,11 @@ interface WheelEventArgs extends MouseEventArgs {
392416
deltaZ: number;
393417
deltaMode: number;
394418
}
419+
420+
interface FocusEventArgs {
421+
type: string;
422+
}
423+
424+
interface ClipboardEventArgs {
425+
type: string;
426+
}

src/Components/Web/test/WebEventData/MouseEventArgsReaderTest.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ public void Read_Works()
2929
ScreenX = 0.1,
3030
ScreenY = 4.4,
3131
ShiftKey = false,
32+
Type = "type",
3233
};
3334
var jsonElement = GetJsonElement(args);
3435

src/Components/test/E2ETest/Tests/EventTest.cs

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -41,13 +41,13 @@ public void FocusEvents_CanTrigger()
4141
// Focus the target, verify onfocusin is fired
4242
input.Click();
4343

44-
Browser.Equal("onfocus,onfocusin,", () => output.Text);
44+
Browser.Equal("focus,focusin,", () => output.Text);
4545

4646
// Focus something else, verify onfocusout is also fired
4747
var other = Browser.Exists(By.Id("other"));
4848
other.Click();
4949

50-
Browser.Equal("onfocus,onfocusin,onblur,onfocusout,", () => output.Text);
50+
Browser.Equal("focus,focusin,blur,focusout,", () => output.Text);
5151
}
5252

5353
[Fact]
@@ -79,7 +79,7 @@ public void MouseOverAndMouseOut_CanTrigger()
7979
.MoveToElement(other);
8080

8181
actions.Perform();
82-
Browser.Equal("onmouseover,onmouseout,", () => output.Text);
82+
Browser.Equal("mouseover,mouseout,", () => output.Text);
8383
}
8484

8585
[Fact]
@@ -98,7 +98,7 @@ public void MouseMove_CanTrigger()
9898
.MoveToElement(input, 10, 10);
9999

100100
actions.Perform();
101-
Browser.Contains("onmousemove,", () => output.Text);
101+
Browser.Contains("mousemove,", () => output.Text);
102102
}
103103

104104
[Fact]
@@ -117,12 +117,12 @@ public void MouseDownAndMouseUp_CanTrigger()
117117
var actions = new Actions(Browser).ClickAndHold(input);
118118

119119
actions.Perform();
120-
Browser.Equal("onmousedown,", () => output.Text);
120+
Browser.Equal("mousedown,", () => output.Text);
121121

122122
actions = new Actions(Browser).Release(input);
123123

124124
actions.Perform();
125-
Browser.Equal("onmousedown,onmouseup,", () => output.Text);
125+
Browser.Equal("mousedown,mouseup,", () => output.Text);
126126
}
127127

128128

@@ -156,7 +156,7 @@ public void PointerDown_CanTrigger()
156156
var actions = new Actions(Browser).ClickAndHold(input);
157157

158158
actions.Perform();
159-
Browser.Equal("onpointerdown", () => output.Text);
159+
Browser.Equal("pointerdown,", () => output.Text);
160160
}
161161

162162
[Fact]
@@ -174,10 +174,11 @@ public void DragDrop_CanTrigger()
174174

175175
actions.Perform();
176176
// drop doesn't seem to trigger in Selenium. But it's sufficient to determine "any" drag event works
177-
Browser.Equal("ondragstart,", () => output.Text);
177+
Browser.Equal("dragstart,", () => output.Text);
178178
}
179179

180-
[Fact(Skip = "https://github.com/dotnet/aspnetcore/issues/32373")]
180+
[Fact]
181+
[QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/32373")]
181182
public void TouchEvent_CanTrigger()
182183
{
183184
Browser.MountTestComponent<TouchEventComponent>();
@@ -190,7 +191,7 @@ public void TouchEvent_CanTrigger()
190191
var actions = new TouchActions(Browser).SingleTap(input);
191192

192193
actions.Perform();
193-
Browser.Equal("touchstarttouchend,", () => output.Text);
194+
Browser.Equal("touchstart,touchend,", () => output.Text);
194195
}
195196

196197
[Fact]

src/Components/test/testassets/BasicTestApp/FocusEventComponent.razor

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
<h2>Focus and activation</h2>
44

5-
<p @onfocusin="OnFocusIn" @onfocusout="OnFocusOut">
6-
Input: <input id="input" type="text" @onfocus="OnFocus" @onblur="OnBlur" />
5+
<p @onfocusin="OnFocusEvent" @onfocusout="OnFocusEvent">
6+
Input: <input id="input" type="text" @onfocus="OnFocusEvent" @onblur="OnFocusEvent" />
77
</p>
88
<p>
99
Output: <span id="output">@message</span>
@@ -33,24 +33,9 @@
3333
bool buttonReceivedFocusOut;
3434
string message;
3535

36-
void OnFocus(FocusEventArgs e)
36+
void OnFocusEvent(FocusEventArgs e)
3737
{
38-
message += "onfocus,";
39-
}
40-
41-
void OnBlur(FocusEventArgs e)
42-
{
43-
message += "onblur,";
44-
}
45-
46-
void OnFocusIn(FocusEventArgs e)
47-
{
48-
message += "onfocusin,";
49-
}
50-
51-
void OnFocusOut(FocusEventArgs e)
52-
{
53-
message += "onfocusout,";
38+
message += $"{e.Type},";
5439
}
5540

5641
void Clear()

src/Components/test/testassets/BasicTestApp/KeyPressEventComponent.razor

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,10 @@ Type here: <input @onkeypress=OnKeyPressed />
1515
{
1616
Console.WriteLine(JsonSerializer.Serialize(eventArgs));
1717
keysPressed.Add(eventArgs.Key);
18+
19+
if (eventArgs.Type != "keypress")
20+
{
21+
throw new ArgumentException($"Expected 'keypress' event type, got {eventArgs.Type}");
22+
}
1823
}
1924
}

src/Components/test/testassets/BasicTestApp/MouseEventComponent.razor

Lines changed: 12 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,20 @@
77
Output: <span id="output">@message</span>
88
</p>
99
<p>
10-
Mouseover: <input id="mouseover_input" type="text" @onmouseover="OnMouseOver" @onmouseout="OnMouseOut" />
10+
Mouseover: <input id="mouseover_input" type="text" @onmouseover="OnMouseEvent" @onmouseout="OnMouseEvent" />
1111
</p>
1212
<p>
13-
<span id="mousemove_input" @onmousemove="OnMouseMove">Mousemove city!</span>
13+
<span id="mousemove_input" @onmousemove="OnMouseEvent">Mousemove city!</span>
1414
</p>
1515
<p>
16-
Mousedown: <input id="mousedown_input" @onmousedown="OnMouseDown" @onmouseup="OnMouseUp" />
16+
Mousedown: <input id="mousedown_input" @onmousedown="OnMouseEvent" @onmouseup="OnMouseEvent" />
1717
</p>
1818
<p>
19-
Pointerdown: <input id="pointerdown_input" @onpointerdown="OnPointerDown" />
19+
Pointerdown: <input id="pointerdown_input" @onpointerdown="OnPointerEvent" />
2020
</p>
2121
<p>
22-
<div id="drag_input" draggable="true" @ondragstart="OnDragStart">Drag Me</div>
23-
<div id="drop" @ondrop="OnDrop" ondragover="event.preventDefault()" style="width: 100px; height: 100px; border: dotted">Drop Target</div>
22+
<div id="drag_input" draggable="true" @ondragstart="OnDragEvent">Drag Me</div>
23+
<div id="drop" @ondrop="OnDragEvent" ondragover="event.preventDefault()" style="width: 100px; height: 100px; border: dotted">Drop Target</div>
2424
</p>
2525
<p>
2626
<button id="clear_event_log" @onclick="Clear">Clear</button>
@@ -40,52 +40,22 @@
4040

4141
string message;
4242

43-
void OnMouseOver(MouseEventArgs e)
43+
void OnMouseEvent(MouseEventArgs e)
4444
{
4545
DumpEvent(e);
46-
message += "onmouseover,";
46+
message += $"{e.Type},";
4747
}
4848

49-
void OnMouseOut(MouseEventArgs e)
49+
void OnPointerEvent(PointerEventArgs e)
5050
{
5151
DumpEvent(e);
52-
message += "onmouseout,";
52+
message += $"{e.Type},";
5353
}
5454

55-
void OnMouseMove(MouseEventArgs e)
55+
void OnDragEvent(DragEventArgs e)
5656
{
5757
DumpEvent(e);
58-
message += "onmousemove,";
59-
}
60-
61-
void OnMouseDown(MouseEventArgs e)
62-
{
63-
DumpEvent(e);
64-
message += "onmousedown,";
65-
}
66-
67-
void OnMouseUp(MouseEventArgs e)
68-
{
69-
DumpEvent(e);
70-
message += "onmouseup,";
71-
}
72-
73-
void OnPointerDown(PointerEventArgs e)
74-
{
75-
DumpEvent(e);
76-
message += "onpointerdown";
77-
}
78-
79-
void OnDragStart(DragEventArgs e)
80-
{
81-
DumpEvent(e);
82-
message += "ondragstart,";
83-
}
84-
85-
void OnDrop(DragEventArgs e)
86-
{
87-
DumpEvent(e);
88-
message += "ondrop,";
58+
message += $"{e.Type},";
8959
}
9060

9161
void OnPolymorphicEvent(EventArgs e)

src/Components/test/testassets/BasicTestApp/TouchEventComponent.razor

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828

2929
void OnTouch(TouchEventArgs e)
3030
{
31-
message += e.Type;
31+
message += $"{e.Type},";
3232
Console.WriteLine(JsonSerializer.Serialize(e));
3333
StateHasChanged();
3434
}

0 commit comments

Comments
 (0)