#![allow(unused_imports, unused_variables)]
use std::sync::Arc;
#[test]
fn test_end_to_end_type_query() {
use wootype::core::{types::PrimitiveType, TypeId, TypeUniverse};
use wootype::query::QueryEngine;
let universe = Arc::new(TypeUniverse::new());
let engine = QueryEngine::new(universe.clone());
let int_type = engine.get_type(TypeId(2));
assert!(int_type.is_some(), "Should find int type");
let fingerprint = PrimitiveType::Int.fingerprint();
let results = engine.query_by_fingerprint(fingerprint);
println!("Fingerprint query returned {} results", results.len());
}
#[test]
fn test_agent_session_lifecycle() {
use wootype::agent::{AgentCoordinator, AgentId, AgentType, ConnectionRequest};
use wootype::core::TypeUniverse;
let universe = Arc::new(TypeUniverse::new());
let coordinator = Arc::new(AgentCoordinator::new(universe));
let request = ConnectionRequest {
agent_id: AgentId::new(1),
name: "TestAgent".to_string(),
agent_type: AgentType::Generic,
preferred_isolation: None,
};
println!("Connection request created: {:?}", request.agent_type);
}
#[test]
fn test_symbol_resolution_workflow() {
use wootype::core::symbol::{Scope, SymbolId, SymbolTable};
use wootype::core::Entity;
let symbols = SymbolTable::new();
let entity = Entity::new(1, 1).unwrap();
let mut outer = Scope::new();
let sym = SymbolId::new(1);
outer.insert(sym, entity);
let inner = Scope::with_parent(outer.clone());
assert!(
inner.lookup(sym).is_some(),
"Should find symbol via parent scope"
);
assert!(
outer.lookup(sym).is_some(),
"Should find symbol in outer scope"
);
}
#[test]
fn test_type_validation_workflow() {
use wootype::core::{TypeId, TypeUniverse};
use wootype::validate::{StreamingChecker, ValidationStream};
let universe = Arc::new(TypeUniverse::new());
let _checker = StreamingChecker::new(universe.clone());
println!("Validation components created successfully");
}
#[test]
fn test_cache_eviction_workflow() {
use wootype::query::cache::QueryCache;
let cache = QueryCache::<String, i32>::new(3);
cache.insert("a".to_string(), 1);
cache.insert("b".to_string(), 2);
cache.insert("c".to_string(), 3);
let _ = cache.get(&"a".to_string());
cache.insert("d".to_string(), 4);
let stats = cache.stats();
assert_eq!(stats.size, 3, "Cache should maintain max size");
println!("Cache eviction working: {} entries", stats.size);
}
#[test]
fn test_error_propagation() {
use wootype::validate::error::{ErrorCollection, ErrorSeverity, SoftError, ValidationError};
let mut errors = ErrorCollection::new();
errors.add_soft_error(SoftError::new("Warning").with_severity(ErrorSeverity::Hint));
errors.add_soft_error(SoftError::new("Error").with_severity(ErrorSeverity::Error));
errors.add_error(ValidationError::CyclicType);
let blocking = errors.filter_by_severity(ErrorSeverity::Error);
assert_eq!(blocking.len(), 1, "Should find one blocking error");
let softened = errors.soften();
assert_eq!(softened.len(), 3, "Should have 3 softened errors");
}
#[test]
fn test_type_flags_comprehensive() {
use wootype::core::types::TypeFlags;
let basic = TypeFlags::BASIC;
let comparable = TypeFlags::COMPARABLE;
let named = TypeFlags::NAMED;
let combined = basic | comparable;
assert!(combined.contains(basic));
assert!(combined.contains(comparable));
let intersection = combined & basic;
assert!(intersection.contains(basic));
assert!(!intersection.contains(comparable));
assert!(combined.intersects(basic));
assert!(!combined.intersects(named));
println!("TypeFlags operations verified");
}
#[test]
fn test_concurrent_symbol_access() {
use std::thread;
use wootype::core::symbol::SymbolTable;
let table = Arc::new(SymbolTable::new());
let mut handles = vec![];
for i in 0..10 {
let t = table.clone();
handles.push(thread::spawn(move || {
let name = format!("symbol_{}", i);
let id = t.intern(&name);
let id2 = t.intern(&name);
assert_eq!(id, id2);
}));
}
for h in handles {
h.join().unwrap();
}
assert_eq!(table.len(), 11);
}
#[test]
fn test_serialization_roundtrip() {
use wootype::core::types::{PrimitiveType, Type, TypeId, TypeKind};
let original = Type::new(TypeId(100), TypeKind::Primitive(PrimitiveType::Int));
let json = serde_json::to_string(&original).expect("Should serialize");
println!("Serialized: {}", json);
let deserialized: Type = serde_json::from_str(&json).expect("Should deserialize");
assert_eq!(original.id, deserialized.id);
assert_eq!(original.fingerprint, deserialized.fingerprint);
}
#[test]
fn test_package_import_workflow() {
use wootype::core::{universe::PackageInfo, TypeUniverse};
let universe = Arc::new(TypeUniverse::new());
let info = PackageInfo {
path: Arc::from("github.com/test/pkg"),
name: Arc::from("pkg"),
exports: vec![],
imports: vec![],
};
universe.register_package(info);
let retrieved = universe.get_package("github.com/test/pkg");
assert!(retrieved.is_some());
assert_eq!(retrieved.unwrap().name.as_ref(), "pkg");
}
fn main() {
println!("\n========================================");
println!(" Wootype Integration Tests");
println!("========================================\n");
test_end_to_end_type_query();
test_agent_session_lifecycle();
test_symbol_resolution_workflow();
test_type_validation_workflow();
test_cache_eviction_workflow();
test_error_propagation();
test_type_flags_comprehensive();
test_concurrent_symbol_access();
test_serialization_roundtrip();
test_package_import_workflow();
println!("\n========================================");
println!(" All integration tests passed! ✓");
println!("========================================\n");
}