Skip to content

Commit

Permalink
Add option to include tests in paket install
Browse files Browse the repository at this point in the history
False by default
  • Loading branch information
Azurelol committed Apr 7, 2021
1 parent 085c6c3 commit 1b06bae
Show file tree
Hide file tree
Showing 5 changed files with 93 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -110,15 +110,16 @@ class PaketUnityIntegrationSpec extends IntegrationSpec {
def "run paketUnityInstall with dependencies"() {
given: "a small project with a unity project dir"
def unityProjectName = "Test.Project"
def dependencyName = "Wooga.TestDependency"
def packageName = "TestDependency"
def dependencyName = "Wooga.${packageName}"

and: "apply paket get plugin to get paket install task"
buildFile << """
${applyPlugin(PaketGetPlugin)}
""".stripIndent()

and: "setup paket configuration"
setupPaketProject(dependencyName, unityProjectName)
setupPaketProject(dependencyName, unityProjectName, packageName)

when:
def result = runTasksSuccessfully(PaketUnityPlugin.INSTALL_TASK_NAME)
Expand All @@ -144,7 +145,7 @@ class PaketUnityIntegrationSpec extends IntegrationSpec {
""".stripIndent()

and: "setup paket configuration"
setupPaketProject(dependencyName, unityProjectName)
setupPaketProject(dependencyName, unityProjectName, packageName)

and: "setup assembly definition file in package"
def asmdefFileName = "${dependencyName}.${PaketUnityInstall.assemblyDefinitionFileExtension}"
Expand Down Expand Up @@ -172,27 +173,76 @@ class PaketUnityIntegrationSpec extends IntegrationSpec {

unityProjectName = "Test.Project"
taskName = PaketUnityPlugin.INSTALL_TASK_NAME + unityProjectName
dependencyName = "Wooga.TestDependency"
packageName = "TestDependency"
dependencyName = "Wooga.${packageName}"
configurationString = baseConfigurationString.replace("#taskName%%", "'${taskName}'")
}

private void setupPaketProject(dependencyName, unityProjectName) {
@Unroll("Copy tests when includeTests is #includeTests and set in #configurationString")
def "copy test files"() {

given: "apply paket get plugin to get paket install task"
buildFile << """
${applyPlugin(PaketGetPlugin)}
""".stripIndent()

buildFile << """
${configurationString} {
includeTests = ${includeTests}
}
""".stripIndent()

and: "setup paket package, add tests"
setupPaketProject(dependencyName, unityProjectName, packageName)

when:
def result = runTasksSuccessfully(PaketUnityPlugin.INSTALL_TASK_NAME)
def outputDir = "${unityProjectName}/Assets/Paket.Unity3D/${dependencyName}"
def packagesDir = new File(projectDir, outputDir)
assert packagesDir.exists()

then:
result.wasExecuted(PaketUnityPlugin.INSTALL_TASK_NAME)
def testDirectoryPath = "${packagesDir}/${packageName}/${PaketUnityInstall.testsDirectoryName}"
def testDirectory = new File(testDirectoryPath)
includeTests == testDirectory.exists()

where:
baseConfigurationString | includeTests
"paketUnity" | true
"paketUnity" | false
"project.tasks.getByName(#taskName%%)" | true
"project.tasks.getByName(#taskName%%)" | false

unityProjectName = "Test.Project"
taskName = PaketUnityPlugin.INSTALL_TASK_NAME + unityProjectName
packageName = "TestDependency"
dependencyName = "Wooga.${packageName}"
configurationString = baseConfigurationString.replace("#taskName%%", "'${taskName}'")
}

private void setupPaketProject(nugetReference, unityProjectName, String packageName, useConvention = true) {

def dependencies = createFile("paket.dependencies")
dependencies << """
source https://nuget.org/api/v2
nuget ${dependencyName}
nuget ${nugetReference}
""".stripIndent()

def lockFile = createFile("paket.lock")
lockFile << """${dependencyName}""".stripIndent()
lockFile << """${nugetReference}""".stripIndent()

def references = createFile("${unityProjectName}/paket.unity3d.references")
references << """
${dependencyName}
${nugetReference}
""".stripIndent()

createFile("packages/${dependencyName}/content/${dependencyName}.cs")
if (useConvention){
createFile("packages/${nugetReference}/content/${packageName}/Runtime/RuntimeScript.cs")
createFile("packages/${nugetReference}/content/${packageName}/Editor/EditorScript.cs")
createFile("packages/${nugetReference}/content/${packageName}/${PaketUnityInstall.testsDirectoryName}/Editor/TestScript.cs")
createFile("packages/${nugetReference}/content/${packageName}/${PaketUnityInstall.testsDirectoryName}/Runtime/EditorTestScript.cs")
}
}

static boolean hasNoSource(ExecutionResult result, String taskName) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ class PaketUnityPlugin implements Plugin<Project> {
description = "Installs dependencies for Unity3d project ${referenceFile.parentFile.name} "
conventionMapping.map("paketOutputDirectoryName", { extension.getPaketOutputDirectoryName() })
conventionMapping.map("includeAssemblyDefinitions", { extension.getIncludeAssemblyDefinitions() })
conventionMapping.map("includeTests", { extension.getIncludeTests() })
conventionMapping.map("assemblyDefinitionFileStrategy", { extension.getAssemblyDefinitionFileStrategy() })
frameworks = extension.getPaketDependencies().getFrameworks()
lockFile = extension.getPaketLockFile()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,4 +66,15 @@ interface PaketUnityPluginExtension extends PaketPluginExtension {
* @return Whether assembly definition files should be included during installation
*/
Boolean getIncludeAssemblyDefinitions()

/**
* Sets whether test assemblies should be included during installation
* @param value
*/
void setIncludeTests(Boolean value)

/**
* @return Whether test assemblies should be included during installation
*/
Boolean getIncludeTests()
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ class DefaultPaketUnityPluginExtension extends DefaultPaketPluginExtension imple
protected AssemblyDefinitionFileStrategy assemblyDefinitionFileStrategy
protected String customPaketOutputDirectory
protected Boolean includeAssemblyDefinitions = false
protected Boolean includeTests = false

DefaultPaketUnityPluginExtension(Project project,final PaketDependencyHandler dependencyHandler) {
super(project, dependencyHandler)
Expand Down Expand Up @@ -71,4 +72,14 @@ class DefaultPaketUnityPluginExtension extends DefaultPaketPluginExtension imple
Boolean getIncludeAssemblyDefinitions() {
includeAssemblyDefinitions
}

@Override
void setIncludeTests(Boolean value) {
includeTests = value
}

@Override
Boolean getIncludeTests() {
includeTests
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -83,12 +83,19 @@ class PaketUnityInstall extends ConventionTask {
@Input
Boolean includeAssemblyDefinitions = false

/**
* Whether test assemblies (in $PACKAGE/Tests) should be included during installation
*/
@Input
Boolean includeTests = false

@Input
AssemblyDefinitionFileStrategy assemblyDefinitionFileStrategy

File projectRoot

public final static String assemblyDefinitionFileExtension = "asmdef"
public final static String testsDirectoryName = "Tests"

/**
* @return the installation output directory
Expand Down Expand Up @@ -133,6 +140,10 @@ class PaketUnityInstall extends ConventionTask {
fileTree.exclude("**/*.pdb")
fileTree.exclude("**/Meta")

if (!getIncludeTests()) {
fileTree.exclude("**/${nuget}/content/*/${testsDirectoryName}/**/*")
}

if (!getIncludeAssemblyDefinitions()) {
fileTree.exclude("**/*.${assemblyDefinitionFileExtension}")
}
Expand Down

0 comments on commit 1b06bae

Please sign in to comment.