oak-cpp 0.0.11

C++ systems programming language parser with support for modern C++ features and object-oriented programming.
Documentation
use oak_core::{Lexer, ParseSession, SourceText};
use oak_cpp::{CppLanguage, CppLexer};

#[test]
fn test_cpp_lexer_basic() {
    let source = SourceText::new("int main() { return 0 }");
    let language = CppLanguage::new();
    let lexer = CppLexer::new(&language);

    let mut session = ParseSession::<CppLanguage>::new(16);
    let result = lexer.lex(&source, &[], &mut session);
    assert!(result.diagnostics.is_empty());
    println!("✓ C++ basic lexer test passed")
}

#[test]
fn test_cpp_lexer_keywords() {
    let source = SourceText::new("class MyClass { public: int value }");
    let language = CppLanguage::new();
    let lexer = CppLexer::new(&language);

    let mut session = ParseSession::<CppLanguage>::new(16);
    let result = lexer.lex(&source, &[], &mut session);
    assert!(result.diagnostics.is_empty());
    println!("✓ C++ keyword lexer test passed")
}

#[test]
fn test_cpp_lexer_operators() {
    let source = SourceText::new("a += b * c / d - e;");
    let language = CppLanguage::new();
    let lexer = CppLexer::new(&language);

    let mut session = ParseSession::<CppLanguage>::new(16);
    let result = lexer.lex(&source, &[], &mut session);
    assert!(result.diagnostics.is_empty());
    println!("✓ C++ operator lexer test passed")
}

#[test]
fn test_cpp_lexer_strings() {
    let source = SourceText::new(r#"const char* str = "Hello, World!";"#);
    let language = CppLanguage::new();
    let lexer = CppLexer::new(&language);

    let mut session = ParseSession::<CppLanguage>::new(16);
    let result = lexer.lex(&source, &[], &mut session);
    assert!(result.diagnostics.is_empty());
    println!("✓ C++ string lexer test passed")
}

#[test]
fn test_cpp_lexer_comments() {
    let source = SourceText::new("// Single line comment\n/* Multi line comment */\nint x;");
    let language = CppLanguage::new();
    let lexer = CppLexer::new(&language);

    let mut session = ParseSession::<CppLanguage>::new(16);
    let result = lexer.lex(&source, &[], &mut session);
    assert!(result.diagnostics.is_empty());
    println!("✓ C++ comment lexer test passed")
}