aboutsummaryrefslogtreecommitdiff
path: root/tests/test_parse_boolean.rs
diff options
context:
space:
mode:
authoromagdy <omar.professional8777@gmail.com>2025-07-17 08:06:26 +0300
committeromagdy <omar.professional8777@gmail.com>2025-07-17 08:06:26 +0300
commit38b649ea16d8ed053fd9222bfb9867e3432ee2a6 (patch)
treea7fbde68ad869e1b74071207bdf7b7c159c7f75f /tests/test_parse_boolean.rs
parentc880c7ad3eba9546ce95bc268218c66a128d319f (diff)
downloadredis-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.rs87
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");
+}