135 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			135 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| // 03_text_replacer.rhai
 | |
| // Tests for text replacement functions in the Text module
 | |
| 
 | |
| // Custom assert function
 | |
| fn assert_true(condition, message) {
 | |
|     if !condition {
 | |
|         print(`ASSERTION FAILED: ${message}`);
 | |
|         throw message;
 | |
|     }
 | |
| }
 | |
| 
 | |
| // Custom assert_eq function
 | |
| fn assert_eq(actual, expected, message) {
 | |
|     if actual != expected {
 | |
|         print(`ASSERTION FAILED: ${message}`);
 | |
|         print(`Expected: "${expected}"`);
 | |
|         print(`Actual: "${actual}"`);
 | |
|         throw message;
 | |
|     }
 | |
| }
 | |
| 
 | |
| print("=== Testing Text Replacement Functions ===");
 | |
| 
 | |
| // Test TextReplacer with simple replacements
 | |
| print("Testing TextReplacer with simple replacements...");
 | |
| 
 | |
| // Test case 1: Basic replacement
 | |
| let replacer1 = text_replacer_new()
 | |
|     .pattern("foo")
 | |
|     .replacement("bar")
 | |
|     .build();
 | |
| 
 | |
| let input1 = "foo bar foo";
 | |
| let expected_output1 = "bar bar bar";
 | |
| let output1 = replacer1.replace(input1);
 | |
| assert_eq(output1, expected_output1, "Basic replacement should work correctly");
 | |
| print("✓ TextReplacer: Basic replacement works correctly");
 | |
| 
 | |
| // Test case 2: Multiple replacements
 | |
| let replacer2 = text_replacer_new()
 | |
|     .pattern("foo")
 | |
|     .replacement("bar")
 | |
|     .and()
 | |
|     .pattern("baz")
 | |
|     .replacement("qux")
 | |
|     .build();
 | |
| 
 | |
| let input2 = "foo baz foo";
 | |
| let expected_output2 = "bar qux bar";
 | |
| let output2 = replacer2.replace(input2);
 | |
| assert_eq(output2, expected_output2, "Multiple replacements should work correctly");
 | |
| print("✓ TextReplacer: Multiple replacements work correctly");
 | |
| 
 | |
| // Test TextReplacer with regex replacements
 | |
| print("\nTesting TextReplacer with regex replacements...");
 | |
| 
 | |
| // Test case 3: Basic regex replacement
 | |
| let replacer3 = text_replacer_new()
 | |
|     .pattern("f.o")
 | |
|     .replacement("bar")
 | |
|     .regex(true)
 | |
|     .build();
 | |
| 
 | |
| let input3 = "foo fao fio";
 | |
| let output3 = replacer3.replace(input3);
 | |
| // The regex "f.o" matches "foo", "fao", and "fio"
 | |
| let expected_output3 = "bar bar bar";
 | |
| assert_eq(output3, expected_output3, "Basic regex replacement should work correctly");
 | |
| print("✓ TextReplacer: Basic regex replacement works correctly");
 | |
| 
 | |
| // Test case 4: Case-insensitive regex replacement
 | |
| let replacer4 = text_replacer_new()
 | |
|     .pattern("foo")
 | |
|     .replacement("bar")
 | |
|     .regex(true)
 | |
|     .case_insensitive(true)
 | |
|     .build();
 | |
| 
 | |
| let input4 = "FOO foo Foo";
 | |
| let expected_output4 = "bar bar bar";
 | |
| let output4 = replacer4.replace(input4);
 | |
| assert_eq(output4, expected_output4, "Case-insensitive regex replacement should work correctly");
 | |
| print("✓ TextReplacer: Case-insensitive regex replacement works correctly");
 | |
| 
 | |
| // Test TextReplacer with file operations
 | |
| print("\nTesting TextReplacer with file operations...");
 | |
| 
 | |
| // Create a temporary file for testing
 | |
| let test_dir = "rhai_test_text_replacer";
 | |
| mkdir(test_dir);
 | |
| let test_file = `${test_dir}/test_file.txt`;
 | |
| let test_output_file = `${test_dir}/test_output_file.txt`;
 | |
| 
 | |
| // Write test content to the file
 | |
| let test_content = "This is a test file with foo and bar.";
 | |
| file_write(test_file, test_content);
 | |
| 
 | |
| // Test case 5: Replace in file and get result as string
 | |
| let replacer5 = text_replacer_new()
 | |
|     .pattern("foo")
 | |
|     .replacement("baz")
 | |
|     .build();
 | |
| 
 | |
| let expected_output5 = "This is a test file with baz and bar.";
 | |
| let output5 = replacer5.replace_file(test_file);
 | |
| assert_eq(output5, expected_output5, "replace_file should return the replaced content");
 | |
| print("✓ TextReplacer: replace_file works correctly");
 | |
| 
 | |
| // Test case 6: Replace in file and write to a new file
 | |
| replacer5.replace_file_to(test_file, test_output_file);
 | |
| let output_content = file_read(test_output_file);
 | |
| assert_eq(output_content, expected_output5, "replace_file_to should write the replaced content to a new file");
 | |
| print("✓ TextReplacer: replace_file_to works correctly");
 | |
| 
 | |
| // Test case 7: Replace in file and write back to the same file
 | |
| // First, update the test file with the replaced content
 | |
| file_write(test_file, expected_output5);
 | |
| 
 | |
| let replacer6 = text_replacer_new()
 | |
|     .pattern("baz")
 | |
|     .replacement("qux")
 | |
|     .build();
 | |
| 
 | |
| replacer6.replace_file_in_place(test_file);
 | |
| let updated_content = file_read(test_file);
 | |
| let expected_output6 = "This is a test file with qux and bar.";
 | |
| assert_eq(updated_content, expected_output6, "replace_file_in_place should update the file in place");
 | |
| print("✓ TextReplacer: replace_file_in_place works correctly");
 | |
| 
 | |
| // Clean up
 | |
| delete(test_dir);
 | |
| print("✓ Cleanup: Test directory removed");
 | |
| 
 | |
| print("\nAll text replacement tests completed successfully!");
 |