From 38b649ea16d8ed053fd9222bfb9867e3432ee2a6 Mon Sep 17 00:00:00 2001 From: omagdy Date: Thu, 17 Jul 2025 08:06:26 +0300 Subject: test: Moved tests to seprate files under tests folder for more structure --- tests/test_parse_boolean.rs | 87 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 tests/test_parse_boolean.rs (limited to 'tests/test_parse_boolean.rs') diff --git a/tests/test_parse_boolean.rs b/tests/test_parse_boolean.rs new file mode 100644 index 0000000..9cf865c --- /dev/null +++ b/tests/test_parse_boolean.rs @@ -0,0 +1,87 @@ +use codecrafters_redis::resp_parser::*; + +#[test] +fn test_valid_booleans() { + // Basic true value + assert_eq!(parse_boolean(b"#t\r\n").unwrap().0, RespType::Boolean(true)); + + // Basic false value + assert_eq!( + parse_boolean(b"#f\r\n").unwrap().0, + RespType::Boolean(false) + ); +} + +#[test] +fn test_invalid_booleans() { + // Wrong data type marker + assert_eq!( + parse_boolean(b":t\r\n").err().unwrap().message(), + "ERR Invalid data type" + ); + + // Invalid boolean value + assert_eq!( + parse_boolean(b"#x\r\n").err().unwrap().message(), + "ERR invalid value" + ); + + // Missing \r\n terminator + assert_eq!( + parse_boolean(b"#t").err().unwrap().message(), + "ERR Unexpected end of input" + ); + + // Only \r without \n + assert_eq!( + parse_boolean(b"#t\r").err().unwrap().message(), + "ERR Unexpected end of input" + ); + + // Empty input + assert_eq!( + parse_boolean(b"").err().unwrap().message(), + "ERR Empty data" + ); + + // Just the marker + assert_eq!( + parse_boolean(b"#").err().unwrap().message(), + "ERR Unexpected end of input" + ); + + // Case sensitivity + assert_eq!( + parse_boolean(b"#T\r\n").err().unwrap().message(), + "ERR invalid value" + ); + + // Extra content + assert_eq!( + parse_boolean(b"#ttrue\r\n").err().unwrap().message(), + "ERR Unexpected end of input" + ); +} + +#[test] +fn test_boolean_remaining_bytes() { + // Test with remaining data + let (value, remaining) = parse_boolean(b"#t\r\n+OK\r\n").unwrap(); + assert_eq!(value, RespType::Boolean(true)); + assert_eq!(remaining, b"+OK\r\n"); + + // Test with no remaining data + let (value, remaining) = parse_boolean(b"#f\r\n").unwrap(); + assert_eq!(value, RespType::Boolean(false)); + assert_eq!(remaining, b""); + + // Test with multiple commands + let (value, remaining) = parse_boolean(b"#t\r\n:42\r\n").unwrap(); + assert_eq!(value, RespType::Boolean(true)); + assert_eq!(remaining, b":42\r\n"); + + // Test with false and remaining data + let (value, remaining) = parse_boolean(b"#f\r\n-ERR test\r\n").unwrap(); + assert_eq!(value, RespType::Boolean(false)); + assert_eq!(remaining, b"-ERR test\r\n"); +} -- cgit v1.2.3