    @Test
    public void testTwoFeatures() throws Exception {

        String input =
                generateLBJavaScript("TwoFeatLearner", "testFeature1, testFeature2",
                        "import edu.illinois.cs.cogcomp.lbjava.features.PredefinedFeature;");
        Yylex scanner = new Yylex(new ByteArrayInputStream(input.getBytes()));
        AST ast = (AST) new parser(scanner).parse().value;

        Main.runSemanticAnalysis(ast);

        assertEquals(5, SemanticAnalysis.dependorGraph.size());
        assertEquals(1, ast.declarations.size());

        ASTNode[] astNodes = ast.declarations.iterator().next().iterator().children;
        assertEquals(3, astNodes.length);
        assertTrue(astNodes[0] instanceof ClassifierReturnType);
        assertEquals("discrete", astNodes[0].toString());
        assertTrue(astNodes[2] instanceof LearningClassifierExpression);
        LearningClassifierExpression lce = (LearningClassifierExpression) astNodes[2];
        assertEquals("TwoFeatLearner$$1", lce.extractor.getName());
        ClassifierExpressionList components = ((CompositeGenerator) lce.extractor).components;
        assertEquals(2, components.size());
        ClassifierName component1 = (ClassifierName) components.iterator().next();
        assertTrue(component1.isField);
        assertEquals("PredefinedFeature", AST.globalSymbolTable.classForName(component1.getName())
                .getSimpleName());

        new RevisionAnalysis(ast).run(ast);
        new ClassifierCSE(ast).run(ast);
        new TranslateToJava(ast).run(ast);
        new Train(ast, 0).run(ast);
    }