Browse Source

<nice> as a task; unit tests tested on windows.

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@275614 13f79535-47bb-0310-9956-ffa450edef68
master
Steve Loughran 21 years ago
parent
commit
3838c6ba28
4 changed files with 284 additions and 0 deletions
  1. +50
    -0
      src/etc/testcases/taskdefs/nice.xml
  2. +135
    -0
      src/main/org/apache/tools/ant/taskdefs/Nice.java
  3. +1
    -0
      src/main/org/apache/tools/ant/taskdefs/defaults.properties
  4. +98
    -0
      src/testcases/org/apache/tools/ant/taskdefs/NiceTest.java

+ 50
- 0
src/etc/testcases/taskdefs/nice.xml View File

@@ -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>

+ 135
- 0
src/main/org/apache/tools/ant/taskdefs/Nice.java View File

@@ -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> &lt;Nice currentPriority="current.value" &gt;</pre><p>
* Set <code>currentPriority</code> to the current priority
* <pre> &lt;Nice newPriority="10" &gt;</pre><p>
* Raise the priority of the build process (But not forked programs)
* <pre> &lt;Nice currentPriority="old" newPriority="3" &gt;</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);
}

}

+ 1
- 0
src/main/org/apache/tools/ant/taskdefs/defaults.properties View File

@@ -78,6 +78,7 @@ sync=org.apache.tools.ant.taskdefs.Sync
defaultexcludes=org.apache.tools.ant.taskdefs.DefaultExcludes
presetdef=org.apache.tools.ant.taskdefs.PreSetDef
macrodef=org.apache.tools.ant.taskdefs.MacroDef
nice=org.apache.tools.ant.taskdefs.Nice

# optional tasks
image=org.apache.tools.ant.taskdefs.optional.image.Image


+ 98
- 0
src/testcases/org/apache/tools/ant/taskdefs/NiceTest.java View File

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

}

Loading…
Cancel
Save