Пример #1
0
    public void Read_Works()
    {
        // Arrange
        var args = new DragEventArgs
        {
            AltKey       = true,
            Button       = 72,
            Buttons      = 61,
            ClientX      = 3.1,
            ClientY      = 4.2,
            CtrlKey      = false,
            DataTransfer = new()
            {
                DropEffect    = "effect1",
                EffectAllowed = "allowed1",
                Files         = new[] { "File1", "File2" },
                Items         = new[]
                {
                    new DataTransferItem
                    {
                        Kind = "kind1",
                        Type = "type1,"
                    },
                    new DataTransferItem
                    {
                        Kind = "kind7",
                        Type = "type6,"
                    },
                },
                Types = new[] { "type1", "type2", "type3" },
            },
            Detail   = 7,
            MetaKey  = false,
            OffsetX  = 8.2,
            OffsetY  = 7.1,
            PageX    = 5.6,
            PageY    = 7.8,
            ScreenX  = 0.1,
            ScreenY  = 4.4,
            ShiftKey = true,
        };
        var jsonElement = GetJsonElement(args);

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

        // Assert
        MouseEventArgsReaderTest.AssertEqual(args, result);
        AssertEqual(args.DataTransfer, result.DataTransfer);
    }
Пример #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);
        }
    }