Browse Source

<if> wasn't checking its condition. Fixed, and added some test cases.

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@271669 13f79535-47bb-0310-9956-ffa450edef68
master
adammurdoch 23 years ago
parent
commit
97ea61851c
4 changed files with 268 additions and 0 deletions
  1. +63
    -0
      proposal/myrmidon/etc/testcases/org/apache/antlib/core/if.ant
  2. +7
    -0
      proposal/myrmidon/src/java/org/apache/antlib/core/IfTask.java
  3. +99
    -0
      proposal/myrmidon/src/test/org/apache/antlib/core/IfTest.java
  4. +99
    -0
      proposal/myrmidon/src/testcases/org/apache/antlib/core/IfTest.java

+ 63
- 0
proposal/myrmidon/etc/testcases/org/apache/antlib/core/if.ant View File

@@ -0,0 +1,63 @@
<project version="2.0">
<target name="true-prop">
<property name="test-prop" value="true"/>
<if test="test-prop">
<log>test-prop is set</log>
</if>
<if not-test="test-prop">
<log>test-prop is not set</log>
</if>
</target>

<target name="set-prop">
<property name="test-prop" value="some value"/>
<if test="test-prop">
<log>test-prop is set</log>
</if>
<if not-test="test-prop">
<log>test-prop is not set</log>
</if>
</target>

<target name="not-set-prop">
<if test="test-prop">
<log>test-prop is set</log>
</if>
<if not-test="test-prop">
<log>test-prop is not set</log>
</if>
</target>

<target name="false-prop">
<property name="test-prop" value="false"/>
<if test="test-prop">
<log>test-prop is set</log>
</if>
<if not-test="test-prop">
<log>test-prop is not set</log>
</if>
</target>

<target name="multiple-nested-tasks">
<property name="test-prop" value="true"/>
<if test="test-prop">
<log>task 1</log>
<log>task 2</log>
<log>task 3</log>
<log>task 4</log>
</if>
</target>

<target name="no-condition">
<if>
<log>no go</log>
</if>
</target>

<target name="too-many-conditions">
<if test="test-prop" not-test="test-prop">
<log>no go</log>
</if>
</target>

</project>

+ 7
- 0
proposal/myrmidon/src/java/org/apache/antlib/core/IfTask.java View File

@@ -74,9 +74,16 @@ public class IfTask
throw new TaskException( message ); throw new TaskException( message );
} }


// Evaluate the condition
if( ! m_condition.evaluate( getContext() ) )
{
return;
}

final Configuration[] tasks = final Configuration[] tasks =
(Configuration[])m_tasks.toArray( new Configuration[ m_tasks.size() ] ); (Configuration[])m_tasks.toArray( new Configuration[ m_tasks.size() ] );


// TODO - don't use getService()
final ExecutionFrame frame = (ExecutionFrame)getService( ExecutionFrame.class ); final ExecutionFrame frame = (ExecutionFrame)getService( ExecutionFrame.class );
final Executor executor = (Executor)getService( Executor.class ); final Executor executor = (Executor)getService( Executor.class );




+ 99
- 0
proposal/myrmidon/src/test/org/apache/antlib/core/IfTest.java View File

@@ -0,0 +1,99 @@
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE.txt file.
*/
package org.apache.antlib.core;

import java.io.File;
import org.apache.avalon.excalibur.i18n.ResourceManager;
import org.apache.avalon.excalibur.i18n.Resources;
import org.apache.myrmidon.AbstractProjectTest;
import org.apache.myrmidon.LogMessageTracker;

/**
* Test cases for the <if> task.
*
* @author <a href="mailto:adammurdoch@apache.org">Adam Murdoch</a>
* @version $Revision$ $Date$
*/
public class IfTest
extends AbstractProjectTest
{
private final static Resources REZ
= ResourceManager.getPackageResources( IfTest.class );

public IfTest( String name )
{
super( name );
}

/**
* Test checking whether a property is set and not 'false'.
*/
public void testConditions()
throws Exception
{
final File projectFile = getTestResource( "if.ant" );

// Test when property is set to 'true'
LogMessageTracker listener = new LogMessageTracker();
listener.addExpectedMessage( "true-prop", "test-prop is set" );
executeTarget( projectFile, "true-prop", listener );

// Test when property is set to a value other than 'true' or 'false'
listener = new LogMessageTracker();
listener.addExpectedMessage( "set-prop", "test-prop is set" );
executeTarget( projectFile, "set-prop", listener );

// Test when property is set to 'false'
listener = new LogMessageTracker();
listener.addExpectedMessage( "false-prop", "test-prop is not set" );
executeTarget( projectFile, "false-prop", listener );

// Test when property is not set
listener = new LogMessageTracker();
listener.addExpectedMessage( "not-set-prop", "test-prop is not set" );
executeTarget( projectFile, "not-set-prop", listener );
}

/**
* Tests that the <if> task can handle multiple nested tasks.
*/
public void testMultipleTasks() throws Exception
{
final File projectFile = getTestResource( "if.ant" );

// Test when property is not set
LogMessageTracker listener = new LogMessageTracker();
listener.addExpectedMessage( "multiple-nested-tasks", "task 1" );
listener.addExpectedMessage( "multiple-nested-tasks", "task 2" );
listener.addExpectedMessage( "multiple-nested-tasks", "task 3" );
listener.addExpectedMessage( "multiple-nested-tasks", "task 4" );
executeTarget( projectFile, "multiple-nested-tasks", listener );
}

/**
* Tests validation.
*/
public void testValidation() throws Exception
{
final File projectFile = getTestResource( "if.ant" );

// Check for missing condition
String message = REZ.getString( "if.no-condition.error" );
executeTargetExpectError( projectFile, "no-condition", message );

// Check for too many conditions
String[] messages =
{
null,
null,
REZ.getString( "if.ifelse-duplicate.error" )
};
executeTargetExpectError( projectFile, "too-many-conditions", messages );
}

}

+ 99
- 0
proposal/myrmidon/src/testcases/org/apache/antlib/core/IfTest.java View File

@@ -0,0 +1,99 @@
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE.txt file.
*/
package org.apache.antlib.core;

import java.io.File;
import org.apache.avalon.excalibur.i18n.ResourceManager;
import org.apache.avalon.excalibur.i18n.Resources;
import org.apache.myrmidon.AbstractProjectTest;
import org.apache.myrmidon.LogMessageTracker;

/**
* Test cases for the <if> task.
*
* @author <a href="mailto:adammurdoch@apache.org">Adam Murdoch</a>
* @version $Revision$ $Date$
*/
public class IfTest
extends AbstractProjectTest
{
private final static Resources REZ
= ResourceManager.getPackageResources( IfTest.class );

public IfTest( String name )
{
super( name );
}

/**
* Test checking whether a property is set and not 'false'.
*/
public void testConditions()
throws Exception
{
final File projectFile = getTestResource( "if.ant" );

// Test when property is set to 'true'
LogMessageTracker listener = new LogMessageTracker();
listener.addExpectedMessage( "true-prop", "test-prop is set" );
executeTarget( projectFile, "true-prop", listener );

// Test when property is set to a value other than 'true' or 'false'
listener = new LogMessageTracker();
listener.addExpectedMessage( "set-prop", "test-prop is set" );
executeTarget( projectFile, "set-prop", listener );

// Test when property is set to 'false'
listener = new LogMessageTracker();
listener.addExpectedMessage( "false-prop", "test-prop is not set" );
executeTarget( projectFile, "false-prop", listener );

// Test when property is not set
listener = new LogMessageTracker();
listener.addExpectedMessage( "not-set-prop", "test-prop is not set" );
executeTarget( projectFile, "not-set-prop", listener );
}

/**
* Tests that the <if> task can handle multiple nested tasks.
*/
public void testMultipleTasks() throws Exception
{
final File projectFile = getTestResource( "if.ant" );

// Test when property is not set
LogMessageTracker listener = new LogMessageTracker();
listener.addExpectedMessage( "multiple-nested-tasks", "task 1" );
listener.addExpectedMessage( "multiple-nested-tasks", "task 2" );
listener.addExpectedMessage( "multiple-nested-tasks", "task 3" );
listener.addExpectedMessage( "multiple-nested-tasks", "task 4" );
executeTarget( projectFile, "multiple-nested-tasks", listener );
}

/**
* Tests validation.
*/
public void testValidation() throws Exception
{
final File projectFile = getTestResource( "if.ant" );

// Check for missing condition
String message = REZ.getString( "if.no-condition.error" );
executeTargetExpectError( projectFile, "no-condition", message );

// Check for too many conditions
String[] messages =
{
null,
null,
REZ.getString( "if.ifelse-duplicate.error" )
};
executeTargetExpectError( projectFile, "too-many-conditions", messages );
}

}

Loading…
Cancel
Save