From de337df53e1d2b9afd36893dc28ecd15b8a89332 Mon Sep 17 00:00:00 2001 From: Stepan Koltsov Date: Fri, 13 Jan 2012 03:55:11 +0400 Subject: [PATCH] better output in ReaderClassDataTest.compareNamespaces --- .../org/jetbrains/jet/ReadClassDataTest.java | 83 ++++++++++++++----- 1 file changed, 62 insertions(+), 21 deletions(-) diff --git a/compiler/tests/org/jetbrains/jet/ReadClassDataTest.java b/compiler/tests/org/jetbrains/jet/ReadClassDataTest.java index b80cd675e1c..78836988283 100644 --- a/compiler/tests/org/jetbrains/jet/ReadClassDataTest.java +++ b/compiler/tests/org/jetbrains/jet/ReadClassDataTest.java @@ -7,6 +7,7 @@ import com.intellij.psi.PsiFileFactory; import com.intellij.psi.impl.PsiFileFactoryImpl; import com.intellij.testFramework.LightVirtualFile; import junit.framework.Test; +import org.codehaus.groovy.ast.expr.DeclarationExpression; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.codegen.ClassBuilderFactory; import org.jetbrains.jet.codegen.ClassFileFactory; @@ -33,7 +34,9 @@ import org.junit.Assert; import java.io.File; import java.lang.reflect.Method; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; +import java.util.HashSet; import java.util.List; import java.util.Set; @@ -93,33 +96,71 @@ public class ReadClassDataTest extends TestCaseWithTmpdir { private void compareNamespaces(@NotNull NamespaceDescriptor nsa, @NotNull NamespaceDescriptor nsb) { Assert.assertEquals(nsa.getName(), nsb.getName()); System.out.println("namespace " + nsa.getName()); + + Set classifierNames = new HashSet(); + Set propertyNames = new HashSet(); + Set functionNames = new HashSet(); + for (DeclarationDescriptor ad : nsa.getMemberScope().getAllDescriptors()) { if (ad instanceof ClassifierDescriptor) { - ClassifierDescriptor bd = nsb.getMemberScope().getClassifier(ad.getName()); - Assert.assertTrue("classifier not found: " + ad.getName(), bd != null); - compareClassifiers((ClassifierDescriptor) ad, bd); - - Assert.assertNull(nsb.getMemberScope().getClassifier(ad.getName() + JvmAbi.TRAIT_IMPL_SUFFIX)); - } else if (ad instanceof FunctionDescriptor) { - Set functions = nsb.getMemberScope().getFunctions(ad.getName()); - Assert.assertTrue(functions.size() >= 1); - Assert.assertTrue("not implemented", functions.size() == 1); - FunctionDescriptor bd = functions.iterator().next(); - compareDescriptors(ad, bd); + classifierNames.add(ad.getName()); } else if (ad instanceof PropertyDescriptor) { - Set properties = nsb.getMemberScope().getProperties(ad.getName()); - Assert.assertTrue("property not found by name: " + ad.getName(), properties.size() >= 1); - Assert.assertTrue("not implemented", properties.size() == 1); - PropertyDescriptor bd = (PropertyDescriptor) properties.iterator().next(); - compareDescriptors(ad, bd); - - Assert.assertTrue(nsb.getMemberScope().getFunctions(PropertyCodegen.getterName(ad.getName())).isEmpty()); - Assert.assertTrue(nsb.getMemberScope().getFunctions(PropertyCodegen.setterName(ad.getName())).isEmpty()); + propertyNames.add(ad.getName()); + } else if (ad instanceof FunctionDescriptor) { + functionNames.add(ad.getName()); } else { - throw new AssertionError("Unknown member: " + ad); + throw new AssertionError("unknown member: " + ad); } } + + for (String name : classifierNames) { + ClassifierDescriptor ca = nsa.getMemberScope().getClassifier(name); + ClassifierDescriptor cb = nsb.getMemberScope().getClassifier(name); + Assert.assertTrue(ca != null); + Assert.assertTrue(cb != null); + compareClassifiers(ca, cb); + } + + for (String name : propertyNames) { + Set pa = nsa.getMemberScope().getProperties(name); + Set pb = nsb.getMemberScope().getProperties(name); + compareDeclarationSets(pa, pb); + + Assert.assertTrue(nsb.getMemberScope().getFunctions(PropertyCodegen.getterName(name)).isEmpty()); + Assert.assertTrue(nsb.getMemberScope().getFunctions(PropertyCodegen.setterName(name)).isEmpty()); + } + + for (String name : functionNames) { + Set fa = nsa.getMemberScope().getFunctions(name); + Set fb = nsb.getMemberScope().getFunctions(name); + compareDeclarationSets(fa, fb); + } } + + private void compareDeclarationSets(Set a, Set b) { + String at = serializedDeclarationSets(a); + String bt = serializedDeclarationSets(b); + Assert.assertEquals(at, bt); + System.out.print(at); + } + + private String serializedDeclarationSets(Collection ds) { + List strings = new ArrayList(); + for (DeclarationDescriptor d : ds) { + StringBuilder sb = new StringBuilder(); + new Serializer(sb).serialize(d); + strings.add(sb.toString()); + } + + Collections.sort(strings); + + StringBuilder r = new StringBuilder(); + for (String string : strings) { + r.append(string); + r.append("\n"); + } + return r.toString(); + } private void compareClassifiers(@NotNull ClassifierDescriptor a, @NotNull ClassifierDescriptor b) { StringBuilder sba = new StringBuilder(); @@ -354,7 +395,7 @@ public class ReadClassDataTest extends TestCaseWithTmpdir { first = false; } } - + private Method getMethodToSerialize(Object o) { // TODO: cache for (Method method : this.getClass().getMethods()) {