diff options
| author | omagdy <omar.professional8777@gmail.com> | 2025-07-17 08:06:26 +0300 |
|---|---|---|
| committer | omagdy <omar.professional8777@gmail.com> | 2025-07-17 08:06:26 +0300 |
| commit | 38b649ea16d8ed053fd9222bfb9867e3432ee2a6 (patch) | |
| tree | a7fbde68ad869e1b74071207bdf7b7c159c7f75f /tests/test_parse_boolean.rs | |
| parent | c880c7ad3eba9546ce95bc268218c66a128d319f (diff) | |
| download | redis-rust-38b649ea16d8ed053fd9222bfb9867e3432ee2a6.tar.xz redis-rust-38b649ea16d8ed053fd9222bfb9867e3432ee2a6.zip | |
test: Moved tests to seprate files under tests folder for more structure
Diffstat (limited to 'tests/test_parse_boolean.rs')
| -rw-r--r-- | tests/test_parse_boolean.rs | 87 |
1 files changed, 87 insertions, 0 deletions
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"); +} |
