When searching for {{RequiresDialect}}, {{CustomRunner}} uses a nested-loop and upon a match, it breaks from the innermost loop only.
So if I declare a test like this:
{code:java} @RequiresDialects({ @RequiresDialect(PostgreSQL81Dialect.class), @RequiresDialect(Oracle8iDialect.class) }) {code}
The {{CustomRunner}} will do this:
{code:java} for ( RequiresDialect requiresDialectAnn : Helper.collectAnnotations( RequiresDialect.class, RequiresDialects.class, frameworkMethod, getTestClass() ) ) { boolean foundMatch = false; for ( Class<? extends Dialect> dialectClass : requiresDialectAnn.value() ) { foundMatch = requiresDialectAnn.strictMatching() ? dialectClass.equals( dialect.getClass() ) : dialectClass.isInstance( dialect ); if ( foundMatch ) { break; } } if ( !foundMatch ) { return buildIgnore( requiresDialectAnn ); } } {code}
With the current logic the different When using multiple {{RequiresDialect (s) }} act as provided via a {{@RequiresDialects}}, the current logic acts like an AND operand, not as an OR. Unfortunately, a test can only use a single Dialect at runtime, so the AND logic does not make sense.
On the other hand, this works:
{code:java} @RequiresDialect({ Oracle8iDialect.class, PostgreSQL81Dialect.class} ) {code} |
|