DynamicObjectTest.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. using System;
  2. using System.Collections.Generic;
  3. using Masuit.Tools.Dynamics;
  4. using Xunit;
  5. namespace Masuit.Tools.Abstractions.Test.Extensions;
  6. public class DynamicObjectTest
  7. {
  8. [Fact]
  9. public void Can_Dynamic()
  10. {
  11. var obj = DynamicFactory.NewObject();
  12. obj.Name = "Masuit";
  13. obj.Age = 18;
  14. obj.MyClass = DynamicFactory.WithObject(new
  15. {
  16. X = 10,
  17. Y = 20,
  18. Z = new List<int> { 1, 2, 3, 4, 5 }
  19. });
  20. Assert.Equal(obj.Name, obj["Name"]);
  21. Assert.Equal(obj["MyClass"]["X"], obj.MyClass.X);
  22. Assert.Equal(obj.MyClass.Z[2], obj["MyClass"]["Z"][2]);
  23. }
  24. [Fact]
  25. public void Can_ToDynamic()
  26. {
  27. var obj = new
  28. {
  29. Name = "Masuit"
  30. }.ToDynamic();
  31. obj.Age = 18;
  32. obj.MyClass = new
  33. {
  34. X = 10,
  35. Y = 20,
  36. Z = new List<int> { 1, 2, 3, 4, 5 }
  37. }.ToDynamic();
  38. obj.Prop = "test";
  39. _ = obj - "Prop";
  40. Assert.Equal(obj.Name, obj["Name"]);
  41. Assert.Equal(obj["MyClass"]["X"], obj.MyClass.X);
  42. Assert.IsType<Clay>(obj.Prop);
  43. }
  44. [Fact]
  45. public void NewObject_ShouldCreateDynamicObject()
  46. {
  47. dynamic obj = DynamicFactory.NewObject();
  48. obj.Name = "Test";
  49. Assert.Equal("Test", obj.Name);
  50. }
  51. [Fact]
  52. public void WithObject_ShouldWrapExistingObject()
  53. {
  54. var existingObject = new { Name = "Test" };
  55. dynamic obj = DynamicFactory.WithObject(existingObject);
  56. Assert.Equal("Test", obj.Name);
  57. }
  58. [Fact]
  59. public void NewObject_ShouldAllowAddingProperties()
  60. {
  61. dynamic obj = DynamicFactory.NewObject();
  62. obj.Name = "Test";
  63. obj.Age = 30;
  64. Assert.Equal("Test", obj.Name);
  65. Assert.Equal(30, obj.Age);
  66. }
  67. [Fact]
  68. public void WithObject_ShouldAllowAddingPropertiesToExistingObject()
  69. {
  70. var existingObject = new { Name = "Test" };
  71. dynamic obj = DynamicFactory.WithObject(existingObject);
  72. obj.Age = 30;
  73. Assert.Equal("Test", obj.Name);
  74. Assert.Equal(30, obj.Age);
  75. }
  76. }