Skip to content

Commit e8494c8

Browse files
committed
test: add instrumentation smoke test
1 parent 46ee75d commit e8494c8

4 files changed

Lines changed: 54 additions & 1 deletion

File tree

.github/workflows/ci.yml

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,3 +28,31 @@ jobs:
2828
run: chmod +x gradlew
2929
- name: Build debug app and unit tests
3030
run: ./gradlew --no-daemon testDebugUnitTest assembleDebug
31+
32+
instrumentation:
33+
runs-on: ubuntu-latest
34+
steps:
35+
- uses: actions/checkout@v4
36+
with:
37+
submodules: recursive
38+
- uses: gradle/actions/wrapper-validation@v3
39+
- uses: actions/setup-java@v4
40+
with:
41+
distribution: temurin
42+
java-version: '17'
43+
cache: gradle
44+
- name: Grant execute permission for gradlew
45+
run: chmod +x gradlew
46+
- name: Enable KVM group perms
47+
run: |
48+
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
49+
sudo udevadm control --reload-rules
50+
sudo udevadm trigger --name-match=kvm
51+
- name: Run instrumentation smoke test
52+
uses: reactivecircus/android-emulator-runner@v2
53+
with:
54+
api-level: 30
55+
arch: x86_64
56+
target: default
57+
profile: pixel_5
58+
script: ./gradlew --no-daemon connectedDebugAndroidTest

app/build.gradle

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ android {
2929
versionCode 18
3030
versionName "2.1.5"
3131
multiDexEnabled true
32-
//testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
32+
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
3333
externalNativeBuild {
3434
cmake {
3535
cppFlags ""
@@ -183,6 +183,11 @@ dependencies {
183183
// When using a AppCompat theme
184184
implementation "com.google.accompanist:accompanist-appcompat-theme:0.20.3"
185185

186+
androidTestImplementation 'androidx.test:core-ktx:1.6.1'
187+
androidTestImplementation 'androidx.test:runner:1.6.2'
188+
androidTestImplementation 'androidx.test.ext:junit-ktx:1.2.1'
189+
androidTestImplementation 'androidx.test:rules:1.6.1'
190+
186191
// implementation 'com.gu.android:toolargetool:0.3.0@aar'
187192
}
188193
/*
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.kyhsgeekcode.disassembler
2+
3+
import androidx.lifecycle.Lifecycle
4+
import androidx.test.core.app.ActivityScenario
5+
import androidx.test.ext.junit.runners.AndroidJUnit4
6+
import org.junit.Assert.assertEquals
7+
import org.junit.Test
8+
import org.junit.runner.RunWith
9+
10+
@RunWith(AndroidJUnit4::class)
11+
class MainActivitySmokeTest {
12+
@Test
13+
fun launchMainActivity_reachesResumedState() {
14+
ActivityScenario.launch(MainActivity::class.java).use { scenario ->
15+
assertEquals(Lifecycle.State.RESUMED, scenario.state)
16+
}
17+
}
18+
}

docs/maintenance/implementation-log.ko.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
| 이슈 `#396` Hex 화면 가독성 문제 | Hex view를 16바이트 행, offset 컬럼, ASCII 컬럼 구조로 재구성 | 바이너리 탐색 시 위치와 내용이 동시에 보이도록 바꿨다 | `app/src/main/java/com/kyhsgeekcode/disassembler/ui/components/HexView.kt` | 완료 |
2525
| 이슈 `#348` Disassembly 탭 가로 스크롤 민감도 | 수평 스크롤 책임을 외곽 컨테이너로 옮겼다 | 긴 디스어셈블리 라인에서 좌우 이동이 더 안정적으로 동작하도록 조정했다 | `app/src/main/java/com/kyhsgeekcode/disassembler/ui/tabs/BinaryDisasmTab.kt` | 완료 |
2626
| 이슈 `#160` 회전 시 재진입 크래시 후보 | `MainActivity`가 재생성될 때 기존 `ACTION_VIEW`/`EXTRA_STREAM` intent를 다시 처리하지 않도록 가드하고, 새 외부 인텐트는 `onNewIntent`에서만 처리하도록 분리 | 회전 같은 configuration change에서 같은 import 요청이 중복 실행되는 경로를 차단해 상태 복원 중 재import/중복 초기화 가능성을 줄였다 | `app/src/main/java/com/kyhsgeekcode/disassembler/MainActivity.kt`, `app/src/test/java/com/kyhsgeekcode/disassembler/MainActivityIntentHandlingTest.kt` | 완료 |
27+
| instrumentation test 기반 부재 | AndroidX instrumentation runner를 설정하고 `MainActivity`가 emulator에서 `RESUMED` 상태까지 올라오는 smoke test와 CI emulator job을 추가 | unit test만으로는 잡히지 않는 startup/regression을 GitHub Actions emulator에서 자동 확인할 수 있는 최소 기반을 만들었다 | `app/build.gradle`, `app/src/androidTest/java/com/kyhsgeekcode/disassembler/MainActivitySmokeTest.kt`, `.github/workflows/ci.yml` | 완료 |
2728
| 프로젝트 경로/파일명 회귀 방지 | 프로젝트 상대경로 계산과 import 파일명 정규화를 pure helper로 분리 | 단위 테스트가 가능하도록 로직을 분리하고 경계 케이스를 줄였다 | `app/src/main/java/com/kyhsgeekcode/disassembler/project/ProjectManager.kt`, `app/src/main/java/com/kyhsgeekcode/disassembler/viewmodel/MainViewModel.kt` | 완료 |
2829
| 회귀 테스트 부재 | `ProjectManager`, 저장소 권한, Hex 레이아웃, import 파일명 테스트 추가 | 최소한의 유지보수 안전망을 확보했다 | `app/src/test/java/com/kyhsgeekcode/disassembler/ProjectManagerTest.kt`, `app/src/test/java/com/kyhsgeekcode/disassembler/PermissionUtilsTest.kt`, `app/src/test/java/com/kyhsgeekcode/disassembler/ui/components/HexViewLayoutTest.kt`, `app/src/test/java/com/kyhsgeekcode/disassembler/viewmodel/ImportedFileNameTest.kt` | 완료 |
2930

@@ -42,6 +43,7 @@
4243
| persistable URI permission helper 테스트 | 통과 | content scheme + persistable/read 플래그 조합만 유지 대상으로 판정 |
4344
| project source helper 테스트 | 통과 | source file 및 `_libs` 경로 계산이 helper 계약으로 고정 |
4445
| `MainActivity` intent 재처리 가드 테스트 | 통과 | 첫 생성에서는 처리, 회전 재생성에서는 건너뛰는 규칙을 고정 |
46+
| `assembleDebugAndroidTest` | 통과 | AndroidX runner와 smoke test가 컴파일되는지 확인 |
4547
| workflow YAML 파싱 | 통과 | `.github/workflows/ci.yml`, `.github/workflows/release.yml` 모두 Ruby YAML 파서 기준 확인 |
4648

4749
## 다음 웨이브 후보

0 commit comments

Comments
 (0)