diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2331662..b540d76 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -36,9 +36,9 @@ jobs: - 21 test-class: - 'io.github.cdsap.projectgenerator.ProjectGeneratorE2ETest' - - 'io.github.cdsap.projectgenerator.ProjectGeneratorE2EAgp9Test' - 'io.github.cdsap.projectgenerator.ProjectGeneratorE2EJdk21Test' - - 'io.github.cdsap.projectgenerator.SingleE2EValidationTest' + - 'io.github.cdsap.projectgenerator.RoomDiVariantsAssembleE2EValidationTest' + - 'io.github.cdsap.projectgenerator.AndroidKotlinMultiplatformLibraryE2EValidationTest' runs-on: ubuntu-latest timeout-minutes: 60 needs: unit-tests diff --git a/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/ProjectGeneratorE2EAgp9Test.kt b/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/ProjectGeneratorE2EAgp9Test.kt deleted file mode 100644 index 8fcacd8..0000000 --- a/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/ProjectGeneratorE2EAgp9Test.kt +++ /dev/null @@ -1,76 +0,0 @@ -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.Gradle -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 io.github.cdsap.projectgenerator.NameMappings -import org.gradle.testkit.runner.GradleRunner -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.io.TempDir -import org.junit.jupiter.params.ParameterizedTest -import org.junit.jupiter.params.provider.EnumSource -import java.io.File -import java.nio.file.Path - -class ProjectGeneratorE2EAgp9Test { - @TempDir - lateinit var tempDir: Path - - @ParameterizedTest - @EnumSource(Shape::class) - fun testBuildAndroidProjectsWithGradle9(shape: Shape) { - val modules = 50 - ProjectGenerator( - modules, - shape, - Language.KTS, - TypeProjectRequested.ANDROID, - ClassesPerModule(ClassesPerModuleType.FIXED, 20), - Versions(project = Project(jdk = "17"), android = Android(agp = "9.0.0")), - TypeOfStringResources.LARGE, - 5, - true, - GradleWrapper(DefaultTestVersions.LATEST_GRADLE), - path = tempDir.toFile().path, - false, - projectName = "${shape.name.lowercase().capitalize()}$modules" - - ).write() - val filePath = File("$tempDir/${shape.name.lowercase().capitalize()}${modules}/project_kts") - val result = GradleRunner.create() - .withProjectDir(filePath) - .withArguments("assembleDebug") - .build(); - assert(result.output.contains("BUILD SUCCESSFUL")) - val resultTest = GradleRunner.create() - .withProjectDir(filePath) - .withArguments("testDebugUnitTest") - .build() - - val layerDir = NameMappings.layerName(0) - val moduleDir = NameMappings.moduleName("module_0_1") - assert( - File( - "$tempDir/${ - shape.name.lowercase().capitalize() - }${modules}/project_kts/$layerDir/$moduleDir/build" - ).exists() - && File( - "$tempDir/${ - shape.name.lowercase().capitalize() - }${modules}/project_kts/$layerDir/$moduleDir/build" - ).isDirectory - ) - - assert(resultTest.output.contains("BUILD SUCCESSFUL")) - } - -} diff --git a/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/RoomDiVariantsAssembleE2EValidationTest.kt b/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/RoomDiVariantsAssembleE2EValidationTest.kt index e2db626..c792778 100644 --- a/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/RoomDiVariantsAssembleE2EValidationTest.kt +++ b/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/RoomDiVariantsAssembleE2EValidationTest.kt @@ -57,5 +57,13 @@ class RoomDiVariantsAssembleE2EValidationTest { assertTrue(assemble.output.contains("BUILD SUCCESSFUL")) assertTrue(assemble.output.contains("assembleDebug")) assertTrue(assemble.output.contains("assembleRelease")) + + if (di == DependencyInjection.NONE) { + val tests = GradleRunner.create() + .withProjectDir(projectDir) + .withArguments("testDebugUnitTest") + .build() + assertTrue(tests.output.contains("BUILD SUCCESSFUL")) + } } } diff --git a/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/RoomManifestGenerationTest.kt b/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/RoomManifestGenerationTest.kt deleted file mode 100644 index b89e83e..0000000 --- a/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/RoomManifestGenerationTest.kt +++ /dev/null @@ -1,60 +0,0 @@ -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 minimum 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, - ClassesPerModule.MIN_CLASSES_PER_MODULE - ), - 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")) - } -} diff --git a/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/RoomNoneE2EValidationTest.kt b/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/RoomNoneE2EValidationTest.kt deleted file mode 100644 index c9830a3..0000000 --- a/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/RoomNoneE2EValidationTest.kt +++ /dev/null @@ -1,62 +0,0 @@ -package io.github.cdsap.projectgenerator - -import io.github.cdsap.projectgenerator.DefaultTestVersions.Companion.LATEST_GRADLE -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.DependencyInjection -import io.github.cdsap.projectgenerator.model.Gradle -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.gradle.testkit.runner.GradleRunner -import org.junit.jupiter.api.Assertions.assertTrue -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.io.TempDir -import java.io.File -import java.nio.file.Path - -class RoomNoneE2EValidationTest { - @TempDir - lateinit var tempDir: Path - - @Test - fun `room with di none builds and runs unit tests`() { - ProjectGenerator( - modules = 10, - shape = Shape.RHOMBUS, - language = Language.KTS, - typeOfProjectRequested = TypeProjectRequested.ANDROID, - classesPerModule = ClassesPerModule(ClassesPerModuleType.FIXED, 12), - versions = Versions( - project = Project(jdk = "17"), - di = DependencyInjection.NONE, - android = Android(roomDatabase = true) - ), - typeOfStringResources = TypeOfStringResources.NORMAL, - layers = 3, - generateUnitTest = true, - gradle = GradleWrapper(LATEST_GRADLE), - path = tempDir.toFile().path, - projectName = "room_none_e2e" - ).write() - - val projectDir = File("$tempDir/room_none_e2e/project_kts") - - val assemble = GradleRunner.create() - .withProjectDir(projectDir) - .withArguments("assembleDebug") - .build() - assertTrue(assemble.output.contains("BUILD SUCCESSFUL")) - - val tests = GradleRunner.create() - .withProjectDir(projectDir) - .withArguments("testDebugUnitTest") - .build() - assertTrue(tests.output.contains("BUILD SUCCESSFUL")) - } -} diff --git a/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/SingleE2EValidationTest.kt b/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/SingleE2EValidationTest.kt deleted file mode 100644 index 3b3fa35..0000000 --- a/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/SingleE2EValidationTest.kt +++ /dev/null @@ -1,127 +0,0 @@ -package io.github.cdsap.projectgenerator - -import io.github.cdsap.projectgenerator.DefaultTestVersions.Companion.LATEST_GRADLE -import io.github.cdsap.projectgenerator.model.ClassesPerModule -import io.github.cdsap.projectgenerator.model.ClassesPerModuleType -import io.github.cdsap.projectgenerator.model.Gradle -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 io.github.cdsap.projectgenerator.NameMappings -import io.github.cdsap.projectgenerator.model.Android -import org.gradle.testkit.runner.GradleRunner -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.io.TempDir -import java.io.File -import java.nio.file.Path - -class SingleE2EValidationTest { - - @TempDir - lateinit var tempDir: Path - - - @Test - fun sanityTestAgp9() { - val modules = 50 - val shape = Shape.RHOMBUS - ProjectGenerator( - modules = 50, - shape = shape, - language = Language.KTS, - typeOfProjectRequested = TypeProjectRequested.ANDROID, - classesPerModule = ClassesPerModule(ClassesPerModuleType.FIXED, 20), - versions = Versions(project = Project(jdk = "17"), android = Android(agp = "9.0.0")), - typeOfStringResources = TypeOfStringResources.LARGE, - layers = 5, - generateUnitTest = true, - gradle = GradleWrapper(LATEST_GRADLE), - path = tempDir.toFile().path, - projectName = "${shape.name.lowercase().capitalize()}_$modules" - ).write() - val filePath = File("$tempDir/${shape.name.lowercase().capitalize()}_${modules}/project_kts") - val result = GradleRunner.create() - .withProjectDir(filePath) - .withArguments("assembleDebug") - .build() - println(result.output) - assert(result.output.contains("BUILD SUCCESSFUL")) - val resultTest = GradleRunner.create() - .withProjectDir(filePath) - .withArguments("testDebugUnitTest") - .build() - - val layerDir = NameMappings.layerName(0) - val moduleDir = NameMappings.moduleName("module_0_1") - assert( - File( - "$tempDir/${ - shape.name.lowercase().capitalize() - }_${modules}/project_kts/$layerDir/$moduleDir/build" - ).exists() - && File( - "$tempDir/${ - shape.name.lowercase().capitalize() - }_${modules}/project_kts/$layerDir/$moduleDir/build" - ).isDirectory - ) - - assert(resultTest.output.contains("BUILD SUCCESSFUL")) - - } - - @Test - fun sanityTestAgp() { - val modules = 50 - val shape = Shape.RHOMBUS - ProjectGenerator( - modules = 50, - shape = shape, - language = Language.KTS, - typeOfProjectRequested = TypeProjectRequested.ANDROID, - classesPerModule = ClassesPerModule(ClassesPerModuleType.FIXED, 20), - versions = Versions(project = Project(jdk = "17")), - typeOfStringResources = TypeOfStringResources.LARGE, - layers = 5, - generateUnitTest = true, - gradle = GradleWrapper(LATEST_GRADLE), - path = tempDir.toFile().path, - projectName = "${shape.name.lowercase().capitalize()}_$modules" - ).write() - val filePath = File("$tempDir/${shape.name.lowercase().capitalize()}_${modules}/project_kts") - val result = GradleRunner.create() - .withProjectDir(filePath) - .withArguments("assembleDebug") - .build() - println(result.output) - assert(result.output.contains("BUILD SUCCESSFUL")) - val resultTest = GradleRunner.create() - .withProjectDir(filePath) - .withArguments("testDebugUnitTest") - .build() - - val layerDir = NameMappings.layerName(0) - val moduleDir = NameMappings.moduleName("module_0_1") - assert( - File( - "$tempDir/${ - shape.name.lowercase().capitalize() - }_${modules}/project_kts/$layerDir/$moduleDir/build" - ).exists() - && File( - "$tempDir/${ - shape.name.lowercase().capitalize() - }_${modules}/project_kts/$layerDir/$moduleDir/build" - ).isDirectory - ) - - assert(resultTest.output.contains("BUILD SUCCESSFUL")) - - } - - -} diff --git a/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/generator/planner/ModuleClassPlannerAndroidTest.kt b/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/generator/planner/ModuleClassPlannerAndroidTest.kt index 51fc0d5..5286336 100644 --- a/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/generator/planner/ModuleClassPlannerAndroidTest.kt +++ b/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/generator/planner/ModuleClassPlannerAndroidTest.kt @@ -1,6 +1,7 @@ package io.github.cdsap.projectgenerator.generator.planner import io.github.cdsap.projectgenerator.model.ClassTypeAndroid +import io.github.cdsap.projectgenerator.model.ClassesPerModule import io.github.cdsap.projectgenerator.model.ProjectGraph import io.github.cdsap.projectgenerator.model.TypeProject import org.junit.jupiter.api.Assertions.assertEquals @@ -10,14 +11,14 @@ import org.junit.jupiter.api.Test class ModuleClassPlannerAndroidTest { @Test - fun `app module with low class count still includes activity and baseline classes`() { + fun `app module at minimum class count 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 + classes = ClassesPerModule.MIN_CLASSES_PER_MODULE ) val result = planner.planModuleClasses(module) @@ -26,6 +27,6 @@ class ModuleClassPlannerAndroidTest { assertTrue(types.contains(ClassTypeAndroid.ACTIVITY)) assertTrue(types.contains(ClassTypeAndroid.SCREEN)) assertTrue(types.contains(ClassTypeAndroid.VIEWMODEL)) - assertEquals(10, result.classes.size) + assertEquals(ClassesPerModule.MIN_CLASSES_PER_MODULE, result.classes.size) } }