use assert_cmd::prelude::*; use predicates::prelude::*; use tempfile::TempDir; use std::process::Command; #[test] fn test_help_command() { let mut cmd = Command::new(assert_cmd::cargo::cargo_bin!("weevil")); cmd.arg("--help"); cmd.assert() .success() .stdout(predicate::str::contains("FTC robotics project generator")); } #[test] fn test_version_command() { let mut cmd = Command::new(assert_cmd::cargo::cargo_bin!("weevil")); cmd.arg("--version"); cmd.assert() .success() .stdout(predicate::str::contains("1.0.0")); } #[test] fn test_sdk_status_command() { let mut cmd = Command::new(assert_cmd::cargo::cargo_bin!("weevil")); cmd.arg("sdk").arg("status"); cmd.assert() .success() .stdout(predicate::str::contains("SDK Configuration")); } // Project creation test - will need mock SDKs #[test] #[ignore] // Ignore until we have mock SDKs set up fn test_project_creation() { let temp = TempDir::new().unwrap(); let mut cmd = Command::new(assert_cmd::cargo::cargo_bin!("weevil")); cmd.current_dir(&temp) .arg("new") .arg("test-robot"); cmd.assert() .success() .stdout(predicate::str::contains("Project Created")); // Verify project structure assert!(temp.path().join("test-robot/README.md").exists()); assert!(temp.path().join("test-robot/build.gradle.kts").exists()); assert!(temp.path().join("test-robot/gradlew").exists()); }