LuaObjectTests.cs 3.8 KB

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