#[cfg(test)]
mod tests {
use crate::*;
#[test]
fn timeserial_basic() {
let source = r"
Sub Test()
t = TimeSerial(12, 30, 0)
End Sub
";
let (cst_opt, _failures) = ConcreteSyntaxTree::from_text("test.bas", source).unpack();
let cst = cst_opt.expect("CST should be parsed");
let tree = cst.to_serializable();
let mut settings = insta::Settings::clone_current();
settings.set_snapshot_path(
"../../../../../snapshots/syntax/library/functions/datetime/timeserial",
);
settings.set_prepend_module_to_snapshot(false);
let _guard = settings.bind_to_scope();
insta::assert_yaml_snapshot!(tree);
}
#[test]
fn timeserial_variable_assignment() {
let source = r"
Sub Test()
Dim myTime As Date
myTime = TimeSerial(9, 0, 0)
End Sub
";
let (cst_opt, _failures) = ConcreteSyntaxTree::from_text("test.bas", source).unpack();
let cst = cst_opt.expect("CST should be parsed");
let tree = cst.to_serializable();
let mut settings = insta::Settings::clone_current();
settings.set_snapshot_path(
"../../../../../snapshots/syntax/library/functions/datetime/timeserial",
);
settings.set_prepend_module_to_snapshot(false);
let _guard = settings.bind_to_scope();
insta::assert_yaml_snapshot!(tree);
}
#[test]
fn timeserial_all_parameters() {
let source = r"
Sub Test()
result = TimeSerial(14, 45, 30)
End Sub
";
let (cst_opt, _failures) = ConcreteSyntaxTree::from_text("test.bas", source).unpack();
let cst = cst_opt.expect("CST should be parsed");
let tree = cst.to_serializable();
let mut settings = insta::Settings::clone_current();
settings.set_snapshot_path(
"../../../../../snapshots/syntax/library/functions/datetime/timeserial",
);
settings.set_prepend_module_to_snapshot(false);
let _guard = settings.bind_to_scope();
insta::assert_yaml_snapshot!(tree);
}
#[test]
fn timeserial_function_return() {
let source = r"
Function GetNoon() As Date
GetNoon = TimeSerial(12, 0, 0)
End Function
";
let (cst_opt, _failures) = ConcreteSyntaxTree::from_text("test.bas", source).unpack();
let cst = cst_opt.expect("CST should be parsed");
let tree = cst.to_serializable();
let mut settings = insta::Settings::clone_current();
settings.set_snapshot_path(
"../../../../../snapshots/syntax/library/functions/datetime/timeserial",
);
settings.set_prepend_module_to_snapshot(false);
let _guard = settings.bind_to_scope();
insta::assert_yaml_snapshot!(tree);
}
#[test]
fn timeserial_addition() {
let source = r"
Sub Test()
newTime = Time + TimeSerial(2, 0, 0)
End Sub
";
let (cst_opt, _failures) = ConcreteSyntaxTree::from_text("test.bas", source).unpack();
let cst = cst_opt.expect("CST should be parsed");
let tree = cst.to_serializable();
let mut settings = insta::Settings::clone_current();
settings.set_snapshot_path(
"../../../../../snapshots/syntax/library/functions/datetime/timeserial",
);
settings.set_prepend_module_to_snapshot(false);
let _guard = settings.bind_to_scope();
insta::assert_yaml_snapshot!(tree);
}
#[test]
fn timeserial_subtraction() {
let source = r"
Sub Test()
earlierTime = Time + TimeSerial(-1, 0, 0)
End Sub
";
let (cst_opt, _failures) = ConcreteSyntaxTree::from_text("test.bas", source).unpack();
let cst = cst_opt.expect("CST should be parsed");
let tree = cst.to_serializable();
let mut settings = insta::Settings::clone_current();
settings.set_snapshot_path(
"../../../../../snapshots/syntax/library/functions/datetime/timeserial",
);
settings.set_prepend_module_to_snapshot(false);
let _guard = settings.bind_to_scope();
insta::assert_yaml_snapshot!(tree);
}
#[test]
fn timeserial_comparison() {
let source = r"
Sub Test()
If Time > TimeSerial(17, 0, 0) Then
AfterHours
End If
End Sub
";
let (cst_opt, _failures) = ConcreteSyntaxTree::from_text("test.bas", source).unpack();
let cst = cst_opt.expect("CST should be parsed");
let tree = cst.to_serializable();
let mut settings = insta::Settings::clone_current();
settings.set_snapshot_path(
"../../../../../snapshots/syntax/library/functions/datetime/timeserial",
);
settings.set_prepend_module_to_snapshot(false);
let _guard = settings.bind_to_scope();
insta::assert_yaml_snapshot!(tree);
}
#[test]
fn timeserial_msgbox() {
let source = r#"
Sub Test()
MsgBox "Opening time: " & TimeSerial(9, 0, 0)
End Sub
"#;
let (cst_opt, _failures) = ConcreteSyntaxTree::from_text("test.bas", source).unpack();
let cst = cst_opt.expect("CST should be parsed");
let tree = cst.to_serializable();
let mut settings = insta::Settings::clone_current();
settings.set_snapshot_path(
"../../../../../snapshots/syntax/library/functions/datetime/timeserial",
);
settings.set_prepend_module_to_snapshot(false);
let _guard = settings.bind_to_scope();
insta::assert_yaml_snapshot!(tree);
}
#[test]
fn timeserial_debug_print() {
let source = r"
Sub Test()
Debug.Print TimeSerial(currentHour, currentMinute, currentSecond)
End Sub
";
let (cst_opt, _failures) = ConcreteSyntaxTree::from_text("test.bas", source).unpack();
let cst = cst_opt.expect("CST should be parsed");
let tree = cst.to_serializable();
let mut settings = insta::Settings::clone_current();
settings.set_snapshot_path(
"../../../../../snapshots/syntax/library/functions/datetime/timeserial",
);
settings.set_prepend_module_to_snapshot(false);
let _guard = settings.bind_to_scope();
insta::assert_yaml_snapshot!(tree);
}
#[test]
fn timeserial_format() {
let source = r#"
Sub Test()
formatted = Format$(TimeSerial(15, 30, 0), "hh:mm AM/PM")
End Sub
"#;
let (cst_opt, _failures) = ConcreteSyntaxTree::from_text("test.bas", source).unpack();
let cst = cst_opt.expect("CST should be parsed");
let tree = cst.to_serializable();
let mut settings = insta::Settings::clone_current();
settings.set_snapshot_path(
"../../../../../snapshots/syntax/library/functions/datetime/timeserial",
);
settings.set_prepend_module_to_snapshot(false);
let _guard = settings.bind_to_scope();
insta::assert_yaml_snapshot!(tree);
}
#[test]
fn timeserial_if_statement() {
let source = r"
Sub Test()
If currentTime >= TimeSerial(9, 0, 0) And currentTime < TimeSerial(17, 0, 0) Then
BusinessHours
End If
End Sub
";
let (cst_opt, _failures) = ConcreteSyntaxTree::from_text("test.bas", source).unpack();
let cst = cst_opt.expect("CST should be parsed");
let tree = cst.to_serializable();
let mut settings = insta::Settings::clone_current();
settings.set_snapshot_path(
"../../../../../snapshots/syntax/library/functions/datetime/timeserial",
);
settings.set_prepend_module_to_snapshot(false);
let _guard = settings.bind_to_scope();
insta::assert_yaml_snapshot!(tree);
}
#[test]
fn timeserial_select_case() {
let source = r"
Sub Test()
Select Case Time
Case Is >= TimeSerial(0, 0, 0) And Is < TimeSerial(12, 0, 0)
Morning
Case Else
Afternoon
End Select
End Sub
";
let (cst_opt, _failures) = ConcreteSyntaxTree::from_text("test.bas", source).unpack();
let cst = cst_opt.expect("CST should be parsed");
let tree = cst.to_serializable();
let mut settings = insta::Settings::clone_current();
settings.set_snapshot_path(
"../../../../../snapshots/syntax/library/functions/datetime/timeserial",
);
settings.set_prepend_module_to_snapshot(false);
let _guard = settings.bind_to_scope();
insta::assert_yaml_snapshot!(tree);
}
#[test]
fn timeserial_function_argument() {
let source = r"
Sub Test()
Call ProcessTime(TimeSerial(12, 0, 0))
End Sub
";
let (cst_opt, _failures) = ConcreteSyntaxTree::from_text("test.bas", source).unpack();
let cst = cst_opt.expect("CST should be parsed");
let tree = cst.to_serializable();
let mut settings = insta::Settings::clone_current();
settings.set_snapshot_path(
"../../../../../snapshots/syntax/library/functions/datetime/timeserial",
);
settings.set_prepend_module_to_snapshot(false);
let _guard = settings.bind_to_scope();
insta::assert_yaml_snapshot!(tree);
}
#[test]
fn timeserial_property_assignment() {
let source = r"
Sub Test()
obj.StartTime = TimeSerial(8, 30, 0)
End Sub
";
let (cst_opt, _failures) = ConcreteSyntaxTree::from_text("test.bas", source).unpack();
let cst = cst_opt.expect("CST should be parsed");
let tree = cst.to_serializable();
let mut settings = insta::Settings::clone_current();
settings.set_snapshot_path(
"../../../../../snapshots/syntax/library/functions/datetime/timeserial",
);
settings.set_prepend_module_to_snapshot(false);
let _guard = settings.bind_to_scope();
insta::assert_yaml_snapshot!(tree);
}
#[test]
fn timeserial_with_statement() {
let source = r"
Sub Test()
With schedule
.Start = TimeSerial(9, 0, 0)
.End = TimeSerial(17, 0, 0)
End With
End Sub
";
let (cst_opt, _failures) = ConcreteSyntaxTree::from_text("test.bas", source).unpack();
let cst = cst_opt.expect("CST should be parsed");
let tree = cst.to_serializable();
let mut settings = insta::Settings::clone_current();
settings.set_snapshot_path(
"../../../../../snapshots/syntax/library/functions/datetime/timeserial",
);
settings.set_prepend_module_to_snapshot(false);
let _guard = settings.bind_to_scope();
insta::assert_yaml_snapshot!(tree);
}
#[test]
fn timeserial_array_assignment() {
let source = r"
Sub Test()
times(i) = TimeSerial(hours(i), minutes(i), 0)
End Sub
";
let (cst_opt, _failures) = ConcreteSyntaxTree::from_text("test.bas", source).unpack();
let cst = cst_opt.expect("CST should be parsed");
let tree = cst.to_serializable();
let mut settings = insta::Settings::clone_current();
settings.set_snapshot_path(
"../../../../../snapshots/syntax/library/functions/datetime/timeserial",
);
settings.set_prepend_module_to_snapshot(false);
let _guard = settings.bind_to_scope();
insta::assert_yaml_snapshot!(tree);
}
#[test]
fn timeserial_print_statement() {
let source = r"
Sub Test()
Print #1, TimeSerial(10, 15, 30)
End Sub
";
let (cst_opt, _failures) = ConcreteSyntaxTree::from_text("test.bas", source).unpack();
let cst = cst_opt.expect("CST should be parsed");
let tree = cst.to_serializable();
let mut settings = insta::Settings::clone_current();
settings.set_snapshot_path(
"../../../../../snapshots/syntax/library/functions/datetime/timeserial",
);
settings.set_prepend_module_to_snapshot(false);
let _guard = settings.bind_to_scope();
insta::assert_yaml_snapshot!(tree);
}
#[test]
fn timeserial_elseif() {
let source = r"
Sub Test()
If x = 1 Then
y = 1
ElseIf Time > TimeSerial(18, 0, 0) Then
y = 2
End If
End Sub
";
let (cst_opt, _failures) = ConcreteSyntaxTree::from_text("test.bas", source).unpack();
let cst = cst_opt.expect("CST should be parsed");
let tree = cst.to_serializable();
let mut settings = insta::Settings::clone_current();
settings.set_snapshot_path(
"../../../../../snapshots/syntax/library/functions/datetime/timeserial",
);
settings.set_prepend_module_to_snapshot(false);
let _guard = settings.bind_to_scope();
insta::assert_yaml_snapshot!(tree);
}
#[test]
fn timeserial_do_while() {
let source = r"
Sub Test()
Do While Time < TimeSerial(17, 0, 0)
Work
Loop
End Sub
";
let (cst_opt, _failures) = ConcreteSyntaxTree::from_text("test.bas", source).unpack();
let cst = cst_opt.expect("CST should be parsed");
let tree = cst.to_serializable();
let mut settings = insta::Settings::clone_current();
settings.set_snapshot_path(
"../../../../../snapshots/syntax/library/functions/datetime/timeserial",
);
settings.set_prepend_module_to_snapshot(false);
let _guard = settings.bind_to_scope();
insta::assert_yaml_snapshot!(tree);
}
#[test]
fn timeserial_do_until() {
let source = r"
Sub Test()
Do Until Time >= TimeSerial(9, 0, 0)
Wait
Loop
End Sub
";
let (cst_opt, _failures) = ConcreteSyntaxTree::from_text("test.bas", source).unpack();
let cst = cst_opt.expect("CST should be parsed");
let tree = cst.to_serializable();
let mut settings = insta::Settings::clone_current();
settings.set_snapshot_path(
"../../../../../snapshots/syntax/library/functions/datetime/timeserial",
);
settings.set_prepend_module_to_snapshot(false);
let _guard = settings.bind_to_scope();
insta::assert_yaml_snapshot!(tree);
}
#[test]
fn timeserial_while_wend() {
let source = r"
Sub Test()
While Time < TimeSerial(12, 0, 0)
Process
Wend
End Sub
";
let (cst_opt, _failures) = ConcreteSyntaxTree::from_text("test.bas", source).unpack();
let cst = cst_opt.expect("CST should be parsed");
let tree = cst.to_serializable();
let mut settings = insta::Settings::clone_current();
settings.set_snapshot_path(
"../../../../../snapshots/syntax/library/functions/datetime/timeserial",
);
settings.set_prepend_module_to_snapshot(false);
let _guard = settings.bind_to_scope();
insta::assert_yaml_snapshot!(tree);
}
#[test]
fn timeserial_iif() {
let source = r#"
Sub Test()
greeting = IIf(Time < TimeSerial(12, 0, 0), "Morning", "Afternoon")
End Sub
"#;
let (cst_opt, _failures) = ConcreteSyntaxTree::from_text("test.bas", source).unpack();
let cst = cst_opt.expect("CST should be parsed");
let tree = cst.to_serializable();
let mut settings = insta::Settings::clone_current();
settings.set_snapshot_path(
"../../../../../snapshots/syntax/library/functions/datetime/timeserial",
);
settings.set_prepend_module_to_snapshot(false);
let _guard = settings.bind_to_scope();
insta::assert_yaml_snapshot!(tree);
}
#[test]
fn timeserial_parentheses() {
let source = r"
Sub Test()
result = (TimeSerial(12, 0, 0))
End Sub
";
let (cst_opt, _failures) = ConcreteSyntaxTree::from_text("test.bas", source).unpack();
let cst = cst_opt.expect("CST should be parsed");
let tree = cst.to_serializable();
let mut settings = insta::Settings::clone_current();
settings.set_snapshot_path(
"../../../../../snapshots/syntax/library/functions/datetime/timeserial",
);
settings.set_prepend_module_to_snapshot(false);
let _guard = settings.bind_to_scope();
insta::assert_yaml_snapshot!(tree);
}
#[test]
fn timeserial_class_usage() {
let source = r"
Sub Test()
Set calculator = New TimeCalculator
result = calculator.AddTime(Now, TimeSerial(1, 30, 0))
End Sub
";
let (cst_opt, _failures) = ConcreteSyntaxTree::from_text("test.bas", source).unpack();
let cst = cst_opt.expect("CST should be parsed");
let tree = cst.to_serializable();
let mut settings = insta::Settings::clone_current();
settings.set_snapshot_path(
"../../../../../snapshots/syntax/library/functions/datetime/timeserial",
);
settings.set_prepend_module_to_snapshot(false);
let _guard = settings.bind_to_scope();
insta::assert_yaml_snapshot!(tree);
}
#[test]
fn timeserial_negative_values() {
let source = r"
Sub Test()
earlier = Time + TimeSerial(0, -30, 0)
End Sub
";
let (cst_opt, _failures) = ConcreteSyntaxTree::from_text("test.bas", source).unpack();
let cst = cst_opt.expect("CST should be parsed");
let tree = cst.to_serializable();
let mut settings = insta::Settings::clone_current();
settings.set_snapshot_path(
"../../../../../snapshots/syntax/library/functions/datetime/timeserial",
);
settings.set_prepend_module_to_snapshot(false);
let _guard = settings.bind_to_scope();
insta::assert_yaml_snapshot!(tree);
}
#[test]
fn timeserial_hour_minute_second() {
let source = r"
Sub Test()
myTime = TimeSerial(Hour(dt), Minute(dt), Second(dt))
End Sub
";
let (cst_opt, _failures) = ConcreteSyntaxTree::from_text("test.bas", source).unpack();
let cst = cst_opt.expect("CST should be parsed");
let tree = cst.to_serializable();
let mut settings = insta::Settings::clone_current();
settings.set_snapshot_path(
"../../../../../snapshots/syntax/library/functions/datetime/timeserial",
);
settings.set_prepend_module_to_snapshot(false);
let _guard = settings.bind_to_scope();
insta::assert_yaml_snapshot!(tree);
}
#[test]
fn timeserial_concatenation() {
let source = r#"
Sub Test()
display = "Time: " & TimeSerial(14, 30, 0)
End Sub
"#;
let (cst_opt, _failures) = ConcreteSyntaxTree::from_text("test.bas", source).unpack();
let cst = cst_opt.expect("CST should be parsed");
let tree = cst.to_serializable();
let mut settings = insta::Settings::clone_current();
settings.set_snapshot_path(
"../../../../../snapshots/syntax/library/functions/datetime/timeserial",
);
settings.set_prepend_module_to_snapshot(false);
let _guard = settings.bind_to_scope();
insta::assert_yaml_snapshot!(tree);
}
#[test]
fn timeserial_multiple_calls() {
let source = r"
Sub Test()
startTime = TimeSerial(9, 0, 0)
endTime = TimeSerial(17, 0, 0)
duration = endTime - startTime
End Sub
";
let (cst_opt, _failures) = ConcreteSyntaxTree::from_text("test.bas", source).unpack();
let cst = cst_opt.expect("CST should be parsed");
let tree = cst.to_serializable();
let mut settings = insta::Settings::clone_current();
settings.set_snapshot_path(
"../../../../../snapshots/syntax/library/functions/datetime/timeserial",
);
settings.set_prepend_module_to_snapshot(false);
let _guard = settings.bind_to_scope();
insta::assert_yaml_snapshot!(tree);
}
}