/******************************************************************************* * Copyright (c) 2012 Bruno Medeiros and other Contributors. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Bruno Medeiros - initial API and implementation *******************************************************************************/ package dtool.parser; import static melnorme.utilbox.core.Assert.AssertNamespace.assertTrue; import org.junit.Test; import dtool.parser.common.AbstractLexerTest; public class DeeLexerTest extends AbstractLexerTest { @Test public void basicLexerTest() throws Exception { basicLexerTest$(); } public void basicLexerTest$() throws Exception { testLexerTokenizing(" \t", array(DeeTokens.WHITESPACE)); testLexerTokenizing("\n", array(DeeTokens.LINE_END)); testLexerTokenizing("/*asd*/", array(DeeTokens.COMMENT_MULTI)); testLexerTokenizing("/+as/+ sadf +/ d+/", array(DeeTokens.COMMENT_NESTED)); testLexerTokenizing("// asdfs", array(DeeTokens.COMMENT_LINE)); testLexerTokenizing("`asdfsdaf`", array(DeeTokens.STRING_WYSIWYG)); testLexerTokenizing("r\"asdfsdaf\"", array(DeeTokens.STRING_WYSIWYG)); testLexerTokenizing("\"asdfsdaf\"d", array(DeeTokens.STRING_DQ)); testLexerTokenizing("x\"A0 01 FF\"w", array(DeeTokens.STRING_HEX)); testLexerTokenizing("q\"/foo(xxx)/\"", array(DeeTokens.STRING_DELIM)); testLexerTokenizing("q\"(foo(xxx))\"", array(DeeTokens.STRING_DELIM)); testLexerTokenizing("q\"foo\n(xxx)\nfoo\"", array(DeeTokens.STRING_DELIM)); testLexerTokenizing("q{ asdf __TIME__ {nest \n braces} }", array(DeeTokens.STRING_TOKENS)); testLexerTokenizing("(){}[]", array(DeeTokens.OPEN_PARENS, DeeTokens.CLOSE_PARENS, DeeTokens.OPEN_BRACE, DeeTokens.CLOSE_BRACE, DeeTokens.OPEN_BRACKET, DeeTokens.CLOSE_BRACKET)); testLexerTokenizing("'a'", array(DeeTokens.CHARACTER)); testLexerTokenizing("123", array(DeeTokens.INTEGER_DECIMAL)); testLexerTokenizing("0b101", array(DeeTokens.INTEGER_BINARY)); testLexerTokenizing("01234567", array(DeeTokens.INTEGER_OCTAL)); testLexerTokenizing("0x0123456789ABDCEF", array(DeeTokens.INTEGER_HEX)); testLexerTokenizing("1234567890.1234567890E123F", array(DeeTokens.FLOAT_DECIMAL)); testLexerTokenizing("0x0123456789ABDCEFP123f", array(DeeTokens.FLOAT_HEX)); testLexerTokenizing("asdf", array(DeeTokens.IDENTIFIER)); testLexerTokenizing("final", array(DeeTokens.KW_FINAL)); testLexerTokenizing("finally", array(DeeTokens.KW_FINALLY)); testLexerTokenizing("finallyx", array(DeeTokens.IDENTIFIER)); DeeLexer lexer = testLexerTokenizing("(blah)", array(DeeTokens.OPEN_PARENS, DeeTokens.IDENTIFIER, DeeTokens.CLOSE_PARENS)); lexer.reset(1); testLexerTokenizing(lexer, 1, tokenCheckers(DeeTokens.IDENTIFIER, DeeTokens.CLOSE_PARENS)); lexer.reset(6); testLexerTokenizing(lexer, 6); } @Test public void test_isValidDIdentifier() throws Exception { test_isValidDIdentifier$(); } public void test_isValidDIdentifier$() throws Exception { assertTrue(DeeLexingUtil.isValidDIdentifier("foo")); assertTrue(DeeLexingUtil.isValidDIdentifier("bar321")); assertTrue(DeeLexingUtil.isValidDIdentifier("_bar")); assertTrue(DeeLexingUtil.isValidDIdentifier("_foo_bar")); assertTrue(DeeLexingUtil.isValidDIdentifier("foo_bar")); assertTrue(DeeLexingUtil.isValidDIdentifier("Açores")); assertTrue(DeeLexingUtil.isValidDIdentifier("Солярис")); assertTrue(!DeeLexingUtil.isValidDIdentifier("")); assertTrue(!DeeLexingUtil.isValidDIdentifier("foo.d")); assertTrue(!DeeLexingUtil.isValidDIdentifier("123foo")); assertTrue(!DeeLexingUtil.isValidDIdentifier("bar.foo")); assertTrue(!DeeLexingUtil.isValidDIdentifier("bar foo")); assertTrue(!DeeLexingUtil.isValidDIdentifier("bar-foo")); // Test keywords assertTrue(!DeeLexingUtil.isValidDIdentifier("while")); assertTrue(!DeeLexingUtil.isValidDIdentifier("package")); assertTrue(!DeeLexingUtil.isValidDIdentifier("__FILE__")); for (DeeTokens token : DeeTokenHelper.keyWords_All) { assertTrue(!DeeLexingUtil.isValidDIdentifier(token.getSourceValue())); } } }