Checking file name case for some of the auto-generated tests

This commit is contained in:
Valentin Kipyatkov
2015-08-31 22:48:18 +03:00
parent 10f7d6d7dd
commit ed2f5ccfa2
5 changed files with 44 additions and 16 deletions
@@ -122,7 +122,7 @@ import org.jetbrains.kotlin.serialization.AbstractLocalClassProtoTest
import org.jetbrains.kotlin.shortenRefs.AbstractShortenRefsTest import org.jetbrains.kotlin.shortenRefs.AbstractShortenRefsTest
import org.jetbrains.kotlin.types.AbstractJetTypeBindingTest import org.jetbrains.kotlin.types.AbstractJetTypeBindingTest
import java.io.File import java.io.File
import java.util.ArrayList import java.util.*
import java.util.regex.Pattern import java.util.regex.Pattern
fun main(args: Array<String>) { fun main(args: Array<String>) {
@@ -369,7 +369,7 @@ fun main(args: Array<String>) {
} }
testClass(javaClass<AbstractQuickFixTest>()) { testClass(javaClass<AbstractQuickFixTest>()) {
model("quickfix", pattern = "^([\\w\\-_]+)\\.kt$") model("quickfix", pattern = "^([\\w\\-_]+)\\.kt$", filenameStartsLowerCase = true)
} }
testClass(javaClass<AbstractGotoSuperTest>()) { testClass(javaClass<AbstractGotoSuperTest>()) {
@@ -387,7 +387,7 @@ fun main(args: Array<String>) {
testClass(javaClass<AbstractNavigateToLibrarySourceTest>()) { testClass(javaClass<AbstractNavigateToLibrarySourceTest>()) {
model("decompiler/navigation/usercode") model("decompiler/navigation/usercode")
model("decompiler/navigation/usercode", testClassName="UsercodeWithJSModule", testMethod = "doWithJSModuleTest") model("decompiler/navigation/usercode", testClassName ="UsercodeWithJSModule", testMethod = "doWithJSModuleTest")
} }
testClass(javaClass<AbstractKotlinGotoImplementationTest>()) { testClass(javaClass<AbstractKotlinGotoImplementationTest>()) {
@@ -524,7 +524,7 @@ fun main(args: Array<String>) {
} }
testClass(javaClass<AbstractMultiFileIntentionTest>()) { testClass(javaClass<AbstractMultiFileIntentionTest>()) {
model("multiFileIntentions", extension = "test", singleClass = true) model("multiFileIntentions", extension = "test", singleClass = true, filenameStartsLowerCase = true)
} }
testClass(javaClass<AbstractJetMultiFileInspectionTest>()) { testClass(javaClass<AbstractJetMultiFileInspectionTest>()) {
@@ -873,7 +873,7 @@ fun main(args: Array<String>) {
} }
testClass(javaClass<AbstractMultiModuleTest>()) { testClass(javaClass<AbstractMultiModuleTest>()) {
model("multiModule/cases", extension = null, recursive=false) model("multiModule/cases", extension = null, recursive =false)
} }
testClass(javaClass<AbstractInlineJsTest>()) { testClass(javaClass<AbstractInlineJsTest>()) {
@@ -889,7 +889,7 @@ fun main(args: Array<String>) {
} }
testClass(javaClass<AbstractInlineMultiModuleTest>()) { testClass(javaClass<AbstractInlineMultiModuleTest>()) {
model("inlineMultiModule/cases", extension = null, recursive=false) model("inlineMultiModule/cases", extension = null, recursive =false)
} }
testClass(javaClass<AbstractLabelTest>()) { testClass(javaClass<AbstractLabelTest>()) {
@@ -971,7 +971,8 @@ private class TestGroup(val testsRoot: String, val testDataRoot: String) {
singleClass: Boolean = false, singleClass: Boolean = false,
testClassName: String? = null, testClassName: String? = null,
targetBackend: TargetBackend = TargetBackend.ANY, targetBackend: TargetBackend = TargetBackend.ANY,
excludeDirs: List<String> = listOf() excludeDirs: List<String> = listOf(),
filenameStartsLowerCase: Boolean? = null
) { ) {
val rootFile = File(testDataRoot + "/" + relativeRootPath) val rootFile = File(testDataRoot + "/" + relativeRootPath)
val compiledPattern = Pattern.compile(pattern) val compiledPattern = Pattern.compile(pattern)
@@ -979,12 +980,11 @@ private class TestGroup(val testsRoot: String, val testDataRoot: String) {
testModels.add( testModels.add(
if (singleClass) { if (singleClass) {
if (excludeDirs.isNotEmpty()) error("excludeDirs is unsupported for SingleClassTestModel yet") if (excludeDirs.isNotEmpty()) error("excludeDirs is unsupported for SingleClassTestModel yet")
SingleClassTestModel(rootFile, compiledPattern, testMethod, className, targetBackend) SingleClassTestModel(rootFile, compiledPattern, filenameStartsLowerCase, testMethod, className, targetBackend)
} }
else { else {
SimpleTestClassModel( SimpleTestClassModel(rootFile, recursive, excludeParentDirs,
rootFile, recursive, excludeParentDirs, compiledPattern, testMethod, className, targetBackend, excludeDirs compiledPattern, filenameStartsLowerCase, testMethod, className, targetBackend, excludeDirs)
)
} }
) )
} }
@@ -44,6 +44,8 @@ public class SimpleTestClassModel implements TestClassModel {
private final boolean excludeParentDirs; private final boolean excludeParentDirs;
@NotNull @NotNull
private final Pattern filenamePattern; private final Pattern filenamePattern;
@Nullable
private final Boolean checkFilenameStartsLowerCase;
@NotNull @NotNull
private final String doTestMethodName; private final String doTestMethodName;
@NotNull @NotNull
@@ -62,6 +64,7 @@ public class SimpleTestClassModel implements TestClassModel {
boolean recursive, boolean recursive,
boolean excludeParentDirs, boolean excludeParentDirs,
@NotNull Pattern filenamePattern, @NotNull Pattern filenamePattern,
@Nullable Boolean checkFilenameStartsLowerCase,
@NotNull String doTestMethodName, @NotNull String doTestMethodName,
@NotNull String testClassName, @NotNull String testClassName,
@NotNull TargetBackend targetBackend, @NotNull TargetBackend targetBackend,
@@ -74,6 +77,7 @@ public class SimpleTestClassModel implements TestClassModel {
this.doTestMethodName = doTestMethodName; this.doTestMethodName = doTestMethodName;
this.testClassName = testClassName; this.testClassName = testClassName;
this.targetBackend = targetBackend; this.targetBackend = targetBackend;
this.checkFilenameStartsLowerCase = checkFilenameStartsLowerCase;
this.excludeDirs = excludeDirs.isEmpty() ? Collections.<String>emptySet() : new LinkedHashSet<String>(excludeDirs); this.excludeDirs = excludeDirs.isEmpty() ? Collections.<String>emptySet() : new LinkedHashSet<String>(excludeDirs);
} }
@@ -91,8 +95,10 @@ public class SimpleTestClassModel implements TestClassModel {
for (File file : files) { for (File file : files) {
if (file.isDirectory() && dirHasFilesInside(file) && !excludeDirs.contains(file.getName())) { if (file.isDirectory() && dirHasFilesInside(file) && !excludeDirs.contains(file.getName())) {
String innerTestClassName = TestGeneratorUtil.fileNameToJavaIdentifier(file); String innerTestClassName = TestGeneratorUtil.fileNameToJavaIdentifier(file);
children.add(new SimpleTestClassModel(file, true, excludeParentDirs, filenamePattern, doTestMethodName, children.add(new SimpleTestClassModel(
innerTestClassName, targetBackend, excludesStripOneDirectory(file.getName()))); file, true, excludeParentDirs, filenamePattern, checkFilenameStartsLowerCase,
doTestMethodName, innerTestClassName, targetBackend, excludesStripOneDirectory(file.getName()))
);
} }
} }
} }
@@ -144,7 +150,8 @@ public class SimpleTestClassModel implements TestClassModel {
public Collection<TestMethodModel> getTestMethods() { public Collection<TestMethodModel> getTestMethods() {
if (testMethods == null) { if (testMethods == null) {
if (!rootFile.isDirectory()) { if (!rootFile.isDirectory()) {
testMethods = Collections.<TestMethodModel>singletonList(new SimpleTestMethodModel(rootFile, rootFile, doTestMethodName, filenamePattern, testMethods = Collections.<TestMethodModel>singletonList(new SimpleTestMethodModel(rootFile, rootFile, doTestMethodName,
filenamePattern, checkFilenameStartsLowerCase,
targetBackend)); targetBackend));
} }
else { else {
@@ -161,7 +168,7 @@ public class SimpleTestClassModel implements TestClassModel {
continue; continue;
} }
result.add(new SimpleTestMethodModel(rootFile, file, doTestMethodName, filenamePattern, targetBackend)); result.add(new SimpleTestMethodModel(rootFile, file, doTestMethodName, filenamePattern, checkFilenameStartsLowerCase, targetBackend));
} }
} }
} }
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.generators.tests.generator;
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 org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.test.InTextDirectivesUtils; import org.jetbrains.kotlin.test.InTextDirectivesUtils;
import org.jetbrains.kotlin.test.JetTestUtils; import org.jetbrains.kotlin.test.JetTestUtils;
import org.jetbrains.kotlin.utils.Printer; import org.jetbrains.kotlin.utils.Printer;
@@ -50,6 +51,7 @@ public class SimpleTestMethodModel implements TestMethodModel {
@NotNull File file, @NotNull File file,
@NotNull String doTestMethodName, @NotNull String doTestMethodName,
@NotNull Pattern filenamePattern, @NotNull Pattern filenamePattern,
@Nullable Boolean checkFilenameStartsLowerCase,
@NotNull TargetBackend targetBackend @NotNull TargetBackend targetBackend
) { ) {
this.rootDir = rootDir; this.rootDir = rootDir;
@@ -57,6 +59,16 @@ public class SimpleTestMethodModel implements TestMethodModel {
this.doTestMethodName = doTestMethodName; this.doTestMethodName = doTestMethodName;
this.filenamePattern = filenamePattern; this.filenamePattern = filenamePattern;
this.targetBackend = targetBackend; this.targetBackend = targetBackend;
if (checkFilenameStartsLowerCase != null) {
char c = file.getName().charAt(0);
if (checkFilenameStartsLowerCase) {
assert Character.isLowerCase(c) : "Invalid file name '" + file + "', file name should start with lower-case letter";
}
else {
assert Character.isUpperCase(c) : "Invalid file name '" + file + "', file name should start with upper-case letter";
}
}
} }
@Override @Override
@@ -40,6 +40,8 @@ public class SingleClassTestModel implements TestClassModel {
private final File rootFile; private final File rootFile;
@NotNull @NotNull
private final Pattern filenamePattern; private final Pattern filenamePattern;
@Nullable
private final Boolean checkFilenameStartsLowerCase;
@NotNull @NotNull
private final String doTestMethodName; private final String doTestMethodName;
@NotNull @NotNull
@@ -52,12 +54,14 @@ public class SingleClassTestModel implements TestClassModel {
public SingleClassTestModel( public SingleClassTestModel(
@NotNull File rootFile, @NotNull File rootFile,
@NotNull Pattern filenamePattern, @NotNull Pattern filenamePattern,
@Nullable Boolean checkFilenameStartsLowerCase,
@NotNull String doTestMethodName, @NotNull String doTestMethodName,
@NotNull String testClassName, @NotNull String testClassName,
@NotNull TargetBackend targetBackend @NotNull TargetBackend targetBackend
) { ) {
this.rootFile = rootFile; this.rootFile = rootFile;
this.filenamePattern = filenamePattern; this.filenamePattern = filenamePattern;
this.checkFilenameStartsLowerCase = checkFilenameStartsLowerCase;
this.doTestMethodName = doTestMethodName; this.doTestMethodName = doTestMethodName;
this.testClassName = testClassName; this.testClassName = testClassName;
this.targetBackend = targetBackend; this.targetBackend = targetBackend;
@@ -103,7 +107,8 @@ public class SingleClassTestModel implements TestClassModel {
@NotNull @NotNull
protected Collection<TestMethodModel> getTestMethodsFromFile(File file) { protected Collection<TestMethodModel> getTestMethodsFromFile(File file) {
return Collections.<TestMethodModel>singletonList(new SimpleTestMethodModel(rootFile, file, doTestMethodName, filenamePattern, return Collections.<TestMethodModel>singletonList(new SimpleTestMethodModel(rootFile, file, doTestMethodName,
filenamePattern, checkFilenameStartsLowerCase,
targetBackend)); targetBackend));
} }
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.generators.tests.generator;
import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.util.text.StringUtil;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.io.File; import java.io.File;
@@ -43,4 +44,7 @@ public class TestGeneratorUtil {
public static String fileNameToJavaIdentifier(@NotNull File file) { public static String fileNameToJavaIdentifier(@NotNull File file) {
return StringUtil.capitalize(escapeForJavaIdentifier(file.getName())); return StringUtil.capitalize(escapeForJavaIdentifier(file.getName()));
} }
public static void checkCase(@NotNull File file, @Nullable Boolean shouldStartLowerCase) {
}
} }