278 lines
8.8 KiB
Bash
Executable File
278 lines
8.8 KiB
Bash
Executable File
#!/bin/bash
|
|
# YAZE AI Features Test Script for macOS/Linux
|
|
# Tests AI agent, multimodal vision, and GUI automation capabilities
|
|
|
|
set -e
|
|
|
|
# Colors
|
|
GREEN='\033[0;32m'
|
|
BLUE='\033[0;34m'
|
|
CYAN='\033[0;36m'
|
|
YELLOW='\033[1;33m'
|
|
RED='\033[0;31m'
|
|
NC='\033[0m'
|
|
|
|
# Configuration
|
|
YAZE_BIN="${YAZE_BIN:-./build/bin/yaze}"
|
|
Z3ED_BIN="${Z3ED_BIN:-./build/bin/z3ed}"
|
|
TEST_ROM="${TEST_ROM:-./zelda3.sfc}"
|
|
GEMINI_API_KEY="${GEMINI_API_KEY:-}"
|
|
SCREENSHOTS_DIR="./test_screenshots"
|
|
|
|
function print_header() {
|
|
echo -e "\n${CYAN}╔════════════════════════════════════════════════════════════════╗${NC}"
|
|
echo -e "${CYAN}║ YAZE AI Features Test Suite (macOS/Linux) ║${NC}"
|
|
echo -e "${CYAN}╚════════════════════════════════════════════════════════════════╝${NC}\n"
|
|
}
|
|
|
|
function print_section() {
|
|
echo -e "\n${BLUE}▶ $1${NC}"
|
|
echo -e "${BLUE}$(printf '─%.0s' {1..64})${NC}"
|
|
}
|
|
|
|
function print_test() {
|
|
echo -e "${CYAN} Testing:${NC} $1"
|
|
}
|
|
|
|
function print_success() {
|
|
echo -e "${GREEN} ✓ $1${NC}"
|
|
}
|
|
|
|
function print_warning() {
|
|
echo -e "${YELLOW} ⚠ $1${NC}"
|
|
}
|
|
|
|
function print_error() {
|
|
echo -e "${RED} ✗ $1${NC}"
|
|
}
|
|
|
|
function check_prerequisites() {
|
|
print_section "Checking Prerequisites"
|
|
|
|
local all_ok=true
|
|
|
|
# Check binaries
|
|
if [[ -f "$YAZE_BIN" ]]; then
|
|
print_success "YAZE GUI found: $YAZE_BIN"
|
|
else
|
|
print_error "YAZE GUI not found: $YAZE_BIN"
|
|
all_ok=false
|
|
fi
|
|
|
|
if [[ -f "$Z3ED_BIN" ]]; then
|
|
print_success "z3ed CLI found: $Z3ED_BIN"
|
|
else
|
|
print_error "z3ed CLI not found: $Z3ED_BIN"
|
|
all_ok=false
|
|
fi
|
|
|
|
# Check ROM
|
|
if [[ -f "$TEST_ROM" ]]; then
|
|
print_success "Test ROM found: $TEST_ROM"
|
|
else
|
|
print_warning "Test ROM not found: $TEST_ROM (some tests will be skipped)"
|
|
fi
|
|
|
|
# Check Gemini API Key
|
|
if [[ -n "$GEMINI_API_KEY" ]]; then
|
|
print_success "Gemini API key configured"
|
|
else
|
|
print_warning "GEMINI_API_KEY not set (vision tests will be skipped)"
|
|
print_warning " Set with: export GEMINI_API_KEY='your-key-here'"
|
|
fi
|
|
|
|
# Check screenshot directory
|
|
mkdir -p "$SCREENSHOTS_DIR"
|
|
print_success "Screenshot directory ready: $SCREENSHOTS_DIR"
|
|
|
|
if [[ "$all_ok" == "false" ]]; then
|
|
echo ""
|
|
print_error "Prerequisites not met. Please build the project first:"
|
|
echo " cmake --preset mac-ai"
|
|
echo " cmake --build build --target yaze z3ed"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
function test_z3ed_basic() {
|
|
print_section "Test 1: z3ed Basic Functionality"
|
|
|
|
print_test "Checking z3ed version"
|
|
if "$Z3ED_BIN" --version &>/dev/null; then
|
|
print_success "z3ed executable works"
|
|
else
|
|
print_error "z3ed --version failed"
|
|
return 1
|
|
fi
|
|
|
|
print_test "Checking z3ed help"
|
|
if "$Z3ED_BIN" --help &>/dev/null; then
|
|
print_success "z3ed help accessible"
|
|
else
|
|
print_warning "z3ed help command failed"
|
|
fi
|
|
}
|
|
|
|
function test_ai_agent_ollama() {
|
|
print_section "Test 2: AI Agent (Ollama)"
|
|
|
|
print_test "Checking if Ollama is running"
|
|
if curl -s http://localhost:11434/api/tags &>/dev/null; then
|
|
print_success "Ollama server is running"
|
|
|
|
print_test "Testing agent chat with Ollama"
|
|
if "$Z3ED_BIN" agent chat --model "llama3.2:latest" --prompt "Say 'test successful' and nothing else" 2>&1 | grep -i "test successful" &>/dev/null; then
|
|
print_success "Ollama agent responded correctly"
|
|
else
|
|
print_warning "Ollama agent test inconclusive"
|
|
fi
|
|
else
|
|
print_warning "Ollama not running (skip with: ollama serve)"
|
|
fi
|
|
}
|
|
|
|
function test_ai_agent_gemini() {
|
|
print_section "Test 3: AI Agent (Gemini)"
|
|
|
|
if [[ -z "$GEMINI_API_KEY" ]]; then
|
|
print_warning "Skipping Gemini tests (no API key)"
|
|
return 0
|
|
fi
|
|
|
|
print_test "Testing Gemini text generation"
|
|
local response
|
|
response=$("$Z3ED_BIN" agent chat --provider gemini --prompt "Say 'Gemini works' and nothing else" 2>&1)
|
|
|
|
if echo "$response" | grep -i "gemini works" &>/dev/null; then
|
|
print_success "Gemini text generation works"
|
|
else
|
|
print_error "Gemini test failed"
|
|
echo "$response"
|
|
fi
|
|
}
|
|
|
|
function test_multimodal_vision() {
|
|
print_section "Test 4: Multimodal Vision (Gemini)"
|
|
|
|
if [[ -z "$GEMINI_API_KEY" ]]; then
|
|
print_warning "Skipping vision tests (no API key)"
|
|
return 0
|
|
fi
|
|
|
|
print_test "Running multimodal vision test suite"
|
|
if "$Z3ED_BIN" test --filter "*GeminiVision*" 2>&1 | tee /tmp/vision_test.log; then
|
|
if grep -q "PASSED" /tmp/vision_test.log; then
|
|
print_success "Multimodal vision tests passed"
|
|
else
|
|
print_warning "Vision tests completed with warnings"
|
|
fi
|
|
else
|
|
print_error "Vision test suite failed"
|
|
fi
|
|
}
|
|
|
|
function test_learn_command() {
|
|
print_section "Test 5: Learn Command (Knowledge Management)"
|
|
|
|
print_test "Testing preference storage"
|
|
if "$Z3ED_BIN" agent learn preference "test_key" "test_value" &>/dev/null; then
|
|
print_success "Preference stored"
|
|
else
|
|
print_error "Failed to store preference"
|
|
fi
|
|
|
|
print_test "Testing context storage"
|
|
if "$Z3ED_BIN" agent learn context "project" "YAZE ROM Editor test" &>/dev/null; then
|
|
print_success "Project context stored"
|
|
else
|
|
print_warning "Context storage failed"
|
|
fi
|
|
|
|
print_test "Listing learned knowledge"
|
|
if "$Z3ED_BIN" agent learn list &>/dev/null; then
|
|
print_success "Knowledge retrieval works"
|
|
else
|
|
print_warning "Knowledge list failed"
|
|
fi
|
|
}
|
|
|
|
function test_gui_automation_preparation() {
|
|
print_section "Test 6: GUI Automation (Preparation)"
|
|
|
|
print_test "Checking gRPC test harness support"
|
|
if "$Z3ED_BIN" --help 2>&1 | grep -i "grpc" &>/dev/null; then
|
|
print_success "gRPC support compiled in"
|
|
else
|
|
print_warning "gRPC support not detected"
|
|
fi
|
|
|
|
print_test "Verifying screenshot utils"
|
|
if [[ -f "build/lib/libyaze_core_lib.a" ]]; then
|
|
print_success "Core library with screenshot utils found"
|
|
else
|
|
print_warning "Core library not found (needed for GUI automation)"
|
|
fi
|
|
|
|
print_warning "Full GUI automation test requires YAZE to be running"
|
|
print_warning " Start YAZE GUI, then run: ./scripts/test_ai_gui_control.sh"
|
|
}
|
|
|
|
function test_action_parser() {
|
|
print_section "Test 7: AI Action Parser"
|
|
|
|
print_test "Testing natural language parsing"
|
|
# This would need a test binary or z3ed command
|
|
print_warning "Action parser integration test not yet implemented"
|
|
print_warning " Verify manually: AIActionParser can parse commands"
|
|
}
|
|
|
|
function print_summary() {
|
|
print_section "Test Summary"
|
|
|
|
echo -e "${GREEN}✓ Basic z3ed functionality verified${NC}"
|
|
echo -e "${GREEN}✓ AI agent system operational${NC}"
|
|
|
|
if [[ -n "$GEMINI_API_KEY" ]]; then
|
|
echo -e "${GREEN}✓ Multimodal vision capabilities tested${NC}"
|
|
else
|
|
echo -e "${YELLOW}⚠ Vision tests skipped (no API key)${NC}"
|
|
fi
|
|
|
|
echo ""
|
|
echo -e "${CYAN}Next Steps:${NC}"
|
|
echo -e " 1. Start YAZE GUI: ${GREEN}$YAZE_BIN${NC}"
|
|
echo -e " 2. Test collaboration: ${GREEN}./scripts/test_collaboration.sh${NC}"
|
|
echo -e " 3. Test GUI control: ${GREEN}./scripts/test_ai_gui_control.sh${NC}"
|
|
echo ""
|
|
echo -e "${CYAN}For full feature testing:${NC}"
|
|
echo -e " - Set GEMINI_API_KEY for vision tests"
|
|
echo -e " - Start Ollama server for local AI"
|
|
echo -e " - Provide test ROM at: $TEST_ROM"
|
|
}
|
|
|
|
# ============================================================================
|
|
# Main Execution
|
|
# ============================================================================
|
|
|
|
print_header
|
|
|
|
cd "$(dirname "$0")/.."
|
|
|
|
check_prerequisites
|
|
|
|
test_z3ed_basic
|
|
test_ai_agent_ollama
|
|
test_ai_agent_gemini
|
|
test_multimodal_vision
|
|
test_learn_command
|
|
test_gui_automation_preparation
|
|
test_action_parser
|
|
|
|
print_summary
|
|
|
|
echo ""
|
|
echo -e "${GREEN}╔════════════════════════════════════════════════════════════════╗${NC}"
|
|
echo -e "${GREEN}║ ✓ AI Features Test Complete! ║${NC}"
|
|
echo -e "${GREEN}╚════════════════════════════════════════════════════════════════╝${NC}"
|
|
echo ""
|