* Was not exiting with non-zero exit code when the build failed. * Fix the error reporting so that the entire exception chain is reported. * Only print out stack traces when in verbose or debug mode. * Wrap all exceptions thrown during task initialisation and execution with a general 'task failed' exception. * Another <property> testcase. git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@271802 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -41,4 +41,13 @@ | |||||
| <property-test-type value="value 2"/> | <property-test-type value="value 2"/> | ||||
| </property> | </property> | ||||
| </target> | </target> | ||||
| <!-- Test setting the value more than once --> | |||||
| <target name="too-many-values3"> | |||||
| <property name="some-prop"> | |||||
| <property-test-type value="value 1"/> | |||||
| <property-test-type value="value 2"/> | |||||
| <property-test-type value="value 3"/> | |||||
| </property> | |||||
| </target> | |||||
| </project> | </project> | ||||
| @@ -75,30 +75,41 @@ public class AspectAwareExecutor | |||||
| final ExecutionFrame frame ) | final ExecutionFrame frame ) | ||||
| throws TaskException | throws TaskException | ||||
| { | { | ||||
| Configuration taskModel = getAspectManager().preCreate( model ); | |||||
| taskModel = prepareAspects( taskModel ); | |||||
| final String taskName = taskModel.getName(); | |||||
| debug( "creating.notice", taskName ); | |||||
| final Task task = createTask( taskName, frame ); | |||||
| getAspectManager().postCreate( task ); | |||||
| debug( "logger.notice", taskName ); | |||||
| final Logger logger = frame.getLogger(); | |||||
| getAspectManager().preLogEnabled( logger ); | |||||
| doLogEnabled( task, taskModel, logger ); | |||||
| debug( "contextualizing.notice", taskName ); | |||||
| doContextualize( task, taskModel, frame.getContext() ); | |||||
| debug( "configuring.notice", taskName ); | |||||
| getAspectManager().preConfigure( taskModel ); | |||||
| doConfigure( task, taskModel, frame.getContext() ); | |||||
| debug( "executing.notice", taskName ); | |||||
| getAspectManager().preExecute(); | |||||
| doExecute( taskModel, task ); | |||||
| getAspectManager().preDestroy(); | |||||
| try | |||||
| { | |||||
| Configuration taskModel = getAspectManager().preCreate( model ); | |||||
| taskModel = prepareAspects( taskModel ); | |||||
| final String taskName = taskModel.getName(); | |||||
| debug( "creating.notice", taskName ); | |||||
| final Task task = doCreateTask( taskName, frame ); | |||||
| getAspectManager().postCreate( task ); | |||||
| debug( "logger.notice", taskName ); | |||||
| final Logger logger = frame.getLogger(); | |||||
| getAspectManager().preLogEnabled( logger ); | |||||
| doLogEnabled( task, taskModel, logger ); | |||||
| debug( "contextualizing.notice", taskName ); | |||||
| doContextualize( task, taskModel, frame.getContext() ); | |||||
| debug( "configuring.notice", taskName ); | |||||
| getAspectManager().preConfigure( taskModel ); | |||||
| doConfigure( task, taskModel, frame.getContext() ); | |||||
| debug( "executing.notice", taskName ); | |||||
| getAspectManager().preExecute(); | |||||
| doExecute( taskModel, task ); | |||||
| getAspectManager().preDestroy(); | |||||
| } | |||||
| catch( Exception e ) | |||||
| { | |||||
| // Wrap in generic error message | |||||
| final String message = REZ.getString( "execute.error", | |||||
| model.getName(), | |||||
| model.getLocation() ); | |||||
| throw new TaskException( message, e ); | |||||
| } | |||||
| } | } | ||||
| protected void doExecute( final Configuration taskModel, final Task task ) | protected void doExecute( final Configuration taskModel, final Task task ) | ||||
| @@ -10,6 +10,7 @@ package org.apache.myrmidon.components.executor; | |||||
| import org.apache.avalon.excalibur.i18n.ResourceManager; | import org.apache.avalon.excalibur.i18n.ResourceManager; | ||||
| import org.apache.avalon.excalibur.i18n.Resources; | import org.apache.avalon.excalibur.i18n.Resources; | ||||
| import org.apache.avalon.framework.configuration.Configuration; | import org.apache.avalon.framework.configuration.Configuration; | ||||
| import org.apache.avalon.framework.configuration.ConfigurationException; | |||||
| import org.apache.avalon.framework.logger.AbstractLogEnabled; | import org.apache.avalon.framework.logger.AbstractLogEnabled; | ||||
| import org.apache.avalon.framework.logger.LogEnabled; | import org.apache.avalon.framework.logger.LogEnabled; | ||||
| import org.apache.avalon.framework.logger.Logger; | import org.apache.avalon.framework.logger.Logger; | ||||
| @@ -52,24 +53,36 @@ public class DefaultExecutor | |||||
| m_configurer = (Configurer)serviceManager.lookup( Configurer.ROLE ); | m_configurer = (Configurer)serviceManager.lookup( Configurer.ROLE ); | ||||
| } | } | ||||
| /** | |||||
| * Executes a task. | |||||
| */ | |||||
| public void execute( final Configuration taskModel, final ExecutionFrame frame ) | public void execute( final Configuration taskModel, final ExecutionFrame frame ) | ||||
| throws TaskException | throws TaskException | ||||
| { | { | ||||
| final String taskName = taskModel.getName(); | final String taskName = taskModel.getName(); | ||||
| debug( "creating.notice", taskName ); | |||||
| final Task task = createTask( taskName, frame ); | |||||
| try | |||||
| { | |||||
| debug( "creating.notice", taskName ); | |||||
| final Task task = doCreateTask( taskName, frame ); | |||||
| debug( "logger.notice", taskName ); | |||||
| doLogEnabled( task, taskModel, frame.getLogger() ); | |||||
| debug( "logger.notice", taskName ); | |||||
| doLogEnabled( task, taskModel, frame.getLogger() ); | |||||
| debug( "contextualizing.notice", taskName ); | |||||
| doContextualize( task, taskModel, frame.getContext() ); | |||||
| debug( "contextualizing.notice", taskName ); | |||||
| doContextualize( task, taskModel, frame.getContext() ); | |||||
| debug( "configuring.notice", taskName ); | |||||
| doConfigure( task, taskModel, frame.getContext() ); | |||||
| debug( "configuring.notice", taskName ); | |||||
| doConfigure( task, taskModel, frame.getContext() ); | |||||
| debug( "executing.notice", taskName ); | |||||
| task.execute(); | |||||
| debug( "executing.notice", taskName ); | |||||
| task.execute(); | |||||
| } | |||||
| catch( Exception e ) | |||||
| { | |||||
| // Wrap in generic error message | |||||
| final String message = REZ.getString( "execute.error", taskName, taskModel.getLocation() ); | |||||
| throw new TaskException( message, e ); | |||||
| } | |||||
| } | } | ||||
| protected final void debug( final String key, final String taskName ) | protected final void debug( final String key, final String taskName ) | ||||
| @@ -84,7 +97,7 @@ public class DefaultExecutor | |||||
| /** | /** | ||||
| * Creates a task instance. | * Creates a task instance. | ||||
| */ | */ | ||||
| protected final Task createTask( final String name, final ExecutionFrame frame ) | |||||
| protected final Task doCreateTask( final String name, final ExecutionFrame frame ) | |||||
| throws TaskException | throws TaskException | ||||
| { | { | ||||
| try | try | ||||
| @@ -94,7 +107,7 @@ public class DefaultExecutor | |||||
| } | } | ||||
| catch( final TypeException te ) | catch( final TypeException te ) | ||||
| { | { | ||||
| final String message = REZ.getString( "no-create.error", name ); | |||||
| final String message = REZ.getString( "create.error", name ); | |||||
| throw new TaskException( message, te ); | throw new TaskException( message, te ); | ||||
| } | } | ||||
| } | } | ||||
| @@ -105,20 +118,9 @@ public class DefaultExecutor | |||||
| protected final void doConfigure( final Task task, | protected final void doConfigure( final Task task, | ||||
| final Configuration taskModel, | final Configuration taskModel, | ||||
| final TaskContext taskContext ) | final TaskContext taskContext ) | ||||
| throws TaskException | |||||
| throws ConfigurationException | |||||
| { | { | ||||
| try | |||||
| { | |||||
| m_configurer.configure( task, taskModel, taskContext ); | |||||
| } | |||||
| catch( final Throwable throwable ) | |||||
| { | |||||
| final String message = | |||||
| REZ.getString( "config.error", | |||||
| taskModel.getName(), | |||||
| taskModel.getLocation() ); | |||||
| throw new TaskException( message, throwable ); | |||||
| } | |||||
| m_configurer.configure( task, taskModel, taskContext ); | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -136,9 +138,7 @@ public class DefaultExecutor | |||||
| catch( final Throwable throwable ) | catch( final Throwable throwable ) | ||||
| { | { | ||||
| final String message = | final String message = | ||||
| REZ.getString( "contextualize.error", | |||||
| taskModel.getName(), | |||||
| taskModel.getLocation() ); | |||||
| REZ.getString( "contextualize.error", taskModel.getName() ); | |||||
| throw new TaskException( message, throwable ); | throw new TaskException( message, throwable ); | ||||
| } | } | ||||
| } | } | ||||
| @@ -160,9 +160,7 @@ public class DefaultExecutor | |||||
| catch( final Throwable throwable ) | catch( final Throwable throwable ) | ||||
| { | { | ||||
| final String message = | final String message = | ||||
| REZ.getString( "logger.error", | |||||
| taskModel.getName(), | |||||
| taskModel.getLocation() ); | |||||
| REZ.getString( "logger.error", taskModel.getName() ); | |||||
| throw new TaskException( message, throwable ); | throw new TaskException( message, throwable ); | ||||
| } | } | ||||
| } | } | ||||
| @@ -4,10 +4,10 @@ contextualizing.notice=Contextualizing {0}. | |||||
| configuring.notice=Configuring {0}. | configuring.notice=Configuring {0}. | ||||
| executing.notice=Executing {0}. | executing.notice=Executing {0}. | ||||
| no-create.error=Could not create task "{0}". | |||||
| config.error={1}: Could not configure task "{0}". | |||||
| contextualize.error={1}: Could not set the context for task "{0}". | |||||
| logger.error={1}: Could not set the logger for task "{0}". | |||||
| create.error=Could not create task <{0}>. | |||||
| contextualize.error=Could not set the context for task <{0}>. | |||||
| logger.error=Could not set the logger for task <{0}>. | |||||
| execute.error={1}: Could not execute task <{0}>. | |||||
| unused-settings.error=Unused aspect settings for namespace {0} (parameterCount={1} elementCount={2}). | unused-settings.error=Unused aspect settings for namespace {0} (parameterCount={1} elementCount={2}). | ||||
| dispatch-settings.notice=Dispatching Aspect Settings to namespace {0} (parameterCount={1} elementCount={2}). | dispatch-settings.notice=Dispatching Aspect Settings to namespace {0} (parameterCount={1} elementCount={2}). | ||||
| @@ -18,6 +18,7 @@ import org.apache.avalon.excalibur.cli.CLOptionDescriptor; | |||||
| import org.apache.avalon.excalibur.cli.CLUtil; | import org.apache.avalon.excalibur.cli.CLUtil; | ||||
| import org.apache.avalon.excalibur.i18n.ResourceManager; | import org.apache.avalon.excalibur.i18n.ResourceManager; | ||||
| import org.apache.avalon.excalibur.i18n.Resources; | import org.apache.avalon.excalibur.i18n.Resources; | ||||
| import org.apache.avalon.framework.CascadingException; | |||||
| import org.apache.avalon.framework.ExceptionUtil; | import org.apache.avalon.framework.ExceptionUtil; | ||||
| import org.apache.avalon.framework.logger.AbstractLogEnabled; | import org.apache.avalon.framework.logger.AbstractLogEnabled; | ||||
| import org.apache.avalon.framework.logger.LogKitLogger; | import org.apache.avalon.framework.logger.LogKitLogger; | ||||
| @@ -105,6 +106,9 @@ public class CLIMain | |||||
| ///Determine whether tasks are actually executed | ///Determine whether tasks are actually executed | ||||
| private boolean m_dryRun = false; | private boolean m_dryRun = false; | ||||
| ///Log level to use | |||||
| private static Priority m_priority = Priority.WARN; | |||||
| /** | /** | ||||
| * Main entry point called to run standard Myrmidon. | * Main entry point called to run standard Myrmidon. | ||||
| * | * | ||||
| @@ -120,9 +124,7 @@ public class CLIMain | |||||
| } | } | ||||
| catch( final Throwable throwable ) | catch( final Throwable throwable ) | ||||
| { | { | ||||
| final String message = | |||||
| REZ.getString( "error-message", ExceptionUtil.printStackTrace( throwable ) ); | |||||
| System.err.println( message ); | |||||
| main.reportError( throwable ); | |||||
| exitCode = -1; | exitCode = -1; | ||||
| } | } | ||||
| finally | finally | ||||
| @@ -219,6 +221,7 @@ public class CLIMain | |||||
| } | } | ||||
| private boolean parseCommandLineOptions( final String[] args ) | private boolean parseCommandLineOptions( final String[] args ) | ||||
| throws Exception | |||||
| { | { | ||||
| final CLOptionDescriptor[] options = createCLOptions(); | final CLOptionDescriptor[] options = createCLOptions(); | ||||
| final CLArgsParser parser = new CLArgsParser( args, options ); | final CLArgsParser parser = new CLArgsParser( args, options ); | ||||
| @@ -226,8 +229,7 @@ public class CLIMain | |||||
| if( null != parser.getErrorString() ) | if( null != parser.getErrorString() ) | ||||
| { | { | ||||
| final String message = REZ.getString( "error-message", parser.getErrorString() ); | final String message = REZ.getString( "error-message", parser.getErrorString() ); | ||||
| System.err.println( message ); | |||||
| return false; | |||||
| throw new Exception( message ); | |||||
| } | } | ||||
| final List clOptions = parser.getArguments(); | final List clOptions = parser.getArguments(); | ||||
| @@ -254,13 +256,13 @@ public class CLIMain | |||||
| break; | break; | ||||
| case LOG_LEVEL_OPT: | case LOG_LEVEL_OPT: | ||||
| m_parameters.setParameter( "log.level", option.getArgument() ); | |||||
| m_priority = mapLogLevel( option.getArgument() ); | |||||
| break; | break; | ||||
| case VERBOSE_OPT: | case VERBOSE_OPT: | ||||
| m_parameters.setParameter( "log.level", "INFO" ); | |||||
| m_priority = Priority.INFO; | |||||
| break; | break; | ||||
| case QUIET_OPT: | case QUIET_OPT: | ||||
| m_parameters.setParameter( "log.level", "ERROR" ); | |||||
| m_priority = Priority.ERROR; | |||||
| break; | break; | ||||
| case INCREMENTAL_OPT: | case INCREMENTAL_OPT: | ||||
| @@ -322,7 +324,7 @@ public class CLIMain | |||||
| prepareLogging(); | prepareLogging(); | ||||
| final File homeDir = getHomeDir(); | |||||
| checkHomeDir(); | |||||
| final File buildFile = getBuildFile(); | final File buildFile = getBuildFile(); | ||||
| //getLogger().debug( "Ant Bin Directory: " + m_binDir ); | //getLogger().debug( "Ant Bin Directory: " + m_binDir ); | ||||
| @@ -336,24 +338,35 @@ public class CLIMain | |||||
| } | } | ||||
| final Embeddor embeddor = prepareEmbeddor(); | final Embeddor embeddor = prepareEmbeddor(); | ||||
| final ProjectListener listener = prepareListener( embeddor ); | |||||
| //create the project | |||||
| final Project project = | |||||
| embeddor.createProject( buildFile.toString(), null, m_builderParameters ); | |||||
| try | |||||
| { | |||||
| final ProjectListener listener = prepareListener( embeddor ); | |||||
| //loop over build if we are in incremental mode.. | |||||
| final boolean incremental = m_parameters.getParameterAsBoolean( "incremental", false ); | |||||
| if( !incremental ) | |||||
| //create the project | |||||
| final Project project = | |||||
| embeddor.createProject( buildFile.toString(), null, m_builderParameters ); | |||||
| //loop over build if we are in incremental mode.. | |||||
| final boolean incremental = m_parameters.getParameterAsBoolean( "incremental", false ); | |||||
| if( !incremental ) | |||||
| { | |||||
| executeBuild( embeddor, project, listener ); | |||||
| } | |||||
| else | |||||
| { | |||||
| executeIncrementalBuild( embeddor, project, listener ); | |||||
| } | |||||
| } | |||||
| catch( final Exception e ) | |||||
| { | { | ||||
| executeBuild( embeddor, project, listener ); | |||||
| final String message = REZ.getString( "build-failed.error" ); | |||||
| throw new CascadingException( message, e ); | |||||
| } | } | ||||
| else | |||||
| finally | |||||
| { | { | ||||
| executeIncrementalBuild( embeddor, project, listener ); | |||||
| shutdownEmbeddor( embeddor ); | |||||
| } | } | ||||
| shutdownEmbeddor( embeddor ); | |||||
| } | } | ||||
| private void executeIncrementalBuild( final Embeddor embeddor, | private void executeIncrementalBuild( final Embeddor embeddor, | ||||
| @@ -365,7 +378,14 @@ public class CLIMain | |||||
| while( true ) | while( true ) | ||||
| { | { | ||||
| executeBuild( embeddor, project, listener ); | |||||
| try | |||||
| { | |||||
| executeBuild( embeddor, project, listener ); | |||||
| } | |||||
| catch( final TaskException te ) | |||||
| { | |||||
| reportError( te ); | |||||
| } | |||||
| final String message = REZ.getString( "repeat.notice" ); | final String message = REZ.getString( "repeat.notice" ); | ||||
| System.out.println( message ); | System.out.println( message ); | ||||
| @@ -385,6 +405,44 @@ public class CLIMain | |||||
| } | } | ||||
| } | } | ||||
| /** | |||||
| * Builds the error message for an exception | |||||
| */ | |||||
| private void reportError( final Throwable throwable ) | |||||
| { | |||||
| // Build the message | |||||
| final String message; | |||||
| if( m_priority.isLowerOrEqual( Priority.INFO ) ) | |||||
| { | |||||
| // Verbose mode - include the stack traces | |||||
| message = ExceptionUtil.printStackTrace( throwable, 5, true, true ); | |||||
| } | |||||
| else | |||||
| { | |||||
| // Build the message | |||||
| final StringBuffer buffer = new StringBuffer(); | |||||
| buffer.append( throwable.getMessage() ); | |||||
| for( Throwable current = ExceptionUtil.getCause( throwable, true ); | |||||
| current != null; | |||||
| current = ExceptionUtil.getCause( current, true ) ) | |||||
| { | |||||
| final String causeMessage = REZ.getString( "cause.error", current.getMessage() ); | |||||
| buffer.append( causeMessage ); | |||||
| } | |||||
| message = buffer.toString(); | |||||
| } | |||||
| // Write the message out | |||||
| if( getLogger() == null ) | |||||
| { | |||||
| System.err.println( message ); | |||||
| } | |||||
| else | |||||
| { | |||||
| getLogger().error( message ); | |||||
| } | |||||
| } | |||||
| private void executeBuild( final Embeddor embeddor, | private void executeBuild( final Embeddor embeddor, | ||||
| final Project project, | final Project project, | ||||
| final ProjectListener listener ) | final ProjectListener listener ) | ||||
| @@ -416,9 +474,9 @@ public class CLIMain | |||||
| return buildFile; | return buildFile; | ||||
| } | } | ||||
| private File getHomeDir() throws Exception | |||||
| private void checkHomeDir() throws Exception | |||||
| { | { | ||||
| final String home = m_parameters.getParameter( "myrmidon.home", null ); | |||||
| final String home = m_parameters.getParameter( "myrmidon.home" ); | |||||
| final File homeDir = ( new File( home ) ).getAbsoluteFile(); | final File homeDir = ( new File( home ) ).getAbsoluteFile(); | ||||
| if( !homeDir.isDirectory() ) | if( !homeDir.isDirectory() ) | ||||
| { | { | ||||
| @@ -431,15 +489,12 @@ public class CLIMain | |||||
| final String message = REZ.getString( "homedir.notice", homeDir ); | final String message = REZ.getString( "homedir.notice", homeDir ); | ||||
| getLogger().info( message ); | getLogger().info( message ); | ||||
| } | } | ||||
| return homeDir; | |||||
| } | } | ||||
| private void prepareLogging() throws Exception | private void prepareLogging() throws Exception | ||||
| { | { | ||||
| //handle logging... | //handle logging... | ||||
| final String logLevel = m_parameters.getParameter( "log.level", null ); | |||||
| enableLogging( new LogKitLogger( createLogger( logLevel ) ) ); | |||||
| enableLogging( new LogKitLogger( createLogger( m_priority ) ) ); | |||||
| } | } | ||||
| private void shutdownEmbeddor( final Embeddor embeddor ) | private void shutdownEmbeddor( final Embeddor embeddor ) | ||||
| @@ -486,51 +541,49 @@ public class CLIMain | |||||
| private void doBuild( final Workspace workspace, | private void doBuild( final Workspace workspace, | ||||
| final Project project, | final Project project, | ||||
| final ArrayList targets ) | final ArrayList targets ) | ||||
| throws TaskException | |||||
| { | { | ||||
| try | |||||
| { | |||||
| final int targetCount = targets.size(); | |||||
| final int targetCount = targets.size(); | |||||
| //if we didn't specify a target on CLI then choose default | |||||
| if( 0 == targetCount ) | |||||
| { | |||||
| workspace.executeProject( project, project.getDefaultTargetName() ); | |||||
| } | |||||
| else | |||||
| { | |||||
| for( int i = 0; i < targetCount; i++ ) | |||||
| { | |||||
| workspace.executeProject( project, (String)targets.get( i ) ); | |||||
| } | |||||
| } | |||||
| //if we didn't specify a target on CLI then choose default | |||||
| if( 0 == targetCount ) | |||||
| { | |||||
| workspace.executeProject( project, project.getDefaultTargetName() ); | |||||
| } | } | ||||
| catch( final TaskException ae ) | |||||
| else | |||||
| { | { | ||||
| final String message = | |||||
| REZ.getString( "build-failed.error", ExceptionUtil.printStackTrace( ae, 5, true ) ); | |||||
| getLogger().error( message ); | |||||
| for( int i = 0; i < targetCount; i++ ) | |||||
| { | |||||
| workspace.executeProject( project, (String)targets.get( i ) ); | |||||
| } | |||||
| } | } | ||||
| } | } | ||||
| /** | /** | ||||
| * Create Logger of appropriate log-level. | |||||
| * | |||||
| * @param logLevel the log-level | |||||
| * @return the logger | |||||
| * @exception Exception if an error occurs | |||||
| * Sets the log level. | |||||
| */ | */ | ||||
| private Logger createLogger( final String logLevel ) | |||||
| throws Exception | |||||
| private Priority mapLogLevel( final String logLevel ) throws Exception | |||||
| { | { | ||||
| final String logLevelCapitalized = logLevel.toUpperCase(); | final String logLevelCapitalized = logLevel.toUpperCase(); | ||||
| final Priority priority = Priority.getPriorityForName( logLevelCapitalized ); | final Priority priority = Priority.getPriorityForName( logLevelCapitalized ); | ||||
| if( !priority.getName().equals( logLevelCapitalized ) ) | if( !priority.getName().equals( logLevelCapitalized ) ) | ||||
| { | { | ||||
| final String message = REZ.getString( "bad-loglevel.error", logLevel ); | final String message = REZ.getString( "bad-loglevel.error", logLevel ); | ||||
| throw new Exception( message ); | throw new Exception( message ); | ||||
| } | } | ||||
| return priority; | |||||
| } | |||||
| /** | |||||
| * Create Logger of appropriate log-level. | |||||
| * | |||||
| * @param priority the log-level | |||||
| * @return the logger | |||||
| * @exception Exception if an error occurs | |||||
| */ | |||||
| private Logger createLogger( final Priority priority ) | |||||
| throws Exception | |||||
| { | |||||
| final Logger logger = Hierarchy.getDefaultHierarchy().getLoggerFor( "myrmidon" ); | final Logger logger = Hierarchy.getDefaultHierarchy().getLoggerFor( "myrmidon" ); | ||||
| final PatternFormatter formatter = new PatternFormatter( PATTERN ); | final PatternFormatter formatter = new PatternFormatter( PATTERN ); | ||||
| @@ -18,7 +18,8 @@ dry-run.opt=Do not execute tasks - just print them out. | |||||
| home-not-dir.error=myrmidon-home ({0}) is not a directory. | home-not-dir.error=myrmidon-home ({0}) is not a directory. | ||||
| bad-file.error=File {0} is not a file or doesn't exist. | bad-file.error=File {0} is not a file or doesn't exist. | ||||
| bad-loglevel.error=Unknown log level - {0}. | bad-loglevel.error=Unknown log level - {0}. | ||||
| build-failed.error=BUILD FAILED\nReason:\n{0} | |||||
| build-failed.error=BUILD FAILED. | |||||
| cause.error=\nReason: {0} | |||||
| repeat.notice=Continue ? (Enter no to stop) | repeat.notice=Continue ? (Enter no to stop) | ||||
| @@ -83,11 +83,14 @@ public class IfTest | |||||
| final File projectFile = getTestResource( "if.ant" ); | final File projectFile = getTestResource( "if.ant" ); | ||||
| // Check for missing condition | // Check for missing condition | ||||
| String message = REZ.getString( "if.no-condition.error" ); | |||||
| executeTargetExpectError( projectFile, "no-condition", message ); | |||||
| String[] messages = { | |||||
| null, | |||||
| REZ.getString( "if.no-condition.error" ) | |||||
| }; | |||||
| executeTargetExpectError( projectFile, "no-condition", messages ); | |||||
| // Check for too many conditions | // Check for too many conditions | ||||
| String[] messages = | |||||
| messages = new String[] | |||||
| { | { | ||||
| null, | null, | ||||
| null, | null, | ||||
| @@ -64,21 +64,31 @@ public class PropertyTest | |||||
| final File projectFile = getTestResource( "property.ant" ); | final File projectFile = getTestResource( "property.ant" ); | ||||
| // Missing name | // Missing name | ||||
| String message = REZ.getString( "property.no-name.error" ); | |||||
| executeTargetExpectError( projectFile, "missing-name", message ); | |||||
| String[] messages = | |||||
| { | |||||
| null, | |||||
| REZ.getString( "property.no-name.error" ) | |||||
| }; | |||||
| executeTargetExpectError( projectFile, "missing-name", messages ); | |||||
| // Missing value | // Missing value | ||||
| message = REZ.getString( "property.no-value.error" ); | |||||
| executeTargetExpectError( projectFile, "missing-value", message ); | |||||
| messages = new String[] | |||||
| { | |||||
| null, | |||||
| REZ.getString( "property.no-value.error" ) | |||||
| }; | |||||
| executeTargetExpectError( projectFile, "missing-value", messages ); | |||||
| // Too many values | // Too many values | ||||
| String[] messages = { | |||||
| messages = new String[] | |||||
| { | |||||
| null, | null, | ||||
| null, | null, | ||||
| REZ.getString( "property.multi-set.error" ) | REZ.getString( "property.multi-set.error" ) | ||||
| }; | }; | ||||
| executeTargetExpectError( projectFile, "too-many-values1", messages ); | executeTargetExpectError( projectFile, "too-many-values1", messages ); | ||||
| executeTargetExpectError( projectFile, "too-many-values2", messages ); | executeTargetExpectError( projectFile, "too-many-values2", messages ); | ||||
| executeTargetExpectError( projectFile, "too-many-values3", messages ); | |||||
| } | } | ||||
| } | } | ||||
| @@ -83,11 +83,14 @@ public class IfTest | |||||
| final File projectFile = getTestResource( "if.ant" ); | final File projectFile = getTestResource( "if.ant" ); | ||||
| // Check for missing condition | // Check for missing condition | ||||
| String message = REZ.getString( "if.no-condition.error" ); | |||||
| executeTargetExpectError( projectFile, "no-condition", message ); | |||||
| String[] messages = { | |||||
| null, | |||||
| REZ.getString( "if.no-condition.error" ) | |||||
| }; | |||||
| executeTargetExpectError( projectFile, "no-condition", messages ); | |||||
| // Check for too many conditions | // Check for too many conditions | ||||
| String[] messages = | |||||
| messages = new String[] | |||||
| { | { | ||||
| null, | null, | ||||
| null, | null, | ||||
| @@ -64,21 +64,31 @@ public class PropertyTest | |||||
| final File projectFile = getTestResource( "property.ant" ); | final File projectFile = getTestResource( "property.ant" ); | ||||
| // Missing name | // Missing name | ||||
| String message = REZ.getString( "property.no-name.error" ); | |||||
| executeTargetExpectError( projectFile, "missing-name", message ); | |||||
| String[] messages = | |||||
| { | |||||
| null, | |||||
| REZ.getString( "property.no-name.error" ) | |||||
| }; | |||||
| executeTargetExpectError( projectFile, "missing-name", messages ); | |||||
| // Missing value | // Missing value | ||||
| message = REZ.getString( "property.no-value.error" ); | |||||
| executeTargetExpectError( projectFile, "missing-value", message ); | |||||
| messages = new String[] | |||||
| { | |||||
| null, | |||||
| REZ.getString( "property.no-value.error" ) | |||||
| }; | |||||
| executeTargetExpectError( projectFile, "missing-value", messages ); | |||||
| // Too many values | // Too many values | ||||
| String[] messages = { | |||||
| messages = new String[] | |||||
| { | |||||
| null, | null, | ||||
| null, | null, | ||||
| REZ.getString( "property.multi-set.error" ) | REZ.getString( "property.multi-set.error" ) | ||||
| }; | }; | ||||
| executeTargetExpectError( projectFile, "too-many-values1", messages ); | executeTargetExpectError( projectFile, "too-many-values1", messages ); | ||||
| executeTargetExpectError( projectFile, "too-many-values2", messages ); | executeTargetExpectError( projectFile, "too-many-values2", messages ); | ||||
| executeTargetExpectError( projectFile, "too-many-values3", messages ); | |||||
| } | } | ||||
| } | } | ||||