package depends.extractor; import depends.entity.ContainerEntity; import depends.entity.Entity; import depends.entity.FunctionEntity; import depends.entity.VarEntity; import depends.entity.repo.EntityRepo; import depends.relations.BindingResolver; import depends.relations.IBindingResolver; import depends.relations.Relation; import depends.relations.RelationCounter; import multilang.depends.util.file.TemporaryFile; import java.util.ArrayList; import java.util.Collection; import java.util.Set; import static org.junit.Assert.fail; public abstract class ParserTest { protected EntityRepo entityRepo ; protected IBindingResolver bindingResolver; protected AbstractLangProcessor langProcessor; protected void init(){ entityRepo = langProcessor.getEntityRepo(); bindingResolver = new BindingResolver(langProcessor,true,false); langProcessor.bindingResolver = bindingResolver; TemporaryFile.reset(); } protected void init(boolean duckTypingDeduce){ entityRepo = langProcessor.getEntityRepo(); bindingResolver = new BindingResolver(langProcessor,false,duckTypingDeduce); langProcessor.bindingResolver = bindingResolver; TemporaryFile.reset(); } public Set resolveAllBindings() { Set result = bindingResolver.resolveAllBindings(langProcessor.isEagerExpressionResolve()); new RelationCounter(entityRepo,langProcessor, bindingResolver).computeRelations(); return result; } protected Set resolveAllBindings(boolean callAsImpl) { Set result = bindingResolver.resolveAllBindings(langProcessor.isEagerExpressionResolve()); new RelationCounter(entityRepo,langProcessor, bindingResolver).computeRelations(); return result; } protected void assertNotContainsRelation(Entity inEntity, String dependencyType, String dependedEntityFullName) { for (Relation r:inEntity.getRelations()) { if (r.getType().equals(dependencyType)) { if (r.getEntity().getQualifiedName().equals(dependedEntityFullName)) { fail("found unexpected relation: type = " + dependencyType + " to entity " + dependedEntityFullName); } } } } protected void assertContainsRelation(Entity inEntity, String dependencyType, String dependedEntityFullName) { Relation relation = null; for (Relation r:inEntity.getRelations()) { if (r.getType().equals(dependencyType)) { relation = r; if (r.getEntity()==null) continue; if (r.getEntity().getQualifiedName().equals(dependedEntityFullName)) return; } } if (relation==null) { fail("cannot found relation type of "+ dependencyType); }else { fail("cannot found relation type of " + dependencyType + " to entity " + dependedEntityFullName); } } protected void assertContainsVarWithRawName(Entity entity, String name) { ContainerEntity container = (ContainerEntity)entity; ArrayList vars = container.getVars(); for (VarEntity var:vars) { if (var.getRawName().uniqName().equals(name)) { return; } } fail("cannot found var with rawname " + name); } protected void assertContainsParametersWithRawName(FunctionEntity function, String name) { Collection vars = function.getParameters(); for (VarEntity var:vars) { if (var.getRawName().uniqName().equals(name)) { return; } } fail("cannot found parameter with rawname " + name); } protected void assertContainReturnType(FunctionEntity function, String name) { Collection types = function.getReturnTypes(); for (Entity type:types) { if (type.getRawName().uniqName().equals(name)) { return; } } fail("cannot found return type with rawname " + name); } }