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:
@RequiresDialects({
@RequiresDialect(PostgreSQL81Dialect.class),
@RequiresDialect(Oracle8iDialect.class)
})
The CustomRunner will do this:
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 );
}
}
With the current logic the different RequiresDialect act as an AND 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:
@RequiresDialect({ Oracle8iDialect.class, PostgreSQL81Dialect.class} )
|