feat: Add support for new OS package
Some checks are pending
Rhai Tests / Run Rhai Tests (push) Waiting to run
Some checks are pending
Rhai Tests / Run Rhai Tests (push) Waiting to run
- Add a new `sal-os` package containing OS interaction utilities. - Update workspace members to include the new package. - Add README and basic usage examples for the new package.
This commit is contained in:
@@ -15,7 +15,7 @@ use tempfile::NamedTempFile;
|
||||
#[test]
|
||||
fn test_template_builder_basic_string_variable() {
|
||||
// Create a temporary template file
|
||||
let mut temp_file = NamedTempFile::new().expect("Failed to create temp file");
|
||||
let temp_file = NamedTempFile::new().expect("Failed to create temp file");
|
||||
let template_content = "Hello {{name}}!";
|
||||
fs::write(temp_file.path(), template_content).expect("Failed to write template");
|
||||
|
||||
@@ -30,7 +30,7 @@ fn test_template_builder_basic_string_variable() {
|
||||
|
||||
#[test]
|
||||
fn test_template_builder_multiple_variables() {
|
||||
let mut temp_file = NamedTempFile::new().expect("Failed to create temp file");
|
||||
let temp_file = NamedTempFile::new().expect("Failed to create temp file");
|
||||
let template_content = "{{greeting}} {{name}}, you have {{count}} messages.";
|
||||
fs::write(temp_file.path(), template_content).expect("Failed to write template");
|
||||
|
||||
@@ -47,7 +47,7 @@ fn test_template_builder_multiple_variables() {
|
||||
|
||||
#[test]
|
||||
fn test_template_builder_different_types() {
|
||||
let mut temp_file = NamedTempFile::new().expect("Failed to create temp file");
|
||||
let temp_file = NamedTempFile::new().expect("Failed to create temp file");
|
||||
let template_content = "String: {{text}}, Int: {{number}}, Float: {{decimal}}, Bool: {{flag}}";
|
||||
fs::write(temp_file.path(), template_content).expect("Failed to write template");
|
||||
|
||||
@@ -65,8 +65,9 @@ fn test_template_builder_different_types() {
|
||||
|
||||
#[test]
|
||||
fn test_template_builder_array_variable() {
|
||||
let mut temp_file = NamedTempFile::new().expect("Failed to create temp file");
|
||||
let template_content = "Items: {% for item in items %}{{item}}{% if not loop.last %}, {% endif %}{% endfor %}";
|
||||
let temp_file = NamedTempFile::new().expect("Failed to create temp file");
|
||||
let template_content =
|
||||
"Items: {% for item in items %}{{item}}{% if not loop.last %}, {% endif %}{% endfor %}";
|
||||
fs::write(temp_file.path(), template_content).expect("Failed to write template");
|
||||
|
||||
let items = vec!["apple", "banana", "cherry"];
|
||||
@@ -81,7 +82,7 @@ fn test_template_builder_array_variable() {
|
||||
|
||||
#[test]
|
||||
fn test_template_builder_add_vars_hashmap() {
|
||||
let mut temp_file = NamedTempFile::new().expect("Failed to create temp file");
|
||||
let temp_file = NamedTempFile::new().expect("Failed to create temp file");
|
||||
let template_content = "{{title}}: {{description}}";
|
||||
fs::write(temp_file.path(), template_content).expect("Failed to write template");
|
||||
|
||||
@@ -101,7 +102,7 @@ fn test_template_builder_add_vars_hashmap() {
|
||||
#[test]
|
||||
fn test_template_builder_render_to_file() {
|
||||
// Create template file
|
||||
let mut template_file = NamedTempFile::new().expect("Failed to create template file");
|
||||
let template_file = NamedTempFile::new().expect("Failed to create template file");
|
||||
let template_content = "Hello {{name}}, today is {{day}}.";
|
||||
fs::write(template_file.path(), template_content).expect("Failed to write template");
|
||||
|
||||
@@ -121,8 +122,9 @@ fn test_template_builder_render_to_file() {
|
||||
|
||||
#[test]
|
||||
fn test_template_builder_conditional() {
|
||||
let mut temp_file = NamedTempFile::new().expect("Failed to create temp file");
|
||||
let template_content = "{% if show_message %}Message: {{message}}{% else %}No message{% endif %}";
|
||||
let temp_file = NamedTempFile::new().expect("Failed to create temp file");
|
||||
let template_content =
|
||||
"{% if show_message %}Message: {{message}}{% else %}No message{% endif %}";
|
||||
fs::write(temp_file.path(), template_content).expect("Failed to write template");
|
||||
|
||||
// Test with condition true
|
||||
@@ -148,7 +150,7 @@ fn test_template_builder_conditional() {
|
||||
|
||||
#[test]
|
||||
fn test_template_builder_loop_with_index() {
|
||||
let mut temp_file = NamedTempFile::new().expect("Failed to create temp file");
|
||||
let temp_file = NamedTempFile::new().expect("Failed to create temp file");
|
||||
let template_content = "{% for item in items %}{{loop.index}}: {{item}}\n{% endfor %}";
|
||||
fs::write(temp_file.path(), template_content).expect("Failed to write template");
|
||||
|
||||
@@ -164,7 +166,7 @@ fn test_template_builder_loop_with_index() {
|
||||
|
||||
#[test]
|
||||
fn test_template_builder_nested_variables() {
|
||||
let mut temp_file = NamedTempFile::new().expect("Failed to create temp file");
|
||||
let temp_file = NamedTempFile::new().expect("Failed to create temp file");
|
||||
let template_content = "User: {{user.name}} ({{user.email}})";
|
||||
fs::write(temp_file.path(), template_content).expect("Failed to write template");
|
||||
|
||||
@@ -183,7 +185,7 @@ fn test_template_builder_nested_variables() {
|
||||
|
||||
#[test]
|
||||
fn test_template_builder_missing_variable_error() {
|
||||
let mut temp_file = NamedTempFile::new().expect("Failed to create temp file");
|
||||
let temp_file = NamedTempFile::new().expect("Failed to create temp file");
|
||||
let template_content = "Hello {{missing_var}}!";
|
||||
fs::write(temp_file.path(), template_content).expect("Failed to write template");
|
||||
|
||||
@@ -196,7 +198,7 @@ fn test_template_builder_missing_variable_error() {
|
||||
|
||||
#[test]
|
||||
fn test_template_builder_invalid_template_syntax() {
|
||||
let mut temp_file = NamedTempFile::new().expect("Failed to create temp file");
|
||||
let temp_file = NamedTempFile::new().expect("Failed to create temp file");
|
||||
let template_content = "Hello {{unclosed_var!";
|
||||
fs::write(temp_file.path(), template_content).expect("Failed to write template");
|
||||
|
||||
@@ -215,7 +217,7 @@ fn test_template_builder_nonexistent_file() {
|
||||
|
||||
#[test]
|
||||
fn test_template_builder_empty_template() {
|
||||
let mut temp_file = NamedTempFile::new().expect("Failed to create temp file");
|
||||
let temp_file = NamedTempFile::new().expect("Failed to create temp file");
|
||||
fs::write(temp_file.path(), "").expect("Failed to write empty template");
|
||||
|
||||
let result = TemplateBuilder::open(temp_file.path())
|
||||
@@ -228,7 +230,7 @@ fn test_template_builder_empty_template() {
|
||||
|
||||
#[test]
|
||||
fn test_template_builder_template_with_no_variables() {
|
||||
let mut temp_file = NamedTempFile::new().expect("Failed to create temp file");
|
||||
let temp_file = NamedTempFile::new().expect("Failed to create temp file");
|
||||
let template_content = "This is a static template with no variables.";
|
||||
fs::write(temp_file.path(), template_content).expect("Failed to write template");
|
||||
|
||||
@@ -242,7 +244,7 @@ fn test_template_builder_template_with_no_variables() {
|
||||
|
||||
#[test]
|
||||
fn test_template_builder_complex_report() {
|
||||
let mut temp_file = NamedTempFile::new().expect("Failed to create temp file");
|
||||
let temp_file = NamedTempFile::new().expect("Failed to create temp file");
|
||||
let template_content = r#"
|
||||
# {{report_title}}
|
||||
|
||||
|
@@ -1,13 +1,13 @@
|
||||
//! Unit tests for text replacement functionality
|
||||
//!
|
||||
//! These tests validate the TextReplacer and TextReplacerBuilder including:
|
||||
//! These tests validate the TextReplacer including:
|
||||
//! - Literal string replacement
|
||||
//! - Regex pattern replacement
|
||||
//! - Multiple chained replacements
|
||||
//! - File operations (read, write, in-place)
|
||||
//! - Error handling and edge cases
|
||||
|
||||
use sal_text::{TextReplacer, TextReplacerBuilder};
|
||||
use sal_text::TextReplacer;
|
||||
use std::fs;
|
||||
use tempfile::NamedTempFile;
|
||||
|
||||
@@ -141,7 +141,7 @@ fn test_text_replacer_no_matches() {
|
||||
#[test]
|
||||
fn test_text_replacer_file_operations() {
|
||||
// Create a temporary file with test content
|
||||
let mut temp_file = NamedTempFile::new().expect("Failed to create temp file");
|
||||
let temp_file = NamedTempFile::new().expect("Failed to create temp file");
|
||||
let test_content = "Hello world, there are 123 items";
|
||||
fs::write(temp_file.path(), test_content).expect("Failed to write to temp file");
|
||||
|
||||
@@ -157,18 +157,21 @@ fn test_text_replacer_file_operations() {
|
||||
.expect("Failed to build replacer");
|
||||
|
||||
// Test replace_file
|
||||
let result = replacer.replace_file(temp_file.path()).expect("Failed to replace file content");
|
||||
let result = replacer
|
||||
.replace_file(temp_file.path())
|
||||
.expect("Failed to replace file content");
|
||||
assert_eq!(result, "Hello universe, there are NUMBER items");
|
||||
|
||||
// Verify original file is unchanged
|
||||
let original_content = fs::read_to_string(temp_file.path()).expect("Failed to read original file");
|
||||
let original_content =
|
||||
fs::read_to_string(temp_file.path()).expect("Failed to read original file");
|
||||
assert_eq!(original_content, test_content);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_text_replacer_file_in_place() {
|
||||
// Create a temporary file with test content
|
||||
let mut temp_file = NamedTempFile::new().expect("Failed to create temp file");
|
||||
let temp_file = NamedTempFile::new().expect("Failed to create temp file");
|
||||
let test_content = "Hello world, there are 123 items";
|
||||
fs::write(temp_file.path(), test_content).expect("Failed to write to temp file");
|
||||
|
||||
@@ -180,7 +183,9 @@ fn test_text_replacer_file_in_place() {
|
||||
.expect("Failed to build replacer");
|
||||
|
||||
// Test replace_file_in_place
|
||||
replacer.replace_file_in_place(temp_file.path()).expect("Failed to replace file in place");
|
||||
replacer
|
||||
.replace_file_in_place(temp_file.path())
|
||||
.expect("Failed to replace file in place");
|
||||
|
||||
// Verify file content was changed
|
||||
let new_content = fs::read_to_string(temp_file.path()).expect("Failed to read modified file");
|
||||
@@ -190,7 +195,7 @@ fn test_text_replacer_file_in_place() {
|
||||
#[test]
|
||||
fn test_text_replacer_file_to_file() {
|
||||
// Create source file
|
||||
let mut source_file = NamedTempFile::new().expect("Failed to create source file");
|
||||
let source_file = NamedTempFile::new().expect("Failed to create source file");
|
||||
let test_content = "Hello world, there are 123 items";
|
||||
fs::write(source_file.path(), test_content).expect("Failed to write to source file");
|
||||
|
||||
@@ -205,11 +210,13 @@ fn test_text_replacer_file_to_file() {
|
||||
.expect("Failed to build replacer");
|
||||
|
||||
// Test replace_file_to
|
||||
replacer.replace_file_to(source_file.path(), dest_file.path())
|
||||
replacer
|
||||
.replace_file_to(source_file.path(), dest_file.path())
|
||||
.expect("Failed to replace file to destination");
|
||||
|
||||
// Verify source file is unchanged
|
||||
let source_content = fs::read_to_string(source_file.path()).expect("Failed to read source file");
|
||||
let source_content =
|
||||
fs::read_to_string(source_file.path()).expect("Failed to read source file");
|
||||
assert_eq!(source_content, test_content);
|
||||
|
||||
// Verify destination file has replaced content
|
||||
@@ -263,9 +270,10 @@ fn test_text_replacer_multiline_text() {
|
||||
.build()
|
||||
.expect("Failed to build replacer");
|
||||
|
||||
let input = "function test() {\n // This is a comment\n return true;\n // Another comment\n}";
|
||||
let input =
|
||||
"function test() {\n // This is a comment\n return true;\n // Another comment\n}";
|
||||
let result = replacer.replace(input);
|
||||
|
||||
|
||||
// Note: This test depends on how the regex engine handles multiline mode
|
||||
// The actual behavior might need adjustment based on regex flags
|
||||
assert!(result.contains("function test()"));
|
||||
@@ -288,7 +296,7 @@ fn test_text_replacer_unicode_text() {
|
||||
#[test]
|
||||
fn test_text_replacer_large_text() {
|
||||
let large_text = "word ".repeat(10000);
|
||||
|
||||
|
||||
let replacer = TextReplacer::builder()
|
||||
.pattern("word")
|
||||
.replacement("term")
|
||||
|
Reference in New Issue
Block a user