Skip to content

Commit 16d58d7

Browse files
committed
Fix up tests
1 parent 5eb43a2 commit 16d58d7

File tree

2 files changed

+45
-34
lines changed

2 files changed

+45
-34
lines changed

dsc/tests/dsc_expressions.tests.ps1

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -122,9 +122,9 @@ resources:
122122
@{ expression = "[bool('False')]" ; expected = $false }
123123
@{ expression = "[bool(1)]" ; expected = $true }
124124
@{ expression = "[not(bool(0))]" ; expected = $true }
125-
@{ expression = "[coalesce(null, 'hello')]" ; expected = 'hello' }
126-
@{ expression = "[coalesce(null, null, 42)]" ; expected = 42 }
127-
@{ expression = "[coalesce(null, true)]" ; expected = $true }
125+
@{ expression = "[coalesce('hello', 'world')]" ; expected = 'hello' }
126+
@{ expression = "[coalesce(42, 'fallback')]" ; expected = 42 }
127+
@{ expression = "[coalesce(true, false)]" ; expected = $true }
128128
@{ expression = "[coalesce('first', 'second')]" ; expected = 'first' }
129129
@{ expression = "[true()]" ; expected = $true }
130130
@{ expression = "[false()]" ; expected = $false }

dsc_lib/src/functions/coalesce.rs

Lines changed: 42 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -55,46 +55,57 @@ impl Function for Coalesce {
5555
mod tests {
5656
use crate::configure::context::Context;
5757
use crate::parser::Statement;
58+
use super::*;
59+
// TODO: Add tests for direct function calls with nulls and mixed types if the parser accept it
60+
// #[test]
61+
// fn all_null_returns_null() {
62+
// let mut parser = Statement::new().unwrap();
63+
// let result = parser.parse_and_execute("[coalesce(null, null, null)]", &Context::new()).unwrap();
64+
// assert_eq!(result, serde_json::Value::Null);
65+
// }
5866

5967
#[test]
60-
fn first_non_null_string() {
61-
let mut parser = Statement::new().unwrap();
62-
let result = parser.parse_and_execute("[coalesce(null, 'hello', 'world')]", &Context::new()).unwrap();
63-
assert_eq!(result, "hello");
68+
fn direct_function_call_with_nulls() {
69+
let coalesce = Coalesce {};
70+
let context = Context::new();
71+
72+
let args = vec![Value::Null, Value::Null, Value::String("hello".to_string())];
73+
let result = coalesce.invoke(&args, &context).unwrap();
74+
assert_eq!(result, Value::String("hello".to_string()));
75+
76+
let args = vec![Value::Null, Value::Null, Value::Null];
77+
let result = coalesce.invoke(&args, &context).unwrap();
78+
assert_eq!(result, Value::Null);
79+
80+
let args = vec![Value::String("first".to_string()), Value::String("second".to_string())];
81+
let result = coalesce.invoke(&args, &context).unwrap();
82+
assert_eq!(result, Value::String("first".to_string()));
6483
}
6584

6685
#[test]
67-
fn first_non_null_number() {
68-
let mut parser = Statement::new().unwrap();
69-
let result = parser.parse_and_execute("[coalesce(null, null, 42)]", &Context::new()).unwrap();
70-
assert_eq!(result, 42);
86+
fn direct_function_call_mixed_types() {
87+
let coalesce = Coalesce {};
88+
let context = Context::new();
89+
90+
let args = vec![Value::Null, serde_json::json!(42), Value::String("fallback".to_string())];
91+
let result = coalesce.invoke(&args, &context).unwrap();
92+
assert_eq!(result, serde_json::json!(42));
93+
94+
let args = vec![Value::Null, Value::Bool(true)];
95+
let result = coalesce.invoke(&args, &context).unwrap();
96+
assert_eq!(result, Value::Bool(true));
7197
}
7298

7399
#[test]
74-
fn first_non_null_boolean() {
100+
fn parser_with_values() {
75101
let mut parser = Statement::new().unwrap();
76-
let result = parser.parse_and_execute("[coalesce(null, true)]", &Context::new()).unwrap();
102+
let result = parser.parse_and_execute("[coalesce('hello', 'world')]", &Context::new()).unwrap();
103+
assert_eq!(result, "hello");
104+
105+
let result = parser.parse_and_execute("[coalesce(42, 'fallback')]", &Context::new()).unwrap();
106+
assert_eq!(result, 42);
107+
108+
let result = parser.parse_and_execute("[coalesce(true)]", &Context::new()).unwrap();
77109
assert_eq!(result, true);
78110
}
79-
80-
#[test]
81-
fn all_null_returns_null() {
82-
let mut parser = Statement::new().unwrap();
83-
let result = parser.parse_and_execute("[coalesce(null, null, null)]", &Context::new()).unwrap();
84-
assert_eq!(result, serde_json::Value::Null);
85-
}
86-
87-
#[test]
88-
fn single_non_null_value() {
89-
let mut parser = Statement::new().unwrap();
90-
let result = parser.parse_and_execute("[coalesce('first')]", &Context::new()).unwrap();
91-
assert_eq!(result, "first");
92-
}
93-
94-
#[test]
95-
fn mixed_types() {
96-
let mut parser = Statement::new().unwrap();
97-
let result = parser.parse_and_execute("[coalesce(null, 123, 'fallback')]", &Context::new()).unwrap();
98-
assert_eq!(result, 123);
99-
}
100111
}

0 commit comments

Comments
 (0)