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
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ class Manifest {
} else {
""
}
val composeActivityName = ".$name"
val composeActivityName = if (name.isBlank()) "android.app.Activity" else ".$name"
val applicationName = ".MainApplication"
"""
<?xml version="1.0" encoding="utf-8"?>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,20 @@ class ModuleClassPlannerAndroid : ModuleClassPlanner<ModuleClassDefinitionAndroi
val layer = projectGraph.layer
val moduleNumber = projectGraph.id.split("_").last().toInt()
val maxClasses = projectGraph.classes.coerceAtLeast(0)
val effectiveMaxClasses = if (projectGraph.type == TypeProject.ANDROID_APP) {
// Room app modules need a baseline dependency chain for a valid launch activity.
maxClasses.coerceAtLeast(10)
} else {
maxClasses
}
val classes = mutableListOf<ClassDefinitionAndroid>()
var currentIndex = 1

val localDep = { type: ClassTypeAndroid ->
mutableListOf(ClassDependencyAndroid(type, moduleId))
}
val addClass = { type: ClassTypeAndroid, deps: MutableList<ClassDependencyAndroid> ->
if (classes.size < maxClasses) {
if (classes.size < effectiveMaxClasses) {
classes.add(ClassDefinitionAndroid(type = type, index = currentIndex++, dependencies = deps))
}
}
Expand Down Expand Up @@ -53,7 +59,7 @@ class ModuleClassPlannerAndroid : ModuleClassPlanner<ModuleClassDefinitionAndroi
addClass(ClassTypeAndroid.FRAGMENT, mutableListOf())
}

val remainingClasses = maxClasses - classes.size
val remainingClasses = effectiveMaxClasses - classes.size
if (remainingClasses > 0) {
for (i in 1..remainingClasses) {
val classType = when (i % 2) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package io.github.cdsap.projectgenerator

import io.github.cdsap.projectgenerator.model.Android
import io.github.cdsap.projectgenerator.model.ClassesPerModule
import io.github.cdsap.projectgenerator.model.ClassesPerModuleType
import io.github.cdsap.projectgenerator.model.Language
import io.github.cdsap.projectgenerator.model.Project
import io.github.cdsap.projectgenerator.model.Shape
import io.github.cdsap.projectgenerator.model.TypeOfStringResources
import io.github.cdsap.projectgenerator.model.TypeProjectRequested
import io.github.cdsap.projectgenerator.model.Versions
import io.github.cdsap.projectgenerator.writer.GradleWrapper
import org.junit.jupiter.api.Assertions.assertFalse
import org.junit.jupiter.api.Assertions.assertTrue
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.io.TempDir
import java.nio.file.Path

class RoomManifestGenerationTest {
@TempDir
lateinit var tempDir: Path

@Test
fun `room project with default class count generates valid launcher activity name`() {
val projectName = "room_manifest_low_classes"
ProjectGenerator(
modules = 20,
shape = Shape.FLAT,
language = Language.KTS,
typeOfProjectRequested = TypeProjectRequested.ANDROID,
classesPerModule = ClassesPerModule(ClassesPerModuleType.FIXED, 5),
versions = Versions(
project = Project(jdk = "17"),
android = Android(roomDatabase = true)
),
typeOfStringResources = TypeOfStringResources.NORMAL,
layers = 3,
generateUnitTest = false,
gradle = GradleWrapper(DefaultTestVersions.LATEST_GRADLE),
path = tempDir.toString(),
projectName = projectName
).write()

val projectDir = tempDir.resolve("$projectName/project_kts").toFile()
val manifest = projectDir.walkTopDown()
.firstOrNull { file ->
file.isFile &&
file.name == "AndroidManifest.xml" &&
file.readText().contains("android.intent.category.LAUNCHER")
}
?: error("Could not find launcher manifest under ${projectDir.path}")
val manifestText = manifest.readText()

assertFalse(manifestText.contains("android:name=\".\""))
assertTrue(manifestText.contains("android:name=\".Activity"))
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package io.github.cdsap.projectgenerator.generator.android

import io.github.cdsap.projectgenerator.generator.classes.GenerateDictionaryAndroid
import io.github.cdsap.projectgenerator.model.TypeProject
import org.junit.jupiter.api.Assertions.assertTrue
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.io.TempDir
import java.nio.file.Path
import java.util.concurrent.ConcurrentHashMap
import java.util.concurrent.CopyOnWriteArrayList

class ManifestTest {

@TempDir
lateinit var tempDir: Path

@Test
fun `android app manifest falls back to valid activity name when dictionary has no activity`() {
val manifestDir = tempDir.resolve("feature").toFile()
val dictionary = ConcurrentHashMap<String, CopyOnWriteArrayList<GenerateDictionaryAndroid>>()

Manifest().createManifest(
moduleFolder = manifestDir,
layer = 0,
module = "account",
moduleType = TypeProject.ANDROID_APP,
a = dictionary
)

val manifestText = manifestDir.resolve("AndroidManifest.xml").readText()
assertTrue(manifestText.contains("android:name=\"android.app.Activity\""))
}
}
Original file line number Diff line number Diff line change
@@ -1,16 +1,24 @@
package io.github.cdsap.projectgenerator.generator.planner

import io.github.cdsap.projectgenerator.NameMappings
import io.github.cdsap.projectgenerator.model.ClassTypeAndroid
import io.github.cdsap.projectgenerator.model.ProjectGraph
import io.github.cdsap.projectgenerator.model.TypeProject
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assertions.assertTrue
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test

class ModuleClassPlannerAndroidLegacyTest {

private val planner = ModuleClassPlannerAndroidLegacy()

@BeforeEach
fun resetNameMappings() {
NameMappings.layerNames = emptyMap()
NameMappings.moduleNames = emptyMap()
}

@Test
fun `viewmodel dependency stays in same module when repository exists`() {
val module = projectGraph(id = "module_0_20", classes = 12, nodes = listOf(projectGraph(id = "module_0_4", classes = 12)))
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package io.github.cdsap.projectgenerator.generator.planner

import io.github.cdsap.projectgenerator.model.ClassTypeAndroid
import io.github.cdsap.projectgenerator.model.ProjectGraph
import io.github.cdsap.projectgenerator.model.TypeProject
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assertions.assertTrue
import org.junit.jupiter.api.Test

class ModuleClassPlannerAndroidTest {

@Test
fun `app module with low class count still includes activity and baseline classes`() {
val planner = ModuleClassPlannerAndroid()
val module = ProjectGraph(
id = "module_2_9",
layer = 2,
nodes = emptyList(),
type = TypeProject.ANDROID_APP,
classes = 5
)

val result = planner.planModuleClasses(module)
val types = result.classes.map { it.type }

assertTrue(types.contains(ClassTypeAndroid.ACTIVITY))
assertTrue(types.contains(ClassTypeAndroid.SCREEN))
assertTrue(types.contains(ClassTypeAndroid.VIEWMODEL))
assertEquals(10, result.classes.size)
}
}