Package org.codehaus.jparsec.examples.java.parser

Source Code of org.codehaus.jparsec.examples.java.parser.JavaLexerTest

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

import org.codehaus.jparsec.Parser;
import org.codehaus.jparsec.error.ParserException;
import org.codehaus.jparsec.examples.java.ast.expression.DecimalPointNumberLiteral;
import org.codehaus.jparsec.examples.java.ast.expression.IntegerLiteral;
import org.codehaus.jparsec.examples.java.ast.expression.NumberType;
import org.codehaus.jparsec.examples.java.ast.expression.ScientificNumberLiteral;
import org.codehaus.jparsec.examples.java.ast.expression.IntegerLiteral.Radix;
import org.junit.Test;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;

/**
* Unit test for {@link JavaLexer}.
*
* @author Ben Yu
*/
public class JavaLexerTest {

  @Test
  public void testIdentifier() {
    Parser<String> scanner = JavaLexer.IDENTIFIER;
    assertEquals("foo", scanner.parse("foo"));
    assertEquals("foo_123_", scanner.parse("foo_123_"));
  }

  @Test
  public void testDecimalPointScanner() {
    Parser<Void> scanner = JavaLexer.DECIMAL_POINT_SCANNER;
    scanner.parse("0.1");
    scanner.parse("1.23");
    scanner.parse(".12");
    assertFailure(scanner, "1", 1, 1);
  }

  @Test
  public void testDecimalPointNumber() {
    Parser<DecimalPointNumberLiteral> scanner = JavaLexer.DECIMAL_POINT_NUMBER;
    assertEquals(decimal("1.0", NumberType.DOUBLE), scanner.parse("1.0"));
    assertEquals(decimal("1.0", NumberType.FLOAT), scanner.parse("1.0f"));
    assertEquals(decimal("1.23", NumberType.FLOAT), scanner.parse("1.23F"));
    assertEquals(decimal(".0", NumberType.DOUBLE), scanner.parse(".0D"));
    assertEquals(decimal("10.0", NumberType.DOUBLE), scanner.parse("10.0d"));
  }

  @Test
  public void testScientificNumberLiteral() {
    Parser<ScientificNumberLiteral> scanner = JavaLexer.SCIENTIFIC_NUMBER_LITERAL;
    assertEquals(scientific("1e2", NumberType.DOUBLE), scanner.parse("1e2"));
    assertEquals(scientific("1e2", NumberType.DOUBLE), scanner.parse("1e2d"));
    assertEquals(scientific("1e2", NumberType.DOUBLE), scanner.parse("1e2D"));
    assertEquals(scientific("1e2", NumberType.FLOAT), scanner.parse("1e2f"));
    assertEquals(scientific("1e2", NumberType.FLOAT), scanner.parse("1e2F"));
  }

  @Test
  public void testInteger() {
    Parser<IntegerLiteral> scanner = JavaLexer.INTEGER;
    assertEquals(integer(Radix.DEC, "123", NumberType.INT), scanner.parse("123"));
    assertEquals(integer(Radix.DEC, "10", NumberType.LONG), scanner.parse("10L"));
    assertEquals(integer(Radix.DEC, "10", NumberType.LONG), scanner.parse("10l"));
    assertEquals(integer(Radix.DEC, "1", NumberType.FLOAT), scanner.parse("1F"));
    assertEquals(integer(Radix.DEC, "1", NumberType.FLOAT), scanner.parse("1f"));
    assertEquals(integer(Radix.DEC, "1", NumberType.DOUBLE), scanner.parse("1d"));
    assertEquals(integer(Radix.DEC, "1", NumberType.DOUBLE), scanner.parse("1D"));
    assertEquals(integer(Radix.OCT, "1", NumberType.FLOAT), scanner.parse("01f"));
  }

  @Test
  public void testZero(){
    Parser<IntegerLiteral> scanner = JavaLexer.INTEGER;
    assertEquals(integer(Radix.HEX, "0D", NumberType.INT), scanner.parse("0X0D"));
    assertEquals(integer(Radix.HEX, "0D", NumberType.LONG), scanner.parse("0X0DL"));
    assertEquals(integer(Radix.DEC, "0", NumberType.INT), scanner.parse("0"));
    assertEquals(integer(Radix.DEC, "0", NumberType.DOUBLE), scanner.parse("0d"));
    assertEquals(integer(Radix.OCT, "0", NumberType.INT), scanner.parse("00"));
  }
   
  private static DecimalPointNumberLiteral decimal(String number, NumberType type) {
    return new DecimalPointNumberLiteral(number, type);
  }
 
  private static IntegerLiteral integer(Radix radix, String number, NumberType type) {
    return new IntegerLiteral(radix, number, type);
  }
 
  private static ScientificNumberLiteral scientific(String number, NumberType type) {
    return new ScientificNumberLiteral(number, type);
  }
 
  private static void assertFailure(Parser<?> parser, String source, int line, int column) {
    try {
      parser.parse(source);
      fail();
    } catch (ParserException e) {
      assertEquals(e.getMessage(), line, e.getLocation().line);
      assertEquals(e.getMessage(), column, e.getLocation().column);
    }
  }
}
TOP

Related Classes of org.codehaus.jparsec.examples.java.parser.JavaLexerTest

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.