Package org.codehaus.jparsec.examples.sql.parser

Source Code of org.codehaus.jparsec.examples.sql.parser.TerminalParserTest

package org.codehaus.jparsec.examples.sql.parser;

import java.util.Arrays;

import org.codehaus.jparsec.Parser;
import org.codehaus.jparsec.error.ParserException;
import org.codehaus.jparsec.examples.sql.ast.QualifiedName;
import org.codehaus.jparsec.examples.sql.parser.TerminalParser;

import junit.framework.TestCase;

/**
* Unit test for {@link TerminalParser}.
*
* @author Ben Yu
*/
public class TerminalParserTest extends TestCase {
 
  public void testNumber() {
    assertParser(TerminalParser.NUMBER, "1.2 ", "1.2");
    assertParser(TerminalParser.NUMBER, " 1", "1");
  }
 
  public void testName() {
    assertParser(TerminalParser.NAME, "foo", "foo");
    assertParser(TerminalParser.NAME, " foo\n", "foo");
    assertParser(TerminalParser.NAME, "[foo]", "foo");
    assertParser(TerminalParser.NAME, "[ foo] /*comment*/", "foo");
    assertParser(TerminalParser.NAME, "[select] --comment", "select");
    assertFailure(TerminalParser.NAME, "select", 1, 1);
  }
 
  public void testString() {
    assertParser(TerminalParser.STRING, "'foo'", "foo");
    assertParser(TerminalParser.STRING, "'foo''s'", "foo's");
    assertParser(TerminalParser.STRING, "''", "");
  }
 
  public void testQualifiedName() {
    assertQualifiedName("foo", "foo");
    assertQualifiedName("foo.bar", "foo", "bar");
    assertQualifiedName("foo . bar.[select]", "foo", "bar", "select");
  }
 
  public void testPhrase() {
    TerminalParser.parse(TerminalParser.phrase("inner join"), " inner join ");
    assertFailure(TerminalParser.phrase("inner join"), "[inner] join", 1, 1);
  }
 
  public void testTerm() {
    TerminalParser.parse(TerminalParser.term("select"), "select");
    TerminalParser.parse(TerminalParser.term("select"), "SELECT");
    TerminalParser.parse(TerminalParser.term("select"), " SELEcT --coment");
    assertFailure(TerminalParser.term("select"), "[select]", 1, 1);
  }
 
  private static void assertQualifiedName(String source, String... names) {
    QualifiedName qname = TerminalParser.parse(TerminalParser.QUALIFIED_NAME, source);
    assertEquals(new QualifiedName(Arrays.asList(names)), qname);
  }
 
  static void assertParser(Parser<?> parser, String source, Object value) {
    assertEquals(value, TerminalParser.parse(parser, source));
  }
 
  static void assertFailure(Parser<?> parser, String source, int line, int column) {
    assertFailure(parser, source, line, column, "");
  }
 
  static void assertFailure(
      Parser<?> parser, String source, int line, int column, String errorMessage) {
    try {
      TerminalParser.parse(parser, source);
      fail();
    } catch (ParserException e) {
      assertTrue(e.getMessage(), e.getMessage().contains(errorMessage));
      assertEquals(line, e.getLocation().line);
      assertEquals(column, e.getLocation().column);
    }
  }
}
TOP

Related Classes of org.codehaus.jparsec.examples.sql.parser.TerminalParserTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.