package org.perl6.metamodel.tests; import java.util.*; import junit.framework.*; import org.perl6.metamodel.*; public class MROTest extends TestCase { public static void main (String[] args) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(MROTest.class); } public void testRemoveEmptySeqs () { MetaClass m = new MetaClass("Foo"); ArrayList a = new ArrayList(); a.add(new ArrayList()); ArrayList a2 = new ArrayList(); a2.add("Testing"); a.add(a2); a.add(new ArrayList()); ArrayList non_empty = m._remove_empty_seqs(a); assertEquals(non_empty.size(), 1); assertEquals(((ArrayList) non_empty.get(0)).get(0), "Testing"); } public void testInTail () { MetaClass m = new MetaClass("Foo"); MetaClass m2 = new MetaClass("Bar"); ArrayList a1 = new ArrayList(); a1.add(m); assertFalse(m._in_tail(a1, m)); ArrayList a2 = new ArrayList(); a2.add(m2); a2.add(m); assertTrue(m._in_tail(a2, m)); ArrayList a3 = new ArrayList(); a3.add(m2); a3.add(m2); a3.add(m2); a3.add(m); assertTrue(m._in_tail(a3, m)); } public void testRemoveHeadsIf () { MetaClass m = new MetaClass("Foo"); MetaClass m2 = new MetaClass("Bar"); ArrayList seq1 = new ArrayList(); ArrayList a1 = new ArrayList(); a1.add(m); a1.add(m2); ArrayList a2 = new ArrayList(); a2.add(m2); a2.add(m); seq1.add(a1); seq1.add(a2); assertEquals(seq1.size(), 2); assertEquals(((ArrayList) seq1.get(0)).size(), 2); assertEquals(((ArrayList) seq1.get(1)).size(), 2); m._remove_heads_if(m, seq1); assertEquals(seq1.size(), 2); assertEquals(((ArrayList) seq1.get(0)).size(), 1); assertEquals(((ArrayList) seq1.get(1)).size(), 2); } public void testMRO1 () { MetaClass a = new MetaClass("A"); MetaClass b = new MetaClass("B"); MetaClass c = new MetaClass("C"); MetaClass d = new MetaClass("D"); ArrayList B_super = new ArrayList(); B_super.add(a); b.superclasses(B_super); ArrayList C_super = new ArrayList(); C_super.add(a); c.superclasses(C_super); ArrayList D_super = new ArrayList(); D_super.add(b); D_super.add(c); d.superclasses(D_super); ArrayList mro = new ArrayList(); try { mro = d.MRO(); } catch (Exception e) { System.out.println("An exception was thrown "); e.printStackTrace(); } assertEquals(mro.size(), 4); assertEquals(((MetaClass) mro.get(0)), d); assertEquals(((MetaClass) mro.get(1)), b); assertEquals(((MetaClass) mro.get(2)), c); assertEquals(((MetaClass) mro.get(3)), a); } public void testMRO2 () { MetaClass a = new MetaClass("A"); MetaClass b = new MetaClass("B"); MetaClass c = new MetaClass("C"); MetaClass d = new MetaClass("D"); MetaClass e = new MetaClass("E"); MetaClass f = new MetaClass("F"); ArrayList C_super = new ArrayList(); C_super.add(d); C_super.add(f); c.superclasses(C_super); ArrayList B_super = new ArrayList(); B_super.add(d); B_super.add(e); b.superclasses(B_super); ArrayList A_super = new ArrayList(); A_super.add(b); A_super.add(c); a.superclasses(A_super); ArrayList mro = new ArrayList(); try { mro = a.MRO(); } catch (Exception x) { System.out.println("An exception was thrown "); x.printStackTrace(); } assertEquals(mro.size(), 6); assertEquals(((MetaClass) mro.get(0)), a); assertEquals(((MetaClass) mro.get(1)), b); assertEquals(((MetaClass) mro.get(2)), c); assertEquals(((MetaClass) mro.get(3)), d); assertEquals(((MetaClass) mro.get(4)), e); assertEquals(((MetaClass) mro.get(5)), f); } public void testMRO3 () { MetaClass x = new MetaClass("X"); MetaClass y = new MetaClass("Y"); MetaClass xy = new MetaClass("XY"); MetaClass yx = new MetaClass("YX"); MetaClass z = new MetaClass("Z"); ArrayList XY_super = new ArrayList(); XY_super.add(x); XY_super.add(y); xy.superclasses(XY_super); ArrayList YX_super = new ArrayList(); YX_super.add(y); YX_super.add(x); yx.superclasses(YX_super); ArrayList Z_super = new ArrayList(); Z_super.add(xy); Z_super.add(yx); z.superclasses(Z_super); boolean exception_thrown = false; try { ArrayList mro = z.MRO(); } catch (Exception e) { exception_thrown = true; } assertTrue(exception_thrown); } }