use jbuild::interactive::*;
mod test_utils;
use test_utils::*;
#[test]
fn test_build_metrics_creation() {
let metrics = BuildMetrics::new();
assert!(metrics.elapsed().as_millis() >= 0);
assert!(metrics.phase_times.is_empty());
}
#[test]
fn test_profile_report_structure() {
let report = create_test_profile_report();
assert_eq!(report.build_time.as_secs(), 5);
assert!(report.success);
assert_eq!(report.error_count, 1);
assert_eq!(report.phases.len(), 3);
}
#[test]
fn test_environment_creation() {
let env = TestEnvironment::new();
assert!(env.project_path().exists());
assert!(env.temp_path().exists());
}
#[test]
fn test_maven_project_creation() {
let env = TestEnvironment::new().with_maven_project();
assert!(env.project_path().join("pom.xml").exists());
assert!(env.project_path().join("src").join("main").join("java").exists());
}
#[test]
fn test_gradle_project_creation() {
let env = TestEnvironment::new().with_gradle_project();
assert!(env.project_path().join("build.gradle").exists());
assert!(env.project_path().join("src").join("main").join("java").exists());
}
#[test]
fn test_command_execution() {
let output = run_jbuild_command(&["--help"], None);
assert!(output.status.success() || !output.stderr.is_empty());
}
#[test]
fn test_report_generation() {
let report = create_test_profile_report();
let markdown = generate_markdown_report(&report);
assert!(markdown.contains("# Build Profile Report"));
let text = generate_text_report(&report);
assert!(text.contains("Build Profile Report"));
}
#[test]
fn test_performance_timing() {
let duration = measure_time(|| {
std::thread::sleep(std::time::Duration::from_millis(10));
});
assert!(duration.as_millis() >= 10);
}
#[test]
fn test_project_creation_utilities() {
let temp_dir = create_test_dir();
let project_path = temp_dir.path();
create_maven_project(project_path);
assert!(project_path.join("pom.xml").exists());
create_gradle_project(project_path);
assert!(project_path.join("build.gradle").exists());
create_minimal_project(project_path);
assert!(project_path.join("pom.xml").exists());
}
#[test]
fn test_assertions_macros() {
assert_contains_ignore_case("Hello World", "hello");
assert_contains_ignore_case("Test Output", "output");
assert_non_empty_output(&["--help"], None);
}
#[test]
fn test_configuration_defaults() {
let config = TestConfig::default();
assert_eq!(config.timeout, 30);
assert_eq!(config.iterations, 100);
assert!(!config.verbose);
assert!(config.cleanup);
let runner_config = TestRunnerConfig::default();
assert_eq!(runner_config.threads, 1);
assert_eq!(runner_config.timeout, 30);
assert_eq!(runner_config.categories.len(), 3);
}
#[test]
fn test_results_tracking() {
let mut results = TestResults::new();
assert_eq!(results.total, 0);
assert_eq!(results.passed, 0);
assert_eq!(results.failed, 0);
assert!(results.all_passed());
results.add_test("test1", true);
results.add_test("test2", false);
assert_eq!(results.total, 2);
assert_eq!(results.passed, 1);
assert_eq!(results.failed, 1);
assert!(!results.all_passed());
assert_eq!(results.success_rate(), 50.0);
}
#[test]
fn test_categories() {
assert_eq!(TestCategory::Unit.as_str(), "unit");
assert_eq!(TestCategory::Integration.as_str(), "integration");
assert_eq!(TestCategory::Performance.as_str(), "performance");
assert_eq!(TestCategory::Stress.as_str(), "stress");
}
#[test]
fn test_multi_source_project() {
let env = TestEnvironment::new().with_multi_source_project();
assert!(env.project_path().join("src").join("main").join("java").join("MainApp.java").exists());
assert!(env.project_path().join("src").join("test").join("java").join("ServiceTest.java").exists());
}