Refactor CompileKotlinAgainstBinariesCustomTest
Extract common logic, add NotNull annotations
This commit is contained in:
+22
-31
@@ -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();
|
||||
|
||||
+24
-25
@@ -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()));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user