git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@275614 13f79535-47bb-0310-9956-ffa450edef68master
@@ -0,0 +1,50 @@ | |||||
<?xml version="1.0"?> | |||||
<project name="nice" basedir="."> | |||||
<description> | |||||
Test nicing. To make the test more complex we may be running in a nice mode | |||||
to start with, and we want to restore that value at the end. So every test | |||||
that succeeds must restore the saved value. | |||||
</description> | |||||
<target name="noop"> | |||||
<nice/> | |||||
</target> | |||||
<target name="current"> | |||||
<nice currentPriority="nice.now"/> | |||||
<fail unless="nice.now"/> | |||||
</target> | |||||
<target name="faster"> | |||||
<nice newPriority="8" currentPriority="nice.old"/> | |||||
<nice currentPriority="nice.now"/> | |||||
<condition property="test.succeeded"> | |||||
<equals arg1="${nice.now}" arg2="8" /> | |||||
</condition> | |||||
<nice newPriority="${nice.old}"/> | |||||
<fail unless="test.succeeded"/> | |||||
</target> | |||||
<target name="slower"> | |||||
<nice newPriority="3" currentPriority="nice.old"/> | |||||
<nice currentPriority="nice.now"/> | |||||
<condition property="test.succeeded"> | |||||
<equals arg1="${nice.now}" arg2="3" /> | |||||
</condition> | |||||
<nice newPriority="${nice.old}"/> | |||||
<fail unless="test.succeeded"/> | |||||
</target> | |||||
<target name="too_slow"> | |||||
<nice currentPriority="nice.old"/> | |||||
<nice newPriority="0"/> | |||||
<nice newPriority="${nice.old}"/> | |||||
</target> | |||||
<target name="too_fast"> | |||||
<nice currentPriority="nice.old"/> | |||||
<nice newPriority="20"/> | |||||
<nice newPriority="${nice.old}"/> | |||||
</target> | |||||
</project> |
@@ -0,0 +1,135 @@ | |||||
/* | |||||
* The Apache Software License, Version 1.1 | |||||
* | |||||
* Copyright (c) 2003 The Apache Software Foundation. All rights | |||||
* reserved. | |||||
* | |||||
* Redistribution and use in source and binary forms, with or without | |||||
* modification, are permitted provided that the following conditions | |||||
* are met: | |||||
* | |||||
* 1. Redistributions of source code must retain the above copyright | |||||
* notice, this list of conditions and the following disclaimer. | |||||
* | |||||
* 2. Redistributions in binary form must reproduce the above copyright | |||||
* notice, this list of conditions and the following disclaimer in | |||||
* the documentation and/or other materials provided with the | |||||
* distribution. | |||||
* | |||||
* 3. The end-user documentation included with the redistribution, if | |||||
* any, must include the following acknowlegement: | |||||
* "This product includes software developed by the | |||||
* Apache Software Foundation (http://www.apache.org/)." | |||||
* Alternately, this acknowlegement may appear in the software itself, | |||||
* if and wherever such third-party acknowlegements normally appear. | |||||
* | |||||
* 4. The names "Ant" and "Apache Software | |||||
* Foundation" must not be used to endorse or promote products derived | |||||
* from this software without prior written permission. For written | |||||
* permission, please contact apache@apache.org. | |||||
* | |||||
* 5. Products derived from this software may not be called "Apache" | |||||
* nor may "Apache" appear in their names without prior written | |||||
* permission of the Apache Group. | |||||
* | |||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||||
* SUCH DAMAGE. | |||||
* ==================================================================== | |||||
* | |||||
* This software consists of voluntary contributions made by many | |||||
* individuals on behalf of the Apache Software Foundation. For more | |||||
* information on the Apache Software Foundation, please see | |||||
* <http://www.apache.org/>. | |||||
*/ | |||||
package org.apache.tools.ant.taskdefs; | |||||
import org.apache.tools.ant.Task; | |||||
import org.apache.tools.ant.BuildException; | |||||
import org.apache.tools.ant.Project; | |||||
/** | |||||
* A task to provide "nice-ness" to the current thread, and/or to | |||||
* query the current value. | |||||
* Examples: | |||||
* <pre> <Nice currentPriority="current.value" ></pre><p> | |||||
* Set <code>currentPriority</code> to the current priority | |||||
* <pre> <Nice newPriority="10" ></pre><p> | |||||
* Raise the priority of the build process (But not forked programs) | |||||
* <pre> <Nice currentPriority="old" newPriority="3" ></pre><p> | |||||
* Lower the priority of the build process (But not forked programs), and save | |||||
* the old value to the property <code>old</code>. | |||||
* | |||||
* @ant.task name="Nice" category="optional" | |||||
*/ | |||||
public class Nice extends Task { | |||||
/** | |||||
* the new priority | |||||
*/ | |||||
private Integer newPriority; | |||||
/** | |||||
* the current priority | |||||
*/ | |||||
private String currentPriority; | |||||
/** | |||||
* Execute the task | |||||
* @exception BuildException if something goes wrong with the build | |||||
*/ | |||||
public void execute() throws BuildException { | |||||
Thread self = Thread.currentThread(); | |||||
int priority = self.getPriority(); | |||||
if(currentPriority!=null) { | |||||
String current=Integer.toString(priority); | |||||
getProject().setNewProperty(currentPriority,current); | |||||
} | |||||
//if there is a new priority, and it is different, change it | |||||
if(newPriority!=null && priority!=newPriority.intValue()) { | |||||
try { | |||||
self.setPriority(newPriority.intValue()); | |||||
} catch (SecurityException e) { | |||||
//catch permissions denial and keep going | |||||
log("Unable to set new priority -a security manager is in the way", | |||||
Project.MSG_WARN); | |||||
} catch(IllegalArgumentException iae) { | |||||
throw new BuildException("Priority out of range",iae); | |||||
} | |||||
} | |||||
} | |||||
/** | |||||
* The name of a property to set to the value of the current | |||||
* thread priority. Optional | |||||
* @param currentPriority | |||||
*/ | |||||
public void setCurrentPriority(String currentPriority) { | |||||
this.currentPriority = currentPriority; | |||||
} | |||||
/** | |||||
* the new priority, in the range 1-10. | |||||
* @param newPriority | |||||
*/ | |||||
public void setNewPriority(int newPriority) { | |||||
if(newPriority<Thread.MIN_PRIORITY || newPriority>Thread.MAX_PRIORITY) { | |||||
throw new BuildException("The thread priority is out of the range 1-10"); | |||||
} | |||||
this.newPriority = new Integer(newPriority); | |||||
} | |||||
} |
@@ -78,6 +78,7 @@ sync=org.apache.tools.ant.taskdefs.Sync | |||||
defaultexcludes=org.apache.tools.ant.taskdefs.DefaultExcludes | defaultexcludes=org.apache.tools.ant.taskdefs.DefaultExcludes | ||||
presetdef=org.apache.tools.ant.taskdefs.PreSetDef | presetdef=org.apache.tools.ant.taskdefs.PreSetDef | ||||
macrodef=org.apache.tools.ant.taskdefs.MacroDef | macrodef=org.apache.tools.ant.taskdefs.MacroDef | ||||
nice=org.apache.tools.ant.taskdefs.Nice | |||||
# optional tasks | # optional tasks | ||||
image=org.apache.tools.ant.taskdefs.optional.image.Image | image=org.apache.tools.ant.taskdefs.optional.image.Image | ||||
@@ -0,0 +1,98 @@ | |||||
/* | |||||
* The Apache Software License, Version 1.1 | |||||
* | |||||
* Copyright (c) 2003 The Apache Software Foundation. All rights | |||||
* reserved. | |||||
* | |||||
* Redistribution and use in source and binary forms, with or without | |||||
* modification, are permitted provided that the following conditions | |||||
* are met: | |||||
* | |||||
* 1. Redistributions of source code must retain the above copyright | |||||
* notice, this list of conditions and the following disclaimer. | |||||
* | |||||
* 2. Redistributions in binary form must reproduce the above copyright | |||||
* notice, this list of conditions and the following disclaimer in | |||||
* the documentation and/or other materials provided with the | |||||
* distribution. | |||||
* | |||||
* 3. The end-user documentation included with the redistribution, if | |||||
* any, must include the following acknowlegement: | |||||
* "This product includes software developed by the | |||||
* Apache Software Foundation (http://www.apache.org/)." | |||||
* Alternately, this acknowlegement may appear in the software itself, | |||||
* if and wherever such third-party acknowlegements normally appear. | |||||
* | |||||
* 4. The names "Ant" and "Apache Software Foundation" | |||||
* must not be used to endorse or promote products derived | |||||
* from this software without prior written permission. For written | |||||
* permission, please contact apache@apache.org. | |||||
* | |||||
* 5. Products derived from this software may not be called "Apache" | |||||
* nor may "Apache" appear in their names without prior written | |||||
* permission of the Apache Group. | |||||
* | |||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||||
* SUCH DAMAGE. | |||||
* ==================================================================== | |||||
* | |||||
* This software consists of voluntary contributions made by many | |||||
* individuals on behalf of the Apache Software Foundation. For more | |||||
* information on the Apache Software Foundation, please see | |||||
* <http://www.apache.org/>. | |||||
*/ | |||||
package org.apache.tools.ant.taskdefs; | |||||
import org.apache.tools.ant.BuildFileTest; | |||||
/** | |||||
* test nice | |||||
*/ | |||||
public class NiceTest extends BuildFileTest { | |||||
public NiceTest(String name) { | |||||
super(name); | |||||
} | |||||
public void setUp() { | |||||
configureProject("src/etc/testcases/taskdefs/nice.xml"); | |||||
} | |||||
public void testNoop() { | |||||
executeTarget("noop"); | |||||
} | |||||
public void testCurrent() { | |||||
executeTarget("current"); | |||||
} | |||||
public void testFaster() { | |||||
executeTarget("faster"); | |||||
} | |||||
public void testSlower() { | |||||
executeTarget("slower"); | |||||
} | |||||
public void testTooSlow() { | |||||
expectBuildExceptionContaining( | |||||
"too_slow","out of range","out of the range 1-10"); | |||||
} | |||||
public void testTooFast() { | |||||
expectBuildExceptionContaining( | |||||
"too_fast", "out of range", "out of the range 1-10"); | |||||
} | |||||
} |