실행일: 2026-03-26 | 환경: JVM (로컬) | 결과: 42/42 ALL PASS
| 테스트 스위트 | 유형 | 테스트 수 | PASS | FAIL | Skip |
|-------------|------|---------|------|------|------|
| ExampleUnitTest | Unit (JVM) | 1 | 1 | 0 | 0 |
| DashSchemaParserTest | Unit (JVM) | 41 | 41 | 0 | 0 |
| 합계 | | 42 | 42 | 0 | 0 |
기존 85개 계측 테스트는 변경 없음 — 에뮬레이터에서 별도 실행 필요 시 기준 85/85 유지.
| 테스트 | 검증 내용 | 결과 |
|--------|----------|------|
| meta_validId_passesValidation | 유효한 3-세그먼트 reverse-domain ID | PASS |
| meta_invalidId_failsValidation | 6개 유효하지 않은 ID 패턴 | PASS |
| meta_validSemver_passesValidation | 유효 semver 4종 | PASS |
| meta_invalidSemver_failsValidation | 유효하지 않은 semver 5종 | PASS |
| meta_allCategories_areEnumerable | 12개 카테고리 enum 라운드트립 | PASS |
| meta_unknownCategory_throwsException | 알 수 없는 카테고리 → IllegalArgumentException | PASS |
| meta_keywords_minAndMaxBounds | 최소 1개, 최대 20개 키워드 | PASS |
| _(implicit)_ | id min_api=26 기본값 | PASS |
| 테스트 | 검증 내용 | 결과 |
|--------|----------|------|
| trigger_always_createsCorrectly | Always sealed object | PASS |
| trigger_emptyConditions_throwsException | 조건 없음 → IllegalArgumentException | PASS |
| trigger_timeCondition_validHHMM | 유효 HH:MM 형식 | PASS |
| trigger_timeCondition_withWeekdays | Mon-Fri weekday 필터 | PASS |
| trigger_timeCondition_invalidFormat_throwsException | "9:00" (선행 0 없음) → 예외 | PASS |
| trigger_timeCondition_invalidDay_throwsException | day=0 (범위 1~7) → 예외 | PASS |
| trigger_locationCondition_validCoordinates | 유효 좌표 + 반경 | PASS |
| trigger_locationCondition_latOutOfRange_throwsException | lat=91.0 → 예외 | PASS |
| trigger_locationCondition_radiusTooSmall_throwsException | radiusM=5 (최소 10) → 예외 | PASS |
| trigger_topicMatch_requiresNonEmptyTopics | topics 2개 정상 생성 | PASS |
| trigger_topicMatch_emptyTopics_throwsException | 빈 topics → 예외 | PASS |
| trigger_orchestratorCall_defaultConfidence | 기본값 0.8 검증 | PASS |
| trigger_orchestratorCall_confidenceOutOfRange_throwsException | confidence=1.5 → 예외 | PASS |
| trigger_multipleMixedConditions_areAllAccepted | 4개 혼합 조건 | PASS |
| 테스트 | 검증 내용 | 결과 |
|--------|----------|------|
| skin_allSizes_areEnumerable | mini/standard/expanded 3종 | PASS |
| skin_composableEntry_mustBePascalCase | WeatherDashSkin 형식 | PASS |
| skin_composableEntry_lowercaseStart_throwsException | lowercase 시작 → 예외 | PASS |
| skin_emptySizes_throwsException | 빈 sizes → 예외 | PASS |
| skin_defaultSizeValidation_inManifest | defaultSize ∉ sizes → 검증 실패 | PASS |
| 테스트 | 검증 내용 | 결과 |
|--------|----------|------|
| skill_allPermissions_areEnumerable | 16개 권한 enum | PASS |
| skill_allApis_areEnumerable | 16개 API enum | PASS |
| skill_resourceQuota_defaultValues | 32MB / 512KB/min / 10% | PASS |
| skill_quota_memoryTooLow_throwsException | memoryMb=2 (최소 4) → 예외 | PASS |
| skill_quota_cpuTooHigh_throwsException | cpuPercent=51 (최대 50) → 예외 | PASS |
| skill_entry_invalidCase_throwsException | lowercase 시작 → 예외 | PASS |
| _(implicit via fullManifest)_ | WeatherDashSkill 정상 생성 | PASS |
| 테스트 | 검증 내용 | 결과 |
|--------|----------|------|
| protocol_topic_validFormat | weather.current / WeatherData.v1 | PASS |
| protocol_topic_invalidTopicFormat_throwsException | PascalCase topic → 예외 | PASS |
| protocol_topic_invalidSchemaFormat_throwsException | snake_case schema → 예외 | PASS |
| protocol_schema_validPatterns | Name.v1 / Name.v2 / Name.v10 | PASS |
| protocol_pubSubOverlap_failsManifestValidation | 동일 topic publish+subscribe → 검증 실패 | PASS |
| protocol_validImportPath_isAccepted | schemas/WeatherData.v1.json | PASS |
| protocol_invalidImportPath_failsManifestValidation | schemas/ prefix 없음 → 검증 실패 | PASS |
| 테스트 | 검증 내용 | 결과 |
|--------|----------|------|
| fullManifest_weatherDash_passesValidation | 실제 Weather Dash 전체 manifest | PASS |
| fullManifest_minimumValid_passesValidation | 최소 필수 필드만 포함 manifest | PASS |
| 이슈 | 원인 | 해결 |
|------|------|------|
| meta_invalidId_failsValidation FAIL | isValidId() regex +가 2세그먼트 허용 | {2,}로 변경 (3+ 세그먼트 필수), JSON Schema 동기화 |
scripts/validate-dash.sh)판정: ✅ ALL PASS → S01 완료
app/build/reports/tests/testDebugUnitTest/index.htmldocs/specs/DASH-schema-v1.jsondocs/specs/DASH-template.mddocs/specs/sample-dashes/weather-dash.mdscripts/validate-dash.sh