/* * Copyright (C) 2012 eXo Platform SAS. * * This 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 2.1 of * the License, or (at your option) any later version. * * This software 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 software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.crsh.cli.impl.line; import junit.framework.TestCase; import org.crsh.cli.impl.line.LineParser; import org.crsh.cli.impl.line.MultiLineVisitor; import org.crsh.cli.impl.line.ValueLineVisitor; import java.util.Arrays; import java.util.Collections; import java.util.LinkedList; /** * @author Julien Viet */ public class LineParserTestCase extends TestCase { /** . */ LineParser o; /** . */ MultiLineVisitor m; /** . */ ValueLineVisitor v; /** . */ LinkedList<Integer> indexes; @Override public void setUp() throws Exception { LineParser.Visitor indexer = new LineParser.Visitor() { public void onChar(int index, Quoting quoting, boolean backslash, char c) { indexes.add(index); } public void openStrongQuote(int index) { indexes.add(index); } public void closeStrongQuote(int index) { indexes.add(index); } public void openWeakQuote(int index) { indexes.add(index); } public void closeWeakQuote(int index) { indexes.add(index); } }; o = new LineParser(m = new MultiLineVisitor(), v = new ValueLineVisitor(), indexer); indexes = new LinkedList<Integer>(); } // % a public void testChar() { assertTrue(o.append("a").crlf()); assertEquals("a", m.getRaw()); assertEquals("a", v.getEvaluated()); assertEquals(Arrays.asList(0), indexes); } // % \ public void testEndingBackslash() { assertFalse(o.append("\\").crlf()); assertTrue(o.crlf()); assertEquals("", m.getRaw()); assertEquals("", v.getEvaluated()); assertEquals(Collections.<Integer>emptyList(), indexes); } // % "a" public void testStrongQuote() { o.append("\"a\""); assertTrue(o.crlf()); assertEquals("\"a\"", m.getRaw()); assertEquals("a", v.getEvaluated()); assertEquals(Arrays.asList(0,1,2), indexes); } // % "a" public void testWeakQuote() { o.append("'a'"); assertTrue(o.crlf()); assertEquals("'a'", m.getRaw()); assertEquals("a", v.getEvaluated()); assertEquals(Arrays.asList(0,1,2), indexes); } // % \a public void testQuoteChar() { o.append("\\a"); assertTrue(o.crlf()); assertEquals("\\a", m.getRaw()); assertEquals("a", v.getEvaluated()); assertEquals(Arrays.asList(1), indexes); } // % \" public void testQuoteWeakQuote() { o.append("\\\""); assertTrue(o.crlf()); assertEquals("\\\"", m.getRaw()); assertEquals("\"", v.getEvaluated()); assertEquals(Arrays.asList(1), indexes); } // % \' public void testQuoteStrongQuote() { o.append("\\\'"); assertTrue(o.crlf()); assertEquals("\\\'", m.getRaw()); assertEquals("'", v.getEvaluated()); assertEquals(Arrays.asList(1), indexes); } // % " // > " public void testWeakQuotedCrlf() { assertFalse(o.append("\"").crlf()); assertTrue(o.append("\"").crlf()); assertEquals("\"\n\"", m.getRaw()); assertEquals("\n", v.getEvaluated()); assertEquals(Arrays.asList(0, 1, 2), indexes); } // % ' // > ' public void testStrongQuotedCrlf() { assertFalse(o.append("'").crlf()); assertTrue(o.append("'").crlf()); assertEquals("'\n'", m.getRaw()); assertEquals("\n", v.getEvaluated()); assertEquals(Arrays.asList(0, 1, 2), indexes); } // % "\a" public void testCharQuoteInStrongQuote() { assertTrue(o.append("\"\\a\"").crlf()); assertEquals("\"\\a\"", m.getRaw()); assertEquals("\\a", v.getEvaluated()); assertEquals(Arrays.asList(0, 2, 3), indexes); } // % '\a' public void testCharQuoteInWeakQuote() { assertTrue(o.append("'\\a'").crlf()); assertEquals("'\\a'", m.getRaw()); assertEquals("\\a", v.getEvaluated()); assertEquals(Arrays.asList(0, 2, 3), indexes); } // % "'" public void testStrongQuoteInWeakQuote() { assertTrue(o.append("\"'\"").crlf()); assertEquals("\"'\"", m.getRaw()); assertEquals("'", v.getEvaluated()); assertEquals(Arrays.asList(0, 1, 2), indexes); } // % '"' public void testWeakQuoteInStrongQuote() { assertTrue(o.append("'\"'").crlf()); assertEquals("'\"'", m.getRaw()); assertEquals("\"", v.getEvaluated()); assertEquals(Arrays.asList(0, 1, 2), indexes); } // % "\ // > " public void testEndingBackslashInStrongQuote() { assertFalse(o.append("\"\\").crlf()); assertTrue(o.append("\"").crlf()); assertEquals("\"\"", m.getRaw()); assertEquals("", v.getEvaluated()); assertEquals(Arrays.asList(0, 1), indexes); } // % '\ // > ' public void testEndingBackslashInWeakQuote() { assertFalse(o.append("'\\").crlf()); assertTrue(o.append("'").crlf()); assertEquals("''", m.getRaw()); assertEquals("", v.getEvaluated()); assertEquals(Arrays.asList(0, 1), indexes); } // % "\"" public void testEscapeStrongQuoteInStrongQuote1() { assertTrue(o.append("\"\\\"\"").crlf()); assertEquals("\"\\\"\"", m.getRaw()); assertEquals("\"", v.getEvaluated()); assertEquals(Arrays.asList(0, 2, 3), indexes); } // % "\" public void testEscapeStrongQuoteInStrongQuote2() { assertFalse(o.append("\"\\\"").crlf()); } // % '\' public void testEscapeWeakQuoteInWeakQuote() { assertTrue(o.append("'\\'").crlf()); assertEquals("'\\'", m.getRaw()); assertEquals("\\", v.getEvaluated()); assertEquals(Arrays.asList(0, 1, 2), indexes); } }