LuaObjectTests.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. using Lua.Standard;
  2. namespace Lua.Tests;
  3. [LuaObject]
  4. public partial class TestUserData
  5. {
  6. [LuaMember]
  7. public int Property { get; set; }
  8. [LuaMember]
  9. public LuaValue LuaValueProperty { get; set; }
  10. [LuaMember("p2")]
  11. public string PropertyWithName { get; set; } = "";
  12. [LuaMember]
  13. public static void MethodVoid()
  14. {
  15. Console.WriteLine("HEY!");
  16. }
  17. [LuaMember]
  18. public static async Task MethodAsync()
  19. {
  20. await Task.CompletedTask;
  21. }
  22. [LuaMember]
  23. public static double StaticMethodWithReturnValue(double a, double b)
  24. {
  25. Console.WriteLine($"HEY! {a} {b}");
  26. return a + b;
  27. }
  28. [LuaMember]
  29. public double InstanceMethodWithReturnValue()
  30. {
  31. return Property;
  32. }
  33. [LuaMember]
  34. public async ValueTask<LuaValue> InstanceMethodWithReturnValueAsync(LuaValue value, CancellationToken ct)
  35. {
  36. await Task.Delay(1, ct);
  37. return value;
  38. }
  39. [LuaMetamethod(LuaObjectMetamethod.Call)]
  40. public string Call()
  41. {
  42. return "Called!";
  43. }
  44. }
  45. public class LuaObjectTests
  46. {
  47. [Test]
  48. public async Task Test_Property()
  49. {
  50. var userData = new TestUserData { Property = 1 };
  51. var state = LuaState.Create();
  52. state.Environment["test"] = userData;
  53. var results = await state.DoStringAsync("return test.Property");
  54. Assert.That(results, Has.Length.EqualTo(1));
  55. Assert.That(results[0], Is.EqualTo(new LuaValue(1)));
  56. }
  57. [Test]
  58. public async Task Test_PropertyWithName()
  59. {
  60. var userData = new TestUserData { PropertyWithName = "foo" };
  61. var state = LuaState.Create();
  62. state.Environment["test"] = userData;
  63. var results = await state.DoStringAsync("return test.p2");
  64. Assert.That(results, Has.Length.EqualTo(1));
  65. Assert.That(results[0], Is.EqualTo(new LuaValue("foo")));
  66. }
  67. [Test]
  68. public async Task Test_MethodVoid()
  69. {
  70. var userData = new TestUserData();
  71. var state = LuaState.Create();
  72. state.Environment["test"] = userData;
  73. var results = await state.DoStringAsync("return test.MethodVoid()");
  74. Assert.That(results, Has.Length.EqualTo(0));
  75. }
  76. [Test]
  77. public async Task Test_MethodAsync()
  78. {
  79. var userData = new TestUserData();
  80. var state = LuaState.Create();
  81. state.Environment["test"] = userData;
  82. var results = await state.DoStringAsync("return test.MethodAsync()");
  83. Assert.That(results, Has.Length.EqualTo(0));
  84. }
  85. [Test]
  86. public async Task Test_StaticMethodWithReturnValue()
  87. {
  88. var userData = new TestUserData();
  89. var state = LuaState.Create();
  90. state.Environment["test"] = userData;
  91. var results = await state.DoStringAsync("return test.StaticMethodWithReturnValue(1, 2)");
  92. Assert.That(results, Has.Length.EqualTo(1));
  93. Assert.That(results[0], Is.EqualTo(new LuaValue(3)));
  94. }
  95. [Test]
  96. public async Task Test_InstanceMethodWithReturnValue()
  97. {
  98. var userData = new TestUserData { Property = 1 };
  99. var state = LuaState.Create();
  100. state.Environment["test"] = userData;
  101. var results = await state.DoStringAsync("return test:InstanceMethodWithReturnValue()");
  102. Assert.That(results, Has.Length.EqualTo(1));
  103. Assert.That(results[0], Is.EqualTo(new LuaValue(1)));
  104. }
  105. [Test]
  106. public async Task Test_InstanceMethodWithReturnValueAsync()
  107. {
  108. var userData = new TestUserData { Property = 1 };
  109. var state = LuaState.Create();
  110. state.Environment["test"] = userData;
  111. var results = await state.DoStringAsync("return test:InstanceMethodWithReturnValueAsync(2)");
  112. Assert.That(results, Has.Length.EqualTo(1));
  113. Assert.That(results[0], Is.EqualTo(new LuaValue(2)));
  114. }
  115. [Test]
  116. public async Task Test_CallMetamethod()
  117. {
  118. var userData = new TestUserData();
  119. var state = LuaState.Create();
  120. state.OpenBasicLibrary();
  121. state.Environment["test"] = userData;
  122. var results = await state.DoStringAsync("""
  123. assert(test() == 'Called!')
  124. return test()
  125. """);
  126. Assert.That(results, Has.Length.EqualTo(1));
  127. Assert.That(results[0], Is.EqualTo(new LuaValue("Called!")));
  128. }
  129. }