Skip to content

Commit 80e3a2a

Browse files
Merge pull request #294 from nebula-plugins/fix-test-pollution
Tests: fix test pollution; remove debug logging
2 parents 31868ce + 97e06f3 commit 80e3a2a

File tree

4 files changed

+60
-37
lines changed

4 files changed

+60
-37
lines changed

build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,8 @@ tasks.named('compileKotlin') {
8888
test.dependsOn jar
8989

9090
tasks.withType(Test).configureEach {
91+
// Ensure test failures fail the build (overrides any plugin that sets ignoreFailures)
92+
ignoreFailures = false
9193
maxParallelForks = Runtime.runtime.availableProcessors().intdiv(2) ?: 1
9294
testLogging {
9395
events "PASSED", "FAILED", "SKIPPED"

src/main/groovy/nebula/plugin/dependencylock/tasks/GenerateLockTask.groovy

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -100,15 +100,6 @@ abstract class GenerateLockTask extends AbstractLockTask {
100100
def explicitConfs = getConfigurations()
101101
Collection<Configuration> confs = (explicitConfs != null) ? explicitConfs :
102102
lockableConfigurations(project, project, getConfigurationNames().getOrElse([] as Set), getSkippedConfigurationNames().getOrElse([] as Set))
103-
// Check resolved dependencies
104-
def testRuntimeConf = confs.find { it.name == 'testRuntimeClasspath' || it.name == 'runtimeClasspath' }
105-
if (testRuntimeConf) {
106-
System.err.println "Dependencies in ${testRuntimeConf.name}:"
107-
testRuntimeConf.resolvedConfiguration.firstLevelModuleDependencies.each { dep ->
108-
System.err.println " - ${dep.moduleGroup}:${dep.moduleName}:${dep.moduleVersion}"
109-
}
110-
}
111-
112103
Map dependencyMap = new GenerateLockFromConfigurations().lock(confs)
113104
new DependencyLockWriter(getDependenciesLock().get().asFile, getSkippedDependencies().getOrElse([] as Set)).writeLock(dependencyMap)
114105
}

src/test/groovy/nebula/plugin/dependencylock/tasks/GenerateLockTaskSpec.groovy

Lines changed: 33 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,22 @@ import nebula.test.ProjectSpec
2121
import org.gradle.testfixtures.ProjectBuilder
2222
import spock.lang.Unroll
2323

24+
import java.util.UUID
25+
2426
class GenerateLockTaskSpec extends ProjectSpec {
2527
final String taskName = 'generateLock'
2628

2729
def setupSpec() {
2830
Fixture.createFixtureIfNotCreated()
2931
}
3032

33+
/** Creates a fresh project with a unique dir to avoid test pollution (shared project accumulates deps across tests). */
34+
private org.gradle.api.Project createFreshProjectForLockTest() {
35+
def dir = new File(projectDir, "fresh-${UUID.randomUUID()}")
36+
dir.mkdirs()
37+
ProjectBuilder.builder().withName('lockTest').withProjectDir(dir).build()
38+
}
39+
3140
def 'simple lock'() {
3241
project.apply plugin: 'java'
3342

@@ -125,14 +134,15 @@ class GenerateLockTaskSpec extends ProjectSpec {
125134
}
126135

127136
def 'skip dependencies via transitives when configured'() {
128-
project.apply plugin: 'java'
129-
project.repositories { maven { url Fixture.repo } }
130-
project.dependencies {
137+
def proj = createFreshProjectForLockTest()
138+
proj.apply plugin: 'java'
139+
proj.repositories { maven { url Fixture.repo } }
140+
proj.dependencies {
131141
implementation 'test.example:foobaz:1.+'
132142
}
133143

134-
GenerateLockTask task = project.tasks.create(taskName, GenerateLockTask)
135-
task.dependenciesLock.set(project.layout.buildDirectory.file('dependencies.lock'))
144+
GenerateLockTask task = proj.tasks.create(taskName, GenerateLockTask)
145+
task.dependenciesLock.set(proj.layout.buildDirectory.file('dependencies.lock'))
136146
task.configurationNames.set(['testRuntimeClasspath'] as Set)
137147
task.skippedDependencies.set(['test.example:foo'] as Set)
138148
task.includeTransitives.set(true)
@@ -387,15 +397,15 @@ class GenerateLockTaskSpec extends ProjectSpec {
387397
}
388398

389399
def 'simple transitive lock'() {
390-
project.apply plugin: 'java'
391-
392-
project.repositories { maven { url Fixture.repo } }
393-
project.dependencies {
400+
def proj = createFreshProjectForLockTest()
401+
proj.apply plugin: 'java'
402+
proj.repositories { maven { url Fixture.repo } }
403+
proj.dependencies {
394404
implementation 'test.example:bar:1.+'
395405
}
396406

397-
GenerateLockTask task = project.tasks.create(taskName, GenerateLockTask)
398-
task.dependenciesLock.set(project.layout.buildDirectory.file('dependencies.lock'))
407+
GenerateLockTask task = proj.tasks.create(taskName, GenerateLockTask)
408+
task.dependenciesLock.set(proj.layout.buildDirectory.file('dependencies.lock'))
399409
task.configurationNames.set(['testRuntimeClasspath'] as Set)
400410
task.includeTransitives.set(true)
401411

@@ -499,16 +509,16 @@ class GenerateLockTaskSpec extends ProjectSpec {
499509
}
500510

501511
def 'one level transitive test'() {
502-
project.apply plugin: 'java'
503-
504-
project.repositories { maven { url Fixture.repo } }
505-
project.dependencies {
512+
def proj = createFreshProjectForLockTest()
513+
proj.apply plugin: 'java'
514+
proj.repositories { maven { url Fixture.repo } }
515+
proj.dependencies {
506516
implementation 'test.example:bar:1.+'
507517
implementation 'test.example:foobaz:1.+'
508518
}
509519

510-
GenerateLockTask task = project.tasks.create(taskName, GenerateLockTask)
511-
task.dependenciesLock.set(project.layout.buildDirectory.file('dependencies.lock'))
520+
GenerateLockTask task = proj.tasks.create(taskName, GenerateLockTask)
521+
task.dependenciesLock.set(proj.layout.buildDirectory.file('dependencies.lock'))
512522
task.configurationNames.set(['testRuntimeClasspath'] as Set)
513523
task.includeTransitives.set(true)
514524

@@ -544,15 +554,15 @@ class GenerateLockTaskSpec extends ProjectSpec {
544554
}
545555

546556
def 'multi-level transitive test'() {
547-
project.apply plugin: 'java'
548-
549-
project.repositories { maven { url Fixture.repo } }
550-
project.dependencies {
557+
def proj = createFreshProjectForLockTest()
558+
proj.apply plugin: 'java'
559+
proj.repositories { maven { url Fixture.repo } }
560+
proj.dependencies {
551561
implementation 'test.example:transitive:1.0.0'
552562
}
553563

554-
GenerateLockTask task = project.tasks.create(taskName, GenerateLockTask)
555-
task.dependenciesLock.set(project.layout.buildDirectory.file('dependencies.lock'))
564+
GenerateLockTask task = proj.tasks.create(taskName, GenerateLockTask)
565+
task.dependenciesLock.set(proj.layout.buildDirectory.file('dependencies.lock'))
556566
task.configurationNames.set(['testRuntimeClasspath'] as Set)
557567
task.includeTransitives.set(true)
558568

src/test/groovy/nebula/plugin/dependencylock/tasks/UpdateLockTaskSpec.groovy

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,13 @@
1515
*/
1616
package nebula.plugin.dependencylock.tasks
1717

18+
import groovy.json.JsonSlurper
1819
import nebula.plugin.dependencylock.dependencyfixture.Fixture
1920
import nebula.plugin.dependencylock.util.LockGenerator
2021
import nebula.test.ProjectSpec
22+
import org.gradle.testfixtures.ProjectBuilder
23+
24+
import java.util.UUID
2125

2226
class UpdateLockTaskSpec extends ProjectSpec {
2327
final String taskName = 'updateLock'
@@ -38,13 +42,25 @@ class UpdateLockTaskSpec extends ProjectSpec {
3842
task
3943
}
4044

45+
/** Fresh project to avoid test pollution (shared project accumulates deps). */
46+
private org.gradle.api.Project createFreshProjectForUpdateLockTest() {
47+
def dir = new File(projectDir, "fresh-update-${UUID.randomUUID()}")
48+
dir.mkdirs()
49+
def proj = ProjectBuilder.builder().withName('updateLockTest').withProjectDir(dir).build()
50+
proj.apply plugin: 'java'
51+
proj.repositories { maven { url Fixture.repo } }
52+
proj
53+
}
54+
4155
def 'transitives are automatically updated'() {
42-
project.dependencies {
56+
def proj = createFreshProjectForUpdateLockTest()
57+
proj.dependencies {
4358
implementation 'test.example:bar:1.+'
4459
implementation 'test.example:qux:1.0.0'
4560
}
4661

47-
def lockFile = new File(project.projectDir, 'dependencies.lock')
62+
def lockFile = new File(proj.projectDir, 'dependencies.lock')
63+
lockFile.parentFile.mkdirs()
4864
def lockText = LockGenerator.duplicateIntoConfigsWhenUsingImplementationConfigurationOnly(
4965
'''\
5066
"test.example:bar": {
@@ -63,8 +79,10 @@ class UpdateLockTaskSpec extends ProjectSpec {
6379
)
6480
lockFile.text = lockText
6581

66-
def task = createTask()
67-
task.includeTransitives = true
82+
def task = proj.tasks.create(taskName, UpdateLockTask)
83+
task.dependenciesLock.set(proj.layout.buildDirectory.file('dependencies.lock'))
84+
task.configurationNames.set(LockGenerator.DEFAULT_CONFIG_NAMES)
85+
task.includeTransitives.set(true)
6886

6987
def updatedLock = LockGenerator.duplicateIntoConfigsWhenUsingImplementationConfigurationOnly(
7088
'''\
@@ -87,6 +105,8 @@ class UpdateLockTaskSpec extends ProjectSpec {
87105
task.lock()
88106

89107
then:
90-
task.dependenciesLock.asFile.get().text == updatedLock
108+
def actual = new JsonSlurper().parseText(task.dependenciesLock.asFile.get().text)
109+
def expected = new JsonSlurper().parseText(updatedLock)
110+
actual == expected
91111
}
92112
}

0 commit comments

Comments
 (0)