Add unit tests for GenerateCodegenSchemaTask

Summary:
Adding tests for the `GenerateCodegenSchemaTask`.
Plus fixing a bug where `delete()` was used instead of `deleteRecursively` causing
the files inside the output folder to don't be properly cleaned up.

Changelog:
[Internal] [Changed] - Add unit tests for GenerateCodegenSchemaTask

Reviewed By: ShikaSD

Differential Revision: D31142346

fbshipit-source-id: 69bb026fa2c64d91193a153fdc99c9b5d0a9e1ff
This commit is contained in:
Nicola Corti
2021-09-24 03:02:55 -07:00
committed by Facebook GitHub Bot
parent 0d9b32769c
commit 861acce530
2 changed files with 125 additions and 2 deletions
@@ -35,11 +35,19 @@ abstract class GenerateCodegenSchemaTask : Exec() {
val generatedSchemaFile: Provider<RegularFile> = generatedSrcDir.file("schema.json")
override fun exec() {
wipeOutputDir()
setupCommandLine()
super.exec()
}
internal fun wipeOutputDir() {
generatedSrcDir.asFile.get().apply {
delete()
deleteRecursively()
mkdirs()
}
}
internal fun setupCommandLine() {
commandLine(
windowsAwareYarn(
*nodeExecutableAndArgs.get().toTypedArray(),
@@ -51,6 +59,5 @@ abstract class GenerateCodegenSchemaTask : Exec() {
generatedSchemaFile.get().asFile.absolutePath,
jsRootDir.asFile.get().absolutePath,
))
super.exec()
}
}
@@ -0,0 +1,116 @@
/*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
package com.facebook.react.tasks
import com.facebook.react.tests.OS
import com.facebook.react.tests.OsRule
import com.facebook.react.tests.WithOs
import com.facebook.react.tests.createTestTask
import java.io.File
import org.gradle.api.tasks.*
import org.junit.Assert.*
import org.junit.Rule
import org.junit.Test
import org.junit.rules.TemporaryFolder
class GenerateCodegenSchemaTaskTest {
@get:Rule val tempFolder = TemporaryFolder()
@get:Rule val osRule = OsRule()
@Test
fun generateCodegenSchema_inputFiles_areSetCorrectly() {
val jsRootDir =
tempFolder.newFolder("js").apply {
File(this, "file.js").createNewFile()
File(this, "ignore.txt").createNewFile()
}
val task = createTestTask<GenerateCodegenSchemaTask> { it.jsRootDir.set(jsRootDir) }
assertEquals(jsRootDir, task.jsInputFiles.dir)
assertEquals(setOf("**/*.js"), task.jsInputFiles.includes)
assertEquals(1, task.jsInputFiles.files.size)
assertEquals(setOf(File(jsRootDir, "file.js")), task.jsInputFiles.files)
}
@Test
fun generateCodegenSchema_outputFile_isSetCorrectly() {
val outputDir = tempFolder.newFolder("output")
val task = createTestTask<GenerateCodegenSchemaTask> { it.generatedSrcDir.set(outputDir) }
assertEquals(File(outputDir, "schema.json"), task.generatedSchemaFile.get().asFile)
}
@Test
fun generateCodegenSchema_nodeExecutablesArgs_areInsideInput() {
val task =
createTestTask<GenerateCodegenSchemaTask> {
it.nodeExecutableAndArgs.set(listOf("npm", "help"))
}
assertEquals(listOf("npm", "help"), task.nodeExecutableAndArgs.get())
assertTrue(task.inputs.properties.containsKey("nodeExecutableAndArgs"))
}
@Test
fun wipeOutputDir_willCreateOutputDir() {
val task =
createTestTask<GenerateCodegenSchemaTask> {
it.generatedSrcDir.set(File(tempFolder.root, "output"))
}
task.wipeOutputDir()
assertTrue(File(tempFolder.root, "output").exists())
assertEquals(0, File(tempFolder.root, "output").listFiles()?.size)
}
@Test
fun wipeOutputDir_willWipeOutputDir() {
val outputDir =
tempFolder.newFolder("output").apply { File(this, "some-generated-file").createNewFile() }
val task = createTestTask<GenerateCodegenSchemaTask> { it.generatedSrcDir.set(outputDir) }
task.wipeOutputDir()
assertTrue(outputDir.exists())
assertEquals(0, outputDir.listFiles()?.size)
}
@Test
@WithOs(OS.UNIX)
fun setupCommandLine_willSetupCorrectly() {
val codegenDir = tempFolder.newFolder("codegen")
val jsRootDir = tempFolder.newFolder("js")
val outputDir = tempFolder.newFolder("output")
val task =
createTestTask<GenerateCodegenSchemaTask> {
it.codegenDir.set(codegenDir)
it.jsRootDir.set(jsRootDir)
it.generatedSrcDir.set(outputDir)
it.nodeExecutableAndArgs.set(listOf("--verbose"))
}
task.setupCommandLine()
assertEquals(
listOf(
"yarn",
"--verbose",
File(codegenDir, "lib/cli/combine/combine-js-to-schema-cli.js").toString(),
File(outputDir, "schema.json").toString(),
jsRootDir.toString(),
),
task.commandLine.toMutableList())
}
}