Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions src/System.Linq.Dynamic.Core/DynamicClass.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ namespace System.Linq.Dynamic.Core;
/// </summary>
public abstract class DynamicClass : DynamicObject
{
private Dictionary<string, object?>? _propertiesDictionary = null;
private Dictionary<string, object?>? _propertiesDictionary;

private Dictionary<string, object?> Properties
{
Expand All @@ -27,6 +27,7 @@ public abstract class DynamicClass : DynamicObject
if (_propertiesDictionary == null)
{
_propertiesDictionary = new();

foreach (PropertyInfo pi in GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance))
{
int parameters = pi.GetIndexParameters().Length;
Expand Down Expand Up @@ -150,7 +151,7 @@ public override bool TryGetMember(GetMemberBinder binder, out object? result)
/// <returns>
/// true if the operation is successful; otherwise, false. If this method returns false, the run-time binder of the language determines the behavior. (In most cases, a language-specific run-time exception is thrown.)
/// </returns>
public override bool TrySetMember(SetMemberBinder binder, object value)
public override bool TrySetMember(SetMemberBinder binder, object? value)
{
string name = binder.Name;
if (Properties.ContainsKey(name))
Expand Down
27 changes: 0 additions & 27 deletions test/System.Linq.Dynamic.Core.Tests.Net6/DynamicClassTest.cs

This file was deleted.

101 changes: 101 additions & 0 deletions test/System.Linq.Dynamic.Core.Tests/DynamicClassTest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
using System.Collections.Generic;
using FluentAssertions;
using Xunit;

namespace System.Linq.Dynamic.Core.Tests;

public class DynamicClassTest
{
[Fact]
public void DynamicClass_GetProperties_Should_Work()
{
// Arrange
var range = new List<object>
{
new { FieldName = "TestFieldName", Value = 3.14159 }
};

// Act
var rangeResult = range.AsQueryable().Select("new(FieldName as FieldName)").ToDynamicList();
var item = rangeResult.First();

var call = () => item.GetDynamicMemberNames();
call.Should().NotThrow();
}

[Fact]
public void DynamicClass_GetPropertyValue_Should_Work()
{
// Arrange
var test = "Test";
var range = new List<object>
{
new { FieldName = test, Value = 3.14159 }
};

// Act
var rangeResult = range.AsQueryable().Select("new(FieldName as FieldName)").ToDynamicList();
var item = rangeResult.First();

var value = item.FieldName as string;
value.Should().Be(test);
}

[Fact]
public void DynamicClass_GettingValue_ByIndex_Should_Work()
{
// Arrange
var test = "Test";
var range = new List<object>
{
new { FieldName = test, Value = 3.14159 }
};

// Act
var rangeResult = range.AsQueryable().Select("new(FieldName as FieldName)").ToDynamicList();
var item = rangeResult.First();

var value = item["FieldName"] as string;
value.Should().Be(test);
}

[Fact]
public void DynamicClass_SettingExistingPropertyValue_ByIndex_Should_Work()
{
// Arrange
var test = "Test";
var newTest = "abc";
var range = new List<object>
{
new { FieldName = test, Value = 3.14159 }
};

// Act
var rangeResult = range.AsQueryable().Select("new(FieldName as FieldName)").ToDynamicList();
var item = rangeResult.First();

item["FieldName"] = newTest;
var value = item["FieldName"] as string;
value.Should().Be(newTest);
}

[Fact]
public void DynamicClass_SettingNewProperty_ByIndex_Should_Work()
{
// Arrange
var test = "Test";
var newTest = "abc";
var range = new List<object>
{
new { FieldName = test, Value = 3.14159 }
};

// Act
var rangeResult = range.AsQueryable().Select("new(FieldName as FieldName)").ToDynamicList();
var item = rangeResult.First();

item["X"] = newTest;
var value = item["X"] as string;
value.Should().Be(newTest);
}
}