public void regenTest( CodeGenerationContext codeGenContext, DeclarationContext declarationContext, UsageContext usageContext, String... usesStatements) throws IOException { ClassFileGenerator cfg = codeGenContext.createGosuClassFileGenerator( determineClassName(declarationContext, usageContext)); cfg.setSuperClass(getTestBaseClass()); for (String usesStatement : usesStatements) { cfg.addUses(usesStatement); } codeGenContext.setCurrentTestGenerator(cfg); for (Member member : declarationContext.getMembers()) { if (usageContext.isApplicable(member)) { createTestUsage(usageContext, codeGenContext, member); } } }
protected CodeGenerationContext initializeTests( TestGenerationContext testGenContext, String packageName) throws IOException { CodeGenerationContext codeGenContext = new CodeGenerationContext(packageName); // Set up the declaring contexts GosuClassFileGenerator unrelatedClassGenerator = codeGenContext.createGosuClassFileGenerator(testGenContext.constants().unrelatedClass()); unrelatedClassGenerator.addUses(packageName + "." + testGenContext.constants().javaClass()); GosuClassFileGenerator unrelatedEnhancementGenerator = codeGenContext.createGosuClassFileGenerator( testGenContext.constants().unrelatedEnhancement()); unrelatedEnhancementGenerator.setEnhancement(true); unrelatedEnhancementGenerator.setSuperClass(testGenContext.constants().unrelatedClass()); unrelatedClassGenerator.addUses(packageName + "." + testGenContext.constants().javaClass()); GosuClassFileGenerator otherEnhancementGenerator = codeGenContext.createGosuClassFileGenerator( testGenContext.constants().gosuClassOtherEnhancement()); otherEnhancementGenerator.setEnhancement(true); otherEnhancementGenerator.setSuperClass(testGenContext.constants().gosuClass()); otherEnhancementGenerator.addUses(packageName + "." + testGenContext.constants().javaClass()); GosuClassFileGenerator gosuSubclassInOtherPackageGenerator = codeGenContext.createGosuClassFileGenerator( testGenContext.constants().gosuClassSubclassInOtherPackage()); gosuSubclassInOtherPackageGenerator.setSuperClass(testGenContext.constants().gosuClass()); // gosuSubclassInOtherPackageGenerator.addUses(packageName + "." + // testGenContext.constants().gosuClass()); gosuSubclassInOtherPackageGenerator.addUses(packageName + ".*"); gosuSubclassInOtherPackageGenerator.setPackage(packageName + ".other"); GosuClassFileGenerator gosuSubclassEnhancementGenerator = codeGenContext.createGosuClassFileGenerator( testGenContext.constants().gosuClassSubclassEnhancement()); gosuSubclassEnhancementGenerator.setEnhancement(true); gosuSubclassEnhancementGenerator.setSuperClass(testGenContext.constants().gosuClassSubclass()); gosuSubclassEnhancementGenerator.addUses( packageName + "." + testGenContext.constants().javaClass()); GosuClassFileGenerator javaSubclassGenerator = codeGenContext.createGosuClassFileGenerator(testGenContext.constants().javaClassSubclass()); javaSubclassGenerator.setSuperClass(testGenContext.constants().javaClass()); javaSubclassGenerator.addUses(packageName + "." + testGenContext.constants().javaClass()); GosuClassFileGenerator javaSubclassInOtherPackageGenerator = codeGenContext.createGosuClassFileGenerator( testGenContext.constants().javaClassSubclassInOtherPackage()); javaSubclassInOtherPackageGenerator.setSuperClass(testGenContext.constants().javaClass()); // javaSubclassInOtherPackageGenerator.addUses(packageName + "." + // testGenContext.constants().javaClass()); javaSubclassInOtherPackageGenerator.addUses(packageName + ".*"); javaSubclassInOtherPackageGenerator.setPackage(packageName + ".other"); ClassDeclarationContext classDeclarationContext = new ClassDeclarationContext(codeGenContext, testGenContext); EnhancementOfClassDeclarationContext enhancementOfClassDeclarationContext = new EnhancementOfClassDeclarationContext(codeGenContext, testGenContext); SubclassDeclarationContext subclassDeclarationContext = new SubclassDeclarationContext(codeGenContext, testGenContext); StaticInnerClassDeclarationContext staticInnerClassDeclarationContext = new StaticInnerClassDeclarationContext(codeGenContext, testGenContext); JavaClassDeclarationContext javaClassDeclarationContext = new JavaClassDeclarationContext(codeGenContext, testGenContext); GosuInterfaceDeclarationContext gosuInterfaceDeclarationContext = new GosuInterfaceDeclarationContext(codeGenContext, testGenContext); GosuInterfaceImplementorDeclarationContext gosuInterfaceImplementorDeclarationContext = new GosuInterfaceImplementorDeclarationContext(codeGenContext, testGenContext); JavaInterfaceDeclarationContext javaInterfaceDeclarationContext = new JavaInterfaceDeclarationContext(codeGenContext, testGenContext); EnhancementOfJavaClassDeclarationContext enhancementOfJavaClassDeclarationContext = new EnhancementOfJavaClassDeclarationContext(codeGenContext, testGenContext); PureGosuTypeDeclarationContext pureGosuTypeCtx = new PureGosuTypeDeclarationContext(codeGenContext, testGenContext); JavaBackedGosuTypeDeclarationContext javaBackedGosuTypeCtx = new JavaBackedGosuTypeDeclarationContext(codeGenContext, testGenContext); // Now generate tests against them regenTest( codeGenContext, classDeclarationContext, new UnrelatedClassUsageContext(testGenContext)); regenTest( codeGenContext, classDeclarationContext, new ClassDeclSameClassUsageContext(testGenContext)); regenTest( codeGenContext, classDeclarationContext, new ClassDeclEnhancementOfClassUsageContext(testGenContext)); regenTest( codeGenContext, classDeclarationContext, new ClassDeclInnerClassUsageContext(testGenContext)); regenTest( codeGenContext, classDeclarationContext, new ClassDeclStaticInnerClassUsageContext(testGenContext)); regenTest( codeGenContext, classDeclarationContext, new ClassDeclSubclassUsageContext(testGenContext)); regenTest( codeGenContext, classDeclarationContext, new ClassDeclViaSubclassUnrelatedClassUsageContext(testGenContext)); regenTest( codeGenContext, classDeclarationContext, new ClassDeclViaSubclassSubclassUsageContext(testGenContext)); regenTest( codeGenContext, classDeclarationContext, new ClassDeclStaticInnerClassOnSubclassUsageContext(testGenContext)); regenTest( codeGenContext, classDeclarationContext, new UnrelatedEnhancementUsageContext(testGenContext)); regenTest( codeGenContext, classDeclarationContext, new ClassDeclSubclassEnhancementUsageContext(testGenContext)); regenTest( codeGenContext, classDeclarationContext, new ClassDeclInnerClassOnSubclassUsageContext(testGenContext)); regenTest( codeGenContext, classDeclarationContext, new ClassDeclSubclassInOtherPackageUsageContext(testGenContext), packageName + ".other." + testGenContext.constants().gosuClassSubclassInOtherPackage()); regenTest( codeGenContext, enhancementOfClassDeclarationContext, new UnrelatedClassUsageContext(testGenContext)); regenTest( codeGenContext, enhancementOfClassDeclarationContext, new EnhancementDeclEnhancedClassUsageContext(testGenContext)); regenTest( codeGenContext, enhancementOfClassDeclarationContext, new EnhancementDeclSameEnhancementUsageContext(testGenContext)); regenTest( codeGenContext, enhancementOfClassDeclarationContext, new EnhancementDeclInnerClassUsageContext(testGenContext)); regenTest( codeGenContext, enhancementOfClassDeclarationContext, new EnhancementDeclStaticInnerClassUsageContext(testGenContext)); regenTest( codeGenContext, enhancementOfClassDeclarationContext, new EnhancementDeclSubclassUsageContext(testGenContext)); regenTest( codeGenContext, enhancementOfClassDeclarationContext, new ClassDeclViaSubclassUnrelatedClassUsageContext(testGenContext)); regenTest( codeGenContext, enhancementOfClassDeclarationContext, new UnrelatedEnhancementUsageContext(testGenContext)); regenTest( codeGenContext, enhancementOfClassDeclarationContext, new EnhancementDeclOtherEnhancementUsageContext(testGenContext)); regenTest( codeGenContext, enhancementOfClassDeclarationContext, new EnhancementDeclSubclassEnhancementUsageContext(testGenContext)); regenTest( codeGenContext, staticInnerClassDeclarationContext, new UnrelatedClassUsageContext(testGenContext)); regenTest( codeGenContext, javaClassDeclarationContext, new JavaClassDeclUnrelatedClassUsageContext(testGenContext)); regenTest( codeGenContext, javaClassDeclarationContext, new JavaClassDeclSubclassUsageContext(testGenContext)); regenTest( codeGenContext, javaClassDeclarationContext, new JavaClassDeclSubclassInnerClassUsageContext(testGenContext)); regenTest( codeGenContext, javaClassDeclarationContext, new JavaClassDeclSubclassInOtherPackageUsageContext(testGenContext), packageName + ".other." + testGenContext.constants().javaClassSubclassInOtherPackage()); regenTest( codeGenContext, enhancementOfJavaClassDeclarationContext, new UnrelatedClassUsageContext(testGenContext)); regenTest( codeGenContext, enhancementOfJavaClassDeclarationContext, new UnrelatedEnhancementUsageContext(testGenContext)); regenTest( codeGenContext, enhancementOfJavaClassDeclarationContext, new EnhancementOfJavaClassDeclSameEnhancementUsageContext(testGenContext)); regenTest( codeGenContext, gosuInterfaceDeclarationContext, new GosuInterfaceDeclUnrelatedClassUsageContext(testGenContext)); regenTest( codeGenContext, gosuInterfaceImplementorDeclarationContext, new GosuInterfaceImplementorDeclUnrelatedClassUsageContext(testGenContext)); regenTest( codeGenContext, javaInterfaceDeclarationContext, new GosuInterfaceDeclUnrelatedClassUsageContext(testGenContext)); regenTest( codeGenContext, pureGosuTypeCtx, new PureGosuTypeUnrelatedClassUsageContext(testGenContext)); regenTest( codeGenContext, javaBackedGosuTypeCtx, new JavaBackedGosuTypeUnrelatedClassUsageContext(testGenContext)); return codeGenContext; }