use serde_json::json;
use tellaro_query_language::Tql;
#[test]
fn test_split_mutator_positional_parameter() {
let tql = Tql::new();
let data = vec![json!({"path": "/home/user/documents/file.txt"})];
let results = tql
.query(&data, "path | split('/') exists")
.expect("Query should succeed");
assert_eq!(results.len(), 1);
}
#[test]
fn test_split_mutator_named_parameter() {
let tql = Tql::new();
let data = vec![json!({"tags": "python,rust,java"})];
let results = tql
.query(&data, "tags | split(delimiter=',') exists")
.expect("Query should succeed");
assert_eq!(results.len(), 1);
}
#[test]
fn test_split_mutator_chained_with_length() {
let tql = Tql::new();
let data = vec![json!({"tags": "a,b,c,d,e"}), json!({"tags": "x,y"})];
let results = tql
.query(&data, "tags | split(',') | length > 3")
.expect("Query should succeed");
assert_eq!(results.len(), 1);
assert_eq!(results[0]["tags"], "a,b,c,d,e");
}
#[test]
fn test_split_mutator_pipe_delimiter() {
let tql = Tql::new();
let data = vec![json!({"values": "one|two|three"})];
let results = tql
.query(&data, "values | split('|') | length = 3")
.expect("Query should succeed");
assert_eq!(results.len(), 1);
}
#[test]
fn test_split_mutator_space_delimiter() {
let tql = Tql::new();
let data = vec![json!({"sentence": "hello world test"})];
let results = tql
.query(&data, "sentence | split(' ') | length = 3")
.expect("Query should succeed");
assert_eq!(results.len(), 1);
}
#[test]
fn test_split_mutator_dot_delimiter() {
let tql = Tql::new();
let data = vec![json!({"ip": "192.168.1.100"})];
let results = tql
.query(&data, "ip | split('.') | length = 4")
.expect("Query should succeed");
assert_eq!(results.len(), 1);
}
#[test]
fn test_split_mutator_hyphen_delimiter() {
let tql = Tql::new();
let data = vec![json!({"date": "2024-01-15"})];
let results = tql
.query(&data, "date | split('-') | length = 3")
.expect("Query should succeed");
assert_eq!(results.len(), 1);
}
#[test]
fn test_split_mutator_colon_delimiter() {
let tql = Tql::new();
let data = vec![json!({"time": "14:30:45"})];
let results = tql
.query(&data, "time | split(':') | length = 3")
.expect("Query should succeed");
assert_eq!(results.len(), 1);
}
#[test]
fn test_split_mutator_with_empty_parts() {
let tql = Tql::new();
let data = vec![json!({"value": "a,,b,,c"})];
let results = tql
.query(&data, "value | split(',') | length = 5")
.expect("Query should succeed");
assert_eq!(results.len(), 1);
}
#[test]
fn test_split_mutator_on_number() {
let tql = Tql::new();
let data = vec![json!({"value": 12345})];
let results = tql
.query(&data, "value | split('3') exists")
.expect("Query should succeed");
assert_eq!(results.len(), 1);
}
#[test]
fn test_split_mutator_on_boolean() {
let tql = Tql::new();
let data = vec![json!({"flag": true})];
let results = tql
.query(&data, "flag | split('r') exists")
.expect("Query should succeed");
assert_eq!(results.len(), 1);
}
#[test]
fn test_split_mutator_no_delimiter_found() {
let tql = Tql::new();
let data = vec![json!({"value": "nodashes"})];
let results = tql
.query(&data, "value | split('-') | length = 1")
.expect("Query should succeed");
assert_eq!(results.len(), 1);
}
#[test]
fn test_split_mutator_empty_string() {
let tql = Tql::new();
let data = vec![json!({"value": ""})];
let results = tql
.query(&data, "value | split(',') exists")
.expect("Query should succeed");
assert_eq!(results.len(), 1);
}
#[test]
fn test_split_mutator_single_char_string() {
let tql = Tql::new();
let data = vec![json!({"value": "x"})];
let results = tql
.query(&data, "value | split(',') | length = 1")
.expect("Query should succeed");
assert_eq!(results.len(), 1);
}
#[test]
fn test_split_mutator_unicode_content() {
let tql = Tql::new();
let data = vec![json!({"value": "hello,world,\u{4e16}\u{754c}"})];
let results = tql
.query(&data, "value | split(',') | length = 3")
.expect("Query should succeed");
assert_eq!(results.len(), 1);
}
#[test]
fn test_split_mutator_result_is_array() {
let tql = Tql::new();
let data = vec![
json!({"tags": "python,rust,java"}),
json!({"tags": "go,c++"}),
];
let results = tql
.query(&data, "tags | split(',') | length = 3")
.expect("Query should succeed");
assert_eq!(results.len(), 1);
assert_eq!(results[0]["tags"], "python,rust,java");
}
#[test]
fn test_split_mutator_length_filter() {
let tql = Tql::new();
let data = vec![json!({"numbers": "1,2,3"}), json!({"numbers": "10,20,30"})];
let results = tql
.query(&data, "numbers | split(',') | length > 0")
.expect("Query should succeed");
assert_eq!(results.len(), 2);
}
#[test]
fn test_split_mutator_filter_by_array_length() {
let tql = Tql::new();
let data = vec![
json!({"path": "/a/b/c/d"}),
json!({"path": "/x/y"}),
json!({"path": "/single"}),
];
let results = tql
.query(&data, "path | split('/') | length > 3")
.expect("Query should succeed");
assert_eq!(results.len(), 1);
assert_eq!(results[0]["path"], "/a/b/c/d");
}
#[test]
fn test_split_mutator_complex_query() {
let tql = Tql::new();
let data = vec![
json!({"name": "Alice", "skills": "python,rust,java"}),
json!({"name": "Bob", "skills": "go,python"}),
json!({"name": "Charlie", "skills": "javascript"}),
];
let results = tql
.query(
&data,
"name startswith 'A' AND skills | split(',') | length > 2",
)
.expect("Query should succeed");
assert_eq!(results.len(), 1);
assert_eq!(results[0]["name"], "Alice");
}
#[test]
fn test_split_mutator_delimiter_at_start() {
let tql = Tql::new();
let data = vec![json!({"value": ",a,b,c"})];
let results = tql
.query(&data, "value | split(',') | length = 4")
.expect("Query should succeed");
assert_eq!(results.len(), 1);
}
#[test]
fn test_split_mutator_delimiter_at_end() {
let tql = Tql::new();
let data = vec![json!({"value": "a,b,c,"})];
let results = tql
.query(&data, "value | split(',') | length = 4")
.expect("Query should succeed");
assert_eq!(results.len(), 1);
}
#[test]
fn test_split_mutator_consecutive_delimiters() {
let tql = Tql::new();
let data = vec![json!({"value": "a,,,b"})];
let results = tql
.query(&data, "value | split(',') | length = 4")
.expect("Query should succeed");
assert_eq!(results.len(), 1);
}