Refactor AbstractLineNumberTest using assertEqualsToFile

This commit is contained in:
Natalia Ukhorskaya
2015-11-27 11:53:25 +03:00
parent 076e9c8dd1
commit 0d984ce8e2
2 changed files with 18 additions and 26 deletions
@@ -18,4 +18,4 @@ fun fail() : String {
throw AssertionError("fail") throw AssertionError("fail")
} }
//2 14 2 14 5 14 5 14 7 10 14 18 // 2 14 2 14 5 14 5 14 7 10 14 18
@@ -20,7 +20,9 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.util.text.StringUtil;
import kotlin.CollectionsKt;
import kotlin.Pair; import kotlin.Pair;
import kotlin.jvm.functions.Function1;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.backend.common.output.OutputFile; import org.jetbrains.kotlin.backend.common.output.OutputFile;
import org.jetbrains.kotlin.backend.common.output.OutputFileCollection; import org.jetbrains.kotlin.backend.common.output.OutputFileCollection;
@@ -100,21 +102,29 @@ public abstract class AbstractLineNumberTest extends TestCaseWithTmpdir {
GenerationState state = GenerationUtils.compileFileGetGenerationStateForTest(psiFile, environment); GenerationState state = GenerationUtils.compileFileGetGenerationStateForTest(psiFile, environment);
List<Integer> expectedLineNumbers;
List<Integer> actualLineNumbers;
if (custom) { if (custom) {
expectedLineNumbers = extractCustomLineNumbersFromSource(psiFile); List<Integer> actualLineNumbers = extractActualLineNumbersFromBytecode(state, false);
actualLineNumbers = extractActualLineNumbersFromBytecode(state, false); String text = psiFile.getText();
assertEquals(expectedLineNumbers, actualLineNumbers); String newFileText = text.substring(0, text.indexOf("// ")) + getActualLineNumbersAsString(actualLineNumbers);
KotlinTestUtils.assertEqualsToFile(new File(filename), newFileText);
} }
else { else {
expectedLineNumbers = extractSelectedLineNumbersFromSource(psiFile); List<Integer> expectedLineNumbers = extractSelectedLineNumbersFromSource(psiFile);
actualLineNumbers = extractActualLineNumbersFromBytecode(state, true); List<Integer> actualLineNumbers = extractActualLineNumbersFromBytecode(state, true);
assertSameElements(actualLineNumbers, expectedLineNumbers); assertSameElements(actualLineNumbers, expectedLineNumbers);
} }
} }
private static String getActualLineNumbersAsString(List<Integer> list) {
return CollectionsKt.joinToString(list, " ", "// ", "", -1, "...", new Function1<Integer, CharSequence>() {
@Override
public CharSequence invoke(Integer integer) {
return integer.toString();
}
});
}
@NotNull @NotNull
private static List<Integer> extractActualLineNumbersFromBytecode(@NotNull GenerationState state, boolean testFunInvoke) { private static List<Integer> extractActualLineNumbersFromBytecode(@NotNull GenerationState state, boolean testFunInvoke) {
ClassFileFactory factory = state.getFactory(); ClassFileFactory factory = state.getFactory();
@@ -142,24 +152,6 @@ public abstract class AbstractLineNumberTest extends TestCaseWithTmpdir {
doTest(path, true); doTest(path, true);
} }
@NotNull
private static List<Integer> extractCustomLineNumbersFromSource(@NotNull KtFile file) {
String fileContent = file.getText();
List<Integer> lineNumbers = Lists.newArrayList();
String[] lines = StringUtil.convertLineSeparators(fileContent).split("\n");
for (String line : lines) {
if (line.startsWith("//")) {
String[] numbers = line.substring("//".length()).trim().split(" +");
for (String number : numbers) {
lineNumbers.add(Integer.parseInt(number));
}
}
}
return lineNumbers;
}
@NotNull @NotNull
private static List<Integer> extractSelectedLineNumbersFromSource(@NotNull KtFile file) { private static List<Integer> extractSelectedLineNumbersFromSource(@NotNull KtFile file) {
String fileContent = file.getText(); String fileContent = file.getText();