Skip to content

Commit 6104b21

Browse files
blafondDavideD
authored andcommitted
[hibernate#1827] Create @EnabledFor and @DisabledFor annotations
1 parent 2e88335 commit 6104b21

File tree

6 files changed

+214
-0
lines changed

6 files changed

+214
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/* Hibernate, Relational Persistence for Idiomatic Java
2+
*
3+
* SPDX-License-Identifier: Apache-2.0
4+
* Copyright: Red Hat Inc. and Hibernate Authors
5+
*/
6+
package org.hibernate.reactive.annotations;
7+
8+
import java.lang.annotation.ElementType;
9+
import java.lang.annotation.Inherited;
10+
import java.lang.annotation.Repeatable;
11+
import java.lang.annotation.Retention;
12+
import java.lang.annotation.RetentionPolicy;
13+
import java.lang.annotation.Target;
14+
15+
import org.hibernate.reactive.containers.DatabaseConfiguration;
16+
17+
import org.junit.jupiter.api.extension.ExtendWith;
18+
19+
/**
20+
* Test will be disabled for the selected {@link org.hibernate.reactive.containers.DatabaseConfiguration.DBType}
21+
*
22+
* @see EnabledFor
23+
*/
24+
@Inherited
25+
@Retention( RetentionPolicy.RUNTIME )
26+
@Target({ ElementType.TYPE, ElementType.METHOD})
27+
@Repeatable( DisabledForDbTypes.class )
28+
@ExtendWith( DisabledForDBTypeCondition.class )
29+
public @interface DisabledFor {
30+
DatabaseConfiguration.DBType[] value();
31+
String reason() default "<undefined>";
32+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/* Hibernate, Relational Persistence for Idiomatic Java
2+
*
3+
* SPDX-License-Identifier: Apache-2.0
4+
* Copyright: Red Hat Inc. and Hibernate Authors
5+
*/
6+
package org.hibernate.reactive.annotations;
7+
8+
import java.util.Arrays;
9+
import java.util.List;
10+
11+
import org.hibernate.reactive.containers.DatabaseConfiguration.DBType;
12+
13+
import org.junit.jupiter.api.extension.ConditionEvaluationResult;
14+
import org.junit.jupiter.api.extension.ExecutionCondition;
15+
import org.junit.jupiter.api.extension.ExtensionContext;
16+
17+
import static org.hibernate.reactive.containers.DatabaseConfiguration.dbType;
18+
import static org.junit.jupiter.api.extension.ConditionEvaluationResult.disabled;
19+
import static org.junit.jupiter.api.extension.ConditionEvaluationResult.enabled;
20+
import static org.junit.platform.commons.util.AnnotationUtils.findRepeatableAnnotations;
21+
22+
class DisabledForDBTypeCondition implements ExecutionCondition {
23+
24+
@Override
25+
public ConditionEvaluationResult evaluateExecutionCondition(ExtensionContext context) {
26+
List<DisabledFor> annotations = findRepeatableAnnotations( context.getElement(), DisabledFor.class );
27+
if ( !annotations.isEmpty() ) {
28+
return evaluateAnnotation( annotations );
29+
}
30+
return enabled( "No @DisabledFor condition resulting in 'disabled' execution encountered" );
31+
}
32+
33+
private ConditionEvaluationResult evaluateAnnotation(Iterable<DisabledFor> values) {
34+
StringBuilder disabledList = new StringBuilder( "," );
35+
for ( DisabledFor annotation : values ) {
36+
for ( DBType enabledDbType : annotation.value() ) {
37+
if ( enabledDbType == dbType() ) {
38+
return disabled( annotation.reason() );
39+
}
40+
disabledList.append( Arrays.toString( annotation.value() ) );
41+
}
42+
}
43+
return enabled( String.format(
44+
"%s does not match any db in the disabled list: %s",
45+
dbType(),
46+
disabledList.substring( 1 )
47+
) );
48+
}
49+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/* Hibernate, Relational Persistence for Idiomatic Java
2+
*
3+
* SPDX-License-Identifier: Apache-2.0
4+
* Copyright: Red Hat Inc. and Hibernate Authors
5+
*/
6+
package org.hibernate.reactive.annotations;
7+
8+
import java.lang.annotation.ElementType;
9+
import java.lang.annotation.Inherited;
10+
import java.lang.annotation.Retention;
11+
import java.lang.annotation.RetentionPolicy;
12+
import java.lang.annotation.Target;
13+
14+
15+
import org.junit.jupiter.api.extension.ExtendWith;
16+
17+
/**
18+
* Allow repeatable {@link DisabledFor} annotations
19+
*/
20+
@Inherited
21+
@Retention(RetentionPolicy.RUNTIME)
22+
@Target({ElementType.TYPE, ElementType.METHOD})
23+
@ExtendWith(DisabledForDBTypeCondition.class)
24+
public @interface DisabledForDbTypes {
25+
DisabledFor[] value();
26+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/* Hibernate, Relational Persistence for Idiomatic Java
2+
*
3+
* SPDX-License-Identifier: Apache-2.0
4+
* Copyright: Red Hat Inc. and Hibernate Authors
5+
*/
6+
package org.hibernate.reactive.annotations;
7+
8+
import java.lang.annotation.ElementType;
9+
import java.lang.annotation.Inherited;
10+
import java.lang.annotation.Repeatable;
11+
import java.lang.annotation.Retention;
12+
import java.lang.annotation.RetentionPolicy;
13+
import java.lang.annotation.Target;
14+
15+
import org.hibernate.reactive.containers.DatabaseConfiguration;
16+
17+
import org.junit.jupiter.api.extension.ExtendWith;
18+
19+
/**
20+
* Test will run only for the selected {@link org.hibernate.reactive.containers.DatabaseConfiguration.DBType}
21+
*
22+
* @see DisabledFor
23+
*/
24+
@Inherited
25+
@Retention( RetentionPolicy.RUNTIME )
26+
@Target({ ElementType.TYPE, ElementType.METHOD})
27+
@Repeatable( EnabledForDbTypes.class )
28+
@ExtendWith( EnabledForDBTypeCondition.class )
29+
public @interface EnabledFor {
30+
DatabaseConfiguration.DBType[] value();
31+
String reason() default "<undefined>";
32+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/* Hibernate, Relational Persistence for Idiomatic Java
2+
*
3+
* SPDX-License-Identifier: Apache-2.0
4+
* Copyright: Red Hat Inc. and Hibernate Authors
5+
*/
6+
package org.hibernate.reactive.annotations;
7+
8+
import java.util.Arrays;
9+
import java.util.List;
10+
11+
import org.hibernate.reactive.containers.DatabaseConfiguration.DBType;
12+
13+
import org.junit.jupiter.api.extension.ConditionEvaluationResult;
14+
import org.junit.jupiter.api.extension.ExecutionCondition;
15+
import org.junit.jupiter.api.extension.ExtensionContext;
16+
17+
import static org.hibernate.reactive.containers.DatabaseConfiguration.dbType;
18+
import static org.junit.jupiter.api.extension.ConditionEvaluationResult.disabled;
19+
import static org.junit.jupiter.api.extension.ConditionEvaluationResult.enabled;
20+
import static org.junit.platform.commons.util.AnnotationUtils.findRepeatableAnnotations;
21+
22+
public class EnabledForDBTypeCondition implements ExecutionCondition {
23+
24+
@Override
25+
public ConditionEvaluationResult evaluateExecutionCondition(ExtensionContext context) {
26+
List<EnabledFor> annotations = findRepeatableAnnotations( context.getElement(), EnabledFor.class );
27+
if ( !annotations.isEmpty() ) {
28+
return evaluateAnnotation( annotations );
29+
}
30+
return enabled( "No @EnabledFor condition resulting in 'disabled' execution encountered" );
31+
}
32+
33+
private ConditionEvaluationResult evaluateAnnotation(Iterable<EnabledFor> values) {
34+
StringBuilder enabledList = new StringBuilder( "," );
35+
for ( EnabledFor annotation : values ) {
36+
for ( DBType enabledDbType : annotation.value() ) {
37+
if ( enabledDbType == dbType() ) {
38+
return enabled( annotation.reason() );
39+
}
40+
enabledList.append( Arrays.toString( annotation.value() ) );
41+
}
42+
}
43+
return disabled( String.format(
44+
"%s does not match any db in the enabled list: %s",
45+
dbType(),
46+
enabledList.substring( 1 )
47+
) );
48+
}
49+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/* Hibernate, Relational Persistence for Idiomatic Java
2+
*
3+
* SPDX-License-Identifier: Apache-2.0
4+
* Copyright: Red Hat Inc. and Hibernate Authors
5+
*/
6+
package org.hibernate.reactive.annotations;
7+
8+
import java.lang.annotation.ElementType;
9+
import java.lang.annotation.Inherited;
10+
import java.lang.annotation.Retention;
11+
import java.lang.annotation.RetentionPolicy;
12+
import java.lang.annotation.Target;
13+
14+
15+
import org.junit.jupiter.api.extension.ExtendWith;
16+
17+
/**
18+
* Allow repeatable {@link EnabledFor} annotations
19+
*/
20+
@Inherited
21+
@Retention(RetentionPolicy.RUNTIME)
22+
@Target({ElementType.TYPE, ElementType.METHOD})
23+
@ExtendWith(EnabledForDBTypeCondition.class)
24+
public @interface EnabledForDbTypes {
25+
EnabledFor[] value();
26+
}

0 commit comments

Comments
 (0)