LuaObjectTests.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. using Lua.Standard;
  2. namespace Lua.Tests;
  3. [LuaObject]
  4. public partial class TestUserData
  5. {
  6. [LuaMember]
  7. public double 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. return a + b;
  24. }
  25. [LuaMember]
  26. public double InstanceMethodWithReturnValue()
  27. {
  28. return Property;
  29. }
  30. [LuaMetamethod(LuaObjectMetamethod.Call)]
  31. public string Call()
  32. {
  33. return "Called!";
  34. }
  35. }
  36. public class LuaObjectTests
  37. {
  38. [Test]
  39. public async Task Test_Property()
  40. {
  41. var userData = new TestUserData() { Property = 1 };
  42. var state = LuaState.Create();
  43. state.Environment["test"] = userData;
  44. var results = await state.DoStringAsync("return test.Property");
  45. Assert.That(results, Has.Length.EqualTo(1));
  46. Assert.That(results[0], Is.EqualTo(new LuaValue(1)));
  47. }
  48. [Test]
  49. public async Task Test_PropertyWithName()
  50. {
  51. var userData = new TestUserData() { PropertyWithName = "foo", };
  52. var state = LuaState.Create();
  53. state.Environment["test"] = userData;
  54. var results = await state.DoStringAsync("return test.p2");
  55. Assert.That(results, Has.Length.EqualTo(1));
  56. Assert.That(results[0], Is.EqualTo(new LuaValue("foo")));
  57. }
  58. [Test]
  59. public async Task Test_MethodVoid()
  60. {
  61. var userData = new TestUserData();
  62. var state = LuaState.Create();
  63. state.Environment["test"] = userData;
  64. var results = await state.DoStringAsync("return test.MethodVoid()");
  65. Assert.That(results, Has.Length.EqualTo(0));
  66. }
  67. [Test]
  68. public async Task Test_MethodAsync()
  69. {
  70. var userData = new TestUserData();
  71. var state = LuaState.Create();
  72. state.Environment["test"] = userData;
  73. var results = await state.DoStringAsync("return test.MethodAsync()");
  74. Assert.That(results, Has.Length.EqualTo(0));
  75. }
  76. [Test]
  77. public async Task Test_StaticMethodWithReturnValue()
  78. {
  79. var userData = new TestUserData();
  80. var state = LuaState.Create();
  81. state.Environment["test"] = userData;
  82. var results = await state.DoStringAsync("return test.StaticMethodWithReturnValue(1, 2)");
  83. Assert.That(results, Has.Length.EqualTo(1));
  84. Assert.That(results[0], Is.EqualTo(new LuaValue(3)));
  85. }
  86. [Test]
  87. public async Task Test_InstanceMethodWithReturnValue()
  88. {
  89. var userData = new TestUserData() { Property = 1 };
  90. var state = LuaState.Create();
  91. state.Environment["test"] = userData;
  92. var results = await state.DoStringAsync("return test:InstanceMethodWithReturnValue()");
  93. Assert.That(results, Has.Length.EqualTo(1));
  94. Assert.That(results[0], Is.EqualTo(new LuaValue(1)));
  95. }
  96. [Test]
  97. public async Task Test_CallMetamethod()
  98. {
  99. var userData = new TestUserData();
  100. var state = LuaState.Create();
  101. state.OpenBasicLibrary();
  102. state.Environment["test"] = userData;
  103. var results = await state.DoStringAsync("""
  104. assert(test() == 'Called!')
  105. return test()
  106. """);
  107. Assert.That(results, Has.Length.EqualTo(1));
  108. Assert.That(results[0], Is.EqualTo(new LuaValue("Called!")));
  109. }
  110. }