109 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| // 01_text_indentation.rhai
 | |
| // Tests for text indentation 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 Indentation Functions ===");
 | |
| 
 | |
| // Test dedent function
 | |
| print("Testing dedent()...");
 | |
| 
 | |
| // Test case 1: Basic indentation
 | |
| let indented_text1 = "    line 1\n    line 2\n        line 3";
 | |
| let expected_dedented1 = "line 1\nline 2\n    line 3";
 | |
| let dedented1 = dedent(indented_text1);
 | |
| assert_eq(dedented1, expected_dedented1, "Basic indentation should be removed correctly");
 | |
| print("✓ dedent(): Basic indentation removed correctly");
 | |
| 
 | |
| // Test case 2: Mixed indentation
 | |
| let indented_text2 = "  line 1\n    line 2\n  line 3";
 | |
| let expected_dedented2 = "line 1\n  line 2\nline 3";
 | |
| let dedented2 = dedent(indented_text2);
 | |
| assert_eq(dedented2, expected_dedented2, "Mixed indentation should be handled correctly");
 | |
| print("✓ dedent(): Mixed indentation handled correctly");
 | |
| 
 | |
| // Test case 3: Empty lines
 | |
| let indented_text3 = "    line 1\n\n    line 3";
 | |
| let expected_dedented3 = "line 1\n\nline 3";
 | |
| let dedented3 = dedent(indented_text3);
 | |
| assert_eq(dedented3, expected_dedented3, "Empty lines should be preserved");
 | |
| print("✓ dedent(): Empty lines preserved correctly");
 | |
| 
 | |
| // Test case 4: No indentation
 | |
| let text4 = "line 1\nline 2\nline 3";
 | |
| let dedented4 = dedent(text4);
 | |
| assert_eq(dedented4, text4, "Text without indentation should remain unchanged");
 | |
| print("✓ dedent(): Text without indentation remains unchanged");
 | |
| 
 | |
| // Test case 5: Single line
 | |
| let indented_text5 = "    single line";
 | |
| let expected_dedented5 = "single line";
 | |
| let dedented5 = dedent(indented_text5);
 | |
| assert_eq(dedented5, expected_dedented5, "Single line indentation should be removed");
 | |
| print("✓ dedent(): Single line indentation removed correctly");
 | |
| 
 | |
| // Test prefix function
 | |
| print("\nTesting prefix()...");
 | |
| 
 | |
| // Test case 1: Basic prefix
 | |
| let text1 = "line 1\nline 2\nline 3";
 | |
| let expected_prefixed1 = "    line 1\n    line 2\n    line 3";
 | |
| let prefixed1 = prefix(text1, "    ");
 | |
| assert_eq(prefixed1, expected_prefixed1, "Basic prefix should be added correctly");
 | |
| print("✓ prefix(): Basic prefix added correctly");
 | |
| 
 | |
| // Test case 2: Empty prefix
 | |
| let text2 = "line 1\nline 2\nline 3";
 | |
| let prefixed2 = prefix(text2, "");
 | |
| assert_eq(prefixed2, text2, "Empty prefix should not change the text");
 | |
| print("✓ prefix(): Empty prefix doesn't change the text");
 | |
| 
 | |
| // Test case 3: Prefix with empty lines
 | |
| let text3 = "line 1\n\nline 3";
 | |
| let expected_prefixed3 = "    line 1\n    \n    line 3";
 | |
| let prefixed3 = prefix(text3, "    ");
 | |
| assert_eq(prefixed3, expected_prefixed3, "Prefix should be added to empty lines");
 | |
| print("✓ prefix(): Prefix added to empty lines correctly");
 | |
| 
 | |
| // Test case 4: Single line
 | |
| let text4 = "single line";
 | |
| let expected_prefixed4 = "    single line";
 | |
| let prefixed4 = prefix(text4, "    ");
 | |
| assert_eq(prefixed4, expected_prefixed4, "Prefix should be added to single line");
 | |
| print("✓ prefix(): Prefix added to single line correctly");
 | |
| 
 | |
| // Test case 5: Non-space prefix
 | |
| let text5 = "line 1\nline 2\nline 3";
 | |
| let expected_prefixed5 = ">>> line 1\n>>> line 2\n>>> line 3";
 | |
| let prefixed5 = prefix(text5, ">>> ");
 | |
| assert_eq(prefixed5, expected_prefixed5, "Non-space prefix should be added correctly");
 | |
| print("✓ prefix(): Non-space prefix added correctly");
 | |
| 
 | |
| // Test combining dedent and prefix
 | |
| print("\nTesting combination of dedent() and prefix()...");
 | |
| 
 | |
| let indented_text = "    line 1\n    line 2\n        line 3";
 | |
| let dedented = dedent(indented_text);
 | |
| let prefixed = prefix(dedented, "  ");
 | |
| let expected_result = "  line 1\n  line 2\n      line 3";
 | |
| assert_eq(prefixed, expected_result, "Combination of dedent and prefix should work correctly");
 | |
| print("✓ dedent() + prefix(): Combination works correctly");
 | |
| 
 | |
| print("\nAll text indentation tests completed successfully!");
 |