/* * Copyright 2016 Igor Maznitsa. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.igormaznitsa.mindmap.model.parser; import org.junit.Test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import org.apache.commons.io.IOUtils; import com.igormaznitsa.mindmap.model.parser.MindMapLexer.TokenType; public class MindMapLexerTest { private static void assertLexer(final MindMapLexer lexer, final MindMapLexer.TokenType expectedType, final String expectedText, final int expectedTokenStart, final int expectedTokenEnd) { assertEquals(expectedType, lexer.getTokenType()); assertEquals(expectedText, lexer.getTokenText()); final TokenPosition pos = lexer.makeTokenPosition(); assertEquals(expectedTokenStart, pos.getStartOffset()); assertEquals(expectedTokenEnd, pos.getEndOffset()); } @Test public void testEmpty() { final MindMapLexer lexer = new MindMapLexer(); lexer.start("", 0, 0, MindMapLexer.TokenType.HEAD_LINE); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertNull(lexer.getTokenType()); } @Test public void testOneHeadLine() { final MindMapLexer lexer = new MindMapLexer(); final String testString = " hello world"; lexer.start(testString, 0, testString.length(), MindMapLexer.TokenType.HEAD_LINE); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.HEAD_LINE, testString, 0, testString.length()); } @Test public void testMultilineHeader() { final MindMapLexer lexer = new MindMapLexer(); final String testString = " First line\nSecond line \n--\n"; lexer.start(testString, 0, testString.length(), MindMapLexer.TokenType.HEAD_LINE); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.HEAD_LINE, " First line\n", 0, 12); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.HEAD_LINE, "Second line \n", 12, 25); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.HEAD_DELIMITER, "--\n", 25, 28); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertNull(lexer.getTokenType()); } @Test public void testMultilineHeaderWithPseudoDelimiter() { final MindMapLexer lexer = new MindMapLexer(); final String testString = " First line\nSecond line \n-- \n--"; lexer.start(testString, 0, testString.length(), MindMapLexer.TokenType.HEAD_LINE); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.HEAD_LINE, " First line\n", 0, 12); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.HEAD_LINE, "Second line \n", 12, 25); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.HEAD_LINE, "-- \n", 25, 29); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.HEAD_DELIMITER, "--", 29, 31); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertNull(lexer.getTokenType()); } @Test public void testHeaderWithAttributes() { final MindMapLexer lexer = new MindMapLexer(); final String testString = "First line\n> attr='hello'\n--\n"; lexer.start(testString, 0, testString.length(), MindMapLexer.TokenType.HEAD_LINE); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.HEAD_LINE, "First line\n", 0, 11); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.ATTRIBUTE, "> attr='hello'\n", 11, 26); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.HEAD_DELIMITER, "--\n", 26, 29); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertNull(lexer.getTokenType()); } @Test public void testExtraLink() { final MindMapLexer lexer = new MindMapLexer(); final String testString = "- LINK\n<pre>http://www.google.com</pre>\n"; lexer.start(testString, 0, testString.length(), MindMapLexer.TokenType.WHITESPACE); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.EXTRA_TYPE, "- LINK\n", 0, 7); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.EXTRA_TEXT, "<pre>http://www.google.com</pre>", 7, 39); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.WHITESPACE, "\n", 39, 40); lexer.advance(); } @Test public void testHeaderWithAttributesAndTopic() { final MindMapLexer lexer = new MindMapLexer(); final String testString = "First line\n> attr='hello'\n--\n # Topic\n"; lexer.start(testString, 0, testString.length(), MindMapLexer.TokenType.HEAD_LINE); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.HEAD_LINE, "First line\n", 0, 11); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.ATTRIBUTE, "> attr='hello'\n", 11, 26); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.HEAD_DELIMITER, "--\n", 26, 29); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.WHITESPACE, " ", 29, 32); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.TOPIC_LEVEL, "# ",32,34); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.TOPIC_TITLE, "Topic\n",34,40); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertNull(lexer.getTokenType()); } @Test public void testTopicWithAttributeAndText() { final MindMapLexer lexer = new MindMapLexer(); final String testString = "Header\n--\n# Hello\n> attrs='some'\n- LINK \n<pre>Hurraa <ugu>\nrabotaet</pre>\nhmm"; lexer.start(testString, 0, testString.length(), MindMapLexer.TokenType.HEAD_LINE); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.HEAD_LINE, "Header\n", 0, 7); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.HEAD_DELIMITER, "--\n", 7, 10); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.TOPIC_LEVEL, "# ",10,12); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.TOPIC_TITLE, "Hello\n", 12, 18); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.ATTRIBUTE, "> attrs='some'\n", 18, 33); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.EXTRA_TYPE, "- LINK \n", 33, 42); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.EXTRA_TEXT, "<pre>Hurraa <ugu>\nrabotaet</pre>", 42, 74); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.WHITESPACE, "\n", 74, 75); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.UNKNOWN_LINE, "hmm", 75, 78); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertNull(lexer.getTokenType()); } @Test public void testTwoPhaseReading_HeaderDelimiter() { final MindMapLexer lexer = new MindMapLexer(); final String testString = "Header\n---------------"; lexer.start(testString, 0, 10, MindMapLexer.TokenType.HEAD_LINE); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.HEAD_LINE, "Header\n", 0, 7); lexer.advance(); assertFalse(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.HEAD_LINE, "---", 7, 10); lexer.setBufferEndOffset(testString.length()); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.HEAD_DELIMITER, "---------------", 7, 22); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertNull(lexer.getTokenType()); } @Test public void testTwoPhaseReading_HeadLineAttribute() { final MindMapLexer lexer = new MindMapLexer(); final String testString = "Header\n> hello='world'"; lexer.start(testString, 0, 10, MindMapLexer.TokenType.HEAD_LINE); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.HEAD_LINE, "Header\n", 0, 7); lexer.advance(); assertFalse(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.HEAD_LINE, "> h", 7, 10); lexer.setBufferEndOffset(testString.length()); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.ATTRIBUTE, "> hello='world'", 7, 22); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertNull(lexer.getTokenType()); } @Test public void testTwoPhaseReading_Attribute() { final MindMapLexer lexer = new MindMapLexer(); final String testString = "Header\n--\n> hello='world'"; lexer.start(testString, 0, 11, MindMapLexer.TokenType.HEAD_LINE); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.HEAD_LINE, "Header\n", 0, 7); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.HEAD_DELIMITER, "--\n", 7, 10); lexer.advance(); assertFalse(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.ATTRIBUTE, ">", 10, 11); lexer.setBufferEndOffset(testString.length()); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.ATTRIBUTE, "> hello='world'", 10, testString.length()); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertNull(lexer.getTokenType()); } @Test public void testTwoPhaseReading_Topic() { final MindMapLexer lexer = new MindMapLexer(); final String testString = "Header\n--\n# Topic name"; lexer.start(testString, 0, 14, MindMapLexer.TokenType.HEAD_LINE); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.HEAD_LINE, "Header\n", 0, 7); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.HEAD_DELIMITER, "--\n", 7, 10); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.TOPIC_LEVEL, "# ",10,12); lexer.advance(); assertFalse(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.TOPIC_TITLE, "To",12,14); lexer.setBufferEndOffset(testString.length()); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.TOPIC_TITLE, "Topic name", 12, 22); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertNull(lexer.getTokenType()); } @Test public void testParseTopic_StartsWithHash() { final MindMapLexer lexer = new MindMapLexer(); final String testString = "Header\n--\n# \\#Topic name"; lexer.start(testString, 0, testString.length(), MindMapLexer.TokenType.HEAD_LINE); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.HEAD_LINE, "Header\n", 0, 7); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.HEAD_DELIMITER, "--\n", 7, 10); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.TOPIC_LEVEL, "# ",10,12); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.TOPIC_TITLE, "\\#Topic name", 12, 24); } @Test public void testTwoPhaseReading_ExtraText() { final MindMapLexer lexer = new MindMapLexer(); final String testString = "Header\n--\n<pre>Hello world</pre>"; lexer.start(testString, 0, 14, MindMapLexer.TokenType.HEAD_LINE); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.HEAD_LINE, "Header\n", 0, 7); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.HEAD_DELIMITER, "--\n", 7, 10); lexer.advance(); assertFalse(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.EXTRA_TEXT, "<pre", 10, 14); lexer.setBufferEndOffset(testString.length()); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.EXTRA_TEXT, "<pre>Hello world</pre>", 10, testString.length()); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertNull(lexer.getTokenType()); } @Test public void testTwoPhaseReading_WrongTagExtraText() { final MindMapLexer lexer = new MindMapLexer(); final String testString = "Header\n--\n<pra>Hello world</pre>"; lexer.start(testString, 0, 13, MindMapLexer.TokenType.HEAD_LINE); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.HEAD_LINE, "Header\n", 0, 7); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.HEAD_DELIMITER, "--\n", 7, 10); lexer.advance(); assertFalse(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.EXTRA_TEXT, "<pr", 10, 13); lexer.setBufferEndOffset(testString.length()); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.UNKNOWN_LINE, "<pra>Hello world</pre>", 10, testString.length()); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertNull(lexer.getTokenType()); } @Test public void testTwoPhaseReading_CodeSnippetInTheEnd_NoNextLine() { final MindMapLexer lexer = new MindMapLexer(); final String testString = "Header\n--\n```Java\nSystem.out.println(\"Hello world\");\nSystem.exit(0);\n```"; lexer.start(testString, 0, testString.length(), MindMapLexer.TokenType.HEAD_LINE); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.HEAD_LINE, "Header\n", 0, 7); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.HEAD_DELIMITER, "--\n", 7, 10); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.CODE_SNIPPET_START, "```Java\n", 10, 18); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.CODE_SNIPPET_BODY, "System.out.println(\"Hello world\");\nSystem.exit(0);\n", 18, 69); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.CODE_SNIPPET_END, "```", 69, 72); lexer.advance(); } @Test public void testTwoPhaseReading_CodeSnippetInTheEnd_NextLine() { final MindMapLexer lexer = new MindMapLexer(); final String testString = "Header\n--\n```Java\nSystem.out.println(\"Hello world\");\nSystem.exit(0);\n```\n"; lexer.start(testString, 0, testString.length(), MindMapLexer.TokenType.HEAD_LINE); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.HEAD_LINE, "Header\n", 0, 7); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.HEAD_DELIMITER, "--\n", 7, 10); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.CODE_SNIPPET_START, "```Java\n", 10, 18); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.CODE_SNIPPET_BODY, "System.out.println(\"Hello world\");\nSystem.exit(0);\n", 18, 69); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.CODE_SNIPPET_END, "```\n", 69, 73); lexer.advance(); } @Test public void testTwoPhaseReading_CodeSnippet_NotClosed() { final MindMapLexer lexer = new MindMapLexer(); final String testString = "Header\n--\n```Java\nSystem.exit(0);\n"; lexer.start(testString, 0, testString.length(), MindMapLexer.TokenType.HEAD_LINE); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.HEAD_LINE, "Header\n", 0, 7); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.HEAD_DELIMITER, "--\n", 7, 10); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.CODE_SNIPPET_START, "```Java\n", 10, 18); lexer.advance(); assertFalse(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.CODE_SNIPPET_BODY, "System.exit(0);\n", 18, 34); lexer.advance(); assertFalse(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.CODE_SNIPPET_BODY, "System.exit(0);\n", 18, 34); lexer.advance(); assertFalse(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.CODE_SNIPPET_BODY, "System.exit(0);\n", 18, 34); lexer.advance(); } @Test public void testTwoPhaseReading_CodeSnippetInTheEnd_TopicAfterCodeSnipet() { final MindMapLexer lexer = new MindMapLexer(); final String testString = "Header\n--\n```Java\nSystem.out.println(\"Hello world\");\nSystem.exit(0);\n```\n# Topic\n```Basic\n``` `\n```\n```Empty\n```"; lexer.start(testString, 0, testString.length(), MindMapLexer.TokenType.HEAD_LINE); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.HEAD_LINE, "Header\n", 0, 7); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.HEAD_DELIMITER, "--\n", 7, 10); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.CODE_SNIPPET_START, "```Java\n", 10, 18); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.CODE_SNIPPET_BODY, "System.out.println(\"Hello world\");\nSystem.exit(0);\n", 18, 69); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.CODE_SNIPPET_END, "```\n", 69, 73); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.TOPIC_LEVEL, "# ", 73, 75); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.TOPIC_TITLE, "Topic\n", 75, 81); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.CODE_SNIPPET_START, "```Basic\n", 81, 90); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.CODE_SNIPPET_BODY, "``` `\n", 90, 96); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.CODE_SNIPPET_END, "```\n", 96, 100); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.CODE_SNIPPET_START, "```Empty\n", 100, 109); lexer.advance(); assertTrue(lexer.getCurrentPosition().isTokenCompleted()); assertLexer(lexer, MindMapLexer.TokenType.CODE_SNIPPET_END, "```", 109, 112); lexer.advance(); } @Test public void testTextSplittingForLostOrDuplicatedTokens() throws Exception { final String etalon = IOUtils.toString(MindMapLexerTest.class.getResourceAsStream("cancer_risk.mmd"),"UTF-8"); final StringBuilder accum1 = new StringBuilder(); final StringBuilder accum2 = new StringBuilder(); final StringBuilder accum3 = new StringBuilder(); final MindMapLexer lexer = new MindMapLexer(); lexer.start(etalon, 0, etalon.length(), MindMapLexer.TokenType.HEAD_LINE); lexer.advance(); int prevEnd = 0; while(true){ final TokenType type = lexer.getTokenType(); if (type == null){ break; } assertEquals(prevEnd, lexer.getTokenStartOffset()); prevEnd = lexer.getTokenEndOffset(); // assertNotEquals("Unknown line : "+lexer.getTokenText(),TokenType.UNKNOWN_LINE, type); accum1.append(etalon.substring(lexer.getTokenStartOffset(),lexer.getTokenEndOffset())); accum2.append(lexer.getTokenText()); accum3.append(lexer.getTokenSequence()); lexer.advance(); } assertEquals(etalon,accum1.toString()); assertEquals(etalon,accum2.toString()); assertEquals(etalon,accum3.toString()); } }