[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 { ): KotlinTestRunner {
let path: string[] = []; let path: string[] = [];
function pathString() { function jsClassName() {
// skip root // skip root
if (!path[0]) { if (!path[0]) {
return path.slice(1).join('.') 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 { return {
@@ -27,7 +49,8 @@ export function runWithFilter(
path.push(name); path.push(name);
try { try {
if (path.length > 1 && !filter.mayContainTestsFromSuite(pathString())) return; if (path.length > 1 && everyOfJsOrJavaNames((value) => !filter.mayContainTestsFromSuite(value)))
return;
runner.suite(name, isIgnored, fn); runner.suite(name, isIgnored, fn);
} finally { } finally {
@@ -36,14 +59,12 @@ export function runWithFilter(
}, },
test: function (name: string, isIgnored: boolean, fn: () => void) { test: function (name: string, isIgnored: boolean, fn: () => void) {
path.push(name);
try { try {
if (!filter.containsTest(pathString())) return; if (everyOfJsOrJavaNames(value => !filter.containsTest(`${value}.${name}`)))
return;
runner.test(name, isIgnored, fn); runner.test(name, isIgnored, fn);
} finally { } finally {
path.pop()
} }
} }
}; };
@@ -84,10 +105,12 @@ export class StartsWithFilter implements KotlinTestsFilter {
} }
isPrefixMatched(fqn: string): boolean { isPrefixMatched(fqn: string): boolean {
console.error("fqn", fqn);
return startsWith(fqn + ".", this.prefix); return startsWith(fqn + ".", this.prefix);
} }
mayContainTestsFromSuite(fqn: string): boolean { mayContainTestsFromSuite(fqn: string): boolean {
console.error("Prefix", this.prefix);
return this.isPrefixMatched(fqn); return this.isPrefixMatched(fqn);
} }