Ferrit Explore
中文·繁體·EN·日本語 Sign in Register
cielxl / veld / tests / config_test.rs
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);
}