feat: Add Rhai scripting support
Some checks are pending
Rhai Tests / Run Rhai Tests (push) Waiting to run

- Add new `sal-rhai` crate for Rhai scripting integration
- Integrate Rhai with existing SAL modules
- Improve error handling for Rhai scripts and SAL functions
- Add comprehensive unit and integration tests for `sal-rhai`
This commit is contained in:
Mahmoud-Emad
2025-06-23 16:23:51 +03:00
parent 6dead402a2
commit 8012a66250
19 changed files with 2109 additions and 38 deletions

View File

@@ -69,7 +69,7 @@ mod rhai_integration_tests {
let script = r#"
let unsafe_name = "User's File [Draft].txt";
let result = name_fix(unsafe_name);
return result == "users_file_draft_.txt";
return result == "user_s_file_draft_.txt";
"#;
let result: Result<bool, Box<EvalAltResult>> = engine.eval(script);
@@ -84,7 +84,7 @@ mod rhai_integration_tests {
let script = r#"
let unsafe_path = "/path/to/User's File.txt";
let result = path_fix(unsafe_path);
return result == "/path/to/users_file.txt";
return result == "/path/to/user_s_file.txt";
"#;
let result: Result<bool, Box<EvalAltResult>> = engine.eval(script);
@@ -98,7 +98,7 @@ mod rhai_integration_tests {
let script = r#"
let builder = text_replacer_builder();
return type_of(builder) == "sal_text::replace::TextReplacerBuilder";
return type_of(builder) == "TextReplacerBuilder";
"#;
let result: Result<bool, Box<EvalAltResult>> = engine.eval(script);
@@ -133,13 +133,13 @@ mod rhai_integration_tests {
let script = r#"
let builder = text_replacer_builder();
builder = pattern(builder, r"\d+");
builder = pattern(builder, "\\d+");
builder = replacement(builder, "NUMBER");
builder = regex(builder, true);
let replacer = build(builder);
let result = replace(replacer, "There are 123 items");
return result == "There are NUMBER items";
"#;
@@ -158,7 +158,7 @@ mod rhai_integration_tests {
builder = replacement(builder, "universe");
builder = regex(builder, false);
builder = and(builder);
builder = pattern(builder, r"\d+");
builder = pattern(builder, "\\d+");
builder = replacement(builder, "NUMBER");
builder = regex(builder, true);
@@ -328,7 +328,7 @@ mod rhai_integration_tests {
let dedented_code = dedent(indented_code);
let results = [];
results.push(safe_filename == "users_script_draft_.py");
results.push(safe_filename == "user_s_script_draft_.py");
results.push(dedented_code.contains("def hello():"));
return results;