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")
}
//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.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.StringUtil;
import kotlin.CollectionsKt;
import kotlin.Pair;
import kotlin.jvm.functions.Function1;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.backend.common.output.OutputFile;
import org.jetbrains.kotlin.backend.common.output.OutputFileCollection;
@@ -100,21 +102,29 @@ public abstract class AbstractLineNumberTest extends TestCaseWithTmpdir {
GenerationState state = GenerationUtils.compileFileGetGenerationStateForTest(psiFile, environment);
List<Integer> expectedLineNumbers;
List<Integer> actualLineNumbers;
if (custom) {
expectedLineNumbers = extractCustomLineNumbersFromSource(psiFile);
actualLineNumbers = extractActualLineNumbersFromBytecode(state, false);
assertEquals(expectedLineNumbers, actualLineNumbers);
List<Integer> actualLineNumbers = extractActualLineNumbersFromBytecode(state, false);
String text = psiFile.getText();
String newFileText = text.substring(0, text.indexOf("// ")) + getActualLineNumbersAsString(actualLineNumbers);
KotlinTestUtils.assertEqualsToFile(new File(filename), newFileText);
}
else {
expectedLineNumbers = extractSelectedLineNumbersFromSource(psiFile);
actualLineNumbers = extractActualLineNumbersFromBytecode(state, true);
List<Integer> expectedLineNumbers = extractSelectedLineNumbersFromSource(psiFile);
List<Integer> actualLineNumbers = extractActualLineNumbersFromBytecode(state, true);
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
private static List<Integer> extractActualLineNumbersFromBytecode(@NotNull GenerationState state, boolean testFunInvoke) {
ClassFileFactory factory = state.getFactory();
@@ -142,24 +152,6 @@ public abstract class AbstractLineNumberTest extends TestCaseWithTmpdir {
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
private static List<Integer> extractSelectedLineNumbersFromSource(@NotNull KtFile file) {
String fileContent = file.getText();