@Test
  public void ok() {
    g.rule(JavaGrammar.TYPE).mock();
    g.rule(JavaGrammar.VARIABLE_DECLARATORS).mock();
    g.rule(JavaGrammar.ANNOTATION).mock();

    assertThat(g.rule(JavaGrammar.LOCAL_VARIABLE_DECLARATION_STATEMENT))
        .matches("final type variableDeclarators ;")
        .matches("annotation type variableDeclarators ;")
        .matches("type variableDeclarators ;");
  }
  /* antlr grammar
  equalityExpression
     : concatenationExpression
       ( ( equalityOperator5^ | equalityOperator3^ |  equalityOperator2^ | equalityOperator1^ ) concatenationExpression )*
     ;
   */
  @Test
  public void ok() {
    assertThat(g.rule(CFGrammar.EQUALITY_EXPRESSION))
        .matches("concatenationExpression")
        .matches("concatenationExpression is concatenationExpression")
        .matches("concatenationExpression < concatenationExpression")
        .matches("concatenationExpression lt concatenationExpression")
        .matches("concatenationExpression != concatenationExpression")
        .matches("concatenationExpression less than concatenationExpression")
        .matches("concatenationExpression does not contain concatenationExpression")
        .matches("concatenationExpression less than or equal toconcatenationExpression");

    assertThat(g.rule(CFGrammar.EQUALITY_EXPRESSION))
        .notMatches("concatenationExpression random words concatenationExpression");
  }
 @Test
 public void test() {
   Assertions.assertThat(g.rule(FlexGrammar.DEFAULT_XML_NAMESPACE_DIRECTIVE))
       .matches("default xml namespace = ns ;")
       .notMatches("default \n xml namespace = ns ;")
       .notMatches("default xml \n namespace = ns ;");
 }
 @Test
 public void classWithStaticAtribute() {
   Assertions.assertThat(g.rule(FlexGrammar.CLASS_DEF))
       .matches("class a {}")
       .matches("class a extends b {}")
       .matches("class Base { public static var test:String = \"static\";}");
 }
 @Test
 public void test() {
   Assertions.assertThat(g.rule(FlexGrammar.TRY_STATEMENT))
       .matches("try { } catch (error) { }")
       .matches("try { } catch (error:ErrorType1) { } catch (error:ErrorType2) { }")
       .matches("try { } finally { }")
       .matches("try { } catch (error) { } finally { }");
 }
 @Test
 public void realLife() {
   assertThat(g.rule(JavaTokenType.IDENTIFIER))
       .matches("foo")
       .matches("bar")
       .matches("enum")
       .notMatches("public")
       .notMatches("final")
       .notMatches("assert");
 }
 @Test
 public void test() {
   Assertions.assertThat(g.rule(FlexGrammar.FUNCTION_DEF))
       .matches("function name () {}")
       .matches("function name () ;")
       .matches("function get name ()")
       .notMatches("function get \n name ()")
       .matches("function set name ()")
       .notMatches("function set \n name ()");
 }
 @Test
 public void test() {
   Assertions.assertThat(g.rule(FlexGrammar.TYPE_EXPR))
       .matches("*")
       .matches("String")
       .matches("int")
       .matches("foo.bar")
       .matches("Vector.<String>")
       .matches("foo.bar.Vector.<String>")
       .matches("Vector.<*>");
 }
 @Test
 public void ok() {
   assertThat(g.rule(EcmaScriptGrammar.CONTINUE_STATEMENT))
       .as("EOS is line terminator")
       .matchesPrefix("continue \n", "another-statement ;")
       .matchesPrefix("continue label \n", "another-statement ;")
       .matchesPrefix("continue \n", ";")
       .as("EOS is semicolon")
       .matchesPrefix("continue ;", "another-statement")
       .matchesPrefix("continue label \n ;", "another-statement")
       .as("EOS is before right curly bracket")
       .matchesPrefix("continue ", "}")
       .matchesPrefix("continue label ", "}")
       .as("EOS is end of input")
       .matches("continue ")
       .matches("continue label ");
 }
 @Test
 public void realLife() {
   assertThat(g.rule(EcmaScriptGrammar.DO_WHILE_STATEMENT))
       .as("inner statement must end by newline or semicolon")
       .notMatches("do something() while (condition);");
 }
 @Test
 public void test() {
   Assertions.assertThat(g.rule(FlexGrammar.EMPTY_STATEMENT)).matches(";");
 }
 @Test
 public void test() {
   Assertions.assertThat(g.rule(FlexGrammar.HEXADECIMAL)).matches("0x01aF");
 }
 @Test
 public void test() {
   Assertions.assertThat(g.rule(FlexGrammar.ARGUMENTS)).matches("( )").matches("(a, b, c)");
 }
 @Test
 public void test() {
   Assertions.assertThat(g.rule(FlexGrammar.NON_ATTRIBUTE_QUALIFIED_IDENTIFIER))
       .matches("identifier")
       .matches("(null)::*");
 }
 @Test
 public void test() {
   Assertions.assertThat(g.rule(FlexGrammar.NON_ASSIGNMENT_EXPR))
       .matches("a")
       .matches("a ? b : c");
 }