Skip to content

Commit 78c95fd

Browse files
committed
Add unit tests for the helpers
1 parent bacd360 commit 78c95fd

4 files changed

Lines changed: 138 additions & 6 deletions

File tree

packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/ReactPlugin.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -332,7 +332,9 @@ class ReactPlugin : Plugin<Project> {
332332
pureCxxDependencies,
333333
)
334334

335-
// We add a task called generateReactNativeEntryPoint to generate the React Native entry point.
335+
// We add a task called generateAutolinkingPackageList to do not clash with the existing task
336+
// called generatePackageList. This can to be renamed once we unlink the rn <-> cli
337+
// dependency.
336338
val generatePackageListTask =
337339
project.tasks.register(
338340
"generateAutolinkingPackageList",
@@ -342,9 +344,7 @@ class ReactPlugin : Plugin<Project> {
342344
task.generatedOutputDirectory.set(generatedAutolinkingJavaDir)
343345
}
344346

345-
// We add a task called generateAutolinkingPackageList to do not clash with the existing task
346-
// called generatePackageList. This can to be renamed once we unlink the rn <-> cli
347-
// dependency.
347+
// We add a task called generateReactNativeEntryPoint to generate the React Native entry point.
348348
val generateEntryPointTask =
349349
project.tasks.register(
350350
"generateReactNativeEntryPoint",
@@ -456,7 +456,7 @@ class ReactPlugin : Plugin<Project> {
456456
} ?: emptyList()
457457
}
458458

459-
private fun taskNameSuffixForDependency(dependency: ModelAutolinkingDependenciesJson): String =
459+
internal fun taskNameSuffixForDependency(dependency: ModelAutolinkingDependenciesJson): String =
460460
dependency.name
461461
.map { char -> if (char.isLetterOrDigit()) char.toString() else "_${char.code}_" }
462462
.joinToString("")

packages/gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/tasks/GenerateAutolinkingNewArchitecturesFileTask.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ abstract class GenerateAutolinkingNewArchitecturesFileTask : DefaultTask() {
101101
return CMAKE_TEMPLATE.replace("{{ libraryIncludes }}", libraryIncludes)
102102
}
103103

104-
private fun cmakeListsPathForDependency(
104+
internal fun cmakeListsPathForDependency(
105105
dep: ModelAutolinkingDependenciesPlatformAndroidJson
106106
): String? {
107107
if (dep.cmakeListsPath != null) {

packages/gradle-plugin/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/ReactPluginTest.kt

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
package com.facebook.react
99

10+
import com.facebook.react.model.ModelAutolinkingDependenciesJson
1011
import java.io.File
1112
import org.assertj.core.api.Assertions.assertThat
1213
import org.intellij.lang.annotations.Language
@@ -114,6 +115,62 @@ class ReactPluginTest {
114115
.containsExactly("without-generated-code", "without-includes-generated-code")
115116
}
116117

118+
@Test
119+
fun taskNameSuffixForDependency_withSimpleName_capitalizesIt() {
120+
val dependency =
121+
ModelAutolinkingDependenciesJson(root = "./simple", name = "simple", platforms = null)
122+
123+
val result = ReactPlugin().taskNameSuffixForDependency(dependency)
124+
125+
assertThat(result).isEqualTo("Simple")
126+
}
127+
128+
@Test
129+
fun taskNameSuffixForDependency_withNonAlphanumericCharacters_encodesThem() {
130+
val dependency =
131+
ModelAutolinkingDependenciesJson(
132+
root = "./node_modules/@foo/bar-baz",
133+
name = "@foo/bar-baz",
134+
platforms = null,
135+
)
136+
137+
val result = ReactPlugin().taskNameSuffixForDependency(dependency)
138+
139+
assertThat(result).isEqualTo("_64_foo_47_bar_45_baz")
140+
}
141+
142+
@Test
143+
fun taskNameSuffixForDependency_withSimilarCleansedNames_avoidsCollisions() {
144+
val plugin = ReactPlugin()
145+
val suffixes =
146+
listOf("@foo/bar", "foo.bar", "foo-bar", "foo_bar", "foo_45_bar").map { name ->
147+
val dependency =
148+
ModelAutolinkingDependenciesJson(
149+
root = "./node_modules/$name",
150+
name = name,
151+
platforms = null,
152+
)
153+
154+
plugin.taskNameSuffixForDependency(dependency)
155+
}
156+
157+
assertThat(suffixes).doesNotHaveDuplicates()
158+
}
159+
160+
@Test
161+
fun taskNameSuffixForDependency_withLocalModuleRoot_usesPackageName() {
162+
val dependency =
163+
ModelAutolinkingDependenciesJson(
164+
root = "./modules/local-module",
165+
name = "local-module",
166+
platforms = null,
167+
)
168+
169+
val result = ReactPlugin().taskNameSuffixForDependency(dependency)
170+
171+
assertThat(result).isEqualTo("Local_45_module")
172+
}
173+
117174
private fun createPackage(name: String, includesGeneratedCode: Boolean? = null): File {
118175
val folder = tempFolder.newFolder(name)
119176
File(folder, "package.json").writeText(packageJson(includesGeneratedCode))

packages/gradle-plugin/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/tasks/GenerateAutolinkingNewArchitecturesFileTaskTest.kt

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,81 @@ class GenerateAutolinkingNewArchitecturesFileTaskTest {
113113
assertThat(result).containsExactly(android)
114114
}
115115

116+
@Test
117+
fun cmakeListsPathForDependency_withCmakeListsPath_returnsIt() {
118+
val task = createTestTask<GenerateAutolinkingNewArchitecturesFileTask>()
119+
val dependency =
120+
ModelAutolinkingDependenciesPlatformAndroidJson(
121+
sourceDir = "./a/directory",
122+
packageImportPath = "import com.facebook.react.aPackage;",
123+
packageInstance = "new APackage()",
124+
buildTypes = emptyList(),
125+
libraryName = "aPackage",
126+
cmakeListsPath = "./a/directory/CMakeLists.txt",
127+
isPureCxxDependency = true,
128+
)
129+
130+
assertThat(task.cmakeListsPathForDependency(dependency))
131+
.isEqualTo("./a/directory/CMakeLists.txt")
132+
}
133+
134+
@Test
135+
fun cmakeListsPathForDependency_withPureCxxDependency_returnsGeneratedPath() {
136+
val generatedPureCxxSourceDirectory = tempFolder.newFolder("pureCxx")
137+
val task =
138+
createTestTask<GenerateAutolinkingNewArchitecturesFileTask> {
139+
it.generatedPureCxxSourceDirectory.set(generatedPureCxxSourceDirectory)
140+
}
141+
val dependency =
142+
ModelAutolinkingDependenciesPlatformAndroidJson(
143+
sourceDir = "./a/directory",
144+
packageImportPath = "import com.facebook.react.aPackage;",
145+
packageInstance = "new APackage()",
146+
buildTypes = emptyList(),
147+
libraryName = "aPackage",
148+
isPureCxxDependency = true,
149+
)
150+
151+
assertThat(task.cmakeListsPathForDependency(dependency))
152+
.isEqualTo(File(generatedPureCxxSourceDirectory, "aPackage/jni/CMakeLists.txt").absolutePath)
153+
}
154+
155+
@Test
156+
fun cmakeListsPathForDependency_withMissingGeneratedDirectory_returnsNull() {
157+
val task = createTestTask<GenerateAutolinkingNewArchitecturesFileTask>()
158+
val dependency =
159+
ModelAutolinkingDependenciesPlatformAndroidJson(
160+
sourceDir = "./a/directory",
161+
packageImportPath = "import com.facebook.react.aPackage;",
162+
packageInstance = "new APackage()",
163+
buildTypes = emptyList(),
164+
libraryName = "aPackage",
165+
isPureCxxDependency = true,
166+
)
167+
168+
assertThat(task.cmakeListsPathForDependency(dependency)).isNull()
169+
}
170+
171+
@Test
172+
fun cmakeListsPathForDependency_withNonPureCxxDependency_returnsNull() {
173+
val generatedPureCxxSourceDirectory = tempFolder.newFolder("pureCxx")
174+
val task =
175+
createTestTask<GenerateAutolinkingNewArchitecturesFileTask> {
176+
it.generatedPureCxxSourceDirectory.set(generatedPureCxxSourceDirectory)
177+
}
178+
val dependency =
179+
ModelAutolinkingDependenciesPlatformAndroidJson(
180+
sourceDir = "./a/directory",
181+
packageImportPath = "import com.facebook.react.aPackage;",
182+
packageInstance = "new APackage()",
183+
buildTypes = emptyList(),
184+
libraryName = "aPackage",
185+
isPureCxxDependency = false,
186+
)
187+
188+
assertThat(task.cmakeListsPathForDependency(dependency)).isNull()
189+
}
190+
116191
@Test
117192
fun generateCmakeFileContent_withNoPackages_returnsEmpty() {
118193
val output =

0 commit comments

Comments
 (0)