-
Notifications
You must be signed in to change notification settings - Fork 5
/
AssertJGeneratorExtension.kt
120 lines (105 loc) · 4.07 KB
/
AssertJGeneratorExtension.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
/*
* Copyright 2023. assertj-generator-gradle-plugin contributors.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package org.assertj.generator.gradle.tasks.config
import org.assertj.assertions.generator.AssertionsEntryPointType
import org.assertj.generator.gradle.tasks.config.patterns.JavaClassPatternFilterable
import org.assertj.generator.gradle.tasks.config.patterns.JavaPackageNamePatternFilterable
import org.gradle.api.Action
import org.gradle.api.Project
import org.gradle.api.file.DirectoryProperty
import org.gradle.api.file.SourceDirectorySet
import org.gradle.api.model.ObjectFactory
import org.gradle.api.tasks.SourceSet
import org.gradle.kotlin.dsl.newInstance
import javax.inject.Inject
/**
* Defines useful parameters and options for configuration of the
* {@link org.assertj.assertions.generator.AssertionGenerator}.
*/
open class AssertJGeneratorExtension @Inject internal constructor(
objects: ObjectFactory,
project: Project,
sourceSet: SourceSet
) {
val classDirectories: SourceDirectorySet =
objects.sourceDirectorySet("assertJClasses", "Classes to generate AssertJ assertions from")
val classes: JavaClassPatternFilterable = objects.newInstance()
fun classes(action: Action<in JavaClassPatternFilterable>): AssertJGeneratorExtension = apply {
action.execute(classes)
}
val packages: JavaPackageNamePatternFilterable = objects.newInstance()
fun packages(action: Action<in JavaPackageNamePatternFilterable>): AssertJGeneratorExtension = apply {
action.execute(packages)
}
/**
* Generate generating Soft Assertions entry point class.
* @return templates value, never {@code null}
*/
val templates: Templates = objects.newInstance()
/**
* Method used for improving configuration DSL
* @return {@code this}
*/
fun templates(action: Action<in Templates>): AssertJGeneratorExtension = apply {
action.execute(templates)
}
/**
* Contains configuration regarding the "Assertion" entry point class generation. By default, only the "standard"
* version is generated.
*
* See the
* [assertj generator docs](http://joel-costigliola.github.io/assertj/assertj-assertions-generator.html#generated-entry-points)
* on entry points.
*
* @return entry points configuration
*/
@Suppress("MaxLineLength")
val entryPoints: EntryPointGeneratorOptions = objects.newInstance()
/**
* Helper method for simplifying usage in build scripts
* @param rest Values to set
*/
fun setEntryPoints(vararg rest: AssertionsEntryPointType) {
this.entryPoints.only(rest = rest)
}
/**
* Exposed for build scripts
* @param values String values passed from a build script
*/
fun setEntryPoints(values: Collection<String>) {
entryPoints.only(rest = values.toTypedArray())
}
/**
* Used to change "entry point" class generation.
* @return this
*/
fun entryPoints(action: Action<in EntryPointGeneratorOptions>): AssertJGeneratorExtension = apply {
action.execute(entryPoints)
}
/**
* The root directory where all generated files will be placed (within sub-folders for packages).
* @return File the output directory for {@code sourceSet}
*/
val outputDir: DirectoryProperty = objects.directoryProperty()
.convention(project.layout.buildDirectory.dir("generated-src/${sourceSet.name}-test/java"))
/**
* Flag specifying whether to generate hierarchical assertions. The default is false.
* @return true if generating hierarchical
*/
var hierarchical = false
/**
* Skip generating classes, handy way to disable temporarily.
* @return true if skipping this set
*/
var skip = false
}