/** * 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.ContextBase; import ch.qos.logback.core.spi.ScanException; import org.junit.Before; import org.junit.Test; import static org.junit.Assert.assertEquals; /** * @author Ceki Gücü */ public class NodeToStringTransformerTest { ContextBase propertyContainer0 = new ContextBase(); @Before public void setUp() { propertyContainer0.putProperty("k0", "v0"); propertyContainer0.putProperty("zero", "0"); propertyContainer0.putProperty("v0.jdbc.url", "http://.."); propertyContainer0.putProperty("host", "local"); } private Node makeNode(String input) throws ScanException { Tokenizer tokenizer = new Tokenizer(input); Parser parser = new Parser(tokenizer.tokenize()); return parser.parse(); } @Test public void literal() throws ScanException { String input = "abv"; Node node = makeNode(input); NodeToStringTransformer nodeToStringTransformer = new NodeToStringTransformer(node, propertyContainer0); assertEquals(input, nodeToStringTransformer.transform()); } void checkInputEqualsOutput(String input) throws ScanException { Node node = makeNode(input); NodeToStringTransformer nodeToStringTransformer = new NodeToStringTransformer(node, propertyContainer0); assertEquals(input, nodeToStringTransformer.transform()); } @Test public void literalWithNestedAccolades() throws ScanException { checkInputEqualsOutput("%logger{35}"); checkInputEqualsOutput("%a{35} %b{35} c"); checkInputEqualsOutput("%replace(%msg){'\\d{14,16}', 'XXXX'}"); checkInputEqualsOutput("TEST %d{HHmmssSSS} [%thread] %-5level %logger{36} - %msg%n"); } @Test public void variable() throws ScanException { String input = "${k0}"; Node node = makeNode(input); NodeToStringTransformer nodeToStringTransformer = new NodeToStringTransformer(node, propertyContainer0); assertEquals("v0", nodeToStringTransformer.transform()); } @Test public void literalVariableLiteral() throws ScanException { String input = "a${k0}c"; Node node = makeNode(input); NodeToStringTransformer nodeToStringTransformer = new NodeToStringTransformer(node, propertyContainer0); assertEquals("av0c", nodeToStringTransformer.transform()); } @Test public void nestedVariable() throws ScanException { String input = "a${k${zero}}b"; Node node = makeNode(input); NodeToStringTransformer nodeToStringTransformer = new NodeToStringTransformer(node, propertyContainer0); assertEquals("av0b", nodeToStringTransformer.transform()); } @Test public void LOGBACK729() throws ScanException { String input = "${${k0}.jdbc.url}"; Node node = makeNode(input); NodeToStringTransformer nodeToStringTransformer = new NodeToStringTransformer(node, propertyContainer0); assertEquals("http://..", nodeToStringTransformer.transform()); } @Test public void LOGBACK744_withColon() throws ScanException { String input = "%d{HH:mm:ss.SSS} host:${host} %logger{36} - %msg%n"; Node node = makeNode(input); NodeToStringTransformer nodeToStringTransformer = new NodeToStringTransformer(node, propertyContainer0); System.out.println(nodeToStringTransformer.transform()); assertEquals("%d{HH:mm:ss.SSS} host:local %logger{36} - %msg%n", nodeToStringTransformer.transform()); } @Test public void loneColonShouldReadLikeAnyOtherCharacter() throws ScanException { String input = "java:comp/env/jdbc/datasource"; Node node = makeNode(input); NodeToStringTransformer nodeToStringTransformer = new NodeToStringTransformer(node, propertyContainer0); assertEquals(input, nodeToStringTransformer.transform()); } @Test public void withDefaultValue() throws ScanException { String input = "${k67:-b}c"; Node node = makeNode(input); NodeToStringTransformer nodeToStringTransformer = new NodeToStringTransformer(node, propertyContainer0); assertEquals("bc", nodeToStringTransformer.transform()); } @Test public void defaultValueNestedAsVar() throws ScanException { String input = "a${k67:-x${k0}}c"; Node node = makeNode(input); NodeToStringTransformer nodeToStringTransformer = new NodeToStringTransformer(node, propertyContainer0); assertEquals("axv0c", nodeToStringTransformer.transform()); } }