[Gradle, JS] Add java class filters like in gradle

This commit is contained in:
Ilya Goncharov
2019-11-28 15:07:05 +03:00
parent 50d165167c
commit de8610a279
@@ -13,13 +13,35 @@ export function runWithFilter(
): KotlinTestRunner {
let path: string[] = [];
function pathString() {
function jsClassName() {
// skip root
if (!path[0]) {
return path.slice(1).join('.')
} else {
return path.join('.')
}
return path.join('.')
}
function javaClassName() {
const javaClassName = `${path.slice(1).join('$')}`;
// skip root
if (!path[0]) {
return javaClassName
}
if (!javaClassName) {
return path[0]
}
return `${path[0]}.${javaClassName}`
}
function everyOfJsOrJavaNames(
predicate: (value: string) => boolean
): boolean {
return [jsClassName(), javaClassName()]
.every(value => predicate(value))
}
return {
@@ -27,7 +49,8 @@ export function runWithFilter(
path.push(name);
try {
if (path.length > 1 && !filter.mayContainTestsFromSuite(pathString())) return;
if (path.length > 1 && everyOfJsOrJavaNames((value) => !filter.mayContainTestsFromSuite(value)))
return;
runner.suite(name, isIgnored, fn);
} finally {
@@ -36,14 +59,12 @@ export function runWithFilter(
},
test: function (name: string, isIgnored: boolean, fn: () => void) {
path.push(name);
try {
if (!filter.containsTest(pathString())) return;
if (everyOfJsOrJavaNames(value => !filter.containsTest(`${value}.${name}`)))
return;
runner.test(name, isIgnored, fn);
} finally {
path.pop()
}
}
};
@@ -84,10 +105,12 @@ export class StartsWithFilter implements KotlinTestsFilter {
}
isPrefixMatched(fqn: string): boolean {
console.error("fqn", fqn);
return startsWith(fqn + ".", this.prefix);
}
mayContainTestsFromSuite(fqn: string): boolean {
console.error("Prefix", this.prefix);
return this.isPrefixMatched(fqn);
}