Skip to content

Commit 9ec806f

Browse files
committed
Rename all JUnit-related bindings to names starting with junit
Move tests regarding default bindings and evaluation assertion to correct class.
1 parent 7e7cc2f commit 9ec806f

File tree

6 files changed

+93
-62
lines changed

6 files changed

+93
-62
lines changed

gradle.properties

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,14 @@ javacRelease = 8
1616
apiGuardianVersion = 1.0.0
1717
assertJVersion = 3.9.0
1818
degraphVersion = 0.1.4
19+
groovyVersion = 2.4.12
20+
jmhVersion = 1.20
1921
junit4Version = 4.12
2022
kotlinVersion = 1.2.21
2123
log4jVersion = 2.10.0
2224
mockitoVersion = 2.13.0
2325
ota4jVersion = 1.0.0
2426
shadowVersion = 2.0.2
25-
jmhVersion = 1.20
2627

2728
defaultBuiltBy = JUnit Team
2829
releaseBranch = master

junit-jupiter-api/src/main/java/org/junit/jupiter/api/EnabledIf.java

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -81,12 +81,15 @@
8181
* ExtensionContext}.
8282
*
8383
* <ul>
84-
* <li>{@link Bind#JUPITER_TAGS jupiterTags}: All tags as a {@code Set<String>}</li>
85-
* <li>{@link Bind#JUPITER_DISPLAY_NAME jupiterDisplayName}: Display name as a {@code String}</li>
86-
* <li>{@link Bind#JUPITER_UNIQUE_ID jupiterUniqueId}: Unique ID as a {@code String}</li>
87-
* <li>{@link Bind#JUPITER_CONFIGURATION_PARAMETER jupiterConfigurationParameter}: Configuration parameter accessor</li>
84+
* <li>{@link Bind#JUNIT_TAGS junitTags}: All tags as a {@code Set<String>}</li>
85+
* <li>{@link Bind#JUNIT_DISPLAY_NAME junitDisplayName}: Display name as a {@code String}</li>
86+
* <li>{@link Bind#JUNIT_UNIQUE_ID junitUniqueId}: Unique ID as a {@code String}</li>
87+
* <li>{@link Bind#JUNIT_CONFIGURATION_PARAMETER junitConfigurationParameter}: Configuration parameter accessor</li>
8888
* </ul>
8989
*
90+
* <p>Scripts must not declare variables using names that start with {@code junit}.
91+
* They might clash with new bindings introduced in the future.
92+
*
9093
* @since 5.1
9194
* @see Disabled
9295
* @see javax.script.ScriptEngine
@@ -111,14 +114,14 @@
111114
*
112115
* <p>Defaults to: <code>"Script `{script}` evaluated to: {result}"</code>.
113116
*
114-
* <h4>Supported placeholders</h4>
117+
* <h5>Supported placeholders</h5>
115118
* <ul>
116119
* <li><code>{annotation}</code>: the String representation of the {@code @EnabledIf} annotation instance</li>
117120
* <li><code>{script}</code>: the script text that was evaluated</li>
118121
* <li><code>{result}</code>: the String representation of the return value of the evaluated script</li>
119122
* </ul>
120123
*
121-
* @return reason the reason the element is enabled or disabled
124+
* @return the reason the element is enabled or disabled
122125
* @see org.junit.jupiter.api.extension.ConditionEvaluationResult#getReason()
123126
*/
124127
String reason() default "Script `{script}` evaluated to: {result}";
@@ -151,7 +154,7 @@ interface Bind {
151154
*
152155
* @see org.junit.jupiter.api.extension.ExtensionContext#getTags()
153156
*/
154-
String JUPITER_TAGS = "jupiterTags";
157+
String JUNIT_TAGS = "junitTags";
155158

156159
/**
157160
* Unique ID associated with the current extension context.
@@ -160,7 +163,7 @@ interface Bind {
160163
*
161164
* @see org.junit.jupiter.api.extension.ExtensionContext#getUniqueId()
162165
*/
163-
String JUPITER_UNIQUE_ID = "jupiterUniqueId";
166+
String JUNIT_UNIQUE_ID = "junitUniqueId";
164167

165168
/**
166169
* Display name of the test or container.
@@ -169,7 +172,7 @@ interface Bind {
169172
*
170173
* @see org.junit.jupiter.api.extension.ExtensionContext#getDisplayName()
171174
*/
172-
String JUPITER_DISPLAY_NAME = "jupiterDisplayName";
175+
String JUNIT_DISPLAY_NAME = "junitDisplayName";
173176

174177
/**
175178
* Accessor for JUnit Platform configuration parameters.
@@ -178,7 +181,7 @@ interface Bind {
178181
*
179182
* @see org.junit.jupiter.api.extension.ExtensionContext#getConfigurationParameter(String)
180183
*/
181-
String JUPITER_CONFIGURATION_PARAMETER = "jupiterConfigurationParameter";
184+
String JUNIT_CONFIGURATION_PARAMETER = "junitConfigurationParameter";
182185

183186
/**
184187
* Accessor for JVM system properties.

junit-jupiter-engine/junit-jupiter-engine.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,4 +69,5 @@ dependencies {
6969

7070
testRuntimeOnly("org.apache.logging.log4j:log4j-core:${log4jVersion}")
7171
testRuntimeOnly("org.apache.logging.log4j:log4j-jul:${log4jVersion}")
72+
testRuntimeOnly("org.codehaus.groovy:groovy-jsr223:${groovyVersion}")
7273
}

junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/extension/EnabledIfCondition.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,10 @@ public ConditionEvaluationResult evaluateExecutionCondition(ExtensionContext con
7272
// Bind context-aware names to their current values
7373
Accessor configurationParameterAccessor = new ConfigurationParameterAccessor(context);
7474
Consumer<Bindings> contextBinder = bindings -> {
75-
bindings.put(EnabledIf.Bind.JUPITER_TAGS, context.getTags());
76-
bindings.put(EnabledIf.Bind.JUPITER_UNIQUE_ID, context.getUniqueId());
77-
bindings.put(EnabledIf.Bind.JUPITER_DISPLAY_NAME, context.getDisplayName());
78-
bindings.put(EnabledIf.Bind.JUPITER_CONFIGURATION_PARAMETER, configurationParameterAccessor);
75+
bindings.put(EnabledIf.Bind.JUNIT_TAGS, context.getTags());
76+
bindings.put(EnabledIf.Bind.JUNIT_UNIQUE_ID, context.getUniqueId());
77+
bindings.put(EnabledIf.Bind.JUNIT_DISPLAY_NAME, context.getDisplayName());
78+
bindings.put(EnabledIf.Bind.JUNIT_CONFIGURATION_PARAMETER, configurationParameterAccessor);
7979
};
8080

8181
return evaluate(optionalAnnotation.get(), contextBinder);
@@ -126,7 +126,7 @@ private ConditionEvaluationResult evaluate(EnabledIf annotation, ScriptEngine sc
126126
boolean enabled;
127127

128128
if (result instanceof Boolean) {
129-
enabled = ((Boolean) result).booleanValue();
129+
enabled = (Boolean) result;
130130
}
131131
else {
132132
enabled = Boolean.parseBoolean(resultAsString);

junit-jupiter-engine/src/test/java/org/junit/jupiter/engine/extension/EnabledIfConditionTests.java

Lines changed: 67 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424

2525
import java.util.Arrays;
2626
import java.util.Collections;
27-
import java.util.List;
2827

2928
import javax.script.Bindings;
3029
import javax.script.ScriptEngine;
@@ -91,13 +90,15 @@ void trivialGroovyScript() {
9190
@Test
9291
void trivialNonJavaScript() {
9392
EnabledIf annotation = mockEnabledIfAnnotation("one", "two");
94-
assertLinesMatchCreatedScript(Arrays.asList("one", "two"), annotation, "unknown language");
93+
String script = condition.createScript(annotation, "unknown language");
94+
assertLinesMatch(Arrays.asList("one", "two"), Arrays.asList(script.split("\\R")));
9595
}
9696

9797
@Test
9898
void createJavaScriptMultipleLines() {
9999
EnabledIf annotation = mockEnabledIfAnnotation("m1()", "m2()");
100-
assertLinesMatchCreatedScript(Arrays.asList("m1()", "m2()"), annotation, "ECMAScript");
100+
String script = condition.createScript(annotation, "ECMAScript");
101+
assertLinesMatch(Arrays.asList("m1()", "m2()"), Arrays.asList(script.split("\\R")));
101102
}
102103

103104
@Test
@@ -119,17 +120,22 @@ void createReasonWithCustomMessage() {
119120
void syntaxErrorInScriptFailsTest() {
120121
EnabledIf annotation = mockEnabledIfAnnotation("syntax error");
121122
Exception exception = assertThrows(JUnitException.class, () -> evaluate(annotation));
122-
assertTrue(exception.getMessage().contains("@EnabledIf"));
123-
assertTrue(exception.getMessage().contains("script"));
124-
assertTrue(exception.getMessage().contains("bindings"));
123+
assertThat(exception.getMessage()).contains("@EnabledIf", "script", "syntax error", "bindings");
124+
}
125+
126+
@Test
127+
@EnabledIf("true")
128+
void defaultAnnotationValues() {
129+
EnabledIf annotation = reflectEnabledIfAnnotation("defaultAnnotationValues");
130+
assertEquals("true", String.join("-", annotation.value()));
131+
assertEquals("nashorn", annotation.engine());
132+
assertEquals("Script `{script}` evaluated to: {result}", annotation.reason());
125133
}
126134

127135
@Test
128136
@EnabledIf(value = "true", reason = "{annotation}")
129-
void createReasonWithAnnotationPlaceholder() throws Exception {
130-
EnabledIf annotation = getClass() //
131-
.getDeclaredMethod("createReasonWithAnnotationPlaceholder") //
132-
.getDeclaredAnnotation(EnabledIf.class);
137+
void createReasonWithAnnotationPlaceholder() {
138+
EnabledIf annotation = reflectEnabledIfAnnotation("createReasonWithAnnotationPlaceholder");
133139
ConditionEvaluationResult result = evaluate(annotation);
134140
assertFalse(result.isDisabled());
135141
String actual = result.getReason().orElseThrow(() -> new AssertionError("causeless"));
@@ -139,21 +145,53 @@ void createReasonWithAnnotationPlaceholder() throws Exception {
139145
.endsWith(")");
140146
}
141147

142-
private ConditionEvaluationResult evaluate(EnabledIf annotation) {
143-
return condition.evaluate(annotation, this::mockBinder);
148+
@Test
149+
void getJUnitConfigurationParameterWithJavaScript() {
150+
EnabledIf annotation = mockEnabledIfAnnotation("junitConfigurationParameter.get('XXX')");
151+
ConditionEvaluationResult result = evaluate(annotation);
152+
assertTrue(result.isDisabled());
153+
String actual = result.getReason().orElseThrow(() -> new AssertionError("causeless"));
154+
assertEquals("Script `junitConfigurationParameter.get('XXX')` evaluated to: null", actual);
155+
}
156+
157+
@Test
158+
void getJUnitConfigurationParameterWithJavaScriptAndCheckForNull() {
159+
EnabledIf annotation = mockEnabledIfAnnotation("junitConfigurationParameter.get('XXX') != null");
160+
ConditionEvaluationResult result = evaluate(annotation);
161+
assertTrue(result.isDisabled());
162+
String actual = result.getReason().orElseThrow(() -> new AssertionError("causeless"));
163+
assertEquals("Script `junitConfigurationParameter.get('XXX') != null` evaluated to: false", actual);
164+
}
165+
166+
@Test
167+
void getJUnitConfigurationParameterWithGroovy() {
168+
EnabledIf annotation = mockEnabledIfAnnotation("junitConfigurationParameter.get('XXX')");
169+
when(annotation.engine()).thenReturn("Groovy");
170+
ConditionEvaluationResult result = evaluate(annotation);
171+
assertTrue(result.isDisabled());
172+
String actual = result.getReason().orElseThrow(() -> new AssertionError("causeless"));
173+
assertEquals("Script `junitConfigurationParameter.get('XXX')` evaluated to: null", actual);
174+
}
175+
176+
@Test
177+
void getJUnitConfigurationParameterWithGroovyAndCheckForNull() {
178+
EnabledIf annotation = mockEnabledIfAnnotation("junitConfigurationParameter.get('XXX') != null");
179+
when(annotation.engine()).thenReturn("Groovy");
180+
ConditionEvaluationResult result = evaluate(annotation);
181+
assertTrue(result.isDisabled());
182+
String actual = result.getReason().orElseThrow(() -> new AssertionError("causeless"));
183+
assertEquals("Script `junitConfigurationParameter.get('XXX') != null` evaluated to: false", actual);
144184
}
145185

146-
private void assertLinesMatchCreatedScript(List<String> expectedLines, EnabledIf annotation, String language) {
147-
EnabledIfCondition condition = new EnabledIfCondition();
148-
String actual = condition.createScript(annotation, language);
149-
assertLinesMatch(expectedLines, Arrays.asList(actual.split("\\R")));
186+
private ConditionEvaluationResult evaluate(EnabledIf annotation) {
187+
return condition.evaluate(annotation, this::mockBinder);
150188
}
151189

152190
private void mockBinder(Bindings bindings) {
153-
bindings.put("jupiterTags", Collections.emptySet());
154-
bindings.put("jupiterUniqueId", "Mock for UniqueId");
155-
bindings.put("jupiterDisplayName", "Mock for DisplayName");
156-
bindings.put("jupiterConfigurationParameter", Collections.emptyMap());
191+
bindings.put(EnabledIf.Bind.JUNIT_TAGS, Collections.emptySet());
192+
bindings.put(EnabledIf.Bind.JUNIT_UNIQUE_ID, "Mock for UniqueId");
193+
bindings.put(EnabledIf.Bind.JUNIT_DISPLAY_NAME, "Mock for DisplayName");
194+
bindings.put(EnabledIf.Bind.JUNIT_CONFIGURATION_PARAMETER, Collections.emptyMap());
157195
}
158196

159197
private EnabledIf mockEnabledIfAnnotation(String... value) {
@@ -171,4 +209,13 @@ private EnabledIf mockEnabledIfAnnotation(String... value) {
171209
return annotation;
172210
}
173211

212+
private EnabledIf reflectEnabledIfAnnotation(String methodName, Class<?>... parameterTypes) {
213+
try {
214+
return getClass().getDeclaredMethod(methodName, parameterTypes).getDeclaredAnnotation(EnabledIf.class);
215+
}
216+
catch (NoSuchMethodException e) {
217+
throw new AssertionError(e);
218+
}
219+
}
220+
174221
}

platform-tests/src/test/java/org/junit/jupiter/extensions/EnabledIfTests.java

Lines changed: 5 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import static org.junit.jupiter.api.Assertions.assertTrue;
1515
import static org.junit.jupiter.api.Assertions.fail;
1616

17+
import java.io.IOException;
1718
import java.lang.annotation.ElementType;
1819
import java.lang.annotation.Retention;
1920
import java.lang.annotation.RetentionPolicy;
@@ -99,32 +100,10 @@ void getBoolean() {
99100
"java.lang.System.getProperties().put('volatile', path)", //
100101
"Files.exists(path)" //
101102
})
102-
void multiLineAndImportJavaPackage() {
103-
assertTrue(Files.exists((Path) System.getProperties().get("volatile")));
104-
}
105-
106-
@Test
107-
@EnabledIf("jupiterConfigurationParameter.get('XXX')")
108-
void getJupiterConfigurationParameterWithJavaScript() {
109-
fail("test must not be executed");
110-
}
111-
112-
@Test
113-
@EnabledIf("jupiterConfigurationParameter.get('XXX') != null")
114-
void getJupiterConfigurationParameterWithJavaScriptAndCheckForNull() {
115-
fail("test must not be executed");
116-
}
117-
118-
@Test
119-
@EnabledIf(engine = "groovy", value = "jupiterConfigurationParameter.get('XXX')")
120-
void getJupiterConfigurationParameterWithGroovy() {
121-
fail("test must not be executed");
122-
}
123-
124-
@Test
125-
@EnabledIf(engine = "groovy", value = "jupiterConfigurationParameter.get('XXX') != null")
126-
void getJupiterConfigurationParameterWithGroovyAndCheckForNull() {
127-
fail("test must not be executed");
103+
void multiLineAndImportJavaPackage() throws IOException {
104+
Path path = (Path) System.getProperties().get("volatile");
105+
assertTrue(Files.exists(path));
106+
Files.deleteIfExists(path);
128107
}
129108

130109
@Test

0 commit comments

Comments
 (0)