use skillet::{evaluate_with_assignments, Value};
use std::collections::HashMap;
#[test]
fn test_string_includes_method_basic() {
let expression = r#":text := "hello world"; :text.includes("world")"#;
let vars = HashMap::new();
let result = evaluate_with_assignments(expression, &vars).unwrap();
assert_eq!(result, Value::Boolean(true));
}
#[test]
fn test_string_includes_method_not_found() {
let expression = r#":text := "hello world"; :text.includes("xyz")"#;
let vars = HashMap::new();
let result = evaluate_with_assignments(expression, &vars).unwrap();
assert_eq!(result, Value::Boolean(false));
}
#[test]
fn test_string_includes_method_empty_string() {
let expression = r#":text := "hello world"; :text.includes("")"#;
let vars = HashMap::new();
let result = evaluate_with_assignments(expression, &vars).unwrap();
assert_eq!(result, Value::Boolean(true));
}
#[test]
fn test_string_includes_method_case_sensitive() {
let expression = r#":text := "Hello World"; :text.includes("hello")"#;
let vars = HashMap::new();
let result = evaluate_with_assignments(expression, &vars).unwrap();
assert_eq!(result, Value::Boolean(false));
let expression = r#":text := "Hello World"; :text.includes("Hello")"#;
let result = evaluate_with_assignments(expression, &vars).unwrap();
assert_eq!(result, Value::Boolean(true));
}
#[test]
fn test_string_includes_method_partial_match() {
let expression = r#":text := "programming"; :text.includes("gram")"#;
let vars = HashMap::new();
let result = evaluate_with_assignments(expression, &vars).unwrap();
assert_eq!(result, Value::Boolean(true));
}
#[test]
fn test_includes_function_basic() {
let expression = r#"INCLUDES("hello world", "world")"#;
let vars = HashMap::new();
let result = evaluate_with_assignments(expression, &vars).unwrap();
assert_eq!(result, Value::Boolean(true));
}
#[test]
fn test_includes_function_not_found() {
let expression = r#"INCLUDES("hello world", "xyz")"#;
let vars = HashMap::new();
let result = evaluate_with_assignments(expression, &vars).unwrap();
assert_eq!(result, Value::Boolean(false));
}
#[test]
fn test_includes_function_empty_string() {
let expression = r#"INCLUDES("hello world", "")"#;
let vars = HashMap::new();
let result = evaluate_with_assignments(expression, &vars).unwrap();
assert_eq!(result, Value::Boolean(true));
}
#[test]
fn test_includes_function_case_sensitive() {
let expression = r#"INCLUDES("Hello World", "hello")"#;
let vars = HashMap::new();
let result = evaluate_with_assignments(expression, &vars).unwrap();
assert_eq!(result, Value::Boolean(false));
let expression = r#"INCLUDES("Hello World", "Hello")"#;
let result = evaluate_with_assignments(expression, &vars).unwrap();
assert_eq!(result, Value::Boolean(true));
}
#[test]
fn test_includes_function_with_variables() {
let expression = r#":text := "hello world"; :substring := "world"; INCLUDES(:text, :substring)"#;
let vars = HashMap::new();
let result = evaluate_with_assignments(expression, &vars).unwrap();
assert_eq!(result, Value::Boolean(true));
}
#[test]
fn test_includes_function_invalid_arguments() {
let expression = r#"INCLUDES(123, "world")"#;
let vars = HashMap::new();
let result = evaluate_with_assignments(expression, &vars);
assert!(result.is_err());
}
#[test]
fn test_includes_method_invalid_receiver() {
let expression = r#":num := 123; :num.includes("1")"#;
let vars = HashMap::new();
let result = evaluate_with_assignments(expression, &vars);
assert!(result.is_err());
}
#[test]
fn test_includes_method_invalid_argument() {
let expression = r#":text := "hello"; :text.includes(123)"#;
let vars = HashMap::new();
let result = evaluate_with_assignments(expression, &vars);
assert!(result.is_err());
}
#[test]
fn test_includes_function_wrong_argument_count() {
let expression = r#"INCLUDES("hello")"#;
let vars = HashMap::new();
let result = evaluate_with_assignments(expression, &vars);
assert!(result.is_err());
let expression = r#"INCLUDES("hello", "world", "extra")"#;
let result = evaluate_with_assignments(expression, &vars);
assert!(result.is_err());
}
#[test]
fn test_includes_chaining() {
let expression = r#":text := "Hello World"; :text.lower().includes("hello")"#;
let vars = HashMap::new();
let result = evaluate_with_assignments(expression, &vars).unwrap();
assert_eq!(result, Value::Boolean(true));
}
#[test]
fn test_includes_in_conditional() {
let expression = r#":text := "programming"; :text.includes("gram") ? "found" : "not found""#;
let vars = HashMap::new();
let result = evaluate_with_assignments(expression, &vars).unwrap();
assert_eq!(result, Value::String("found".to_string()));
}