use veld::config::parser;
#[test]
fn test_parse_simple_directive() {
let input = r#"worker_processes 4;"#;
let result = parser::parse(input);
assert!(result.is_ok());
let block = result.unwrap();
assert_eq!(block.directives.len(), 1);
assert_eq!(block.directives[0].name, "worker_processes");
}
#[test]
fn test_parse_block() {
let input = r#"
events {
worker_connections 1024;
}
"#;
let result = parser::parse(input);
assert!(result.is_ok());
let block = result.unwrap();
assert_eq!(block.directives.len(), 1);
assert_eq!(block.directives[0].name, "events");
assert!(block.directives[0].block.is_some());
}
#[test]
fn test_parse_nested_blocks() {
let input = r#"
http {
server {
listen 80;
server_name localhost;
}
}
"#;
let result = parser::parse(input);
assert!(result.is_ok());
let block = result.unwrap();
let http = &block.directives[0];
assert_eq!(http.name, "http");
let server = &http.block.as_ref().unwrap().directives[0];
assert_eq!(server.name, "server");
}
#[test]
fn test_parse_comments() {
let input = r#"
# This is a comment
worker_processes 2;
# Another comment
"#;
let result = parser::parse(input);
assert!(result.is_ok());
let block = result.unwrap();
assert_eq!(block.directives.len(), 1);
}
#[test]
fn test_parse_quoted_string() {
let input = r#"server_name "example.com www.example.com";"#;
let result = parser::parse(input);
assert!(result.is_ok());
let block = result.unwrap();
assert_eq!(
block.directives[0].first_arg_str(),
"example.com www.example.com"
);
}
#[test]
fn test_parse_size_value() {
let input = r#"client_max_body_size 10m;"#;
let result = parser::parse(input);
assert!(result.is_ok());
let block = result.unwrap();
assert_eq!(
block.directives[0].first_arg().unwrap().as_u64(),
10 * 1024 * 1024
);
}
#[test]
fn test_parse_time_value() {
let input = r#"keepalive_timeout 65s;"#;
let result = parser::parse(input);
assert!(result.is_ok());
let block = result.unwrap();
assert_eq!(block.directives[0].first_arg().unwrap().as_time_ms(), 65000);
}
#[test]
fn test_parse_full_config() {
let input = r#"
worker_processes auto;
error_log logs/error.log warn;
events {
worker_connections 1024;
}
http {
server {
listen 80;
server_name localhost;
root html;
location / {
try_files $uri $uri/ =404;
}
}
}
"#;
let result = parser::parse(input);
assert!(result.is_ok());
let block = result.unwrap();
assert!(block.directives.len() >= 3);
}