LuaObjectTests.cs 4.3 KB

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