ValidationTests.cs 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. using Lua.Runtime;
  2. using Lua.Standard;
  3. namespace Lua.Tests;
  4. public class ValidationTests
  5. {
  6. [Test]
  7. public async Task Test_Simple()
  8. {
  9. var state = LuaState.Create();
  10. state.OpenStandardLibraries();
  11. LuaThreadAccess innerAccess = default!;
  12. state.Environment["wait"] = new LuaFunction("wait",
  13. async (context, ct) =>
  14. {
  15. innerAccess = context.Access;
  16. await Task.Delay((int)(context.GetArgument<double>(0) * 1000), ct);
  17. return context.Return(context.Arguments);
  18. });
  19. var task=state.DoStringAsync("wait(0.5)");
  20. await Task.Delay(100);
  21. Assert.That(task.IsCompleted, Is.False);
  22. Assert.ThrowsAsync<InvalidOperationException>( async () =>
  23. {
  24. await state.DoStringAsync("print('hello')");
  25. });
  26. await task;
  27. Assert.ThrowsAsync<InvalidOperationException>( async () =>
  28. {
  29. await innerAccess.DoStringAsync("print('hello')");
  30. });
  31. Assert.DoesNotThrowAsync(async () =>
  32. {
  33. await state.DoStringAsync("wait(0.5)");
  34. });
  35. }
  36. [Test]
  37. public async Task Test_Recursive()
  38. {
  39. var state = LuaState.Create();
  40. state.OpenStandardLibraries();
  41. state.Environment["dostring"] = new LuaFunction("dostring",
  42. async (context, ct) => context.Return(await context.Access.DoStringAsync(context.GetArgument<string>(0), null, ct)));
  43. var result=await state.DoStringAsync("""return dostring("return 1")""");
  44. Assert.That(result.Length, Is.EqualTo(1));
  45. Assert.That(result[0].Read<double>(), Is.EqualTo(1));
  46. }
  47. }