@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.
- package/build.gradle.kts +2 -75
- package/package.json +4 -3
- package/react-native-gradle-plugin/build.gradle.kts +84 -0
- package/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/TestReactExtension.kt +12 -0
- package/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/tasks/BundleHermesCTaskTest.kt +434 -0
- package/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/tasks/GenerateCodegenArtifactsTaskTest.kt +212 -0
- package/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/tasks/GenerateCodegenSchemaTaskTest.kt +192 -0
- package/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/tasks/internal/BuildCodegenCLITaskTest.kt +27 -0
- package/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/tasks/internal/PrepareBoostTaskTest.kt +105 -0
- package/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/tasks/internal/PrepareGlogTaskTest.kt +130 -0
- package/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/tasks/internal/PrepareJSCTaskTest.kt +128 -0
- package/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/tasks/internal/PreparePrefabHeadersTaskTest.kt +201 -0
- package/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/tasks/internal/utils/PrefabPreprocessingEntryTest.kt +25 -0
- package/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/tests/OsRule.kt +52 -0
- package/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/tests/TaskTestUtils.kt +69 -0
- package/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/tests/WithOs.kt +17 -0
- package/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/utils/AgpConfiguratorUtilsTest.kt +65 -0
- package/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/utils/BackwardCompatUtilsTest.kt +43 -0
- package/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/utils/DependencyUtilsTest.kt +404 -0
- package/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/utils/FileUtilsTest.kt +45 -0
- package/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/utils/JsonUtilsTest.kt +126 -0
- package/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/utils/KotlinStdlibCompatUtilsTest.kt +82 -0
- package/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/utils/NdkConfiguratorUtilsTest.kt +46 -0
- package/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/utils/OsTest.kt +86 -0
- package/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/utils/PathUtilsTest.kt +325 -0
- package/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/utils/ProjectUtilsTest.kt +533 -0
- package/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/utils/TaskUtilsTest.kt +77 -0
- package/settings-plugin/build.gradle.kts +50 -0
- package/settings-plugin/src/main/kotlin/com/facebook/react/ReactSettingsPlugin.kt +24 -0
- package/settings.gradle.kts +6 -1
- /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/ReactExtension.kt +0 -0
- /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/ReactPlugin.kt +0 -0
- /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/ReactRootProjectPlugin.kt +0 -0
- /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/TaskConfiguration.kt +0 -0
- /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/internal/PrivateReactExtension.kt +0 -0
- /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/model/ModelCodegenConfig.kt +0 -0
- /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/model/ModelCodegenConfigAndroid.kt +0 -0
- /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/model/ModelPackageJson.kt +0 -0
- /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/tasks/BundleHermesCTask.kt +0 -0
- /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/tasks/GenerateCodegenArtifactsTask.kt +0 -0
- /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/tasks/GenerateCodegenSchemaTask.kt +0 -0
- /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/tasks/internal/BuildCodegenCLITask.kt +0 -0
- /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/tasks/internal/PrepareBoostTask.kt +0 -0
- /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/tasks/internal/PrepareGlogTask.kt +0 -0
- /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/tasks/internal/PrepareJSCTask.kt +0 -0
- /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/tasks/internal/PreparePrefabHeadersTask.kt +0 -0
- /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/tasks/internal/utils/PrefabPreprocessingEntry.kt +0 -0
- /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/utils/AgpConfiguratorUtils.kt +0 -0
- /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/utils/BackwardCompatUtils.kt +0 -0
- /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/utils/DependencyUtils.kt +0 -0
- /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/utils/FileUtils.kt +0 -0
- /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/utils/JdkConfiguratorUtils.kt +0 -0
- /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/utils/JsonUtils.kt +0 -0
- /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/utils/KotlinStdlibCompatUtils.kt +0 -0
- /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/utils/NdkConfiguratorUtils.kt +0 -0
- /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/utils/Os.kt +0 -0
- /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/utils/PathUtils.kt +0 -0
- /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/utils/ProjectUtils.kt +0 -0
- /package/{src → react-native-gradle-plugin/src}/main/kotlin/com/facebook/react/utils/PropertyUtils.kt +0 -0
- /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
|
+
}
|