Reported by: Matthew Nelson git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@277378 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -258,6 +258,8 @@ Fixed bugs: | |||
| * forked <javac> won't pass -source to a JDK 1.1 or 1.2 javac anymore. | |||
| Bugzilla report 32948 | |||
| * propertyset references did not handle nested propertyset references. | |||
| Changes from Ant 1.6.1 to Ant 1.6.2 | |||
| =================================== | |||
| @@ -0,0 +1,55 @@ | |||
| <!-- | |||
| * Copyright 2005 The Apache Software Foundation | |||
| * | |||
| * 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. | |||
| * | |||
| --> | |||
| <project> | |||
| <property name="fooA" value="FooA"/> | |||
| <property name="barB" value="BarB"/> | |||
| <propertyset id="properties-starting-with-foo"> | |||
| <propertyref prefix="foo"/> | |||
| </propertyset> | |||
| <propertyset id="properties-starting-with-bar"> | |||
| <propertyref prefix="bar"/> | |||
| </propertyset> | |||
| <propertyset id="my-set"> | |||
| <propertyset refid="properties-starting-with-foo"/> | |||
| <propertyset refid="properties-starting-with-bar"/> | |||
| </propertyset> | |||
| <macrodef name="expect.equals"> | |||
| <attribute name="test"/> | |||
| <attribute name="exp"/> | |||
| <attribute name="got"/> | |||
| <sequential> | |||
| <fail message= | |||
| "@{test} failed: expected "@{exp}" got "@{got}""> | |||
| <condition> | |||
| <not> | |||
| <equals arg1="@{exp}" arg2="@{got}"/> | |||
| </not> | |||
| </condition> | |||
| </fail> | |||
| </sequential> | |||
| </macrodef> | |||
| <target name="reference-to-two-references"> | |||
| <expect.equals | |||
| test="reference to two references" | |||
| exp="barB=BarB, fooA=FooA" | |||
| got="${toString:my-set}"/> | |||
| </target> | |||
| </project> | |||
| @@ -19,8 +19,10 @@ package org.apache.tools.ant.types; | |||
| import java.util.Enumeration; | |||
| import java.util.Iterator; | |||
| import java.util.Map; | |||
| import java.util.HashSet; | |||
| import java.util.Set; | |||
| import java.util.TreeMap; | |||
| import java.util.Hashtable; | |||
| import java.util.Properties; | |||
| import java.util.Stack; | |||
| @@ -202,6 +204,9 @@ public class PropertySet extends DataType { | |||
| * @return | |||
| */ | |||
| public Properties getProperties() { | |||
| if (isReference()) { | |||
| return getRef().getProperties(); | |||
| } | |||
| Set names = null; | |||
| Project prj = getProject(); | |||
| Hashtable props = | |||
| @@ -209,11 +214,7 @@ public class PropertySet extends DataType { | |||
| if (getDynamic() || cachedNames == null) { | |||
| names = new HashSet(); | |||
| if (isReference()) { | |||
| getRef().addPropertyNames(names, props); | |||
| } else { | |||
| addPropertyNames(names, props); | |||
| } | |||
| addPropertyNames(names, props); | |||
| // Add this PropertySet's nested PropertySets' property names. | |||
| for (Enumeration e = setRefs.elements(); e.hasMoreElements();) { | |||
| PropertySet set = (PropertySet) e.nextElement(); | |||
| @@ -375,5 +376,26 @@ public class PropertySet extends DataType { | |||
| return new String[] {ALL, SYSTEM, COMMANDLINE}; | |||
| } | |||
| } | |||
| } // END class PropertySet | |||
| /** | |||
| * A debug toString. | |||
| * This gets a comma separated list of key=value pairs for | |||
| * the properties in the set. | |||
| * The output order is sorted according to the keys' <i>natural order</i>. | |||
| * @return a string rep of this object | |||
| */ | |||
| public String toString() { | |||
| StringBuffer b = new StringBuffer(); | |||
| TreeMap sorted = new TreeMap(getProperties()); | |||
| for (Iterator i = sorted.entrySet().iterator(); i.hasNext();) { | |||
| Map.Entry e = (Map.Entry) i.next(); | |||
| if (b.length() != 0) { | |||
| b.append(", "); | |||
| } | |||
| b.append(e.getKey().toString()); | |||
| b.append("="); | |||
| b.append(e.getValue().toString()); | |||
| } | |||
| return b.toString(); | |||
| } | |||
| } | |||
| @@ -0,0 +1,39 @@ | |||
| /* | |||
| * Copyright 2005 The Apache Software Foundation | |||
| * | |||
| * 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.apache.tools.ant.types; | |||
| import org.apache.tools.ant.BuildException; | |||
| import org.apache.tools.ant.BuildFileTest; | |||
| import org.apache.tools.ant.Project; | |||
| import org.apache.tools.ant.Task; | |||
| import org.apache.tools.ant.taskdefs.condition.Condition; | |||
| public class PropertySetTest extends BuildFileTest { | |||
| public PropertySetTest(String name) { | |||
| super(name); | |||
| } | |||
| public void setUp() { | |||
| configureProject("src/etc/testcases/types/propertyset.xml"); | |||
| } | |||
| public void testReferenceToTwoReferences() { | |||
| executeTarget("reference-to-two-references"); | |||
| } | |||
| } | |||