/*
* Copyright 2007-2010 Sun Microsystems, Inc.
*
* This file is part of Project Darkstar Server.
*
* Project Darkstar Server is free software: you can redistribute it
* and/or modify it under the terms of the GNU General Public License
* version 2 as published by the Free Software Foundation and
* distributed hereunder to you.
*
* Project Darkstar Server 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* --
*/
package com.sun.sgs.system;
import java.util.Properties;
import org.junit.Test;
import org.junit.Assert;
/**
* Test the SubstitutionProperties class
*/
public class TestSubstitutionProperties {
@Test
public void testCreationWithStandardProperties() {
Properties testProps = new Properties();
testProps.setProperty("name1", "value1");
testProps.setProperty("name2", "value2");
testProps.setProperty("name3", "value3");
SubstitutionProperties p = new SubstitutionProperties(testProps);
System.out.println(p.size());
System.out.println(p.propertyNames().nextElement());
System.out.println(p.getProperty("name1"));
Assert.assertEquals(p.getProperty("name1"), "value1");
Assert.assertEquals(p.getProperty("name2"), "value2");
Assert.assertEquals(p.getProperty("name3"), "value3");
}
@Test
public void testCreationWithSimpleInterpolations() {
Properties testProps = new Properties();
testProps.setProperty("name1", "value1");
testProps.setProperty("name2", "${name1}");
testProps.setProperty("name3", "${name1}${name2}");
SubstitutionProperties p = new SubstitutionProperties(testProps);
Assert.assertEquals(p.getProperty("name1"), "value1");
Assert.assertEquals(p.getProperty("name2"), "value1");
Assert.assertEquals(p.getProperty("name3"), "value1value1");
}
@Test
public void testCreationWithComplexInterpolations() {
Properties testProps = new Properties();
testProps.setProperty("name1", "value1");
testProps.setProperty("name2", "${name1}/test/${name3}");
testProps.setProperty("name3", "${name1}/value2");
testProps.setProperty("name4", "${name2}/${name1}");
SubstitutionProperties p = new SubstitutionProperties(testProps);
Assert.assertEquals(p.getProperty("name1"), "value1");
Assert.assertEquals(p.getProperty("name2"), "value1/test/value1/value2");
Assert.assertEquals(p.getProperty("name3"), "value1/value2");
Assert.assertEquals(p.getProperty("name4"), "value1/test/value1/value2/value1");
}
@Test(expected=IllegalStateException.class)
public void testCreationWithSimpleLoop() {
Properties testProps = new Properties();
testProps.setProperty("name1", "${name2}");
testProps.setProperty("name2", "${name1}");
SubstitutionProperties p = new SubstitutionProperties(testProps);
}
@Test(expected=IllegalStateException.class)
public void testCreationWithComplexLoop() {
Properties testProps = new Properties();
testProps.setProperty("name1", "${name2}");
testProps.setProperty("name2", "${name3}");
testProps.setProperty("name3", "${name1}");
SubstitutionProperties p = new SubstitutionProperties(testProps);
}
@Test
public void testCreationWithEmptyVariable() {
Properties testProps = new Properties();
testProps.setProperty("name1", "${}");
SubstitutionProperties p = new SubstitutionProperties(testProps);
Assert.assertEquals(p.getProperty("name1"), "");
}
@Test
public void testCreationWithNonExistantVariable() {
Properties testProps = new Properties();
testProps.setProperty("name1", "${name2}");
SubstitutionProperties p = new SubstitutionProperties(testProps);
Assert.assertEquals(p.getProperty("name1"), "");
Assert.assertNull(p.getProperty("name2"));
}
@Test(expected=IllegalArgumentException.class)
public void testCreationWithInvalidVariableFormat() {
Properties testProps = new Properties();
testProps.setProperty("name1", "${name2");
SubstitutionProperties p = new SubstitutionProperties(testProps);
}
@Test
public void testCreationWithFunnyButValidVariableFormat() {
Properties testProps = new Properties();
testProps.setProperty("name2", "value");
testProps.setProperty("name1", "${name2}}");
SubstitutionProperties p = new SubstitutionProperties(testProps);
Assert.assertEquals(p.getProperty("name1"), "value}");
}
@Test
public void testCreationWithFunnyButValidVariableFormat2() {
Properties testProps = new Properties();
testProps.setProperty("${name2", "value");
testProps.setProperty("name1", "${${name2}");
SubstitutionProperties p = new SubstitutionProperties(testProps);
Assert.assertEquals(p.getProperty("name1"), "value");
Assert.assertEquals(p.getProperty("${name2"), "value");
}
@Test
public void testSetPropertyWithInterpolation() {
Properties testProps = new Properties();
testProps.setProperty("name1", "value1");
testProps.setProperty("name2", "${name1}/test/${name3}");
testProps.setProperty("name3", "${name1}/value2");
SubstitutionProperties p = new SubstitutionProperties(testProps);
p.setProperty("name4", "${name2}/${name1}");
Assert.assertEquals(p.getProperty("name1"), "value1");
Assert.assertEquals(p.getProperty("name2"), "value1/test/value1/value2");
Assert.assertEquals(p.getProperty("name3"), "value1/value2");
Assert.assertEquals(p.getProperty("name4"), "value1/test/value1/value2/value1");
}
}