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"); | |||||
| } | |||||
| } | |||||