コード例 #1
0
ファイル: TextTreeTest.php プロジェクト: bgarrels/ebnf
 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());
 }