feat: Weevil v1.0.0-beta1 - FTC Project Generator
Cross-platform tool for generating clean, testable FTC robot projects without editing the SDK installation. Features: - Standalone project generation with proper separation from SDK - Per-project SDK configuration via .weevil.toml - Local unit testing support (no robot required) - Cross-platform build/deploy scripts (Linux/macOS/Windows) - Project upgrade system preserving user code - Configuration management commands - Comprehensive test suite (11 passing tests) - Zero-warning builds Architecture: - Pure Rust implementation with embedded Gradle wrapper - Projects use deployToSDK task to copy code to FTC SDK TeamCode - Git-ready projects with automatic initialization - USB and WiFi deployment with auto-detection Commands: - weevil new <name> - Create new project - weevil upgrade <path> - Update project infrastructure - weevil config <path> - View/modify project configuration - weevil sdk status/install/update - Manage SDKs Addresses the core problem: FTC's SDK structure forces students to edit framework internals instead of separating concerns like industry standard practices. Weevil enables proper software engineering workflows for robotics education.
This commit is contained in:
53
tests/unit/sdk_tests.rs
Normal file
53
tests/unit/sdk_tests.rs
Normal file
@@ -0,0 +1,53 @@
|
||||
// File: tests/sdk_tests.rs
|
||||
// Unit tests for SDK detection and verification
|
||||
|
||||
use weevil::sdk::ftc;
|
||||
use std::path::PathBuf;
|
||||
use tempfile::TempDir;
|
||||
use std::fs;
|
||||
|
||||
#[test]
|
||||
fn test_ftc_sdk_verification_missing() {
|
||||
let temp_dir = TempDir::new().unwrap();
|
||||
let result = ftc::verify(temp_dir.path());
|
||||
|
||||
assert!(result.is_err());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_ftc_sdk_verification_with_structure() {
|
||||
let temp_dir = TempDir::new().unwrap();
|
||||
|
||||
// Create minimal FTC SDK structure
|
||||
fs::create_dir_all(temp_dir.path().join("TeamCode/src/main/java")).unwrap();
|
||||
fs::create_dir_all(temp_dir.path().join("FtcRobotController")).unwrap();
|
||||
fs::write(temp_dir.path().join("build.gradle"), "// test").unwrap();
|
||||
|
||||
let result = ftc::verify(temp_dir.path());
|
||||
assert!(result.is_ok());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_get_version_from_file() {
|
||||
let temp_dir = TempDir::new().unwrap();
|
||||
|
||||
// Create version file
|
||||
fs::write(temp_dir.path().join(".version"), "v10.1.1\n").unwrap();
|
||||
|
||||
let version = ftc::get_version(temp_dir.path()).unwrap();
|
||||
assert_eq!(version, "v10.1.1");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_get_version_from_git_tag() {
|
||||
// This test requires a real git repo, so we'll skip it in unit tests
|
||||
// It's covered in integration tests instead
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_get_version_missing() {
|
||||
let temp_dir = TempDir::new().unwrap();
|
||||
|
||||
let result = ftc::get_version(temp_dir.path());
|
||||
assert!(result.is_err());
|
||||
}
|
||||
Reference in New Issue
Block a user