예제 #1
0
    public void Read_Works()
    {
        // Arrange
        var args = new WheelEventArgs
        {
            AltKey    = false,
            CtrlKey   = true,
            MetaKey   = true,
            ShiftKey  = false,
            Type      = "type1",
            Detail    = 789,
            Button    = 7,
            Buttons   = 234,
            ClientX   = 3.2,
            ClientY   = 33.1,
            DeltaMode = 2,
            DeltaX    = 11.1,
            DeltaY    = 21.2,
            DeltaZ    = 9.1,
            OffsetX   = 7.2,
            OffsetY   = 1.2,
            PageX     = 5.6,
            PageY     = 7.8,
            ScreenX   = 3.56,
            ScreenY   = 8.32,
        };

        var jsonElement = GetJsonElement(args);

        // Act
        var result = WheelEventArgsReader.Read(jsonElement);

        // Assert
        MouseEventArgsReaderTest.AssertEqual(args, result);
        Assert.Equal(args.DeltaMode, result.DeltaMode);
        Assert.Equal(args.DeltaX, result.DeltaX);
        Assert.Equal(args.DeltaY, result.DeltaY);
        Assert.Equal(args.DeltaZ, result.DeltaZ);
    }
예제 #2
0
    private static bool TryDeserializeStandardWebEventArgs(
        string eventName,
        JsonElement eventArgsJson,
        [NotNullWhen(true)] out EventArgs?eventArgs)
    {
        // For back-compatibility, we recognize the built-in list of web event names and hard-code
        // rules about the deserialization type for their eventargs. This makes it possible to declare
        // an event handler as receiving EventArgs, and have it actually receive a subclass at runtime
        // depending on the event that was raised.
        //
        // The following list should remain in sync with EventArgsFactory.ts.

        switch (eventName)
        {
        case "input":
        case "change":
            // Special case for ChangeEventArgs because its value type can be one of
            // several types, and System.Text.Json doesn't pick types dynamically
            eventArgs = ChangeEventArgsReader.Read(eventArgsJson);
            return(true);

        case "copy":
        case "cut":
        case "paste":
            eventArgs = ClipboardEventArgsReader.Read(eventArgsJson);
            return(true);

        case "drag":
        case "dragend":
        case "dragenter":
        case "dragleave":
        case "dragover":
        case "dragstart":
        case "drop":
            eventArgs = DragEventArgsReader.Read(eventArgsJson);
            return(true);

        case "focus":
        case "blur":
        case "focusin":
        case "focusout":
            eventArgs = FocusEventArgsReader.Read(eventArgsJson);
            return(true);

        case "keydown":
        case "keyup":
        case "keypress":
            eventArgs = KeyboardEventArgsReader.Read(eventArgsJson);
            return(true);

        case "contextmenu":
        case "click":
        case "mouseover":
        case "mouseout":
        case "mousemove":
        case "mousedown":
        case "mouseup":
        case "dblclick":
            eventArgs = MouseEventArgsReader.Read(eventArgsJson);
            return(true);

        case "error":
            eventArgs = ErrorEventArgsReader.Read(eventArgsJson);
            return(true);

        case "loadstart":
        case "timeout":
        case "abort":
        case "load":
        case "loadend":
        case "progress":
            eventArgs = ProgressEventArgsReader.Read(eventArgsJson);
            return(true);

        case "touchcancel":
        case "touchend":
        case "touchmove":
        case "touchenter":
        case "touchleave":
        case "touchstart":
            eventArgs = TouchEventArgsReader.Read(eventArgsJson);
            return(true);

        case "gotpointercapture":
        case "lostpointercapture":
        case "pointercancel":
        case "pointerdown":
        case "pointerenter":
        case "pointerleave":
        case "pointermove":
        case "pointerout":
        case "pointerover":
        case "pointerup":
            eventArgs = PointerEventArgsReader.Read(eventArgsJson);
            return(true);

        case "wheel":
        case "mousewheel":
            eventArgs = WheelEventArgsReader.Read(eventArgsJson);
            return(true);

        case "toggle":
            eventArgs = EventArgs.Empty;
            return(true);

        default:
            // For custom event types, there are no built-in rules, so the deserialization type is
            // determined by the parameter declared on the delegate.
            eventArgs = null;
            return(false);
        }
    }