Passing locations to tests
It is possible to query a number of locations
ivypot.repoDetails.root (1)
ivypot.repoDetails.rootUri (2)
ivypot.repoDetails.binariesRoot (3)
ivypot.repoDetails.getBinariesRootFor('nodejs') (4)
ivypot.repoDetails.groovyRepository (5)
ivypot.repoDetails.kotlinRepository (6)
| 1 | The location of the off-line repository. | 
| 2 | A URI to the location of the off-line repository. | 
| 3 | The location under which binaries will be downloaded from binary repositories | 
| 4 | The location under which binaries will be downloaded for a specific binary repository.
The repository must be defined in the root ivypot.binaryRepositories block. | 
| 5 | The location of a file that can be included in compatibility tests and which defines the off-line repository in the correct Groovy DSL syntax. | 
| 6 | The location of a file that can be included in compatibility tests and which defines the off-line repository in the correct Kotlin DSL syntax. | 
| All of the above return lazy-evaluated providers. | 
These providers are useful for passing down to tests. For example:
tasks.named('test', Test) {
  systemProperty (
    'NODEJS_REPO',
    ivypot.repoDetails.getBinariesRootFor('nodejs').get()
  )
}
In an attempt to be helpful, when Ivypot is applied to a single project or to the subprojects of a multi-project, it will add the following system properties to every task of type Test.
  | 
Directory where off-line repository is located.  | 
  | 
File URI for the off-line IVY repository.  | 
  | 
Top directory where binaries are stored.  | 
  | 
File URI to the above location.  | 
  | 
Location of the Groovy DSL repository file.  | 
  | 
File URI for Groovy DSL.  | 
  | 
Location of the Kotlin DSL repository file.  | 
  | 
File URI for Kotlin DSL  | 
This can then be used in a test and the following example Spock test will show.
class ExampleSpec extends Specification {
  public static final String REPO_FILE = System.getProperty(
    'org.ysb33r.ivypot.repo.groovy.dsl.file'
  ) (1)
  @TempDir
  File testProjectDir (2)
  void 'some test'() {
    setup:
    writeBuildFile()
    when:
    final result = GradleRunner.create()
            .withProjectDir(testProjectDir)
            .withArguments(['myTestTask'])
            .forwardOutput()
            .build()
   then:
   result.task(':myTestTask').outcome == SUCCESS
  }
  void writeBuildFile() {
    new File(testProjectDir,'build.gradle').text = """
    plugins {
      id 'my.plugin.under.test'
    }
    ${new File(REPO_FILE).text} (3)
    """.stripIndent()
  }
}
| 1 | Location of the file. | 
| 2 | Spock temporary directory. | 
| 3 | Extract content. |