#[cfg(test)]
mod tests {
use crate::*;
#[test]
fn hex_dollar_simple() {
let source = r"
Sub Main()
result = Hex$(255)
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/conversion/hex_dollar",
);
settings.set_prepend_module_to_snapshot(false);
let _guard = settings.bind_to_scope();
insta::assert_yaml_snapshot!(tree);
}
#[test]
fn hex_dollar_assignment() {
let source = r"
Sub Main()
Dim hexValue As String
hexValue = Hex$(value)
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/conversion/hex_dollar",
);
settings.set_prepend_module_to_snapshot(false);
let _guard = settings.bind_to_scope();
insta::assert_yaml_snapshot!(tree);
}
#[test]
fn hex_dollar_variable() {
let source = r"
Sub Main()
Dim num As Long
Dim hexStr As String
num = 4096
hexStr = Hex$(num)
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/conversion/hex_dollar",
);
settings.set_prepend_module_to_snapshot(false);
let _guard = settings.bind_to_scope();
insta::assert_yaml_snapshot!(tree);
}
#[test]
fn hex_dollar_number_to_hex() {
let source = r"
Function NumberToHex(value As Long) As String
NumberToHex = Hex$(value)
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/conversion/hex_dollar",
);
settings.set_prepend_module_to_snapshot(false);
let _guard = settings.bind_to_scope();
insta::assert_yaml_snapshot!(tree);
}
#[test]
fn hex_dollar_color_conversion() {
let source = r"
Function ColorToHex(colorValue As Long) As String
Dim hexStr As String
hexStr = Hex$(colorValue)
ColorToHex = hexStr
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/conversion/hex_dollar",
);
settings.set_prepend_module_to_snapshot(false);
let _guard = settings.bind_to_scope();
insta::assert_yaml_snapshot!(tree);
}
#[test]
fn hex_dollar_with_padding() {
let source = r#"
Function PadHex(value As Long, width As Integer) As String
Dim hexStr As String
hexStr = Hex$(value)
PadHex = String$(width - Len(hexStr), "0") & hexStr
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/conversion/hex_dollar",
);
settings.set_prepend_module_to_snapshot(false);
let _guard = settings.bind_to_scope();
insta::assert_yaml_snapshot!(tree);
}
#[test]
fn hex_dollar_debug_address() {
let source = r#"
Function FormatAddress(address As Long) As String
FormatAddress = "0x" & Hex$(address)
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/conversion/hex_dollar",
);
settings.set_prepend_module_to_snapshot(false);
let _guard = settings.bind_to_scope();
insta::assert_yaml_snapshot!(tree);
}
#[test]
fn hex_dollar_bytes_array() {
let source = r"
Function BytesToHex(bytes() As Byte) As String
Dim result As String
Dim i As Integer
For i = LBound(bytes) To UBound(bytes)
result = result & Hex$(bytes(i))
Next i
BytesToHex = result
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/conversion/hex_dollar",
);
settings.set_prepend_module_to_snapshot(false);
let _guard = settings.bind_to_scope();
insta::assert_yaml_snapshot!(tree);
}
#[test]
fn hex_dollar_error_logging() {
let source = r#"
Sub LogError(errNum As Long)
Debug.Print "Error 0x" & Hex$(errNum)
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/conversion/hex_dollar",
);
settings.set_prepend_module_to_snapshot(false);
let _guard = settings.bind_to_scope();
insta::assert_yaml_snapshot!(tree);
}
#[test]
fn hex_dollar_char_code() {
let source = r"
Function CharToHex(ch As String) As String
If Len(ch) > 0 Then
CharToHex = Hex$(Asc(ch))
End If
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/conversion/hex_dollar",
);
settings.set_prepend_module_to_snapshot(false);
let _guard = settings.bind_to_scope();
insta::assert_yaml_snapshot!(tree);
}
#[test]
fn hex_dollar_in_loop() {
let source = r"
Sub DumpData()
Dim i As Integer
For i = 0 To 255
Debug.Print Hex$(i)
Next i
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/conversion/hex_dollar",
);
settings.set_prepend_module_to_snapshot(false);
let _guard = settings.bind_to_scope();
insta::assert_yaml_snapshot!(tree);
}
#[test]
fn hex_dollar_concatenation() {
let source = r#"
Sub Main()
Dim output As String
output = "Value: 0x" & Hex$(value)
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/conversion/hex_dollar",
);
settings.set_prepend_module_to_snapshot(false);
let _guard = settings.bind_to_scope();
insta::assert_yaml_snapshot!(tree);
}
#[test]
fn hex_dollar_checksum() {
let source = r#"
Function FormatChecksum(checksum As Long) As String
Dim hexStr As String
hexStr = Hex$(checksum)
FormatChecksum = String$(8 - Len(hexStr), "0") & hexStr
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/conversion/hex_dollar",
);
settings.set_prepend_module_to_snapshot(false);
let _guard = settings.bind_to_scope();
insta::assert_yaml_snapshot!(tree);
}
#[test]
fn hex_dollar_rgb_components() {
let source = r##"
Function RGBToWebColor(r As Byte, g As Byte, b As Byte) As String
RGBToWebColor = "#" & Hex$(r) & Hex$(g) & Hex$(b)
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/conversion/hex_dollar",
);
settings.set_prepend_module_to_snapshot(false);
let _guard = settings.bind_to_scope();
insta::assert_yaml_snapshot!(tree);
}
#[test]
fn hex_dollar_with_prefix() {
let source = r#"
Function HexWithPrefix(value As Long) As String
HexWithPrefix = "&H" & Hex$(value)
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/conversion/hex_dollar",
);
settings.set_prepend_module_to_snapshot(false);
let _guard = settings.bind_to_scope();
insta::assert_yaml_snapshot!(tree);
}
#[test]
fn hex_dollar_conditional() {
let source = r#"
Sub Main()
If Len(Hex$(value)) > 4 Then
Debug.Print "Large value"
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/conversion/hex_dollar",
);
settings.set_prepend_module_to_snapshot(false);
let _guard = settings.bind_to_scope();
insta::assert_yaml_snapshot!(tree);
}
#[test]
fn hex_dollar_select_case() {
let source = r#"
Sub Main()
Select Case Hex$(status)
Case "FF"
Debug.Print "All set"
Case "0"
Debug.Print "Clear"
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/conversion/hex_dollar",
);
settings.set_prepend_module_to_snapshot(false);
let _guard = settings.bind_to_scope();
insta::assert_yaml_snapshot!(tree);
}
#[test]
fn hex_dollar_multiple_calls() {
let source = r#"
Function FormatPacket(pType As Byte, pLen As Integer) As String
FormatPacket = "Type: 0x" & Hex$(pType) & " Len: 0x" & Hex$(pLen)
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/conversion/hex_dollar",
);
settings.set_prepend_module_to_snapshot(false);
let _guard = settings.bind_to_scope();
insta::assert_yaml_snapshot!(tree);
}
#[test]
fn hex_dollar_with_right() {
let source = r#"
Function PadToTwo(value As Byte) As String
PadToTwo = Right$("0" & Hex$(value), 2)
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/conversion/hex_dollar",
);
settings.set_prepend_module_to_snapshot(false);
let _guard = settings.bind_to_scope();
insta::assert_yaml_snapshot!(tree);
}
#[test]
fn hex_dollar_guid_format() {
let source = r#"
Function FormatGUID(data1 As Long) As String
FormatGUID = Right$("00000000" & Hex$(data1), 8)
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/conversion/hex_dollar",
);
settings.set_prepend_module_to_snapshot(false);
let _guard = settings.bind_to_scope();
insta::assert_yaml_snapshot!(tree);
}
}