Hi,
I’m writing my first standalone plugin that formats the project.version property according to if a buildNumber is passed via a custom extension or not.
I’m writing tests first and am using the ProjectBuilder to assist me, but can´t figure out how to add my custom extension.
Here is my plugin and extension code:
class VersionPluginExtension {
String buildNumber
}
class VersionPlugin implements Plugin<Project> {
@Override
void apply(Project project) {
project.extensions.create("version", VersionPluginExtension)
if (project.hasProperty('specificationVersion')) {
def minorRevision = project.extensions.version.buildNumber ? project.extensions.version.buildNumber : InetAddress.getLocalHost().getHostName()
project.version = project.getProperty('specificationVersion') + '.' + minorRevision
} else {
throw new PluginApplicationException('specificationVersion property does not exist')
}
}
}
and my test:
@Test
void whenSupplyingABuildNumberThenProjectVersionShouldBeSetToSpecificationVersionConcatenatedWithBuildNumber() {
def specificationVersion = '1.0'
def buildNumber = '1'
Project project = ProjectBuilder.builder().build()
project.ext.specificationVersion = specificationVersion
project.plugins.apply(VersionPlugin)
project.extensions.version.buildNumber = '1'
assert project.version == constructVersion(specificationVersion, buildNumber)
}
private String constructVersion(String specificationVersion, String buildNumber) {
specificationVersion + '.' + buildNumber
}
This test fails since the extension is evaluated and applied before I set it in the test using project.extensions. Declaring it before applying the plugin does not work because the plugin creates it in apply()
. So I found my self in a catch-22 situation.
There is very little information to be found on writing tests for plugins in the official documentation so I’m kinda stucked…
Anyone know how to achieve what I want?
Regards,
//Magnus