// 01_file_operations.rhai // Tests for file system operations in the OS module // Custom assert function fn assert_true(condition, message) { if !condition { print(`ASSERTION FAILED: ${message}`); throw message; } } // Create a test directory structure let test_dir = "rhai_test_fs"; let sub_dir = test_dir + "/subdir"; // Test mkdir function print("Testing mkdir..."); let mkdir_result = mkdir(test_dir); assert_true(exist(test_dir), "Directory creation failed"); print(`✓ mkdir: ${mkdir_result}`); // Test nested directory creation let nested_result = mkdir(sub_dir); assert_true(exist(sub_dir), "Nested directory creation failed"); print(`✓ mkdir (nested): ${nested_result}`); // Test file_write function let test_file = test_dir + "/test.txt"; let file_content = "This is a test file created by Rhai test script."; let write_result = file_write(test_file, file_content); assert_true(exist(test_file), "File creation failed"); print(`✓ file_write: ${write_result}`); // Test file_read function let read_content = file_read(test_file); assert_true(read_content == file_content, "File content doesn't match"); print(`✓ file_read: Content matches`); // Test file_size function let size = file_size(test_file); assert_true(size > 0, "File size should be greater than 0"); print(`✓ file_size: ${size} bytes`); // Test file_write_append function let append_content = "\nThis is appended content."; let append_result = file_write_append(test_file, append_content); let new_content = file_read(test_file); assert_true(new_content == file_content + append_content, "Appended content doesn't match"); print(`✓ file_write_append: ${append_result}`); // Test copy function let copied_file = test_dir + "/copied.txt"; let copy_result = copy(test_file, copied_file); assert_true(exist(copied_file), "File copy failed"); print(`✓ copy: ${copy_result}`); // Test mv function let moved_file = test_dir + "/moved.txt"; let mv_result = mv(copied_file, moved_file); assert_true(exist(moved_file), "File move failed"); assert_true(!exist(copied_file), "Source file still exists after move"); print(`✓ mv: ${mv_result}`); // Test find_file function let found_file = find_file(test_dir, "*.txt"); assert_true(found_file.contains("test.txt") || found_file.contains("moved.txt"), "find_file failed"); print(`✓ find_file: ${found_file}`); // Test find_files function let found_files = find_files(test_dir, "*.txt"); assert_true(found_files.len() == 2, "find_files should find 2 files"); print(`✓ find_files: Found ${found_files.len()} files`); // Test find_dir function let found_dir = find_dir(test_dir, "sub*"); assert_true(found_dir.contains("subdir"), "find_dir failed"); print(`✓ find_dir: ${found_dir}`); // Test find_dirs function let found_dirs = find_dirs(test_dir, "sub*"); assert_true(found_dirs.len() == 1, "find_dirs should find 1 directory"); print(`✓ find_dirs: Found ${found_dirs.len()} directories`); // Test chdir function // Save current directory path before changing let chdir_result = chdir(test_dir); print(`✓ chdir: ${chdir_result}`); // Change back to parent directory chdir(".."); // Test rsync function (if available) let rsync_dir = test_dir + "/rsync_dest"; mkdir(rsync_dir); let rsync_result = rsync(test_dir, rsync_dir); print(`✓ rsync: ${rsync_result}`); // Test delete function let delete_file_result = delete(test_file); assert_true(!exist(test_file), "File deletion failed"); print(`✓ delete (file): ${delete_file_result}`); // Clean up delete(moved_file); delete(sub_dir); delete(rsync_dir); delete(test_dir); assert_true(!exist(test_dir), "Directory deletion failed"); print(`✓ delete (directory): Directory cleaned up`); print("All file system tests completed successfully!");