#!/bin/bash
set -e
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(dirname "$(dirname "$(dirname "$(dirname "$SCRIPT_DIR")")")")"
echo -e "${BLUE}================================${NC}"
echo -e "${BLUE}Hierarchy Plugin 单元测试运行脚本${NC}"
echo -e "${BLUE}================================${NC}"
cd "$PROJECT_ROOT"
TEST_OUTPUT_DIR="$SCRIPT_DIR/test_output"
mkdir -p "$TEST_OUTPUT_DIR"
echo -e "${GREEN}测试目录: $SCRIPT_DIR${NC}"
echo -e "${GREEN}输出目录: $TEST_OUTPUT_DIR${NC}"
echo -e "${GREEN}项目根目录: $PROJECT_ROOT${NC}"
echo -e "${BLUE}清理之前的测试结果...${NC}"
rm -f "$TEST_OUTPUT_DIR"/.coverage*
rm -rf "$TEST_OUTPUT_DIR"/htmlcov*
rm -rf "$TEST_OUTPUT_DIR"/pytest_*
echo -e "${BLUE}开始运行单元测试...${NC}"
export PYTHONPATH="$PROJECT_ROOT:$PYTHONPATH"
pytest "$SCRIPT_DIR" \
--verbose \
--tb=short \
--cov=plugins.tb_graph_ascend.hierarchy_plugin \
--cov-report=term-missing \
--cov-report=html:"$TEST_OUTPUT_DIR/htmlcov" \
--cov-report=xml:"$TEST_OUTPUT_DIR/coverage.xml" \
--junitxml="$TEST_OUTPUT_DIR/test-results.xml" \
--disable-warnings \
-o cache_dir="$TEST_OUTPUT_DIR/.pytest_cache" \
"$@"
TEST_EXIT_CODE=$?
echo -e "${BLUE}================================${NC}"
if [ $TEST_EXIT_CODE -eq 0 ]; then
echo -e "${GREEN}✅ 所有测试通过!${NC}"
else
echo -e "${RED}❌ 测试失败,退出码: $TEST_EXIT_CODE${NC}"
fi
if [ -f "$TEST_OUTPUT_DIR/htmlcov/index.html" ]; then
echo -e "${GREEN}📊 覆盖率报告已生成:${NC}"
echo -e "${GREEN} HTML报告: $TEST_OUTPUT_DIR/htmlcov/index.html${NC}"
echo -e "${GREEN} XML报告: $TEST_OUTPUT_DIR/coverage.xml${NC}"
fi
if [ -f "$TEST_OUTPUT_DIR/test-results.xml" ]; then
echo -e "${GREEN}📋 测试结果: $TEST_OUTPUT_DIR/test-results.xml${NC}"
fi
if command -v coverage &> /dev/null; then
echo -e "${BLUE}覆盖率统计:${NC}"
coverage report --rcfile="$SCRIPT_DIR/.coveragerc" 2>/dev/null || true
fi
exit $TEST_EXIT_CODE