package uk.co.badgersinfoil.metaas.impl; import java.io.IOException; import java.io.StringReader; import java.util.Iterator; import java.util.List; import uk.co.badgersinfoil.metaas.ActionScriptFactory; import uk.co.badgersinfoil.metaas.ActionScriptProject; import uk.co.badgersinfoil.metaas.CodeMirror; import uk.co.badgersinfoil.metaas.dom.ASArg; import uk.co.badgersinfoil.metaas.dom.ASClassType; import uk.co.badgersinfoil.metaas.dom.ASCompilationUnit; import uk.co.badgersinfoil.metaas.dom.ASInterfaceType; import uk.co.badgersinfoil.metaas.dom.ASMethod; import uk.co.badgersinfoil.metaas.dom.ASPackage; import junit.framework.TestCase; public class AutoImporterTest extends TestCase { public void testIt() throws IOException { AutoImporter autoimp = new AutoImporter(); ActionScriptFactory fact = new ActionScriptFactory(); ActionScriptProject proj = createProject(fact); autoimp.performAutoImport((ASTActionScriptProject)proj); checkProject(fact, proj); } private ActionScriptProject createProject(ActionScriptFactory fact) { ActionScriptProject proj = fact.newEmptyASProject("."); String source = "package pkg1 {" + " class Foo implements pkg2.Bar {" + " public function meth1():pkg2.Bar {" + " }" + " }" + " }"; StringReader in = new StringReader(source); proj.addCompilationUnit(fact.newParser().parse(in)); source = "package pkg2 {" + " interface Bar extends pkg1.Foo {" + " public function meth2(a:pkg1.Foo):void;" + " }" + " }"; in = new StringReader(source); proj.addCompilationUnit(fact.newParser().parse(in)); return proj; } private void checkProject(ActionScriptFactory fact, ActionScriptProject proj) throws IOException { List units = proj.getCompilationUnits(); for (Iterator i=units.iterator(); i.hasNext(); ) { ASCompilationUnit unit = (ASCompilationUnit)i.next(); if (unit.getPackageName().equals("pkg1")) { checkPkg1(CodeMirror.assertReflection(fact, unit)); } else if (unit.getPackageName().equals("pkg2")) { checkPkg2(CodeMirror.assertReflection(fact, unit)); } } } private void checkPkg1(ASCompilationUnit unit) { ASPackage pkg1 = unit.getPackage(); List imports = pkg1.findImports(); assertTrue(imports.contains("pkg2.Bar")); assertEquals("Bar", ((ASClassType)pkg1.getType()).getImplementedInterfaces().get(0)); ASMethod meth1 = pkg1.getType().getMethod("meth1"); assertEquals("Bar", meth1.getType()); } private void checkPkg2(ASCompilationUnit unit) { ASPackage pkg2 = unit.getPackage(); List imports = pkg2.findImports(); assertTrue(imports.contains("pkg1.Foo")); assertEquals("Foo", ((ASInterfaceType)pkg2.getType()).getSuperInterfaces().get(0)); ASMethod meth2 = pkg2.getType().getMethod("meth2"); ASArg a = (ASArg)meth2.getArgs().get(0); assertEquals("Foo", a.getType()); } }