public function testGenerateText() { $builder = new SyntaxBuilder(); $builder->syntax("foo"); $ast = $builder->getAst(); $visitor = new TextSyntaxTree(); $ast->accept($visitor); $this->assertEquals("[syntax]" . PHP_EOL, $visitor->getText()); $visitor = new TextSyntaxTree(); $builder->rule("rule-1"); $ast = $builder->getAst(); $ast->accept($visitor); $this->assertEquals("[syntax]" . PHP_EOL . " +--[rule='rule-1']" . PHP_EOL, $visitor->getText()); $visitor = new TextSyntaxTree(); $builder->rule("rule-2"); $ast = $builder->getAst(); $ast->accept($visitor); $this->assertEquals("[syntax]" . PHP_EOL . " +--[rule='rule-1']" . PHP_EOL . " +--[rule='rule-2']" . PHP_EOL, $visitor->getText()); $choice = $builder->clear()->rule("name")->choice(); $ast = $builder->getAst(); $visitor = new TextSyntaxTree(); $ast->accept($visitor); $this->assertEquals("[syntax]" . PHP_EOL . " +--[rule='name']" . PHP_EOL . " +--[choice]" . PHP_EOL, $visitor->getText()); $choice->identifier("ident")->terminal("term")->end(); $ast = $builder->getAst(); $ast->accept($visitor); $this->assertEquals("[syntax]" . PHP_EOL . " +--[rule='name']" . PHP_EOL . " +--[choice]" . PHP_EOL . " +--[identifier='ident']" . PHP_EOL . " +--[terminal='term']" . PHP_EOL, $visitor->getText()); $visitor = new TextSyntaxTree(); $builder->clear()->syntax("foobar")->rule("one")->choice()->end()->rule("two"); $ast = $builder->getAst(); $ast->accept($visitor); $this->assertEquals("[syntax]" . PHP_EOL . " +--[rule='one']" . PHP_EOL . " | +--[choice]" . PHP_EOL . " +--[rule='two']" . PHP_EOL, $visitor->getText()); $fixtureDir = EBNF_TESTS_FIXTURS . DIRECTORY_SEPARATOR . "visitor" . DIRECTORY_SEPARATOR . "TextSyntaxTree"; $file = EBNF_TESTS_FIXTURS . "/rules_with_literals.ebnf"; $scanner = new Scanner(file_get_contents($file)); $parser = new Parser($scanner); $parser->parse(); $ast = $parser->getAst(); $visitor = new TextSyntaxTree(); $ast->accept($visitor); $this->assertEquals(file_get_contents($fixtureDir . DIRECTORY_SEPARATOR . "rules_with_literals"), $visitor->getText()); }