Add missing conversions on EventCallbackFactory
This commit is contained in:
parent
f37d30833d
commit
c725089e8b
|
|
@ -2,6 +2,7 @@
|
||||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
|
using System.ComponentModel;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Components
|
namespace Microsoft.AspNetCore.Components
|
||||||
|
|
@ -12,6 +13,23 @@ namespace Microsoft.AspNetCore.Components
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public sealed class EventCallbackFactory
|
public sealed class EventCallbackFactory
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Returns the provided <paramref name="callback"/>. For internal framework use only.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="receiver"></param>
|
||||||
|
/// <param name="callback"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[EditorBrowsable(EditorBrowsableState.Never)]
|
||||||
|
public EventCallback Create(object receiver, EventCallback callback)
|
||||||
|
{
|
||||||
|
if (receiver == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(receiver));
|
||||||
|
}
|
||||||
|
|
||||||
|
return callback;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Creates an <see cref="EventCallback"/> for the provided <paramref name="receiver"/> and
|
/// Creates an <see cref="EventCallback"/> for the provided <paramref name="receiver"/> and
|
||||||
/// <paramref name="callback"/>.
|
/// <paramref name="callback"/>.
|
||||||
|
|
@ -100,6 +118,40 @@ namespace Microsoft.AspNetCore.Components
|
||||||
return CreateCore(receiver, callback);
|
return CreateCore(receiver, callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns the provided <paramref name="callback"/>. For internal framework use only.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="receiver"></param>
|
||||||
|
/// <param name="callback"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[EditorBrowsable(EditorBrowsableState.Never)]
|
||||||
|
public string Create<T>(object receiver, string callback)
|
||||||
|
{
|
||||||
|
if (receiver == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(receiver));
|
||||||
|
}
|
||||||
|
|
||||||
|
return callback;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns the provided <paramref name="callback"/>. For internal framework use only.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="receiver"></param>
|
||||||
|
/// <param name="callback"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[EditorBrowsable(EditorBrowsableState.Never)]
|
||||||
|
public EventCallback<T> Create<T>(object receiver, EventCallback<T> callback)
|
||||||
|
{
|
||||||
|
if (receiver == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(receiver));
|
||||||
|
}
|
||||||
|
|
||||||
|
return callback;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Creates an <see cref="EventCallback"/> for the provided <paramref name="receiver"/> and
|
/// Creates an <see cref="EventCallback"/> for the provided <paramref name="receiver"/> and
|
||||||
/// <paramref name="callback"/>.
|
/// <paramref name="callback"/>.
|
||||||
|
|
@ -188,6 +240,34 @@ namespace Microsoft.AspNetCore.Components
|
||||||
return CreateCore<T>(receiver, callback);
|
return CreateCore<T>(receiver, callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates an <see cref="EventCallback"/> for the provided <paramref name="receiver"/> and
|
||||||
|
/// <paramref name="callback"/>. For internal framework use only.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="receiver"></param>
|
||||||
|
/// <param name="callback"></param>
|
||||||
|
/// <param name="value"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[EditorBrowsable(EditorBrowsableState.Never)]
|
||||||
|
public EventCallback<T> CreateInferred<T>(object receiver, Action<T> callback, T value)
|
||||||
|
{
|
||||||
|
return Create(receiver, callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates an <see cref="EventCallback"/> for the provided <paramref name="receiver"/> and
|
||||||
|
/// <paramref name="callback"/>. For internal framework use only.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="receiver"></param>
|
||||||
|
/// <param name="callback"></param>
|
||||||
|
/// <param name="value"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[EditorBrowsable(EditorBrowsableState.Never)]
|
||||||
|
public EventCallback<T> CreateInferred<T>(object receiver, Func<T, Task> callback, T value)
|
||||||
|
{
|
||||||
|
return Create(receiver, callback);
|
||||||
|
}
|
||||||
|
|
||||||
private EventCallback CreateCore(object receiver, MulticastDelegate callback)
|
private EventCallback CreateCore(object receiver, MulticastDelegate callback)
|
||||||
{
|
{
|
||||||
if (!object.ReferenceEquals(receiver, callback.Target) && receiver is IHandleEvent handler)
|
if (!object.ReferenceEquals(receiver, callback.Target) && receiver is IHandleEvent handler)
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,25 @@ namespace Microsoft.AspNetCore.Components
|
||||||
{
|
{
|
||||||
public class EventCallbackFactoryTest
|
public class EventCallbackFactoryTest
|
||||||
{
|
{
|
||||||
|
[Fact]
|
||||||
|
public void Create_EventCallback_ReturnsInput()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var component = new EventComponent();
|
||||||
|
var @delegate = (Action)component.SomeAction;
|
||||||
|
var input = new EventCallback(component, @delegate);
|
||||||
|
|
||||||
|
var anotherComponent = new EventComponent();
|
||||||
|
|
||||||
|
// Act
|
||||||
|
var callback = EventCallback.Factory.Create(anotherComponent, input);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.Same(@delegate, callback.Delegate);
|
||||||
|
Assert.Same(component, callback.Receiver);
|
||||||
|
Assert.False(callback.RequiresExplicitReceiver);
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Create_Action_AlreadyBoundToReceiver()
|
public void Create_Action_AlreadyBoundToReceiver()
|
||||||
{
|
{
|
||||||
|
|
@ -217,6 +236,39 @@ namespace Microsoft.AspNetCore.Components
|
||||||
Assert.True(callback.RequiresExplicitReceiver);
|
Assert.True(callback.RequiresExplicitReceiver);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void CreateT_String_ReturnsInput()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var component = new EventComponent();
|
||||||
|
var input = "some_js";
|
||||||
|
|
||||||
|
// Act
|
||||||
|
var callback = EventCallback.Factory.Create<UIMouseEventArgs>(component, input);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.Same(input, callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void CreateT_EventCallback_ReturnsInput()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var component = new EventComponent();
|
||||||
|
var @delegate = (Action)component.SomeAction;
|
||||||
|
var input = new EventCallback<string>(component, @delegate);
|
||||||
|
|
||||||
|
var anotherComponent = new EventComponent();
|
||||||
|
|
||||||
|
// Act
|
||||||
|
var callback = EventCallback.Factory.Create<string>(anotherComponent, input);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.Same(@delegate, callback.Delegate);
|
||||||
|
Assert.Same(component, callback.Receiver);
|
||||||
|
Assert.False(callback.RequiresExplicitReceiver);
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void CreateT_Action_AlreadyBoundToReceiver()
|
public void CreateT_Action_AlreadyBoundToReceiver()
|
||||||
{
|
{
|
||||||
|
|
@ -425,6 +477,38 @@ namespace Microsoft.AspNetCore.Components
|
||||||
Assert.True(callback.RequiresExplicitReceiver);
|
Assert.True(callback.RequiresExplicitReceiver);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void CreateInferred_ActionT()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var component = new EventComponent();
|
||||||
|
var @delegate = (Action<string>)((s) => { });
|
||||||
|
|
||||||
|
// Act
|
||||||
|
var callback = EventCallback.Factory.CreateInferred<string>(component, @delegate, "hi");
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.Same(@delegate, callback.Delegate);
|
||||||
|
Assert.Same(component, callback.Receiver);
|
||||||
|
Assert.True(callback.RequiresExplicitReceiver);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void CreateInferred_FuncTTask()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var component = new EventComponent();
|
||||||
|
var @delegate = (Func<string, Task>)((s) => Task.CompletedTask);
|
||||||
|
|
||||||
|
// Act
|
||||||
|
var callback = EventCallback.Factory.CreateInferred<string>(component, @delegate, "hi");
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.Same(@delegate, callback.Delegate);
|
||||||
|
Assert.Same(component, callback.Receiver);
|
||||||
|
Assert.True(callback.RequiresExplicitReceiver);
|
||||||
|
}
|
||||||
|
|
||||||
private class EventComponent : IComponent, IHandleEvent
|
private class EventComponent : IComponent, IHandleEvent
|
||||||
{
|
{
|
||||||
public void SomeAction()
|
public void SomeAction()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue