LuaObjectTests.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  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()
  42. {
  43. Property = 1
  44. };
  45. var state = LuaState.Create();
  46. state.Environment["test"] = userData;
  47. var results = await state.DoStringAsync("return test.Property");
  48. Assert.That(results, Has.Length.EqualTo(1));
  49. Assert.That(results[0], Is.EqualTo(new LuaValue(1)));
  50. }
  51. [Test]
  52. public async Task Test_PropertyWithName()
  53. {
  54. var userData = new TestUserData()
  55. {
  56. PropertyWithName = "foo",
  57. };
  58. var state = LuaState.Create();
  59. state.Environment["test"] = userData;
  60. var results = await state.DoStringAsync("return test.p2");
  61. Assert.That(results, Has.Length.EqualTo(1));
  62. Assert.That(results[0], Is.EqualTo(new LuaValue("foo")));
  63. }
  64. [Test]
  65. public async Task Test_MethodVoid()
  66. {
  67. var userData = new TestUserData();
  68. var state = LuaState.Create();
  69. state.Environment["test"] = userData;
  70. var results = await state.DoStringAsync("return test.MethodVoid()");
  71. Assert.That(results, Has.Length.EqualTo(0));
  72. }
  73. [Test]
  74. public async Task Test_MethodAsync()
  75. {
  76. var userData = new TestUserData();
  77. var state = LuaState.Create();
  78. state.Environment["test"] = userData;
  79. var results = await state.DoStringAsync("return test.MethodAsync()");
  80. Assert.That(results, Has.Length.EqualTo(0));
  81. }
  82. [Test]
  83. public async Task Test_StaticMethodWithReturnValue()
  84. {
  85. var userData = new TestUserData();
  86. var state = LuaState.Create();
  87. state.Environment["test"] = userData;
  88. var results = await state.DoStringAsync("return test.StaticMethodWithReturnValue(1, 2)");
  89. Assert.That(results, Has.Length.EqualTo(1));
  90. Assert.That(results[0], Is.EqualTo(new LuaValue(3)));
  91. }
  92. [Test]
  93. public async Task Test_InstanceMethodWithReturnValue()
  94. {
  95. var userData = new TestUserData()
  96. {
  97. Property = 1
  98. };
  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_CallMetamethod()
  107. {
  108. var userData = new TestUserData();
  109. var state = LuaState.Create();
  110. state.OpenBasicLibrary();
  111. state.Environment["test"] = userData;
  112. var results = await state.DoStringAsync("""
  113. assert(test() == 'Called!')
  114. return test()
  115. """);
  116. Assert.That(results, Has.Length.EqualTo(1));
  117. Assert.That(results[0], Is.EqualTo(new LuaValue("Called!")));
  118. }
  119. }