LuaObjectTests.cs 3.7 KB

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