@react-native/gradle-plugin 0.74.85 → 0.74.87

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/build.gradle.kts +2 -75
  2. package/package.json +4 -3
  3. package/react-native-gradle-plugin/build.gradle.kts +84 -0
  4. package/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/TestReactExtension.kt +12 -0
  5. package/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/tasks/BundleHermesCTaskTest.kt +434 -0
  6. package/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/tasks/GenerateCodegenArtifactsTaskTest.kt +212 -0
  7. package/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/tasks/GenerateCodegenSchemaTaskTest.kt +192 -0
  8. package/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/tasks/internal/BuildCodegenCLITaskTest.kt +27 -0
  9. package/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/tasks/internal/PrepareBoostTaskTest.kt +105 -0
  10. package/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/tasks/internal/PrepareGlogTaskTest.kt +130 -0
  11. package/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/tasks/internal/PrepareJSCTaskTest.kt +128 -0
  12. package/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/tasks/internal/PreparePrefabHeadersTaskTest.kt +201 -0
  13. package/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/tasks/internal/utils/PrefabPreprocessingEntryTest.kt +25 -0
  14. package/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/tests/OsRule.kt +52 -0
  15. package/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/tests/TaskTestUtils.kt +69 -0
  16. package/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/tests/WithOs.kt +17 -0
  17. package/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/utils/AgpConfiguratorUtilsTest.kt +65 -0
  18. package/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/utils/BackwardCompatUtilsTest.kt +43 -0
  19. package/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/utils/DependencyUtilsTest.kt +404 -0
  20. package/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/utils/FileUtilsTest.kt +45 -0
  21. package/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/utils/JsonUtilsTest.kt +126 -0
  22. package/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/utils/KotlinStdlibCompatUtilsTest.kt +82 -0
  23. package/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/utils/NdkConfiguratorUtilsTest.kt +46 -0
  24. package/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/utils/OsTest.kt +86 -0
  25. package/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/utils/PathUtilsTest.kt +325 -0
  26. package/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/utils/ProjectUtilsTest.kt +533 -0
  27. package/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/utils/TaskUtilsTest.kt +77 -0
  28. package/settings-plugin/build.gradle.kts +50 -0
  29. package/settings-plugin/src/main/kotlin/com/facebook/react/ReactSettingsPlugin.kt +24 -0
  30. package/settings.gradle.kts +6 -1
  31. /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/ReactExtension.kt +0 -0
  32. /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/ReactPlugin.kt +0 -0
  33. /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/ReactRootProjectPlugin.kt +0 -0
  34. /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/TaskConfiguration.kt +0 -0
  35. /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/internal/PrivateReactExtension.kt +0 -0
  36. /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/model/ModelCodegenConfig.kt +0 -0
  37. /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/model/ModelCodegenConfigAndroid.kt +0 -0
  38. /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/model/ModelPackageJson.kt +0 -0
  39. /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/tasks/BundleHermesCTask.kt +0 -0
  40. /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/tasks/GenerateCodegenArtifactsTask.kt +0 -0
  41. /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/tasks/GenerateCodegenSchemaTask.kt +0 -0
  42. /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/tasks/internal/BuildCodegenCLITask.kt +0 -0
  43. /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/tasks/internal/PrepareBoostTask.kt +0 -0
  44. /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/tasks/internal/PrepareGlogTask.kt +0 -0
  45. /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/tasks/internal/PrepareJSCTask.kt +0 -0
  46. /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/tasks/internal/PreparePrefabHeadersTask.kt +0 -0
  47. /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/tasks/internal/utils/PrefabPreprocessingEntry.kt +0 -0
  48. /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/utils/AgpConfiguratorUtils.kt +0 -0
  49. /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/utils/BackwardCompatUtils.kt +0 -0
  50. /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/utils/DependencyUtils.kt +0 -0
  51. /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/utils/FileUtils.kt +0 -0
  52. /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/utils/JdkConfiguratorUtils.kt +0 -0
  53. /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/utils/JsonUtils.kt +0 -0
  54. /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/utils/KotlinStdlibCompatUtils.kt +0 -0
  55. /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/utils/NdkConfiguratorUtils.kt +0 -0
  56. /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/utils/Os.kt +0 -0
  57. /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/utils/PathUtils.kt +0 -0
  58. /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/utils/ProjectUtils.kt +0 -0
  59. /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/utils/PropertyUtils.kt +0 -0
  60. /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/utils/TaskUtils.kt +0 -0
@@ -0,0 +1,86 @@
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ package com.facebook.react.utils
9
+
10
+ import com.facebook.react.tests.OS
11
+ import com.facebook.react.tests.OsRule
12
+ import com.facebook.react.tests.WithOs
13
+ import com.facebook.react.utils.Os.cliPath
14
+ import com.facebook.react.utils.Os.unixifyPath
15
+ import org.junit.Assert.*
16
+ import org.junit.Rule
17
+ import org.junit.Test
18
+ import org.junit.rules.TemporaryFolder
19
+
20
+ class OsTest {
21
+
22
+ @get:Rule val osRule = OsRule()
23
+ @get:Rule val tempFolder = TemporaryFolder()
24
+
25
+ @Test
26
+ @WithOs(OS.LINUX, "amd64")
27
+ fun onLinuxAmd64_checksOsCorrectly() {
28
+ assertFalse(Os.isWindows())
29
+ assertFalse(Os.isMac())
30
+ assertTrue(Os.isLinuxAmd64())
31
+ }
32
+
33
+ @Test
34
+ @WithOs(OS.MAC)
35
+ fun onMac_checksOsCorrectly() {
36
+ assertFalse(Os.isWindows())
37
+ assertTrue(Os.isMac())
38
+ assertFalse(Os.isLinuxAmd64())
39
+ }
40
+
41
+ @Test
42
+ @WithOs(OS.WIN)
43
+ fun isWindows_onWindows_returnsTrue() {
44
+ assertTrue(Os.isWindows())
45
+ assertFalse(Os.isMac())
46
+ assertFalse(Os.isLinuxAmd64())
47
+ }
48
+
49
+ @Test
50
+ fun unixifyPath_withAUnixPath_doesNothing() {
51
+ val aUnixPath = "/just/a/unix/path.sh"
52
+
53
+ assertEquals(aUnixPath, aUnixPath.unixifyPath())
54
+ }
55
+
56
+ @Test
57
+ fun unixifyPath_withAWindowsPath_convertsItCorrectly() {
58
+ val aWindowsPath = "D:\\just\\a\\windows\\path\\"
59
+
60
+ assertEquals("/D/just/a/windows/path/", aWindowsPath.unixifyPath())
61
+ }
62
+
63
+ @Test
64
+ @WithOs(OS.WIN)
65
+ fun cliPath_onWindows_returnsRelativePath() {
66
+ val tempFile = tempFolder.newFile("test.txt").apply { createNewFile() }
67
+
68
+ assertEquals(tempFile.relativeTo(tempFolder.root).path, tempFile.cliPath(tempFolder.root))
69
+ }
70
+
71
+ @Test
72
+ @WithOs(OS.LINUX)
73
+ fun cliPath_onLinux_returnsAbsolutePath() {
74
+ val tempFile = tempFolder.newFile("test.txt").apply { createNewFile() }
75
+
76
+ assertEquals(tempFile.absolutePath, tempFile.cliPath(tempFolder.root))
77
+ }
78
+
79
+ @Test
80
+ @WithOs(OS.MAC)
81
+ fun cliPath_onMac_returnsAbsolutePath() {
82
+ val tempFile = tempFolder.newFile("test.txt").apply { createNewFile() }
83
+
84
+ assertEquals(tempFile.absolutePath, tempFile.cliPath(tempFolder.root))
85
+ }
86
+ }
@@ -0,0 +1,325 @@
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ package com.facebook.react.utils
9
+
10
+ import com.facebook.react.ReactExtension
11
+ import com.facebook.react.TestReactExtension
12
+ import com.facebook.react.tests.OS
13
+ import com.facebook.react.tests.OsRule
14
+ import com.facebook.react.tests.WithOs
15
+ import java.io.File
16
+ import org.gradle.testfixtures.ProjectBuilder
17
+ import org.junit.Assert.*
18
+ import org.junit.Assume.assumeTrue
19
+ import org.junit.Rule
20
+ import org.junit.Test
21
+ import org.junit.rules.TemporaryFolder
22
+
23
+ class PathUtilsTest {
24
+
25
+ @get:Rule val tempFolder = TemporaryFolder()
26
+ @get:Rule val osRule = OsRule()
27
+
28
+ @Test
29
+ fun detectedEntryFile_withProvidedVariable() {
30
+ val extension = TestReactExtension(ProjectBuilder.builder().build())
31
+ val expected = tempFolder.newFile("fake.index.js")
32
+ extension.entryFile.set(expected)
33
+
34
+ val actual = detectedEntryFile(extension)
35
+
36
+ assertEquals(expected, actual)
37
+ }
38
+
39
+ @Test
40
+ fun detectedEntryFile_withAndroidEntryPoint() {
41
+ val extension = TestReactExtension(ProjectBuilder.builder().build())
42
+ extension.root.set(tempFolder.root)
43
+ tempFolder.newFile("index.android.js")
44
+
45
+ val actual = detectedEntryFile(extension)
46
+
47
+ assertEquals(File(tempFolder.root, "index.android.js"), actual)
48
+ }
49
+
50
+ @Test
51
+ fun detectedEntryFile_withDefaultEntryPoint() {
52
+ val extension = TestReactExtension(ProjectBuilder.builder().build())
53
+ extension.root.set(tempFolder.root)
54
+
55
+ val actual = detectedEntryFile(extension)
56
+
57
+ assertEquals(File(tempFolder.root, "index.js"), actual)
58
+ }
59
+
60
+ @Test
61
+ fun detectedEntryFile_withEnvironmentVariable() {
62
+ val extension = TestReactExtension(ProjectBuilder.builder().build())
63
+ val expected = tempFolder.newFile("./fromenv.index.js")
64
+ // As we can't override env variable for tests, we're going to emulate them here.
65
+ val envVariable = "./fromenv.index.js"
66
+
67
+ extension.root.set(tempFolder.root)
68
+
69
+ val actual = detectedEntryFile(extension, envVariable)
70
+
71
+ assertEquals(expected, actual)
72
+ }
73
+
74
+ @Test
75
+ fun detectedCliPath_withCliPathFromExtensionAndFileExists_returnsIt() {
76
+ val project = ProjectBuilder.builder().build()
77
+ val cliFile = tempFolder.newFile("cli.js").apply { createNewFile() }
78
+ val extension = TestReactExtension(project)
79
+ extension.cliFile.set(cliFile)
80
+
81
+ val actual = detectedCliFile(extension)
82
+
83
+ assertEquals(cliFile, actual)
84
+ }
85
+
86
+ @Test
87
+ fun detectedCliPath_withCliFromNodeModules() {
88
+ val project = ProjectBuilder.builder().build()
89
+ val extension = TestReactExtension(project)
90
+ File(tempFolder.root, "node_modules/react-native/cli.js").apply {
91
+ parentFile.mkdirs()
92
+ writeText("<!-- nothing to see here -->")
93
+ }
94
+ val locationToResolveFrom = File(tempFolder.root, "a-subdirectory").apply { mkdirs() }
95
+ extension.root.set(locationToResolveFrom)
96
+
97
+ val actual = detectedCliFile(extension)
98
+
99
+ assertEquals("<!-- nothing to see here -->", actual.readText())
100
+ }
101
+
102
+ @Test(expected = IllegalStateException::class)
103
+ fun detectedCliPath_failsIfNotFound() {
104
+ val project = ProjectBuilder.builder().build()
105
+ val extension = TestReactExtension(project)
106
+
107
+ // Because react-native is now a package, it is always
108
+ // accessible from <root>/node_modules/react-native
109
+ // We need to provide location where cli.js file won't be resolved
110
+ extension.root.set(tempFolder.root)
111
+
112
+ detectedCliFile(extension)
113
+ }
114
+
115
+ @Test
116
+ fun projectPathToLibraryName_withSimplePath() {
117
+ assertEquals("SampleSpec", projectPathToLibraryName(":sample"))
118
+ }
119
+
120
+ @Test
121
+ fun projectPathToLibraryName_withComplexPath() {
122
+ assertEquals("SampleAndroidAppSpec", projectPathToLibraryName(":sample:android:app"))
123
+ }
124
+
125
+ @Test
126
+ fun projectPathToLibraryName_withKebabCase() {
127
+ assertEquals("SampleAndroidAppSpec", projectPathToLibraryName("sample-android-app"))
128
+ }
129
+
130
+ @Test
131
+ fun projectPathToLibraryName_withDotsAndUnderscores() {
132
+ assertEquals("SampleAndroidAppSpec", projectPathToLibraryName("sample_android.app"))
133
+ }
134
+
135
+ @Test
136
+ fun detectOSAwareHermesCommand_withProvidedCommand() {
137
+ assertEquals(
138
+ "./my-home/hermes", detectOSAwareHermesCommand(tempFolder.root, "./my-home/hermes"))
139
+ }
140
+
141
+ @Test
142
+ fun detectOSAwareHermesCommand_withHermescBuiltLocally() {
143
+ // As we can't mock env variables, we skip this test if an override of the Hermes
144
+ // path has been provided.
145
+ assumeTrue(System.getenv("REACT_NATIVE_OVERRIDE_HERMES_DIR") == null)
146
+
147
+ tempFolder.newFolder("node_modules/react-native/ReactAndroid/hermes-engine/build/hermes/bin/")
148
+ val expected =
149
+ tempFolder.newFile(
150
+ "node_modules/react-native/ReactAndroid/hermes-engine/build/hermes/bin/hermesc")
151
+
152
+ assertEquals(expected.toString(), detectOSAwareHermesCommand(tempFolder.root, ""))
153
+ }
154
+
155
+ @Test
156
+ @WithOs(OS.MAC)
157
+ fun detectOSAwareHermesCommand_withBundledHermescInsideRN() {
158
+ tempFolder.newFolder("node_modules/react-native/sdks/hermesc/osx-bin/")
159
+ val expected = tempFolder.newFile("node_modules/react-native/sdks/hermesc/osx-bin/hermesc")
160
+
161
+ assertEquals(expected.toString(), detectOSAwareHermesCommand(tempFolder.root, ""))
162
+ }
163
+
164
+ @Test(expected = IllegalStateException::class)
165
+ @WithOs(OS.MAC)
166
+ fun detectOSAwareHermesCommand_failsIfNotFound() {
167
+ detectOSAwareHermesCommand(tempFolder.root, "")
168
+ }
169
+
170
+ @Test
171
+ @WithOs(OS.MAC)
172
+ fun detectOSAwareHermesCommand_withProvidedCommand_takesPrecedence() {
173
+ tempFolder.newFolder("node_modules/react-native/sdks/hermes/build/bin/")
174
+ tempFolder.newFile("node_modules/react-native/sdks/hermes/build/bin/hermesc")
175
+ tempFolder.newFolder("node_modules/react-native/sdks/hermesc/osx-bin/")
176
+ tempFolder.newFile("node_modules/react-native/sdks/hermesc/osx-bin/hermesc")
177
+
178
+ assertEquals(
179
+ "./my-home/hermes", detectOSAwareHermesCommand(tempFolder.root, "./my-home/hermes"))
180
+ }
181
+
182
+ @Test
183
+ @WithOs(OS.MAC)
184
+ fun detectOSAwareHermesCommand_withoutProvidedCommand_builtHermescTakesPrecedence() {
185
+ // As we can't mock env variables, we skip this test if an override of the Hermes
186
+ // path has been provided.
187
+ assumeTrue(System.getenv("REACT_NATIVE_OVERRIDE_HERMES_DIR") == null)
188
+
189
+ tempFolder.newFolder("node_modules/react-native/ReactAndroid/hermes-engine/build/hermes/bin/")
190
+ val expected =
191
+ tempFolder.newFile(
192
+ "node_modules/react-native/ReactAndroid/hermes-engine/build/hermes/bin/hermesc")
193
+ tempFolder.newFolder("node_modules/react-native/sdks/hermesc/osx-bin/")
194
+ tempFolder.newFile("node_modules/react-native/sdks/hermesc/osx-bin/hermesc")
195
+
196
+ assertEquals(expected.toString(), detectOSAwareHermesCommand(tempFolder.root, ""))
197
+ }
198
+
199
+ @Test
200
+ fun getBuiltHermescFile_withoutOverride() {
201
+ assertEquals(
202
+ File(
203
+ tempFolder.root,
204
+ "node_modules/react-native/ReactAndroid/hermes-engine/build/hermes/bin/hermesc"),
205
+ getBuiltHermescFile(tempFolder.root, ""))
206
+ }
207
+
208
+ @Test
209
+ @WithOs(OS.WIN)
210
+ fun getBuiltHermescFile_onWindows_withoutOverride() {
211
+ assertEquals(
212
+ File(
213
+ tempFolder.root,
214
+ "node_modules/react-native/ReactAndroid/hermes-engine/build/hermes/bin/hermesc.exe"),
215
+ getBuiltHermescFile(tempFolder.root, ""))
216
+ }
217
+
218
+ @Test
219
+ fun getBuiltHermescFile_withOverride() {
220
+ assertEquals(
221
+ File("/home/circleci/hermes/build/bin/hermesc"),
222
+ getBuiltHermescFile(tempFolder.root, "/home/circleci/hermes"))
223
+ }
224
+
225
+ @Test
226
+ @WithOs(OS.WIN)
227
+ fun getHermesCBin_onWindows_returnsHermescExe() {
228
+ assertEquals("hermesc.exe", getHermesCBin())
229
+ }
230
+
231
+ @Test
232
+ @WithOs(OS.LINUX)
233
+ fun getHermesCBin_onLinux_returnsHermesc() {
234
+ assertEquals("hermesc", getHermesCBin())
235
+ }
236
+
237
+ @Test
238
+ @WithOs(OS.MAC)
239
+ fun getHermesCBin_onMac_returnsHermesc() {
240
+ assertEquals("hermesc", getHermesCBin())
241
+ }
242
+
243
+ @Test
244
+ fun findPackageJsonFile_withFileInParentFolder_picksItUp() {
245
+ tempFolder.newFile("package.json")
246
+ val moduleFolder = tempFolder.newFolder("awesome-module")
247
+
248
+ val project = ProjectBuilder.builder().withProjectDir(moduleFolder).build()
249
+ project.plugins.apply("com.android.library")
250
+ project.plugins.apply("com.facebook.react")
251
+ val extension = project.extensions.getByType(ReactExtension::class.java)
252
+
253
+ assertEquals(project.file("../package.json"), findPackageJsonFile(project, extension.root))
254
+ }
255
+
256
+ @Test
257
+ fun findPackageJsonFile_withFileConfiguredInExtension_picksItUp() {
258
+ val moduleFolder = tempFolder.newFolder("awesome-module")
259
+ val localFile = File(moduleFolder, "package.json").apply { writeText("{}") }
260
+
261
+ val project = ProjectBuilder.builder().withProjectDir(moduleFolder).build()
262
+ project.plugins.apply("com.android.library")
263
+ project.plugins.apply("com.facebook.react")
264
+ val extension =
265
+ project.extensions.getByType(ReactExtension::class.java).apply { root.set(moduleFolder) }
266
+
267
+ assertEquals(localFile, findPackageJsonFile(project, extension.root))
268
+ }
269
+
270
+ @Test
271
+ fun readPackageJsonFile_withMissingFile_returnsNull() {
272
+ val moduleFolder = tempFolder.newFolder("awesome-module")
273
+ val project = ProjectBuilder.builder().withProjectDir(moduleFolder).build()
274
+ project.plugins.apply("com.android.library")
275
+ project.plugins.apply("com.facebook.react")
276
+ val extension =
277
+ project.extensions.getByType(ReactExtension::class.java).apply { root.set(moduleFolder) }
278
+
279
+ val actual = readPackageJsonFile(project, extension.root)
280
+
281
+ assertNull(actual)
282
+ }
283
+
284
+ @Test
285
+ fun readPackageJsonFile_withFileConfiguredInExtension_andMissingCodegenConfig_returnsNullCodegenConfig() {
286
+ val moduleFolder = tempFolder.newFolder("awesome-module")
287
+ File(moduleFolder, "package.json").apply { writeText("{}") }
288
+ val project = ProjectBuilder.builder().withProjectDir(moduleFolder).build()
289
+ project.plugins.apply("com.android.library")
290
+ project.plugins.apply("com.facebook.react")
291
+ val extension =
292
+ project.extensions.getByType(ReactExtension::class.java).apply { root.set(moduleFolder) }
293
+
294
+ val actual = readPackageJsonFile(project, extension.root)
295
+
296
+ assertNotNull(actual)
297
+ assertNull(actual!!.codegenConfig)
298
+ }
299
+
300
+ @Test
301
+ fun readPackageJsonFile_withFileConfiguredInExtension_andHavingCodegenConfig_returnsValidCodegenConfig() {
302
+ val moduleFolder = tempFolder.newFolder("awesome-module")
303
+ File(moduleFolder, "package.json").apply {
304
+ writeText(
305
+ // language=json
306
+ """
307
+ {
308
+ "name": "a-library",
309
+ "codegenConfig": {}
310
+ }
311
+ """
312
+ .trimIndent())
313
+ }
314
+ val project = ProjectBuilder.builder().withProjectDir(moduleFolder).build()
315
+ project.plugins.apply("com.android.library")
316
+ project.plugins.apply("com.facebook.react")
317
+ val extension =
318
+ project.extensions.getByType(ReactExtension::class.java).apply { root.set(moduleFolder) }
319
+
320
+ val actual = readPackageJsonFile(project, extension.root)
321
+
322
+ assertNotNull(actual)
323
+ assertNotNull(actual!!.codegenConfig)
324
+ }
325
+ }