git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@274562 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -306,7 +306,8 @@ Other changes: | |||||
| defaultexcludes task. Bugzilla Report 12700. | defaultexcludes task. Bugzilla Report 12700. | ||||
| * There is a new data type <propertyset> that can be used to collect | * There is a new data type <propertyset> that can be used to collect | ||||
| properties. | |||||
| properties. It is supported by <ant>, <antcall>, <subant>, <java> | |||||
| and <junit>. | |||||
| * <concat> can now control the encoding of the output as well and optionally | * <concat> can now control the encoding of the output as well and optionally | ||||
| add new-line characters at the end of files that get concatenated but | add new-line characters at the end of files that get concatenated but | ||||
| @@ -65,6 +65,7 @@ import org.apache.tools.ant.types.Commandline; | |||||
| import org.apache.tools.ant.types.CommandlineJava; | import org.apache.tools.ant.types.CommandlineJava; | ||||
| import org.apache.tools.ant.types.Environment; | import org.apache.tools.ant.types.Environment; | ||||
| import org.apache.tools.ant.types.Path; | import org.apache.tools.ant.types.Path; | ||||
| import org.apache.tools.ant.types.PropertySet; | |||||
| import org.apache.tools.ant.types.Reference; | import org.apache.tools.ant.types.Reference; | ||||
| /** | /** | ||||
| @@ -303,6 +304,15 @@ public class Java extends Task { | |||||
| cmdl.addSysproperty(sysp); | cmdl.addSysproperty(sysp); | ||||
| } | } | ||||
| /** | |||||
| * Adds a set of properties as system properties. | |||||
| * | |||||
| * @since Ant 1.6 | |||||
| */ | |||||
| public void addSyspropertyset(PropertySet sysp) { | |||||
| cmdl.addSyspropertyset(sysp); | |||||
| } | |||||
| /** | /** | ||||
| * If true, then fail if the command exits with a | * If true, then fail if the command exits with a | ||||
| * returncode other than 0 | * returncode other than 0 | ||||
| @@ -75,6 +75,7 @@ import org.apache.tools.ant.types.CommandlineJava; | |||||
| import org.apache.tools.ant.types.EnumeratedAttribute; | import org.apache.tools.ant.types.EnumeratedAttribute; | ||||
| import org.apache.tools.ant.types.Environment; | import org.apache.tools.ant.types.Environment; | ||||
| import org.apache.tools.ant.types.Path; | import org.apache.tools.ant.types.Path; | ||||
| import org.apache.tools.ant.types.PropertySet; | |||||
| import org.apache.tools.ant.util.FileUtils; | import org.apache.tools.ant.util.FileUtils; | ||||
| import org.apache.tools.ant.util.LoaderUtils; | import org.apache.tools.ant.util.LoaderUtils; | ||||
| import junit.framework.AssertionFailedError; | import junit.framework.AssertionFailedError; | ||||
| @@ -402,6 +403,19 @@ public class JUnitTask extends Task { | |||||
| commandline.addSysproperty(sysp); | commandline.addSysproperty(sysp); | ||||
| } | } | ||||
| /** | |||||
| * Adds a set of properties that will be used as system properties | |||||
| * that tests can access. | |||||
| * | |||||
| * This might be useful to tranfer Ant properties to the | |||||
| * testcases when JVM forking is not enabled. | |||||
| * | |||||
| * @since Ant 1.6 | |||||
| */ | |||||
| public void addSyspropertyset(PropertySet sysp) { | |||||
| commandline.addSyspropertyset(sysp); | |||||
| } | |||||
| /** | /** | ||||
| * Adds path to classpath used for tests. | * Adds path to classpath used for tests. | ||||
| * | * | ||||
| @@ -1,7 +1,7 @@ | |||||
| /* | /* | ||||
| * The Apache Software License, Version 1.1 | * The Apache Software License, Version 1.1 | ||||
| * | * | ||||
| * Copyright (c) 2000-2002 The Apache Software Foundation. All rights | |||||
| * Copyright (c) 2000-2003 The Apache Software Foundation. All rights | |||||
| * reserved. | * reserved. | ||||
| * | * | ||||
| * Redistribution and use in source and binary forms, with or without | * Redistribution and use in source and binary forms, with or without | ||||
| @@ -99,22 +99,37 @@ public class CommandlineJava implements Cloneable { | |||||
| */ | */ | ||||
| public static class SysProperties extends Environment implements Cloneable { | public static class SysProperties extends Environment implements Cloneable { | ||||
| Properties sys = null; | Properties sys = null; | ||||
| private Vector propertySets = new Vector(); | |||||
| public String[] getVariables() throws BuildException { | public String[] getVariables() throws BuildException { | ||||
| String[] props = super.getVariables(); | String[] props = super.getVariables(); | ||||
| Properties p = mergePropertySets(); | |||||
| if (props == null) { | if (props == null) { | ||||
| return null; | |||||
| if (p.size() == 0) { | |||||
| return null; | |||||
| } else { | |||||
| props = new String[0]; | |||||
| } | |||||
| } | } | ||||
| for (int i = 0; i < props.length; i++) { | |||||
| props[i] = "-D" + props[i]; | |||||
| String[] result = new String[props.length + p.size()]; | |||||
| int i = 0; | |||||
| for (; i < props.length; i++) { | |||||
| result[i] = "-D" + props[i]; | |||||
| } | |||||
| for (Enumeration enum = p.keys(); enum.hasMoreElements();) { | |||||
| String key = (String) enum.nextElement(); | |||||
| String value = p.getProperty(key); | |||||
| result[i++] = "-D" + key + "=" + value; | |||||
| } | } | ||||
| return props; | |||||
| return result; | |||||
| } | } | ||||
| public int size() { | public int size() { | ||||
| return variables.size(); | |||||
| Properties p = mergePropertySets(); | |||||
| return variables.size() + p.size(); | |||||
| } | } | ||||
| public void setSystem() throws BuildException { | public void setSystem() throws BuildException { | ||||
| @@ -125,6 +140,7 @@ public class CommandlineJava implements Cloneable { | |||||
| Object o = e.nextElement(); | Object o = e.nextElement(); | ||||
| p.put(o, sys.get(o)); | p.put(o, sys.get(o)); | ||||
| } | } | ||||
| p.putAll(mergePropertySets()); | |||||
| for (Enumeration e = variables.elements(); e.hasMoreElements();) { | for (Enumeration e = variables.elements(); e.hasMoreElements();) { | ||||
| Environment.Variable v = (Environment.Variable) e.nextElement(); | Environment.Variable v = (Environment.Variable) e.nextElement(); | ||||
| p.put(v.getKey(), v.getValue()); | p.put(v.getKey(), v.getValue()); | ||||
| @@ -152,12 +168,26 @@ public class CommandlineJava implements Cloneable { | |||||
| try { | try { | ||||
| SysProperties c = (SysProperties) super.clone(); | SysProperties c = (SysProperties) super.clone(); | ||||
| c.variables = (Vector) variables.clone(); | c.variables = (Vector) variables.clone(); | ||||
| c.propertySets = (Vector) propertySets.clone(); | |||||
| return c; | return c; | ||||
| } catch (CloneNotSupportedException e) { | } catch (CloneNotSupportedException e) { | ||||
| return null; | return null; | ||||
| } | } | ||||
| } | } | ||||
| public void addSyspropertyset(PropertySet ps) { | |||||
| propertySets.addElement(ps); | |||||
| } | |||||
| private Properties mergePropertySets() { | |||||
| Properties p = new Properties(); | |||||
| for (Enumeration e = propertySets.elements(); | |||||
| e.hasMoreElements();) { | |||||
| PropertySet ps = (PropertySet) e.nextElement(); | |||||
| p.putAll(ps.getProperties()); | |||||
| } | |||||
| return p; | |||||
| } | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -180,6 +210,10 @@ public class CommandlineJava implements Cloneable { | |||||
| sysProperties.addVariable(sysp); | sysProperties.addVariable(sysp); | ||||
| } | } | ||||
| public void addSyspropertyset(PropertySet sysp) { | |||||
| sysProperties.addSyspropertyset(sysp); | |||||
| } | |||||
| public void setVm(String vm) { | public void setVm(String vm) { | ||||
| vmCommand.setExecutable(vm); | vmCommand.setExecutable(vm); | ||||
| } | } | ||||
| @@ -174,11 +174,11 @@ public class PropertySet extends DataType { | |||||
| } | } | ||||
| public boolean getDynamic() { | public boolean getDynamic() { | ||||
| return getRef().dynamic; | |||||
| return isReference() ? getRef().dynamic : dynamic; | |||||
| } | } | ||||
| public Mapper getMapper() { | public Mapper getMapper() { | ||||
| return getRef()._mapper; | |||||
| return isReference() ? getRef()._mapper : _mapper; | |||||
| } | } | ||||
| public Properties getProperties() { | public Properties getProperties() { | ||||
| @@ -187,7 +187,12 @@ public class PropertySet extends DataType { | |||||
| if (getDynamic() || cachedNames == null) { | if (getDynamic() || cachedNames == null) { | ||||
| names = new Vector(); // :TODO: should be a Set! | names = new Vector(); // :TODO: should be a Set! | ||||
| getRef().addPropertyNames(names, prj.getProperties()); | |||||
| if (isReference()) { | |||||
| getRef().addPropertyNames(names, prj.getProperties()); | |||||
| } else { | |||||
| addPropertyNames(names, prj.getProperties()); | |||||
| } | |||||
| if (!getDynamic()) { | if (!getDynamic()) { | ||||
| cachedNames = names; | cachedNames = names; | ||||
| } | } | ||||
| @@ -1,7 +1,7 @@ | |||||
| /* | /* | ||||
| * The Apache Software License, Version 1.1 | * The Apache Software License, Version 1.1 | ||||
| * | * | ||||
| * Copyright (c) 2000-2002 The Apache Software Foundation. All rights | |||||
| * Copyright (c) 2000-2003 The Apache Software Foundation. All rights | |||||
| * reserved. | * reserved. | ||||
| * | * | ||||
| * Redistribution and use in source and binary forms, with or without | * Redistribution and use in source and binary forms, with or without | ||||
| @@ -143,6 +143,13 @@ public class CommandlineJavaTest extends TestCase { | |||||
| v.setKey("key"); | v.setKey("key"); | ||||
| v.setValue("value"); | v.setValue("value"); | ||||
| c.addSysproperty(v); | c.addSysproperty(v); | ||||
| project.setProperty("key2", "value2"); | |||||
| PropertySet ps = new PropertySet(); | |||||
| ps.setProject(project); | |||||
| ps.appendName("key2"); | |||||
| c.addSyspropertyset(ps); | |||||
| try { | try { | ||||
| c.setSystemProperties(); | c.setSystemProperties(); | ||||
| String newClasspath = System.getProperty("java.class.path"); | String newClasspath = System.getProperty("java.class.path"); | ||||
| @@ -151,10 +158,13 @@ public class CommandlineJavaTest extends TestCase { | |||||
| assertNotNull(System.getProperty("key")); | assertNotNull(System.getProperty("key")); | ||||
| assertEquals("value", System.getProperty("key")); | assertEquals("value", System.getProperty("key")); | ||||
| assertTrue(System.getProperties().containsKey("java.class.path")); | assertTrue(System.getProperties().containsKey("java.class.path")); | ||||
| assertNotNull(System.getProperty("key2")); | |||||
| assertEquals("value2", System.getProperty("key2")); | |||||
| } finally { | } finally { | ||||
| c.restoreSystemProperties(); | c.restoreSystemProperties(); | ||||
| } | } | ||||
| assertNull(System.getProperty("key")); | assertNull(System.getProperty("key")); | ||||
| assertNull(System.getProperty("key2")); | |||||
| } | } | ||||
| } | } | ||||