/* * ****************************************************************************** * MontiCore Language Workbench * Copyright (c) 2015, MontiCore, All rights reserved. * * This project is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3.0 of the License, or (at your option) any later version. * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this project. If not, see <http://www.gnu.org/licenses/>. * ****************************************************************************** */ package mc.feature.lexerformat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.io.IOException; import java.io.StringReader; import java.util.Optional; import org.junit.Test; import mc.GeneratorIntegrationsTest; import mc.feature.lexerformat.kleeneplus._ast.ASTKPStart; import mc.feature.lexerformat.kleeneplus._parser.KleenePlusParser; public class KleenePlusTest extends GeneratorIntegrationsTest { /** * Test the following lexer Production: token KLEENETOKEN = 'a' ('b')*; * */ @Test public void testKleeneStar() throws IOException { KleenePlusParser p = new KleenePlusParser (); Optional<ASTKPStart> ast; ast = p.parseKPStart(new StringReader("a")); assertTrue(ast.isPresent()); assertEquals("a", ast.get().getKleene().get()); ast = p.parseKPStart(new StringReader("ab")); assertTrue(ast.isPresent()); assertEquals("ab", ast.get().getKleene().get()); ast = p.parseKPStart(new StringReader("abb")); assertTrue(ast.isPresent()); assertEquals("abb", ast.get().getKleene().get()); ast = p.parseKPStart(new StringReader("abbbb")); assertTrue(ast.isPresent()); assertEquals("abbbb", ast.get().getKleene().get()); ast = p.parseKPStart(new StringReader("b")); assertFalse(ast.isPresent()); } /** * Test the following lexer Production: token SIMPLEKLEENE = 'c' 'd'*; * */ @Test public void testSimpleKleene() throws IOException { KleenePlusParser p = new KleenePlusParser (); Optional<ASTKPStart> ast; ast = p.parseKPStart(new StringReader("c")); assertTrue(ast.isPresent()); assertEquals("c", ast.get().getSimpleKleene().get()); ast = p.parseKPStart(new StringReader("cd")); assertTrue(ast.isPresent()); assertEquals("cd", ast.get().getSimpleKleene().get()); ast = p.parseKPStart(new StringReader("cdd")); assertTrue(ast.isPresent()); assertEquals("cdd", ast.get().getSimpleKleene().get()); ast = p.parseKPStart(new StringReader("cdddd")); assertTrue(ast.isPresent()); assertEquals("cdddd", ast.get().getSimpleKleene().get()); ast = p.parseKPStart(new StringReader("d")); assertFalse(ast.isPresent()); } /** * Test the following lexer Production: token SIMPLEKLEENESTRING = "ee" "fg"*; * */ @Test public void testSimpleKleeneString() throws IOException { KleenePlusParser p = new KleenePlusParser (); Optional<ASTKPStart> ast; ast = p.parseKPStart(new StringReader("ee")); assertTrue(ast.isPresent()); assertEquals("ee", ast.get().getSimpleKleeneString().get()); ast = p.parseKPStart(new StringReader("eefg")); assertTrue(ast.isPresent()); assertEquals("eefg", ast.get().getSimpleKleeneString().get()); ast = p.parseKPStart(new StringReader("eefgfg")); assertTrue(ast.isPresent()); assertEquals("eefgfg", ast.get().getSimpleKleeneString().get()); ast = p.parseKPStart(new StringReader("eefgfgfgfg")); assertTrue(ast.isPresent()); assertEquals("eefgfgfgfg", ast.get().getSimpleKleeneString().get()); ast = p.parseKPStart(new StringReader("fg")); assertFalse(ast.isPresent()); } /** * Test the following lexer Production: token PLUSTOKEN = 'g' ('h')+; * */ @Test public void testPlus() throws IOException { KleenePlusParser p = new KleenePlusParser (); Optional<ASTKPStart> ast; ast = p.parseKPStart(new StringReader("g")); assertFalse(ast.isPresent()); ast = p.parseKPStart(new StringReader("gh")); assertTrue(ast.isPresent()); assertEquals("gh", ast.get().getPlus().get()); ast = p.parseKPStart(new StringReader("ghh")); assertTrue(ast.isPresent()); assertEquals("ghh", ast.get().getPlus().get()); ast = p.parseKPStart(new StringReader("ghhhh")); assertTrue(ast.isPresent()); assertEquals("ghhhh", ast.get().getPlus().get()); ast = p.parseKPStart(new StringReader("h")); assertFalse(ast.isPresent()); } /** * Test the following lexer Production: token SIMPLEPLUS = 'i' ('j')+; * */ @Test public void testSimplePlus() throws IOException { KleenePlusParser p = new KleenePlusParser (); Optional<ASTKPStart> ast; ast = p.parseKPStart(new StringReader("i")); assertFalse(ast.isPresent()); ast = p.parseKPStart(new StringReader("ij")); assertTrue(ast.isPresent()); assertEquals("ij", ast.get().getSimplePlus().get()); ast = p.parseKPStart(new StringReader("ijj")); assertTrue(ast.isPresent()); assertEquals("ijj", ast.get().getSimplePlus().get()); ast = p.parseKPStart(new StringReader("ijjjj")); assertTrue(ast.isPresent()); assertEquals("ijjjj", ast.get().getSimplePlus().get()); ast = p.parseKPStart(new StringReader("j")); assertFalse(ast.isPresent()); } /** * Test the following lexer Production: token SIMPLEPLUSSTRING = "kk" "lm"+; * */ @Test public void testSimplePlusString() throws IOException { KleenePlusParser p = new KleenePlusParser (); Optional<ASTKPStart> ast; ast = p.parseKPStart(new StringReader("kk")); ast = null; assertTrue(p.hasErrors()); ast = p.parseKPStart(new StringReader("kklm")); assertTrue(ast.isPresent()); assertEquals("kklm", ast.get().getSimplePlusString().get()); ast = p.parseKPStart(new StringReader("kklmlm")); assertTrue(ast.isPresent()); assertEquals("kklmlm", ast.get().getSimplePlusString().get()); ast = p.parseKPStart(new StringReader("kklmlmlmlm")); assertTrue(ast.isPresent()); assertEquals("kklmlmlmlm", ast.get().getSimplePlusString().get()); ast = p.parseKPStart(new StringReader("lm")); assertFalse(ast.isPresent()); } }