From 236f38a26b32feee462c9136fcd4e1072c3ff1e2 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Fri, 16 May 2014 14:55:09 +0400 Subject: [PATCH] Support modules in multi-file tests --- .../tests/org/jetbrains/jet/JetTestUtils.java | 64 +++++++++++++++---- .../jvm/compiler/AbstractLoadJavaTest.java | 2 +- ...ractLazyResolveRecursiveComparingTest.java | 2 +- .../resolve/lazy/AbstractLazyResolveTest.java | 2 +- .../resolve/ExtensibleResolveTestCase.java | 2 +- 5 files changed, 57 insertions(+), 15 deletions(-) diff --git a/compiler/tests/org/jetbrains/jet/JetTestUtils.java b/compiler/tests/org/jetbrains/jet/JetTestUtils.java index 2e2c55ef355..1817d48b690 100644 --- a/compiler/tests/org/jetbrains/jet/JetTestUtils.java +++ b/compiler/tests/org/jetbrains/jet/JetTestUtils.java @@ -97,7 +97,17 @@ public class JetTestUtils { private static final Pattern KT_FILES = Pattern.compile(".*?.kt"); private static final List filesToDelete = new ArrayList(); - public static final Pattern FILE_PATTERN = Pattern.compile("//\\s*FILE:\\s*(.*)$", Pattern.MULTILINE); + /** + * Syntax: + * + * // MODULE: name(dependency1, dependency2, ...) + * + * // FILE: name + * + * Several files may follow one module + */ + public static final Pattern FILE_OR_MODULE_PATTERN = Pattern.compile("(?://\\s*MODULE:\\s*(\\w+)(\\(\\w+(?:, \\w+)*\\))?\\s*)?" + + "//\\s*FILE:\\s*(.*)$", Pattern.MULTILINE); public static final Pattern DIRECTIVE_PATTERN = Pattern.compile("^//\\s*!(\\w+)(:\\s*(.*)$)?", Pattern.MULTILINE); public static final BindingTrace DUMMY_TRACE = new BindingTrace() { @@ -474,26 +484,47 @@ public class JetTestUtils { } } - public interface TestFileFactory { - F create(String fileName, String text, Map directives); + public interface TestFileFactory { + F createFile(@Nullable M module, String fileName, String text, Map directives); + M createModule(String name, List dependencies); } - public static List createTestFiles(String testFileName, String expectedText, TestFileFactory factory) { + public static abstract class TestFileFactoryNoModules implements TestFileFactory { + @Override + public final F createFile(@Nullable Void module, String fileName, String text, Map directives) { + return create(fileName, text, directives); + } + + public abstract F create(String fileName, String text, Map directives); + + @Override + public Void createModule(String name, List dependencies) { + return null; + } + } + + public static List createTestFiles(String testFileName, String expectedText, TestFileFactory factory) { Map directives = parseDirectives(expectedText); List testFiles = Lists.newArrayList(); - Matcher matcher = FILE_PATTERN.matcher(expectedText); + Matcher matcher = FILE_OR_MODULE_PATTERN.matcher(expectedText); if (!matcher.find()) { // One file - testFiles.add(factory.create(testFileName, expectedText, directives)); + testFiles.add(factory.createFile(null, testFileName, expectedText, directives)); } else { int processedChars = 0; + M module = null; // Many files while (true) { - String fileName = matcher.group(1); - int start = matcher.start(); - assert start == processedChars : "Characters skipped from " + processedChars + " to " + matcher.start(); + String moduleName = matcher.group(1); + String moduleDependencies = matcher.group(2); + if (moduleName != null) { + module = factory.createModule(moduleName, parseDependencies(moduleDependencies)); + } + + String fileName = matcher.group(3); + int start = processedChars; boolean nextFileExists = matcher.find(); int end; @@ -506,7 +537,7 @@ public class JetTestUtils { String fileText = expectedText.substring(start, end); processedChars = end; - testFiles.add(factory.create(fileName, fileText, directives)); + testFiles.add(factory.createFile(module, fileName, fileText, directives)); if (!nextFileExists) break; } @@ -518,6 +549,17 @@ public class JetTestUtils { return testFiles; } + private static List parseDependencies(@Nullable String dependencies) { + if (dependencies == null) return Collections.emptyList(); + + Matcher matcher = Pattern.compile("\\w+").matcher(dependencies); + List result = new ArrayList(); + while (matcher.find()) { + result.add(matcher.group()); + } + return result; + } + @NotNull public static Map parseDirectives(String expectedText) { Map directives = Maps.newHashMap(); @@ -546,7 +588,7 @@ public class JetTestUtils { throw new RuntimeException(e); } - List files = createTestFiles("", content, new TestFileFactory() { + List files = createTestFiles("", content, new TestFileFactoryNoModules() { @Override public String create(String fileName, String text, Map directives) { int firstLineEnd = text.indexOf('\n'); diff --git a/compiler/tests/org/jetbrains/jet/jvm/compiler/AbstractLoadJavaTest.java b/compiler/tests/org/jetbrains/jet/jvm/compiler/AbstractLoadJavaTest.java index 43978aec73a..74acdd9cc83 100644 --- a/compiler/tests/org/jetbrains/jet/jvm/compiler/AbstractLoadJavaTest.java +++ b/compiler/tests/org/jetbrains/jet/jvm/compiler/AbstractLoadJavaTest.java @@ -225,7 +225,7 @@ public abstract class AbstractLoadJavaTest extends TestCaseWithTmpdir { List srcFiles = JetTestUtils.createTestFiles( new File(javaFileName).getName(), FileUtil.loadFile(new File(javaFileName), true), - new JetTestUtils.TestFileFactory() { + new TestFileFactoryNoModules() { @Override public File create(String fileName, String text, Map directives) { File targetFile = new File(srcDir, fileName); diff --git a/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/AbstractLazyResolveRecursiveComparingTest.java b/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/AbstractLazyResolveRecursiveComparingTest.java index ca55f3a4310..6ffa72b79c6 100644 --- a/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/AbstractLazyResolveRecursiveComparingTest.java +++ b/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/AbstractLazyResolveRecursiveComparingTest.java @@ -60,7 +60,7 @@ public abstract class AbstractLazyResolveRecursiveComparingTest extends KotlinTe private void doTest(String testFileName, boolean checkPrimaryConstructors, boolean checkPropertyAccessors, boolean allowErrorTypes) throws IOException { List files = JetTestUtils .createTestFiles(testFileName, FileUtil.loadFile(new File(testFileName), true), - new JetTestUtils.TestFileFactory() { + new JetTestUtils.TestFileFactoryNoModules() { @Override public JetFile create(String fileName, String text, Map directives) { return JetPsiFactory.createFile(getProject(), fileName, text); diff --git a/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/AbstractLazyResolveTest.java b/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/AbstractLazyResolveTest.java index 9d1914ad139..c60d2315424 100644 --- a/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/AbstractLazyResolveTest.java +++ b/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/AbstractLazyResolveTest.java @@ -65,7 +65,7 @@ public abstract class AbstractLazyResolveTest extends JetLiteFixture { protected void doTest(@NonNls String testFile) throws Exception { String text = FileUtil.loadFile(new File(testFile), true); - List files = JetTestUtils.createTestFiles("file.kt", text, new JetTestUtils.TestFileFactory() { + List files = JetTestUtils.createTestFiles("file.kt", text, new JetTestUtils.TestFileFactoryNoModules() { @Override public JetFile create(String fileName, String text, Map directives) { return expectedResolveData.createFileFromMarkedUpText(fileName, text); diff --git a/compiler/tests/org/jetbrains/jet/resolve/ExtensibleResolveTestCase.java b/compiler/tests/org/jetbrains/jet/resolve/ExtensibleResolveTestCase.java index 09351645a6d..8526c9bfd78 100644 --- a/compiler/tests/org/jetbrains/jet/resolve/ExtensibleResolveTestCase.java +++ b/compiler/tests/org/jetbrains/jet/resolve/ExtensibleResolveTestCase.java @@ -52,7 +52,7 @@ public abstract class ExtensibleResolveTestCase extends JetLiteFixture { protected void doTest(@NonNls String filePath) throws Exception { File file = new File(filePath); String text = JetTestUtils.doLoadFile(file); - List files = JetTestUtils.createTestFiles("file.kt", text, new JetTestUtils.TestFileFactory() { + List files = JetTestUtils.createTestFiles("file.kt", text, new JetTestUtils.TestFileFactoryNoModules() { @Override public JetFile create(String fileName, String text, Map directives) { return expectedResolveData.createFileFromMarkedUpText(fileName, text);