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 @@ -4,7 +4,6 @@ import io.github.cdsap.projectgenerator.ProjectGenerator
import io.github.cdsap.projectgenerator.model.ClassesPerModule
import io.github.cdsap.projectgenerator.model.Gradle
import io.github.cdsap.projectgenerator.model.Language
import io.github.cdsap.projectgenerator.model.ProjectLayout
import io.github.cdsap.projectgenerator.model.Shape
import io.github.cdsap.projectgenerator.model.TypeOfStringResources
import io.github.cdsap.projectgenerator.model.TypeProjectRequested
Expand Down Expand Up @@ -85,7 +84,11 @@ data class GenerateProjectRequest(
layers = layers,
generateUnitTest = generateUnitTest,
gradle = VersionsResolver.resolveGradle(cliGradle, versionsFile),
projectRootPath = ProjectLayout.defaultRootPath(outputDir, language, resolvedProjectName),
projectRootPath = ProjectOutputPathResolver.defaultRootPath(
outputDir,
language,
resolvedProjectName
),
develocity = resolveDevelocityEnabled(develocityFlag, versionsOverrides.develocityUrl),
projectName = resolvedProjectName
)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package io.github.cdsap.projectgenerator.cli

import io.github.cdsap.projectgenerator.model.Language

object ProjectOutputPathResolver {
fun defaultRootPath(outputDir: String?, language: Language, projectName: String): String {
return if (outputDir != null) {
outputDir
} else {
when (language) {
Language.KTS -> "projects_generated/$projectName/project_kts"
Language.GROOVY -> "projects_generated/$projectName/project_groovy"
Language.BOTH -> "projects_generated/$projectName"
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ 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.ProjectLayout
import io.github.cdsap.projectgenerator.model.Shape
import io.github.cdsap.projectgenerator.model.TypeOfStringResources
import io.github.cdsap.projectgenerator.model.TypeProjectRequested
Expand Down Expand Up @@ -137,25 +136,46 @@ class GenerateProjectsCliTest {

@Test
fun `default output path for kts nests project name and project_kts`() {
val resolved = ProjectLayout.defaultRootPath(null, Language.KTS, "sample")
val resolved = ProjectOutputPathResolver.defaultRootPath(null, Language.KTS, "sample")

assertEquals("projects_generated/sample/project_kts", resolved)
}

@Test
fun `output dir is used directly for single language projects`() {
val resolved = ProjectLayout.defaultRootPath(".", Language.KTS, "sample")
fun `default output path for groovy nests project name and project_groovy`() {
val resolved = ProjectOutputPathResolver.defaultRootPath(null, Language.GROOVY, "sample")

assertEquals(".", resolved)
assertEquals("projects_generated/sample/project_groovy", resolved)
}

@Test
fun `default output path for both languages nests project name only`() {
val resolved = ProjectLayout.defaultRootPath(null, Language.BOTH, "sample")
val resolved = ProjectOutputPathResolver.defaultRootPath(null, Language.BOTH, "sample")

assertEquals("projects_generated/sample", resolved)
}

@Test
fun `output dir is used directly for kts`() {
val resolved = ProjectOutputPathResolver.defaultRootPath(".", Language.KTS, "sample")

assertEquals(".", resolved)
}

@Test
fun `output dir is used directly for groovy`() {
val resolved = ProjectOutputPathResolver.defaultRootPath("/tmp/out", Language.GROOVY, "sample")

assertEquals("/tmp/out", resolved)
}

@Test
fun `output dir is used directly for both languages`() {
val resolved = ProjectOutputPathResolver.defaultRootPath("/tmp/out", Language.BOTH, "sample")

assertEquals("/tmp/out", resolved)
}

@Test
fun `develocity url enables develocity when develocity flag is absent`() {
val request = GenerateProjectRequest.resolve(
Expand Down Expand Up @@ -216,4 +236,53 @@ class GenerateProjectsCliTest {
assertEquals("jvmTriangle12modules", request.projectName)
assertEquals("projects_generated/jvmTriangle12modules/project_kts", request.projectRootPath)
}

@Test
fun `resolve nests groovy default root path under project_groovy`() {
val request = resolveRequest(language = Language.GROOVY, outputDir = null, projectName = "sample")

assertEquals("projects_generated/sample/project_groovy", request.projectRootPath)
}

@Test
fun `resolve nests both-languages default root path under project name only`() {
val request = resolveRequest(language = Language.BOTH, outputDir = null, projectName = "sample")

assertEquals("projects_generated/sample", request.projectRootPath)
}

@Test
fun `resolve uses explicit output dir for any language`() {
val request = resolveRequest(language = Language.BOTH, outputDir = "/tmp/out", projectName = "sample")

assertEquals("/tmp/out", request.projectRootPath)
}

private fun resolveRequest(
language: Language,
outputDir: String?,
projectName: String?
): GenerateProjectRequest {
return GenerateProjectRequest.resolve(
modules = 6,
shape = Shape.RECTANGLE,
language = language,
typeOfProjectRequested = TypeProjectRequested.JVM,
classesPerModule = ClassesPerModule(ClassesPerModuleType.FIXED, 10),
typeOfStringResources = TypeOfStringResources.NORMAL,
layers = 5,
generateUnitTest = false,
cliGradle = null,
develocityFlag = false,
versionsFile = null,
outputDir = outputDir,
projectName = projectName,
versionsOverrides = VersionsOverrides(
dependencyInjection = DependencyInjection.HILT,
develocityUrl = null,
roomDatabase = false,
kotlinMultiplatformLibrary = false
)
)
}
}
Original file line number Diff line number Diff line change
@@ -1,18 +1,6 @@
package io.github.cdsap.projectgenerator.model

object ProjectLayout {
fun defaultRootPath(outputDir: String?, language: Language, projectName: String): String {
return if (outputDir != null) {
outputDir
} else {
when (language) {
Language.KTS -> "projects_generated/$projectName/project_kts"
Language.GROOVY -> "projects_generated/$projectName/project_groovy"
Language.BOTH -> "projects_generated/$projectName"
}
}
}

fun languageAttributes(rootPath: String, language: Language): List<LanguageAttributes> {
return when (language) {
Language.KTS -> listOf(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,48 +5,6 @@ import org.junit.jupiter.api.Test

class ProjectLayoutTest {

@Test
fun `default root path for kts nests project name and project_kts`() {
val resolved = ProjectLayout.defaultRootPath(null, Language.KTS, "sample")

assertEquals("projects_generated/sample/project_kts", resolved)
}

@Test
fun `default root path for groovy nests project name and project_groovy`() {
val resolved = ProjectLayout.defaultRootPath(null, Language.GROOVY, "sample")

assertEquals("projects_generated/sample/project_groovy", resolved)
}

@Test
fun `default root path for both languages nests project name only`() {
val resolved = ProjectLayout.defaultRootPath(null, Language.BOTH, "sample")

assertEquals("projects_generated/sample", resolved)
}

@Test
fun `output dir is used directly for kts`() {
val resolved = ProjectLayout.defaultRootPath(".", Language.KTS, "sample")

assertEquals(".", resolved)
}

@Test
fun `output dir is used directly for groovy`() {
val resolved = ProjectLayout.defaultRootPath("/tmp/out", Language.GROOVY, "sample")

assertEquals("/tmp/out", resolved)
}

@Test
fun `output dir is used directly for both languages`() {
val resolved = ProjectLayout.defaultRootPath("/tmp/out", Language.BOTH, "sample")

assertEquals("/tmp/out", resolved)
}

@Test
fun `language attributes for kts use root path directly`() {
val attributes = ProjectLayout.languageAttributes("/tmp/project", Language.KTS)
Expand Down
Loading