#![cfg_attr(coverage_nightly, coverage(off))]
use crate::models::unified_ast::{
AstKind, ClassKind, ExprKind, FunctionKind, ImportKind, Language, ModuleKind, NodeFlags,
StmtKind, TypeKind, VarKind, INVALID_NODE_KEY,
};
#[test]
fn test_language_rust() {
let lang = Language::Rust;
assert_eq!(lang as u8, 0);
let _ = format!("{:?}", lang);
}
#[test]
fn test_language_typescript() {
let lang = Language::TypeScript;
assert_eq!(lang as u8, 1);
}
#[test]
fn test_language_javascript() {
let lang = Language::JavaScript;
assert_eq!(lang as u8, 2);
}
#[test]
fn test_language_python() {
let lang = Language::Python;
assert_eq!(lang as u8, 3);
}
#[test]
fn test_language_markdown() {
let lang = Language::Markdown;
assert_eq!(lang as u8, 4);
}
#[test]
fn test_language_makefile() {
let lang = Language::Makefile;
assert_eq!(lang as u8, 5);
}
#[test]
fn test_language_toml() {
let lang = Language::Toml;
assert_eq!(lang as u8, 6);
}
#[test]
fn test_language_yaml() {
let lang = Language::Yaml;
assert_eq!(lang as u8, 7);
}
#[test]
fn test_language_json() {
let lang = Language::Json;
assert_eq!(lang as u8, 8);
}
#[test]
fn test_language_shell() {
let lang = Language::Shell;
assert_eq!(lang as u8, 9);
}
#[test]
fn test_language_c() {
let lang = Language::C;
assert_eq!(lang as u8, 10);
}
#[test]
fn test_language_cpp() {
let lang = Language::Cpp;
assert_eq!(lang as u8, 11);
}
#[test]
fn test_language_cython() {
let lang = Language::Cython;
assert_eq!(lang as u8, 12);
}
#[test]
fn test_language_kotlin() {
let lang = Language::Kotlin;
assert_eq!(lang as u8, 13);
}
#[test]
fn test_language_assemblyscript() {
let lang = Language::AssemblyScript;
assert_eq!(lang as u8, 14);
}
#[test]
fn test_language_webassembly() {
let lang = Language::WebAssembly;
assert_eq!(lang as u8, 15);
}
#[test]
fn test_language_equality() {
assert_eq!(Language::Rust, Language::Rust);
assert_ne!(Language::Rust, Language::Python);
}
#[test]
fn test_language_clone() {
let lang = Language::Rust;
let cloned = lang;
assert_eq!(lang, cloned);
}
#[test]
fn test_node_flags_new() {
let flags = NodeFlags::new();
assert!(!flags.has(NodeFlags::ASYNC));
assert!(!flags.has(NodeFlags::EXPORTED));
}
#[test]
fn test_node_flags_default() {
let flags = NodeFlags::default();
assert!(!flags.has(NodeFlags::ASYNC));
}
#[test]
fn test_node_flags_set() {
let mut flags = NodeFlags::new();
flags.set(NodeFlags::ASYNC);
assert!(flags.has(NodeFlags::ASYNC));
}
#[test]
fn test_node_flags_unset() {
let mut flags = NodeFlags::new();
flags.set(NodeFlags::ASYNC);
assert!(flags.has(NodeFlags::ASYNC));
flags.unset(NodeFlags::ASYNC);
assert!(!flags.has(NodeFlags::ASYNC));
}
#[test]
fn test_node_flags_multiple() {
let mut flags = NodeFlags::new();
flags.set(NodeFlags::ASYNC | NodeFlags::EXPORTED);
assert!(flags.has(NodeFlags::ASYNC));
assert!(flags.has(NodeFlags::EXPORTED));
assert!(!flags.has(NodeFlags::PRIVATE));
}
#[test]
fn test_node_flags_all_flags() {
let mut flags = NodeFlags::new();
flags.set(NodeFlags::ASYNC);
flags.set(NodeFlags::GENERATOR);
flags.set(NodeFlags::ABSTRACT);
flags.set(NodeFlags::STATIC);
flags.set(NodeFlags::CONST);
flags.set(NodeFlags::EXPORTED);
flags.set(NodeFlags::PRIVATE);
flags.set(NodeFlags::DEPRECATED);
assert!(flags.has(NodeFlags::ASYNC));
assert!(flags.has(NodeFlags::GENERATOR));
assert!(flags.has(NodeFlags::ABSTRACT));
assert!(flags.has(NodeFlags::STATIC));
assert!(flags.has(NodeFlags::CONST));
assert!(flags.has(NodeFlags::EXPORTED));
assert!(flags.has(NodeFlags::PRIVATE));
assert!(flags.has(NodeFlags::DEPRECATED));
}
#[test]
fn test_node_flags_unset_preserves_others() {
let mut flags = NodeFlags::new();
flags.set(NodeFlags::ASYNC | NodeFlags::EXPORTED);
flags.unset(NodeFlags::ASYNC);
assert!(!flags.has(NodeFlags::ASYNC));
assert!(flags.has(NodeFlags::EXPORTED));
}
#[test]
fn test_node_flags_clone() {
let mut flags = NodeFlags::new();
flags.set(NodeFlags::ASYNC);
let cloned = flags;
assert!(cloned.has(NodeFlags::ASYNC));
}
#[test]
fn test_function_kind_regular() {
let kind = FunctionKind::Regular;
let _ = format!("{:?}", kind);
}
#[test]
fn test_function_kind_method() {
let kind = FunctionKind::Method;
assert_eq!(kind, FunctionKind::Method);
}
#[test]
fn test_function_kind_constructor() {
let kind = FunctionKind::Constructor;
assert_ne!(kind, FunctionKind::Destructor);
}
#[test]
fn test_function_kind_getter() {
let kind = FunctionKind::Getter;
let _ = format!("{:?}", kind);
}
#[test]
fn test_function_kind_setter() {
let kind = FunctionKind::Setter;
let _ = format!("{:?}", kind);
}
#[test]
fn test_function_kind_lambda() {
let kind = FunctionKind::Lambda;
let _ = format!("{:?}", kind);
}
#[test]
fn test_function_kind_closure() {
let kind = FunctionKind::Closure;
let _ = format!("{:?}", kind);
}
#[test]
fn test_function_kind_destructor() {
let kind = FunctionKind::Destructor;
let _ = format!("{:?}", kind);
}
#[test]
fn test_function_kind_operator() {
let kind = FunctionKind::Operator;
let _ = format!("{:?}", kind);
}
#[test]
fn test_class_kind_regular() {
let kind = ClassKind::Regular;
let _ = format!("{:?}", kind);
}
#[test]
fn test_class_kind_abstract() {
let kind = ClassKind::Abstract;
assert_eq!(kind, ClassKind::Abstract);
}
#[test]
fn test_class_kind_interface() {
let kind = ClassKind::Interface;
let _ = format!("{:?}", kind);
}
#[test]
fn test_class_kind_trait() {
let kind = ClassKind::Trait;
let _ = format!("{:?}", kind);
}
#[test]
fn test_class_kind_enum() {
let kind = ClassKind::Enum;
let _ = format!("{:?}", kind);
}
#[test]
fn test_class_kind_struct() {
let kind = ClassKind::Struct;
let _ = format!("{:?}", kind);
}
#[test]
fn test_var_kind_let() {
let kind = VarKind::Let;
let _ = format!("{:?}", kind);
}
#[test]
fn test_var_kind_const() {
let kind = VarKind::Const;
assert_eq!(kind, VarKind::Const);
}
#[test]
fn test_var_kind_static() {
let kind = VarKind::Static;
let _ = format!("{:?}", kind);
}
#[test]
fn test_var_kind_field() {
let kind = VarKind::Field;
let _ = format!("{:?}", kind);
}
#[test]
fn test_var_kind_parameter() {
let kind = VarKind::Parameter;
let _ = format!("{:?}", kind);
}
#[test]
fn test_import_kind_module() {
let kind = ImportKind::Module;
let _ = format!("{:?}", kind);
}
#[test]
fn test_import_kind_named() {
let kind = ImportKind::Named;
assert_eq!(kind, ImportKind::Named);
}
#[test]
fn test_import_kind_default() {
let kind = ImportKind::Default;
let _ = format!("{:?}", kind);
}
#[test]
fn test_import_kind_namespace() {
let kind = ImportKind::Namespace;
let _ = format!("{:?}", kind);
}
#[test]
fn test_import_kind_dynamic() {
let kind = ImportKind::Dynamic;
let _ = format!("{:?}", kind);
}
#[test]
fn test_expr_kind_call() {
let kind = ExprKind::Call;
let _ = format!("{:?}", kind);
}
#[test]
fn test_expr_kind_member() {
let kind = ExprKind::Member;
assert_eq!(kind, ExprKind::Member);
}
#[test]
fn test_expr_kind_binary() {
let kind = ExprKind::Binary;
let _ = format!("{:?}", kind);
}
#[test]
fn test_expr_kind_unary() {
let kind = ExprKind::Unary;
let _ = format!("{:?}", kind);
}
#[test]
fn test_expr_kind_literal() {
let kind = ExprKind::Literal;
let _ = format!("{:?}", kind);
}
#[test]
fn test_expr_kind_identifier() {
let kind = ExprKind::Identifier;
let _ = format!("{:?}", kind);
}
#[test]
fn test_expr_kind_array() {
let kind = ExprKind::Array;
let _ = format!("{:?}", kind);
}
#[test]
fn test_expr_kind_object() {
let kind = ExprKind::Object;
let _ = format!("{:?}", kind);
}
#[test]
fn test_expr_kind_new() {
let kind = ExprKind::New;
let _ = format!("{:?}", kind);
}
#[test]
fn test_expr_kind_delete() {
let kind = ExprKind::Delete;
let _ = format!("{:?}", kind);
}
#[test]
fn test_expr_kind_lambda() {
let kind = ExprKind::Lambda;
let _ = format!("{:?}", kind);
}
#[test]
fn test_expr_kind_conditional() {
let kind = ExprKind::Conditional;
let _ = format!("{:?}", kind);
}
#[test]
fn test_expr_kind_this() {
let kind = ExprKind::This;
let _ = format!("{:?}", kind);
}
#[test]
fn test_stmt_kind_block() {
let kind = StmtKind::Block;
let _ = format!("{:?}", kind);
}
#[test]
fn test_stmt_kind_if() {
let kind = StmtKind::If;
assert_eq!(kind, StmtKind::If);
}
#[test]
fn test_stmt_kind_for() {
let kind = StmtKind::For;
let _ = format!("{:?}", kind);
}
#[test]
fn test_stmt_kind_while() {
let kind = StmtKind::While;
let _ = format!("{:?}", kind);
}
#[test]
fn test_stmt_kind_return() {
let kind = StmtKind::Return;
let _ = format!("{:?}", kind);
}
#[test]
fn test_stmt_kind_throw() {
let kind = StmtKind::Throw;
let _ = format!("{:?}", kind);
}
#[test]
fn test_stmt_kind_try() {
let kind = StmtKind::Try;
let _ = format!("{:?}", kind);
}
#[test]
fn test_stmt_kind_switch() {
let kind = StmtKind::Switch;
let _ = format!("{:?}", kind);
}
#[test]
fn test_stmt_kind_goto() {
let kind = StmtKind::Goto;
let _ = format!("{:?}", kind);
}
#[test]
fn test_stmt_kind_label() {
let kind = StmtKind::Label;
let _ = format!("{:?}", kind);
}
#[test]
fn test_stmt_kind_do_while() {
let kind = StmtKind::DoWhile;
let _ = format!("{:?}", kind);
}
#[test]
fn test_stmt_kind_for_each() {
let kind = StmtKind::ForEach;
let _ = format!("{:?}", kind);
}
#[test]
fn test_stmt_kind_catch() {
let kind = StmtKind::Catch;
let _ = format!("{:?}", kind);
}
#[test]
fn test_stmt_kind_break() {
let kind = StmtKind::Break;
let _ = format!("{:?}", kind);
}
#[test]
fn test_stmt_kind_continue() {
let kind = StmtKind::Continue;
let _ = format!("{:?}", kind);
}
#[test]
fn test_stmt_kind_case() {
let kind = StmtKind::Case;
let _ = format!("{:?}", kind);
}
#[test]
fn test_type_kind_primitive() {
let kind = TypeKind::Primitive;
let _ = format!("{:?}", kind);
}
#[test]
fn test_type_kind_array() {
let kind = TypeKind::Array;
assert_eq!(kind, TypeKind::Array);
}
#[test]
fn test_type_kind_tuple() {
let kind = TypeKind::Tuple;
let _ = format!("{:?}", kind);
}
#[test]
fn test_type_kind_union() {
let kind = TypeKind::Union;
let _ = format!("{:?}", kind);
}
#[test]
fn test_type_kind_intersection() {
let kind = TypeKind::Intersection;
let _ = format!("{:?}", kind);
}
#[test]
fn test_type_kind_generic() {
let kind = TypeKind::Generic;
let _ = format!("{:?}", kind);
}
#[test]
fn test_type_kind_function() {
let kind = TypeKind::Function;
let _ = format!("{:?}", kind);
}
#[test]
fn test_type_kind_object() {
let kind = TypeKind::Object;
let _ = format!("{:?}", kind);
}
#[test]
fn test_type_kind_pointer() {
let kind = TypeKind::Pointer;
let _ = format!("{:?}", kind);
}
#[test]
fn test_type_kind_struct() {
let kind = TypeKind::Struct;
let _ = format!("{:?}", kind);
}
#[test]
fn test_type_kind_enum() {
let kind = TypeKind::Enum;
let _ = format!("{:?}", kind);
}
#[test]
fn test_type_kind_typedef() {
let kind = TypeKind::Typedef;
let _ = format!("{:?}", kind);
}
#[test]
fn test_type_kind_class() {
let kind = TypeKind::Class;
let _ = format!("{:?}", kind);
}
#[test]
fn test_type_kind_template() {
let kind = TypeKind::Template;
let _ = format!("{:?}", kind);
}
#[test]
fn test_type_kind_namespace() {
let kind = TypeKind::Namespace;
let _ = format!("{:?}", kind);
}
#[test]
fn test_type_kind_alias() {
let kind = TypeKind::Alias;
let _ = format!("{:?}", kind);
}
#[test]
fn test_type_kind_interface() {
let kind = TypeKind::Interface;
let _ = format!("{:?}", kind);
}
#[test]
fn test_type_kind_module() {
let kind = TypeKind::Module;
let _ = format!("{:?}", kind);
}
#[test]
fn test_type_kind_annotation() {
let kind = TypeKind::Annotation;
let _ = format!("{:?}", kind);
}
#[test]
fn test_type_kind_mapped() {
let kind = TypeKind::Mapped;
let _ = format!("{:?}", kind);
}
#[test]
fn test_type_kind_conditional() {
let kind = TypeKind::Conditional;
let _ = format!("{:?}", kind);
}
#[test]
fn test_module_kind_file() {
let kind = ModuleKind::File;
let _ = format!("{:?}", kind);
}
#[test]
fn test_module_kind_namespace() {
let kind = ModuleKind::Namespace;
assert_eq!(kind, ModuleKind::Namespace);
}
#[test]
fn test_ast_kind_function() {
let kind = AstKind::Function(FunctionKind::Regular);
let _ = format!("{:?}", kind);
}
#[test]
fn test_ast_kind_class() {
let kind = AstKind::Class(ClassKind::Regular);
assert_eq!(kind, AstKind::Class(ClassKind::Regular));
}
#[test]
fn test_ast_kind_variable() {
let kind = AstKind::Variable(VarKind::Let);
let _ = format!("{:?}", kind);
}
#[test]
fn test_ast_kind_import() {
let kind = AstKind::Import(ImportKind::Module);
let _ = format!("{:?}", kind);
}
#[test]
fn test_ast_kind_expression() {
let kind = AstKind::Expression(ExprKind::Call);
let _ = format!("{:?}", kind);
}
#[test]
fn test_ast_kind_statement() {
let kind = AstKind::Statement(StmtKind::If);
let _ = format!("{:?}", kind);
}
#[test]
fn test_ast_kind_type() {
let kind = AstKind::Type(TypeKind::Primitive);
let _ = format!("{:?}", kind);
}
#[test]
fn test_ast_kind_module() {
let kind = AstKind::Module(ModuleKind::File);
let _ = format!("{:?}", kind);
}
#[test]
fn test_invalid_node_key() {
assert_eq!(INVALID_NODE_KEY, u32::MAX);
}
#[test]
fn test_language_serialization() {
let lang = Language::Rust;
let json = serde_json::to_string(&lang).unwrap();
let deserialized: Language = serde_json::from_str(&json).unwrap();
assert_eq!(lang, deserialized);
}
#[test]
fn test_function_kind_serialization() {
let kind = FunctionKind::Constructor;
let json = serde_json::to_string(&kind).unwrap();
let deserialized: FunctionKind = serde_json::from_str(&json).unwrap();
assert_eq!(kind, deserialized);
}
#[test]
fn test_class_kind_serialization() {
let kind = ClassKind::Interface;
let json = serde_json::to_string(&kind).unwrap();
let deserialized: ClassKind = serde_json::from_str(&json).unwrap();
assert_eq!(kind, deserialized);
}
#[test]
fn test_var_kind_serialization() {
let kind = VarKind::Const;
let json = serde_json::to_string(&kind).unwrap();
let deserialized: VarKind = serde_json::from_str(&json).unwrap();
assert_eq!(kind, deserialized);
}
#[test]
fn test_import_kind_serialization() {
let kind = ImportKind::Named;
let json = serde_json::to_string(&kind).unwrap();
let deserialized: ImportKind = serde_json::from_str(&json).unwrap();
assert_eq!(kind, deserialized);
}
#[test]
fn test_expr_kind_serialization() {
let kind = ExprKind::Call;
let json = serde_json::to_string(&kind).unwrap();
let deserialized: ExprKind = serde_json::from_str(&json).unwrap();
assert_eq!(kind, deserialized);
}
#[test]
fn test_stmt_kind_serialization() {
let kind = StmtKind::If;
let json = serde_json::to_string(&kind).unwrap();
let deserialized: StmtKind = serde_json::from_str(&json).unwrap();
assert_eq!(kind, deserialized);
}
#[test]
fn test_type_kind_serialization() {
let kind = TypeKind::Generic;
let json = serde_json::to_string(&kind).unwrap();
let deserialized: TypeKind = serde_json::from_str(&json).unwrap();
assert_eq!(kind, deserialized);
}
#[test]
fn test_module_kind_serialization() {
let kind = ModuleKind::File;
let json = serde_json::to_string(&kind).unwrap();
let deserialized: ModuleKind = serde_json::from_str(&json).unwrap();
assert_eq!(kind, deserialized);
}
#[test]
fn test_ast_kind_serialization() {
let kind = AstKind::Function(FunctionKind::Method);
let json = serde_json::to_string(&kind).unwrap();
let deserialized: AstKind = serde_json::from_str(&json).unwrap();
assert_eq!(kind, deserialized);
}