AbstractFileTests.cs 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. using Lua.IO;
  2. using Lua.Platforms;
  3. using Lua.Standard;
  4. using Lua.Tests.Helpers;
  5. namespace Lua.Tests;
  6. public class AbstractFileTests
  7. {
  8. class ReadOnlyFileSystem(Dictionary<string, string> dictionary) : NotImplementedExceptionFileSystemBase
  9. {
  10. public override ValueTask<ILuaStream> Open(string path, LuaFileOpenMode mode,CancellationToken cancellationToken)
  11. {
  12. if (!dictionary.TryGetValue(path, out var value))
  13. {
  14. throw new FileNotFoundException($"File {path} not found");
  15. }
  16. if (mode != LuaFileOpenMode.Read)
  17. throw new IOException($"File {path} not opened in read mode");
  18. return new (ILuaStream.CreateFromMemory(value.AsMemory()));
  19. }
  20. }
  21. [Test]
  22. public async Task ReadLinesTest()
  23. {
  24. var fileContent = "line1\nline2\r\nline3";
  25. var fileSystem = new ReadOnlyFileSystem(new() { { "test.txt", fileContent } });
  26. var state = LuaState.Create(new(
  27. fileSystem: fileSystem,
  28. osEnvironment: null!,
  29. standardIO: new ConsoleStandardIO()));
  30. state.OpenStandardLibraries();
  31. try
  32. {
  33. await state.DoStringAsync(
  34. """
  35. local lines = {}
  36. for line in io.lines("test.txt") do
  37. table.insert(lines, line)
  38. print(line)
  39. end
  40. assert(#lines == 3, "Expected 3 lines")
  41. assert(lines[1] == "line1", "Expected line1")
  42. assert(lines[2] == "line2", "Expected line2")
  43. assert(lines[3] == "line3", "Expected line3")
  44. """);
  45. }
  46. catch (Exception e)
  47. {
  48. Console.WriteLine(e);
  49. throw;
  50. }
  51. }
  52. [Test]
  53. public async Task ReadFileTest()
  54. {
  55. var fileContent = "Hello, World!";
  56. var fileSystem = new ReadOnlyFileSystem(new() { { "test.txt", fileContent } });
  57. var state = LuaState.Create(new(
  58. fileSystem: fileSystem,
  59. osEnvironment: null!,
  60. standardIO: new ConsoleStandardIO()));
  61. state.OpenStandardLibraries();
  62. await state.DoStringAsync(
  63. """
  64. local file = io.open("test.txt", "r")
  65. assert(file, "Failed to open file")
  66. local content = file:read("*a")
  67. assert(content == "Hello, World!", "Expected 'Hello, World!'")
  68. file:close()
  69. file = io.open("test2.txt", "r")
  70. assert(file == nil, "Expected file to be nil")
  71. """);
  72. }
  73. }