#[cfg(test)] mod tests { use http_file_parser::parser::HttpParser; use http_file_parser::parser::Rule; use pest::Parser; fn parse_rule( rule: Rule, input: &str, ) -> Result, pest::error::Error> { HttpParser::parse(rule, input) } #[test] fn test_http_file() { let input = "GET / HTTP/1.1\nHost: example.com\n\n### My Title\n\nPOST /submit HTTP/1.1\nContent-Type: text/plain\n\nBody content"; assert!(parse_rule(Rule::http_file, input).is_ok()); } #[test] fn test_request() { let input = "GET / HTTP/1.1\nHost: example.com\n\n"; assert!(parse_rule(Rule::request, input).is_ok()); } #[test] fn test_delimiter() { let input = "### My Title\n\n"; assert!(parse_rule(Rule::delimiter, input).is_ok()); } #[test] fn test_title() { let input = "My Title"; assert!(parse_rule(Rule::title, input).is_ok()); } #[test] fn test_request_line() { let input = "GET / HTTP/1.1\n"; assert!(parse_rule(Rule::request_line, input).is_ok()); } #[test] fn test_uri() { let input = "/path/to/resource"; assert!(parse_rule(Rule::uri, input).is_ok()); } #[test] fn test_method() { let methods = ["GET", "DELETE", "POST", "PUT"]; for method in methods { assert!(parse_rule(Rule::method, method).is_ok()); } } #[test] fn test_version() { let input = "1.1"; assert!(parse_rule(Rule::version, input).is_ok()); } #[test] fn test_headers() { let input = "Host: example.com\nContent-Type: text/plain\n"; assert!(parse_rule(Rule::headers, input).is_ok()); } #[test] fn test_header() { let input = "Host: example.com\n"; assert!(parse_rule(Rule::header, input).is_ok()); } #[test] fn test_header_name() { let input = "Content-Type"; assert!(parse_rule(Rule::header_name, input).is_ok()); } #[test] fn test_header_value() { let input = "text/plain"; assert!(parse_rule(Rule::header_value, input).is_ok()); } #[test] fn test_body() { let input = "This is the body content."; assert!(parse_rule(Rule::body, input).is_ok()); } #[test] fn test_whitespace() { let input = " "; assert!(parse_rule(Rule::whitespace, input).is_ok()); } }