Refactoring: extract mute with file to the separate method
This commit is contained in:
@@ -1055,7 +1055,7 @@ public class KotlinTestUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void runTestWithCustomIgnoreDirective(DoTest test, TargetBackend targetBackend, @TestDataFile String testDataFile, String ignoreDirective) throws Exception {
|
public static void runTestWithCustomIgnoreDirective(DoTest test, TargetBackend targetBackend, @TestDataFile String testDataFile, String ignoreDirective) throws Exception {
|
||||||
runTest0WithCustomIgnoreDirective(test, targetBackend, testDataFile, ignoreDirective);
|
runTest(testWithCustomIgnoreDirective(test, targetBackend, ignoreDirective), testDataFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
// In this test runner version, NONE of the parameters are annotated by `TestDataFile`.
|
// In this test runner version, NONE of the parameters are annotated by `TestDataFile`.
|
||||||
@@ -1067,25 +1067,20 @@ public class KotlinTestUtils {
|
|||||||
// * sometimes, for too common/general names, it shows many variants to navigate
|
// * sometimes, for too common/general names, it shows many variants to navigate
|
||||||
// * it adds an additional step for navigation -- you must choose an exact file to navigate
|
// * it adds an additional step for navigation -- you must choose an exact file to navigate
|
||||||
public static void runTest0(DoTest test, TargetBackend targetBackend, String testDataFilePath) throws Exception {
|
public static void runTest0(DoTest test, TargetBackend targetBackend, String testDataFilePath) throws Exception {
|
||||||
runTest0WithCustomIgnoreDirective(test, targetBackend, testDataFilePath, IGNORE_BACKEND_DIRECTIVE_PREFIX);
|
runTest(testWithCustomIgnoreDirective(test, targetBackend, IGNORE_BACKEND_DIRECTIVE_PREFIX), testDataFilePath);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void runTest0WithCustomIgnoreDirective(DoTest test, TargetBackend targetBackend, String testDataFilePath, String ignoreDirective) throws Exception {
|
private static void runTest(DoTest test, String testDataFilePath) throws Exception {
|
||||||
|
testWithMuteInFile(test, testDataFilePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void testWithMuteInFile(DoTest test, String testDataFilePath) throws Exception {
|
||||||
File testDataFile = new File(testDataFilePath);
|
File testDataFile = new File(testDataFilePath);
|
||||||
|
|
||||||
if (isMutedWithFile(testDataFile)) {
|
if (isMutedWithFile(testDataFile)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean isIgnored = isIgnoredTarget(targetBackend, testDataFile, ignoreDirective);
|
|
||||||
|
|
||||||
if (DONT_IGNORE_TESTS_WORKING_ON_COMPATIBLE_BACKEND) {
|
|
||||||
// Only ignore if it is ignored for both backends
|
|
||||||
// Motivation: this backend works => all good, even if compatible backend fails
|
|
||||||
// This backend fails, compatible works => need to know
|
|
||||||
isIgnored &= isIgnoredTarget(targetBackend.getCompatibleWith(), testDataFile);
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
test.invoke(testDataFilePath);
|
test.invoke(testDataFilePath);
|
||||||
}
|
}
|
||||||
@@ -1094,59 +1089,85 @@ public class KotlinTestUtils {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isIgnored && AUTOMATICALLY_MUTE_FAILED_TESTS) {
|
throw e;
|
||||||
String text = doLoadFile(testDataFile);
|
|
||||||
String directive = InTextDirectivesUtils.IGNORE_BACKEND_DIRECTIVE_PREFIX + targetBackend.name() + "\n";
|
|
||||||
|
|
||||||
String newText;
|
|
||||||
if (text.startsWith("// !")) {
|
|
||||||
StringBuilder prefixBuilder = new StringBuilder();
|
|
||||||
int l = 0;
|
|
||||||
while (text.startsWith("// !", l)) {
|
|
||||||
int r = text.indexOf("\n", l) + 1;
|
|
||||||
if (r <= 0) r = text.length();
|
|
||||||
prefixBuilder.append(text.substring(l, r));
|
|
||||||
l = r;
|
|
||||||
}
|
|
||||||
prefixBuilder.append(directive);
|
|
||||||
prefixBuilder.append(text.substring(l));
|
|
||||||
|
|
||||||
newText = prefixBuilder.toString();
|
|
||||||
} else {
|
|
||||||
newText = directive + text;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!newText.equals(text)) {
|
|
||||||
System.err.println("\"" + directive + "\" was added to \"" + testDataFile + "\"");
|
|
||||||
FileUtil.writeToFile(testDataFile, newText);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (RUN_IGNORED_TESTS_AS_REGULAR || !isIgnored) {
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (PRINT_STACKTRACE_FOR_IGNORED_TESTS) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Assert.assertNull("Test is good but there is a fail file", failFile(testDataFile));
|
Assert.assertNull("Test is good but there is a fail file", failFile(testDataFile));
|
||||||
|
}
|
||||||
|
|
||||||
if (isIgnored) {
|
private static DoTest testWithCustomIgnoreDirective(DoTest test, TargetBackend targetBackend, String ignoreDirective) throws Exception {
|
||||||
if (AUTOMATICALLY_UNMUTE_PASSED_TESTS) {
|
if (targetBackend == TargetBackend.ANY && !AUTOMATICALLY_MUTE_FAILED_TESTS) {
|
||||||
String text = doLoadFile(testDataFile);
|
return test;
|
||||||
String directive = InTextDirectivesUtils.IGNORE_BACKEND_DIRECTIVE_PREFIX + targetBackend.name();
|
}
|
||||||
String newText = Pattern.compile("^" + directive + "\n", Pattern.MULTILINE).matcher(text).replaceAll("");
|
|
||||||
if (!newText.equals(text)) {
|
return filePath -> {
|
||||||
System.err.println("\"" + directive + "\" was removed from \"" + testDataFile + "\"");
|
File testDataFile = new File(filePath);
|
||||||
FileUtil.writeToFile(testDataFile, newText);
|
|
||||||
}
|
boolean isIgnored = isIgnoredTarget(targetBackend, testDataFile, ignoreDirective);
|
||||||
|
|
||||||
|
if (DONT_IGNORE_TESTS_WORKING_ON_COMPATIBLE_BACKEND) {
|
||||||
|
// Only ignore if it is ignored for both backends
|
||||||
|
// Motivation: this backend works => all good, even if compatible backend fails
|
||||||
|
// This backend fails, compatible works => need to know
|
||||||
|
isIgnored &= isIgnoredTarget(targetBackend.getCompatibleWith(), testDataFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new AssertionError("Looks like this test can be unmuted. Remove IGNORE_BACKEND directive.");
|
try {
|
||||||
}
|
test.invoke(filePath);
|
||||||
|
}
|
||||||
|
catch (Throwable e) {
|
||||||
|
if (!isIgnored && AUTOMATICALLY_MUTE_FAILED_TESTS) {
|
||||||
|
String text = doLoadFile(testDataFile);
|
||||||
|
String directive = InTextDirectivesUtils.IGNORE_BACKEND_DIRECTIVE_PREFIX + targetBackend.name() + "\n";
|
||||||
|
|
||||||
|
String newText;
|
||||||
|
if (text.startsWith("// !")) {
|
||||||
|
StringBuilder prefixBuilder = new StringBuilder();
|
||||||
|
int l = 0;
|
||||||
|
while (text.startsWith("// !", l)) {
|
||||||
|
int r = text.indexOf("\n", l) + 1;
|
||||||
|
if (r <= 0) r = text.length();
|
||||||
|
prefixBuilder.append(text.substring(l, r));
|
||||||
|
l = r;
|
||||||
|
}
|
||||||
|
prefixBuilder.append(directive);
|
||||||
|
prefixBuilder.append(text.substring(l));
|
||||||
|
|
||||||
|
newText = prefixBuilder.toString();
|
||||||
|
} else {
|
||||||
|
newText = directive + text;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!newText.equals(text)) {
|
||||||
|
System.err.println("\"" + directive + "\" was added to \"" + testDataFile + "\"");
|
||||||
|
FileUtil.writeToFile(testDataFile, newText);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (RUN_IGNORED_TESTS_AS_REGULAR || !isIgnored) {
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (PRINT_STACKTRACE_FOR_IGNORED_TESTS) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isIgnored) {
|
||||||
|
if (AUTOMATICALLY_UNMUTE_PASSED_TESTS) {
|
||||||
|
String text = doLoadFile(testDataFile);
|
||||||
|
String directive = InTextDirectivesUtils.IGNORE_BACKEND_DIRECTIVE_PREFIX + targetBackend.name();
|
||||||
|
String newText = Pattern.compile("^" + directive + "\n", Pattern.MULTILINE).matcher(text).replaceAll("");
|
||||||
|
if (!newText.equals(text)) {
|
||||||
|
System.err.println("\"" + directive + "\" was removed from \"" + testDataFile + "\"");
|
||||||
|
FileUtil.writeToFile(testDataFile, newText);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new AssertionError("Looks like this test can be unmuted. Remove IGNORE_BACKEND directive.");
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean isMutedWithFile(@NotNull File testDataFile) {
|
private static boolean isMutedWithFile(@NotNull File testDataFile) {
|
||||||
|
|||||||
Reference in New Issue
Block a user