103 lines
3.9 KiB
Plaintext
103 lines
3.9 KiB
Plaintext
// 04_template_builder.rhai
|
|
// Tests for template rendering 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 Template Rendering Functions ===");
|
|
|
|
// Create a temporary directory for testing
|
|
let test_dir = "rhai_test_template";
|
|
mkdir(test_dir);
|
|
|
|
// Test TemplateBuilder with string template
|
|
print("Testing TemplateBuilder with string template...");
|
|
|
|
// Test case 1: Basic template with string variable
|
|
let template1 = "Hello, {{ name }}!";
|
|
let builder1 = template_builder_open(template1);
|
|
builder1.add_var("name", "World");
|
|
let expected_output1 = "Hello, World!";
|
|
let output1 = builder1.render();
|
|
assert_eq(output1, expected_output1, "Basic template with string variable should render correctly");
|
|
print("✓ TemplateBuilder: Basic template with string variable renders correctly");
|
|
|
|
// Test case 2: Template with multiple variables of different types
|
|
let template2 = "{{ name }} is {{ age }} years old and {{ is_active ? 'active' : 'inactive' }}.";
|
|
let builder2 = template_builder_open(template2);
|
|
builder2.add_var("name", "John");
|
|
builder2.add_var("age", 30);
|
|
builder2.add_var("is_active", true);
|
|
let expected_output2 = "John is 30 years old and active.";
|
|
let output2 = builder2.render();
|
|
assert_eq(output2, expected_output2, "Template with multiple variables should render correctly");
|
|
print("✓ TemplateBuilder: Template with multiple variables renders correctly");
|
|
|
|
// Test case 3: Template with array variable
|
|
let template3 = "Items: {% for item in items %}{{ item }}{% if !loop.last %}, {% endif %}{% endfor %}";
|
|
let builder3 = template_builder_open(template3);
|
|
let items = ["apple", "banana", "cherry"];
|
|
builder3.add_var("items", items);
|
|
let expected_output3 = "Items: apple, banana, cherry";
|
|
let output3 = builder3.render();
|
|
assert_eq(output3, expected_output3, "Template with array variable should render correctly");
|
|
print("✓ TemplateBuilder: Template with array variable renders correctly");
|
|
|
|
// Test case 4: Template with map variable
|
|
let template4 = "User: {{ user.name }}, Age: {{ user.age }}";
|
|
let builder4 = template_builder_open(template4);
|
|
let user = #{
|
|
name: "Alice",
|
|
age: 25
|
|
};
|
|
builder4.add_vars(user);
|
|
let expected_output4 = "User: Alice, Age: 25";
|
|
let output4 = builder4.render();
|
|
assert_eq(output4, expected_output4, "Template with map variable should render correctly");
|
|
print("✓ TemplateBuilder: Template with map variable renders correctly");
|
|
|
|
// Test TemplateBuilder with file operations
|
|
print("\nTesting TemplateBuilder with file operations...");
|
|
|
|
// Create a template file
|
|
let template_file = `${test_dir}/template.txt`;
|
|
let template_content = "Hello, {{ name }}! You are {{ age }} years old.";
|
|
file_write(template_file, template_content);
|
|
|
|
// Test case 5: Template from file
|
|
let builder5 = template_builder_open(template_file);
|
|
builder5.add_var("name", "Bob");
|
|
builder5.add_var("age", 40);
|
|
let expected_output5 = "Hello, Bob! You are 40 years old.";
|
|
let output5 = builder5.render();
|
|
assert_eq(output5, expected_output5, "Template from file should render correctly");
|
|
print("✓ TemplateBuilder: Template from file renders correctly");
|
|
|
|
// Test case 6: Render to file
|
|
let output_file = `${test_dir}/output.txt`;
|
|
builder5.render_to_file(output_file);
|
|
let output_content = file_read(output_file);
|
|
assert_eq(output_content, expected_output5, "render_to_file should write the rendered content to a file");
|
|
print("✓ TemplateBuilder: render_to_file works correctly");
|
|
|
|
// Clean up
|
|
delete(test_dir);
|
|
print("✓ Cleanup: Test directory removed");
|
|
|
|
print("\nAll template rendering tests completed successfully!");
|