package dmg.util; import org.junit.Before; import org.junit.Test; import java.util.Properties; import static org.junit.Assert.assertEquals; public class FormatsTests { SimpleReplaceable _replacements; @Before public void setUp() { _replacements = new SimpleReplaceable(new Properties()); _replacements.put("keyword", "replacement"); } @Test public void testTrimWhiteSpacesInReplaceables(){ _replacements.put("dcache.log.dir", "/var/log "); assertHasReplacement("${dcache.log.dir}/dcacheDomain.log", "/var/log/dcacheDomain.log"); } @Test public void testReplaceKeywordsWithPlainWord() { assertHasReplacement("keyword", "keyword"); } @Test public void testReplaceKeywordsWithInitialDollar() { assertHasReplacement("$keyword", "$keyword"); } @Test public void testReplaceKeywordsWithInitialEscapedDollar() { assertHasReplacement("$$keyword", "$keyword"); } @Test public void testReplaceKeywordsWithFinalDollar() { assertHasReplacement("keyword$", "keyword$"); } @Test public void testReplaceKeywordsWithDollarBrace() { assertHasReplacement("${keyword", "${keyword"); } @Test public void testReplaceKeywordsWithSimpleReference() { assertHasReplacement("${keyword}", "replacement"); } @Test public void testReplaceKeywordWithDollar() { _replacements.put("$foo", "bar"); assertHasReplacement("${$$foo}", "bar"); } @Test public void testReplaceKeywordWithDollarBraceEscapedDollar() { _replacements.put("${foo", "bar"); assertHasReplacement("${$${foo}", "bar"); } @Test public void testEscapedDollarReplaceKeywordsWithSimpleReference() { assertHasReplacement("$$${keyword}", "$replacement"); } @Test public void testDollarEscapedReplaceKeywordsWithSimpleReference() { assertHasReplacement("$$$${keyword}", "$${keyword}"); } @Test public void testReplaceKeywordsWithReferenceFollowedBySomething() { assertHasReplacement("${keyword}-something", "replacement-something"); } @Test public void testReplaceKeywordsWithSomethingFollowedByReference() { assertHasReplacement("something-${keyword}", "something-replacement"); } @Test public void testReplaceKeywordsWithNonExistentReference() { assertHasReplacement("${does-not-exist}", "${does-not-exist}"); } @Test public void testReplaceSimpleKeywordsWithinKeywordExists() { _replacements.put("other", "keyword"); assertHasReplacement("${${other}}", "replacement"); } @Test public void testReplaceSimpleKeywordsWithDollarWithinKeywordExistsNoEscape() { _replacements.put("$other", "keyword"); assertHasReplacement("${${$other}}", "replacement"); } @Test public void testReplaceSimpleKeywordsWithDollarWithinKeywordExistsWithSingleEscape() { _replacements.put("$other", "keyword"); assertHasReplacement("${${$$other}}", "replacement"); } @Test public void testReplaceSimpleKeywordsWithDollarWithinKeywordExistsWithDoubleEscape() { _replacements.put("$other", "keyword"); assertHasReplacement("${${$$$$other}}", "${${$$other}}"); } @Test public void testReplaceSimpleKeywordsWithDollarBraceWithinKeywordExistsWithDoubleEscape() { _replacements.put("${other", "keyword"); assertHasReplacement("${${$${other}}", "replacement"); } @Test public void testReplaceComplexKeywordsWithinKeywordExists() { _replacements.put("other", "wor"); assertHasReplacement("${key${other}d}", "replacement"); } @Test public void testEscapeDollarReplaceComplexKeywordsWithinKeywordExists() { _replacements.put("other", "wor"); assertHasReplacement("${key$${other}d}", "${key${other}d}"); } @Test public void testReplaceSimpleKeywordsWithinKeywordOuterDoesntExists() { _replacements.put("other", "foo"); assertHasReplacement("${${other}}", "${foo}"); } @Test public void testReplaceSimpleKeywordsWithinKeywordInnerDoesntExists() { assertHasReplacement("${${other}}", "${${other}}"); } @Test public void testReplaceComplexKeywordsWithinKeywordPartial() { _replacements.put("other", "foo"); assertHasReplacement("${${other}", "${foo"); } private void assertHasReplacement(String in, String expected) { String actual = Formats.replaceKeywords(in, _replacements); assertEquals(expected, actual); } /** * A simple class to hold a set of replacements that is initially empty. * A replacement may be added using put. */ public static class SimpleReplaceable extends PropertiesBackedReplaceable { private final Properties _properties; public SimpleReplaceable(Properties properties) { super(properties); _properties = properties; } public void put(String key, String replacement) { _properties.put(key, replacement); } } }