package hk.hku.cecid.piazza.commons.utils; import hk.hku.cecid.piazza.commons.util.StringUtilities; import org.junit.After; import org.junit.Test; import static org.junit.Assert.*; public class StringUtilitiesTest { @After public void reset() { System.clearProperty("test.property"); } @Test public void testSystemPropertyReplace() { String property = "${test.property}"; System.setProperty("test.property", "somevalue"); assertEquals("somevalue",StringUtilities.propertyValue(property)); assertEquals("somevalue/test",StringUtilities.propertyValue(property + "/test")); } @Test public void testSystemPropertyReplaceWithDefault() { String property = "${test.property:defaultvalue}"; assertEquals("defaultvalue",StringUtilities.propertyValue(property)); System.setProperty("test.property", "somevalue"); assertEquals("somevalue",StringUtilities.propertyValue(property)); } @Test public void testSystemPropertyReplaceWithDefaultWithColonInTheValues() { String property = "${test.property:defaultvalue:value1:value2}"; assertEquals("defaultvalue:value1:value2",StringUtilities.propertyValue(property)); System.setProperty("test.property", "somevalue"); assertEquals("somevalue",StringUtilities.propertyValue(property)); } @Test public void testSystemPropertyReplaceWithEmptyDefault() { String property = "${test.property:}${test.property:}"; assertEquals(null,StringUtilities.propertyValue(property)); System.setProperty("test.property", "somevalue"); assertEquals("somevaluesomevalue",StringUtilities.propertyValue(property)); } @Test public void testSystemPropertyReplaceWithMultipleProps() { String property = "${test.property:default}/${test.property:}"; assertEquals("default/",StringUtilities.propertyValue(property)); System.setProperty("test.property", "somevalue"); assertEquals("somevalue/somevalue",StringUtilities.propertyValue(property)); } @Test public void testSystemPropertyReplaceNotDefined() { String property = "${jentrata.activemq.connectionFactoryUrl:vm://localhost?broker.persistent=false}"; assertEquals("vm://localhost?broker.persistent=false",StringUtilities.propertyValue(property)); } @Test public void testSplitFirstSimple() { assertNull(StringUtilities.splitFirst(null, "|")); String result [] = StringUtilities.splitFirst("first half|second half", "|"); assertEquals(2,result.length); assertEquals("first half",result[0]); assertEquals("second half",result[1]); } @Test public void testSplitFirstMultiple() { String result [] = StringUtilities.splitFirst("first half|second half|third", "|"); assertEquals(2,result.length); assertEquals("first half",result[0]); assertEquals("second half|third",result[1]); } @Test public void testPropertyWithDefaultProperty() { System.setProperty("test.prop","jentrata"); String result = StringUtilities.propertyValue("${jentrata.home:${test.prop}/bin}"); assertTrue(result.contains("jentrata/bin")); } @Test public void testPropertyWithMultipleDefaultProperty() { System.setProperty("test.prop","jentrata"); System.setProperty("test.prop2","bin"); String result = StringUtilities.propertyValue("${jentrata.home:${test.prop}/${test.prop2}"); assertTrue(result.contains("jentrata/bin")); } @Test public void testPropertyWithMultipleDefaultPropertyWithDefault() { System.setProperty("corvus.home","jentrata"); String result = StringUtilities.propertyValue("${jentrata.ebms.keystore.location:${corvus.home}/security/${jentrata.ebms.keystore.file:corvus.p12}}"); assertEquals(result,"jentrata/security/corvus.p12"); } @Test public void testJavaParamToEnvironmentParamWithNull() { String input = null; String expectedOutput = null; String output = StringUtilities.javaParamToEnvironmentParam(new StringUtilities.RealEnvironment(), input); assertEquals(expectedOutput, output); } @Test public void testJavaParamToEnvironmentParamUseCase1() { String input = "jentrata.activemq.connectionFactoryUrl"; String expectedOutput = "tcp://burgers"; String output = StringUtilities.javaParamToEnvironmentParam(new MockEnvironment(), input); assertEquals(expectedOutput, output); } @Test public void testPropertyWithExistingEnvironmentVariable() { System.setProperty("test.prop","jentrata"); String result = StringUtilities.propertyValue("${jentrata.home:${test.prop}/bin}"); assertTrue(result.contains("jentrata/bin")); } private class MockEnvironment extends StringUtilities.EnvironmentHandler { public String getenv(String envVar) { if (envVar.equals("JENTRATA_ACTIVEMQ_CONNECTIONFACTORYURL")) { return "tcp://burgers"; } else { return System.getenv(envVar); } } } }