/** * Logback: the reliable, generic, fast and flexible logging framework. * Copyright (C) 1999-2013, QOS.ch. All rights reserved. * * This program and the accompanying materials are dual-licensed under * either the terms of the Eclipse Public License v1.0 as published by * the Eclipse Foundation * * or (per the licensee's choosing) * * under the terms of the GNU Lesser General Public License version 2.1 * as published by the Free Software Foundation. */ package ch.qos.logback.core.subst; import ch.qos.logback.core.spi.ScanException; import org.junit.Test; import static org.junit.Assert.assertEquals; /** * Created with IntelliJ IDEA. * User: ceki * Date: 05.08.12 * Time: 00:15 * To change this template use File | Settings | File Templates. */ public class ParserTest { @Test public void literal() throws ScanException { Tokenizer tokenizer = new Tokenizer("abc"); Parser parser = new Parser(tokenizer.tokenize()); Node node = parser.parse(); Node witness = new Node(Node.Type.LITERAL, "abc"); assertEquals(witness, node); } @Test public void literalWithAccolade0() throws ScanException { Tokenizer tokenizer = new Tokenizer("{}"); Parser parser = new Parser(tokenizer.tokenize()); Node node = parser.parse(); Node witness = new Node(Node.Type.LITERAL, "{"); witness.next = new Node(Node.Type.LITERAL, "}"); assertEquals(witness, node); } @Test public void literalWithAccolade1() throws ScanException { Tokenizer tokenizer = new Tokenizer("%x{a}"); Parser parser = new Parser(tokenizer.tokenize()); Node node = parser.parse(); Node witness = new Node(Node.Type.LITERAL, "%x"); Node t = witness.next = new Node(Node.Type.LITERAL, "{"); t.next = new Node(Node.Type.LITERAL, "a"); t = t.next; t.next = new Node(Node.Type.LITERAL, "}"); assertEquals(witness, node); } @Test public void literalWithTwoAccolades() throws ScanException { Tokenizer tokenizer = new Tokenizer("%x{y} %a{b} c"); Parser parser = new Parser(tokenizer.tokenize()); Node node = parser.parse(); Node witness = new Node(Node.Type.LITERAL, "%x"); Node t = witness.next = new Node(Node.Type.LITERAL, "{"); t.next = new Node(Node.Type.LITERAL, "y"); t = t.next; t.next = new Node(Node.Type.LITERAL, "}"); t = t.next; t.next = new Node(Node.Type.LITERAL, " %a"); t = t.next; t.next = new Node(Node.Type.LITERAL, "{"); t = t.next; t.next = new Node(Node.Type.LITERAL, "b"); t = t.next; t.next = new Node(Node.Type.LITERAL, "}"); t = t.next; t.next = new Node(Node.Type.LITERAL, " c"); node.dump(); System.out.println(""); assertEquals(witness, node); } @Test public void variable() throws ScanException { Tokenizer tokenizer = new Tokenizer("${abc}"); Parser parser = new Parser(tokenizer.tokenize()); Node node = parser.parse(); Node witness = new Node(Node.Type.VARIABLE, new Node(Node.Type.LITERAL, "abc")); assertEquals(witness, node); } @Test public void literalVariableLiteral() throws ScanException { Tokenizer tokenizer = new Tokenizer("a${b}c"); Parser parser = new Parser(tokenizer.tokenize()); Node node = parser.parse(); Node witness = new Node(Node.Type.LITERAL, "a"); witness.next = new Node(Node.Type.VARIABLE, new Node(Node.Type.LITERAL, "b")); witness.next.next = new Node(Node.Type.LITERAL, "c"); assertEquals(witness, node); } // /LOGBACK-744 @Test public void withColon() throws ScanException { Tokenizer tokenizer = new Tokenizer("a:${b}"); Parser parser = new Parser(tokenizer.tokenize()); Node node = parser.parse(); Node witness = new Node(Node.Type.LITERAL, "a"); Node t = witness.next = new Node(Node.Type.LITERAL, ":"); t.next = new Node(Node.Type.VARIABLE, new Node(Node.Type.LITERAL, "b")); assertEquals(witness, node); } @Test public void nested() throws ScanException { Tokenizer tokenizer = new Tokenizer("a${b${c}}d"); Parser parser = new Parser(tokenizer.tokenize()); Node node = parser.parse(); Node witness = new Node(Node.Type.LITERAL, "a"); Node bLiteralNode = new Node(Node.Type.LITERAL, "b"); Node cLiteralNode = new Node(Node.Type.LITERAL, "c"); Node bVariableNode = new Node(Node.Type.VARIABLE, bLiteralNode); Node cVariableNode = new Node(Node.Type.VARIABLE, cLiteralNode); bLiteralNode.next = cVariableNode; witness.next = bVariableNode; witness.next.next = new Node(Node.Type.LITERAL, "d"); assertEquals(witness, node); } @Test public void withDefault() throws ScanException { Tokenizer tokenizer = new Tokenizer("${b:-c}"); Parser parser = new Parser(tokenizer.tokenize()); Node node = parser.parse(); Node witness = new Node(Node.Type.VARIABLE, new Node(Node.Type.LITERAL, "b")); witness.defaultPart = new Node(Node.Type.LITERAL, "c"); assertEquals(witness, node); } @Test public void defaultSeparatorOutsideOfAVariable() throws ScanException { Tokenizer tokenizer = new Tokenizer("{a:-b}"); Parser parser = new Parser(tokenizer.tokenize()); Node node = parser.parse(); dump(node); Node witness = new Node(Node.Type.LITERAL, "{"); Node t = witness.next = new Node(Node.Type.LITERAL, "a"); t.next = new Node(Node.Type.LITERAL, ":-"); t = t.next; t.next = new Node(Node.Type.LITERAL, "b"); t = t.next; t.next = new Node(Node.Type.LITERAL, "}"); assertEquals(witness, node); } private void dump(Node node) { while (node != null) { System.out.println(node.toString()); node = node.next; } } }