00a6619cbe
.NET Build and Publish / build (push) Has been cancelled
* Add permission checks and deprecate canPublish * Fix tests * How's this * make tests more reliable * lets test this first * test * This should speed up unit tests * skip slow tests * I HATE flaky tests
142 lines
2.8 KiB
C#
142 lines
2.8 KiB
C#
using FluentAssertions;
|
|
using Microsoft.CSharp.RuntimeBinder;
|
|
using Speckle.Sdk.Host;
|
|
using Speckle.Sdk.Models;
|
|
|
|
namespace Speckle.Sdk.Tests.Unit.Models;
|
|
|
|
[Collection(nameof(RequiresTypeLoaderCollection))]
|
|
public class DynamicBaseTests
|
|
{
|
|
public DynamicBaseTests()
|
|
{
|
|
TypeLoader.ReInitialize(typeof(Base).Assembly, typeof(BaseTests).Assembly);
|
|
}
|
|
|
|
[Fact]
|
|
public void Indexer_SetAndGet()
|
|
{
|
|
// Arrange
|
|
var dynamicBase = new DynamicBase();
|
|
var key = "testProperty";
|
|
var value = "testValue";
|
|
|
|
// Act
|
|
dynamicBase[key] = value;
|
|
var result = dynamicBase[key];
|
|
|
|
// Assert
|
|
result.Should().Be(value);
|
|
}
|
|
|
|
[Fact]
|
|
public void DynamicProperty_SetAndGet()
|
|
{
|
|
// Arrange
|
|
dynamic dynamicBase = new DynamicBase();
|
|
var value = "dynamicValue";
|
|
|
|
// Act
|
|
dynamicBase.dynamicProperty = value;
|
|
object result = dynamicBase.dynamicProperty;
|
|
|
|
// Assert
|
|
result.Should().Be(value);
|
|
}
|
|
|
|
[Fact]
|
|
public void GetMembers_Default()
|
|
{
|
|
// Arrange
|
|
dynamic dynamicBase = new DynamicBase();
|
|
dynamicBase.dynamicProp = "hello";
|
|
|
|
// Act
|
|
IDictionary<string, object?> members = dynamicBase.GetMembers();
|
|
|
|
// Assert
|
|
members.Should().ContainKey("dynamicProp");
|
|
}
|
|
|
|
[Fact]
|
|
public void GetMembers_Instance()
|
|
{
|
|
// Arrange
|
|
var dynamicBase = new TestDynamicBase();
|
|
|
|
// Act
|
|
var members = dynamicBase.GetMembers(DynamicBaseMemberType.Instance);
|
|
|
|
// Assert
|
|
members.Should().ContainKey(nameof(TestDynamicBase.InstanceProperty));
|
|
members.Should().NotContainKey("dynamicProp");
|
|
}
|
|
|
|
[Fact]
|
|
public void GetDynamicMemberNames()
|
|
{
|
|
// Arrange
|
|
dynamic dynamicBase = new DynamicBase();
|
|
dynamicBase.prop1 = 1;
|
|
dynamicBase.prop2 = "test";
|
|
|
|
// Act
|
|
IEnumerable<string> memberNames = dynamicBase.GetDynamicMemberNames();
|
|
|
|
// Assert
|
|
memberNames.Should().BeEquivalentTo(["DynamicPropertyKeys", "prop1", "prop2"]);
|
|
}
|
|
|
|
[Fact]
|
|
public void TryGetMember_Existing()
|
|
{
|
|
// Arrange
|
|
dynamic dynamicBase = new DynamicBase();
|
|
dynamicBase.existingProp = "I exist";
|
|
|
|
// Act
|
|
var result = dynamicBase.existingProp;
|
|
|
|
// Assert
|
|
((object)result)
|
|
.Should()
|
|
.Be("I exist");
|
|
}
|
|
|
|
[Fact]
|
|
public void TryGetMember_NonExisting()
|
|
{
|
|
// Arrange
|
|
dynamic dynamicBase = new DynamicBase();
|
|
|
|
// Act
|
|
Action act = () =>
|
|
{
|
|
var result = dynamicBase.nonExistingProp;
|
|
};
|
|
|
|
// Assert
|
|
act.Should().Throw<RuntimeBinderException>();
|
|
}
|
|
|
|
[Fact]
|
|
public void TrySetMember()
|
|
{
|
|
// Arrange
|
|
dynamic dynamicBase = new DynamicBase();
|
|
|
|
// Act
|
|
dynamicBase.newProp = "newValue";
|
|
|
|
// Assert
|
|
((object)dynamicBase.newProp)
|
|
.Should()
|
|
.Be("newValue");
|
|
}
|
|
|
|
private class TestDynamicBase : DynamicBase
|
|
{
|
|
public string InstanceProperty { get; set; } = "instance";
|
|
}
|
|
}
|