Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ android {

buildTypes {
release {
isMinifyEnabled = false
isMinifyEnabled = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@ import org.junit.jupiter.api.Test
internal class RegistryGeneratorTest {

@Test
@DisplayName("RouteInfo를 받아 WispModuleRegistry 오브젝트와 맵을 생성한다")
@DisplayName("Should generate WispModuleRegistry object and map from RouteInfo")
fun `generate_registry_with_multiple_routes`() {
// Given: RouteInfo 데이터 2개
// Given: Two RouteInfo objects
val homeRoute = ObjectRouteInfo(
routeClassName = ClassName("com.example", "Home"),
factoryClassName = ClassName("com.example", "HomeRouteFactory"),
Expand All @@ -28,20 +28,22 @@ internal class RegistryGeneratorTest {

val routes = listOf(homeRoute, profileRoute)

// When: 코드 생성 실행
// When: Code generation is executed
val generatedRegistry = WispRegistryGenerator().generate(routes)
val generatedCode = generatedRegistry.fileSpec.toString()

// Then: 생성된 WispModuleRegistry 객체를 반환 (해시값이 포함된 이름)
assertTrue(generatedCode.contains("object WispModuleRegistry_"))
// SPI 인터페이스 구현 확인
// Then: Return the generated WispModuleRegistry object (with a hash in its name)
assertTrue(generatedCode.contains("class WispModuleRegistry_"))
// Check for SPI interface implementation
assertTrue(generatedCode.contains(": WispModuleRegistry"))
// 맵 생성 확인
assertTrue(generatedCode.contains("val factories: Map<String, RouteFactory> = mapOf("))
// getRoutes 메서드 확인
assertTrue(generatedCode.contains("override fun getRoutes"))

// 라우트 팩토리 매핑 확인
// Check for map creation
assertTrue(generatedCode.contains("private val factories:"))
assertTrue(generatedCode.contains("Map<String, RouteFactory>"))
assertTrue(generatedCode.contains("= mapOf("))
// Check for getRoutes method
assertTrue(generatedCode.contains("override fun getRoutes(): Map<String, RouteFactory>"))

// Check for route factory mappings
assertTrue(generatedCode.contains("import com.example.HomeRouteFactory"))
assertTrue(generatedCode.contains("\"home\" to HomeRouteFactory"))

Expand Down
17 changes: 17 additions & 0 deletions wisp-runtime/consumer-rules.pro
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Keep Wisp-generated classes from being removed or obfuscated by ProGuard.

# Keep the WispModuleRegistry implementation for ServiceLoader.
# ServiceLoader requires a public class with a public no-argument constructor.
-keep public class com.angrypodo.wisp.generated.WispModuleRegistry_* {
public <init>();
}

# Keep the generated RouteFactory implementations. These are instantiated by the registry.
-keep class com.angrypodo.wisp.generated.*RouteFactory {
*;
}

# The following rule is generally not needed because kotlinx-serialization-json
# includes its own consumer proguard rules that keep @Serializable classes.
# However, it can be added for extra safety if you encounter issues.
# -keep @kotlinx.serialization.Serializable class * { *; }
Loading