From cb08d279704396e28efe3f063265f649b305cbf4 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 21 Nov 2012 18:50:05 +0400 Subject: [PATCH] Refactor LineNumberTest Allow passing custom expected & actual line numbers instead of those before calls to test.lineNumber() --- .../jetbrains/jet/codegen/LineNumberTest.java | 79 +++++++++++++------ 1 file changed, 57 insertions(+), 22 deletions(-) diff --git a/compiler/tests/org/jetbrains/jet/codegen/LineNumberTest.java b/compiler/tests/org/jetbrains/jet/codegen/LineNumberTest.java index c4e8938e8f7..66737ba9662 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/LineNumberTest.java +++ b/compiler/tests/org/jetbrains/jet/codegen/LineNumberTest.java @@ -21,6 +21,7 @@ import com.google.common.collect.Maps; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.asm4.*; import org.jetbrains.jet.CompileCompilerDependenciesTest; import org.jetbrains.jet.ConfigurationKind; @@ -92,24 +93,33 @@ public class LineNumberTest extends TestCaseWithTmpdir { return JetTestUtils.createFile(file.getName(), text, environment.getProject()); } - private void doTest(@NotNull String filename) { + private void doTest(@NotNull String filename, boolean custom) { JetFile psiFile = createPsiFile(filename); GenerationState state = GenerationUtils.compileFileGetGenerationStateForTest(psiFile); - List expectedLineNumbers = extractSelectedLineNumbersFromSource(psiFile); - List actualLineNumbers = extractActualLineNumbersFromBytecode(state); + List expectedLineNumbers, actualLineNumbers; + if (custom) { + expectedLineNumbers = extractCustomLineNumbersFromSource(psiFile); + actualLineNumbers = extractActualLineNumbersFromBytecode(state, false); + assertEquals(expectedLineNumbers, actualLineNumbers); + } + else { + expectedLineNumbers = extractSelectedLineNumbersFromSource(psiFile); + actualLineNumbers = extractActualLineNumbersFromBytecode(state, true); + assertSameElements(actualLineNumbers, expectedLineNumbers); + } - assertSameElements(actualLineNumbers, expectedLineNumbers); } @NotNull - private List extractActualLineNumbersFromBytecode(@NotNull GenerationState state) { + private List extractActualLineNumbersFromBytecode(@NotNull GenerationState state, boolean testFunInvoke) { ClassFileFactory factory = state.getFactory(); List actualLineNumbers = Lists.newArrayList(); for (String filename : factory.files()) { ClassReader cr = new ClassReader(factory.asBytes(filename)); try { - actualLineNumbers.addAll(readLineNumbers(cr)); + List lineNumbers = testFunInvoke ? readTestFunLineNumbers(cr) : readAllLineNumbers(cr); + actualLineNumbers.addAll(lineNumbers); } catch (Throwable e) { System.out.println(factory.createText()); @@ -121,7 +131,29 @@ public class LineNumberTest extends TestCaseWithTmpdir { } private void doTest() { - doTest(getTestName(true) + ".kt"); + doTest(getTestName(true) + ".kt", false); + } + + private void doTestCustom() { + doTest("custom/" + getTestName(true) + ".kt", true); + } + + @NotNull + private List extractCustomLineNumbersFromSource(@NotNull JetFile file) { + String fileContent = file.getText(); + List 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 @@ -141,7 +173,7 @@ public class LineNumberTest extends TestCaseWithTmpdir { } @NotNull - private List readLineNumbers(@NotNull ClassReader cr) { + private List readTestFunLineNumbers(@NotNull ClassReader cr) { final List