/* * Copyright 2002-2006 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.springframework.beans.propertyeditors; import java.util.HashMap; import java.util.Map; import java.util.Properties; import junit.framework.TestCase; /** * Test the conversion of Strings to {@link java.util.Properties} objects, * and other property editors. * * @author Rod Johnson * @author Juergen Hoeller * @author Rick Evans */ public class PropertiesEditorTests extends TestCase { public void testOneProperty() { String s = "foo=bar"; PropertiesEditor pe= new PropertiesEditor(); pe.setAsText(s); Properties p = (Properties) pe.getValue(); assertTrue("contains one entry", p.entrySet().size() == 1); assertTrue("foo=bar", p.get("foo").equals("bar")); } public void testTwoProperties() { String s = "foo=bar with whitespace\n" + "me=mi"; PropertiesEditor pe= new PropertiesEditor(); pe.setAsText(s); Properties p = (Properties) pe.getValue(); assertTrue("contains two entries", p.entrySet().size() == 2); assertTrue("foo=bar with whitespace", p.get("foo").equals("bar with whitespace")); assertTrue("me=mi", p.get("me").equals("mi")); } public void testHandlesEqualsInValue() { String s = "foo=bar\n" + "me=mi\n" + "x=y=z"; PropertiesEditor pe= new PropertiesEditor(); pe.setAsText(s); Properties p = (Properties) pe.getValue(); assertTrue("contains two entries", p.entrySet().size() == 3); assertTrue("foo=bar", p.get("foo").equals("bar")); assertTrue("me=mi", p.get("me").equals("mi")); assertTrue("x='y=z'", p.get("x").equals("y=z")); } public void testHandlesEmptyProperty() { String s = "foo=bar\nme=mi\nx="; PropertiesEditor pe= new PropertiesEditor(); pe.setAsText(s); Properties p = (Properties) pe.getValue(); assertTrue("contains two entries", p.entrySet().size() == 3); assertTrue("foo=bar", p.get("foo").equals("bar")); assertTrue("me=mi", p.get("me").equals("mi")); assertTrue("x='y=z'", p.get("x").equals("")); } public void testHandlesEmptyPropertyWithoutEquals() { String s = "foo\nme=mi\nx=x"; PropertiesEditor pe= new PropertiesEditor(); pe.setAsText(s); Properties p = (Properties) pe.getValue(); assertTrue("contains three entries", p.entrySet().size() == 3); assertTrue("foo is empty", p.get("foo").equals("")); assertTrue("me=mi", p.get("me").equals("mi")); } /** * Comments begin with # */ public void testIgnoresCommentLinesAndEmptyLines() { String s = "#Ignore this comment\n" + "foo=bar\n" + "#Another=comment more junk /\n" + "me=mi\n" + "x=x\n" + "\n"; PropertiesEditor pe= new PropertiesEditor(); pe.setAsText(s); Properties p = (Properties) pe.getValue(); assertTrue("contains three entries", p.entrySet().size() == 3); assertTrue("foo is bar", p.get("foo").equals("bar")); assertTrue("me=mi", p.get("me").equals("mi")); } /** * We'll typically align by indenting with tabs or spaces. * These should be ignored if at the beginning of a line. * We must ensure that comment lines beginning with whitespace are * still ignored: The standard syntax doesn't allow this on JDK 1.3. */ public void testIgnoresLeadingSpacesAndTabs() { String s = " #Ignore this comment\n" + "\t\tfoo=bar\n" + "\t#Another comment more junk \n" + " me=mi\n" + "x=x\n" + "\n"; PropertiesEditor pe= new PropertiesEditor(); pe.setAsText(s); Properties p = (Properties) pe.getValue(); assertTrue("contains 3 entries, not " + p.size(), p.size() == 3); assertTrue("foo is bar", p.get("foo").equals("bar")); assertTrue("me=mi", p.get("me").equals("mi")); } public void testNull() { PropertiesEditor pe= new PropertiesEditor(); pe.setAsText(null); Properties p = (Properties) pe.getValue(); assertEquals(0, p.size()); } public void testEmptyString() { PropertiesEditor pe = new PropertiesEditor(); pe.setAsText(""); Properties p = (Properties) pe.getValue(); assertTrue("empty string means empty properties", p.isEmpty()); } public void testUsingMapAsValueSource() throws Exception { Map map = new HashMap(); map.put("one", "1"); map.put("two", "2"); map.put("three", "3"); PropertiesEditor pe = new PropertiesEditor(); pe.setValue(map); Object value = pe.getValue(); assertNotNull(value); assertTrue(value instanceof Properties); Properties props = (Properties) value; assertEquals(3, props.size()); assertEquals("1", props.getProperty("one")); assertEquals("2", props.getProperty("two")); assertEquals("3", props.getProperty("three")); } }