Refactor CompileKotlinAgainstBinariesCustomTest

Extract common logic, add NotNull annotations
This commit is contained in:
Alexander Udalov
2013-10-09 19:29:01 +04:00
parent f8201c6aa9
commit 9e8a8e852c
2 changed files with 46 additions and 56 deletions
@@ -16,27 +16,23 @@
package org.jetbrains.jet.jvm.compiler;
import com.google.common.base.Predicates;
import com.google.common.collect.Lists;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.psi.PsiFile;
import com.intellij.util.ArrayUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.ConfigurationKind;
import org.jetbrains.jet.JetTestUtils;
import org.jetbrains.jet.TestJdkKind;
import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment;
import org.jetbrains.jet.config.CompilerConfiguration;
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.resolve.AnalyzerScriptParameter;
import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.test.TestCaseWithTmpdir;
import org.jetbrains.jet.test.util.DescriptorValidator;
import org.jetbrains.jet.test.util.NamespaceComparator;
import org.junit.Assert;
import java.io.File;
import java.io.IOException;
@@ -48,40 +44,35 @@ import java.util.regex.Pattern;
import static org.jetbrains.jet.test.util.NamespaceComparator.validateAndCompareNamespaceWithFile;
public abstract class AbstractCompileKotlinAgainstCustomBinariesTest extends TestCaseWithTmpdir {
protected void doTest(String ktFilePath) throws Exception {
Assert.assertTrue(ktFilePath.endsWith(".kt"));
protected void doTest(@NotNull String ktFilePath) throws Exception {
assertTrue(ktFilePath.endsWith(".kt"));
File ktFile = new File(ktFilePath);
String testFileWithoutExtension = FileUtil.getNameWithoutExtension(ktFile);
checkNamespace(ktFile, LoadDescriptorUtil.TEST_PACKAGE_FQNAME,
new File(ktFile.getParentFile(), testFileWithoutExtension + ".txt"));
NamespaceDescriptor namespace = analyzeFileToNamespace(ktFile);
NamespaceComparator.Configuration comparator = NamespaceComparator.DONT_INCLUDE_METHODS_OF_OBJECT.withValidationStrategy(
DescriptorValidator.ValidationVisitor.ALLOW_ERROR_TYPES);
File txtFile = new File(ktFile.getParentFile(), FileUtil.getNameWithoutExtension(ktFile) + ".txt");
validateAndCompareNamespaceWithFile(namespace, comparator, txtFile);
}
private void checkNamespace(File ktFile, FqName namespaceFqn, File expectedFile) throws IOException {
BindingContext bindingContext = analyzeFile(ktFile);
@NotNull
protected NamespaceDescriptor analyzeFileToNamespace(@NotNull File ktFile) throws IOException {
Project project = getEnvironment(ktFile.getParentFile()).getProject();
NamespaceDescriptor namespaceDescriptor = bindingContext.get(BindingContext.FQNAME_TO_NAMESPACE_DESCRIPTOR, namespaceFqn);
assertNotNull("Failed to find namespace: " + namespaceFqn, namespaceDescriptor);
BindingContext bindingContext = AnalyzerFacadeForJVM.analyzeOneFileWithJavaIntegration(
JetTestUtils.loadJetFile(project, ktFile),
Collections.<AnalyzerScriptParameter>emptyList()
).getBindingContext();
validateAndCompareNamespaceWithFile(namespaceDescriptor, NamespaceComparator.DONT_INCLUDE_METHODS_OF_OBJECT.withValidationStrategy(
DescriptorValidator.ValidationVisitor.ALLOW_ERROR_TYPES), expectedFile);
NamespaceDescriptor namespaceDescriptor = bindingContext.get(BindingContext.FQNAME_TO_NAMESPACE_DESCRIPTOR,
LoadDescriptorUtil.TEST_PACKAGE_FQNAME);
assertNotNull("Failed to find namespace: " + LoadDescriptorUtil.TEST_PACKAGE_FQNAME, namespaceDescriptor);
return namespaceDescriptor;
}
protected BindingContext analyzeFile(File ktFile) throws IOException {
JetCoreEnvironment environment = getEnvironment(ktFile);
Project project = environment.getProject();
List<JetFile> jetFiles = Collections.singletonList(JetTestUtils.loadJetFile(project, ktFile));
return AnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration(
project, jetFiles, Collections.<AnalyzerScriptParameter>emptyList(),
Predicates.<PsiFile>alwaysTrue()).getBindingContext();
}
private JetCoreEnvironment getEnvironment(File ktFile) {
File dir = ktFile.getParentFile();
@NotNull
private JetCoreEnvironment getEnvironment(@NotNull File dir) {
List<File> jarFiles = FileUtil.findFilesByMask(Pattern.compile("^.*\\.jar$"), dir);
CopyOnWriteArrayList<File> extras = Lists.newCopyOnWriteArrayList();
@@ -13,47 +13,46 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.jet.jvm.compiler;
import junit.framework.Assert;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
import org.jetbrains.jet.lang.descriptors.VariableDescriptorForObject;
import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.types.ErrorUtils;
import java.io.File;
import java.io.IOException;
import java.util.Collection;
import static org.jetbrains.jet.jvm.compiler.LoadDescriptorUtil.TEST_PACKAGE_FQNAME;
import static org.jetbrains.jet.lang.resolve.BindingContext.FQNAME_TO_NAMESPACE_DESCRIPTOR;
public final class CompileKotlinAgainstBinariesCustomTest extends AbstractCompileKotlinAgainstCustomBinariesTest {
public static final String TEST_DATA_PATH = "compiler/testData/compileKotlinAgainstBinariesCustom/";
public void testDuplicateObjectInSourcesAndBinaries() throws Exception {
BindingContext context = analyzeFile(new File(
"compiler/testData/compileKotlinAgainstBinariesCustom/duplicateObjectInBinaryAndSources/duplicateObjectInBinaryAndSources.kt"));
NamespaceDescriptor namespaceDescriptor = context.get(FQNAME_TO_NAMESPACE_DESCRIPTOR, TEST_PACKAGE_FQNAME);
assert namespaceDescriptor != null;
Collection<DeclarationDescriptor> allDescriptors = namespaceDescriptor.getMemberScope().getAllDescriptors();
Assert.assertEquals(allDescriptors.size(), 2);
@NotNull
private Collection<DeclarationDescriptor> analyzeAndGetAllDescriptors() throws IOException {
String testName = getTestName(true);
File ktFile = new File(TEST_DATA_PATH + testName, testName + ".kt");
return analyzeFileToNamespace(ktFile).getMemberScope().getAllDescriptors();
}
public void testDuplicateObjectInBinaryAndSources() throws Exception {
Collection<DeclarationDescriptor> allDescriptors = analyzeAndGetAllDescriptors();
assertEquals(allDescriptors.size(), 2);
for (DeclarationDescriptor descriptor : allDescriptors) {
Assert.assertTrue(descriptor.getName().asString().equals("Lol"));
Assert.assertTrue(descriptor instanceof VariableDescriptorForObject);
Assert.assertFalse("Object property should have valid class", ErrorUtils.isError(((VariableDescriptorForObject) descriptor).getObjectClass()));
assertTrue(descriptor.getName().asString().equals("Lol"));
assertTrue(descriptor instanceof VariableDescriptorForObject);
assertFalse("Object property should have valid class",
ErrorUtils.isError(((VariableDescriptorForObject) descriptor).getObjectClass()));
}
}
public void testBrokenJarWithNoClassForObjectProperty() throws Exception {
BindingContext context = analyzeFile(new File(
"compiler/testData/compileKotlinAgainstBinariesCustom/brokenJarWithNoClassForObjectProperty/brokenJarWithNoClassForObjectProperty.kt"));
NamespaceDescriptor namespaceDescriptor = context.get(FQNAME_TO_NAMESPACE_DESCRIPTOR, TEST_PACKAGE_FQNAME);
assert namespaceDescriptor != null;
Collection<DeclarationDescriptor> allDescriptors = namespaceDescriptor.getMemberScope().getAllDescriptors();
Assert.assertEquals(allDescriptors.size(), 1);
Collection<DeclarationDescriptor> allDescriptors = analyzeAndGetAllDescriptors();
assertEquals(allDescriptors.size(), 1);
DeclarationDescriptor descriptor = allDescriptors.iterator().next();
Assert.assertTrue(descriptor.getName().asString().equals("Lol"));
Assert.assertTrue(descriptor instanceof VariableDescriptorForObject);
Assert.assertTrue("Object property should have an error class", ErrorUtils.isError(((VariableDescriptorForObject) descriptor).getObjectClass()));
assertTrue(descriptor.getName().asString().equals("Lol"));
assertTrue(descriptor instanceof VariableDescriptorForObject);
assertTrue("Object property should have an error class",
ErrorUtils.isError(((VariableDescriptorForObject) descriptor).getObjectClass()));
}
}