use super :: *;
use the_module ::query :: { parse, ParseResult, Value };
use std ::collections ::HashMap;
use core ::str ::FromStr;
#[ test ]
fn value_from_str()
{
assert_eq!(Value ::from_str("123").unwrap(), Value ::Int(123));
assert_eq!(Value ::from_str("true").unwrap(), Value ::Bool(true));
assert_eq!(Value ::from_str("'hello'").unwrap(), Value ::String("hello".to_string()));
}
#[ test ]
fn bool_from_value()
{
assert!(bool ::from(&Value ::Bool(true)));
assert!(bool ::from(&Value ::String("true".to_string())));
assert!(bool ::from(&Value ::Int(1)));
assert!(!bool ::from(&Value ::Int(0)));
assert!(!bool ::from(&Value ::String("test".to_string())));
}
#[ test ]
fn parse_result_convert()
{
let params = vec![Value ::Int(1), Value ::Int(2), Value ::Int(3)];
let result = ParseResult ::Positioning(params);
let named_map = result.clone().into_map(vec!["var0".into(), "var1".into(), "var2".into()]);
let unnamed_map = result.clone().into_map(vec![]);
let mixed_map = result.clone().into_map(vec!["var0".into()]);
let vec = result.into_vec();
assert_eq!(
HashMap ::from([
("var0".to_string(), Value ::Int(1)),
("var1".to_string(), Value ::Int(2)),
("var2".to_string(), Value ::Int(3))
]),
named_map
);
assert_eq!(
HashMap ::from([
("1".to_string(), Value ::Int(1)),
("2".to_string(), Value ::Int(2)),
("3".to_string(), Value ::Int(3))
]),
unnamed_map
);
assert_eq!(
HashMap ::from([
("var0".to_string(), Value ::Int(1)),
("1".to_string(), Value ::Int(2)),
("2".to_string(), Value ::Int(3))
]),
mixed_map
);
assert_eq!(vec![Value ::Int(1), Value ::Int(2), Value ::Int(3)], vec);
}
#[ test ]
fn parse_empty_string()
{
assert_eq!(parse("()").unwrap().into_vec(), vec![]);
}
#[ test ]
fn parse_single_value()
{
let mut expected_map = HashMap ::new();
expected_map.insert("1".to_string(), Value ::String("test/test".to_string()));
assert_eq!(parse("('test/test')").unwrap().into_map(vec![]), expected_map);
}
#[ test ]
fn parse_multiple_values()
{
let mut expected_map = HashMap ::new();
expected_map.insert("key1".to_string(), Value ::Int(123));
expected_map.insert("key2".to_string(), Value ::Bool(true));
assert_eq!(parse("{key1:123, key2: true}").unwrap().into_map(vec![]), expected_map);
}
#[ test ]
fn parse_with_quotes()
{
let mut expected_map = HashMap ::new();
expected_map.insert("key".to_string(), Value ::String("hello world".to_string()));
assert_eq!(parse("{key:'hello world'}").unwrap().into_map(vec![]), expected_map);
}
#[ test ]
fn parse_with_special_characters()
{
let mut expected_map = HashMap ::new();
expected_map.insert("key".to_string(), Value ::String("!@#$%^&*(),".to_string()));
assert_eq!(parse("{key:'!@#$%^&*(),'}").unwrap().into_map(vec![]), expected_map);
}
#[ test ]
fn parse_with_colon_in_value()
{
let mut expected_map = HashMap ::new();
expected_map.insert("key".to_string(), Value ::String("hello: world".to_string()));
assert_eq!(parse("{key:'hello: world'}").unwrap().into_map(vec![]), expected_map);
}
#[ test ]
fn with_comma_in_value()
{
let mut expected_map = HashMap ::new();
expected_map.insert("key".to_string(), Value ::String("hello,world".to_string()));
assert_eq!(parse("{key:'hello,world'}").unwrap().into_map(vec![]), expected_map);
}
#[ test ]
fn with_single_quote_escape()
{
let mut expected_map = HashMap ::new();
expected_map.insert("key".to_string(), Value ::String(r"hello\'test\'test".into()));
assert_eq!(
parse(r"{ key: 'hello\'test\'test' }").unwrap().into_map(vec![]),
expected_map
);
}
#[ test ]
fn with_multiple_spaces()
{
let mut expected_map = HashMap ::new();
expected_map.insert("key".to_string(), Value ::String("test ".into()));
expected_map.insert("key2".to_string(), Value ::String("test".into()));
assert_eq!(
parse(r"{ key: 'test ', key2: test }")
.unwrap()
.into_map(vec![]),
expected_map
);
}
#[ test ]
fn many_unnamed()
{
let expected: HashMap< _, _ > = HashMap ::from_iter([
("1".to_string(), Value ::Int(123)),
("2".to_string(), Value ::String("test_aboba".to_string())),
]);
assert_eq!(parse("( 123, 'test_aboba' )").unwrap().into_map(vec![]), expected);
}
#[ test ]
fn named_and_unnamed()
{
let expected: HashMap< _, _ > = HashMap ::from_iter([
("1".to_string(), Value ::Int(123)),
("2".to_string(), Value ::String("test_aboba".to_string())),
("3".to_string(), Value ::String("test: true".to_string())),
]);
assert_eq!(parse(r"(123, 'test_aboba', test: true)").unwrap().into_map(vec![]), expected);
}