// Path: driver/src/com/leandog/brazenhead/commands/Command.java
// public class Command {
// 
//     private String name;
//     private Object[] arguments;
//     private Target target;
//     private String variable;
// 
//     public enum Target {
//         LastResultOrRobotium, Robotium, Brazenhead,
//     }
// 
//     public Command() {
//         name = null;
//         arguments = new Object[0];
//         target = Target.LastResultOrRobotium;
//     }
// 
//     public Command(final String name) {
//         this();
//         this.name = name;
//     }
// 
//     public Command(final String name, final Object... arguments) {
//         this();
//         this.name = name;
//         this.arguments = arguments;
//     }
//     
//     public Command(final String name, final Target target, final Object... arguments) {
//         this();
//         this.name = name;
//         this.arguments = arguments;
//         setTarget(target);
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public Object[] getArguments() {
//         return arguments;
//     }
// 
//     public Target getTarget() {
//         return target;
//     }
// 
//     public String variableName() {
//         return variable;
//     }
// 
//     public void setVariable(final String variable) {
//         if( null != variable && !variable.matches("@@.*@@")) {
//             throw new IllegalVariableArgumentException();
//         }
//         this.variable = variable;
//     }
// 
//     public void setTarget(final Target target) {
//         if (target != null) {
//             this.target = target;
//         }
//     }
// 
//     public boolean hasVariable() {
//         return variable != null;
//     }
// 
//     public String getVariable() {
//         return variable;
//     }
// 
//     @Override
//     public int hashCode() {
//         return name.hashCode() + Arrays.hashCode(arguments);
//     }
// 
//     @Override
//     public boolean equals(Object other) {
//         if (null == other || !(other instanceof Command)) {
//             return false;
//         }
// 
//         final Command otherCommand = (Command) other;
//         return Objects.equal(name, otherCommand.getName()) && Arrays.equals(arguments, otherCommand.getArguments());
//     }
// }
// 
// Path: driver/src/com/leandog/brazenhead/exceptions/CommandNotFoundException.java
// public class CommandNotFoundException extends Exception {
// 
//     private static final long serialVersionUID = 1L;
// 
//     public CommandNotFoundException(final String methodName, final Class<?> targetClass, final Class<?>... arguments) {
//         super(missingCommandMessage(methodName, targetClass, arguments));
//     }
// 
//     public CommandNotFoundException(final Command command, final Object theTarget, final Class<?>... arguments) {
//         super(missingCommandMessage(command.getName(), theTarget.getClass(), arguments));
//     }
// 
//     private static String missingCommandMessage(final String methodName, final Class<?> targetClass, final Class<?>... arguments) {
//         return String.format("The %s%s method was not found on %s.",
//                 methodName,
//                 stringFor(arguments),
//                 targetClass.getName());
//     }
// 
//     private static String stringFor(Class<?>[] arguments) {
//         if (arguments.length == 0) {
//             return "()";
//         }
// 
//         final StringBuilder messageBuilder = new StringBuilder();
//         messageBuilder.append("(");
//         for (final Class<?> argumentType : arguments) {
//             messageBuilder.append(argumentType.getName() + ", ");
//         }
// 
//         messageBuilder.replace(last(messageBuilder, 2), last(messageBuilder, 0), ")");
//         return messageBuilder.toString();
//     }
// 
//     private static int last(final StringBuilder messageBuilder, int count) {
//         return messageBuilder.length() - count;
//     }
// }


import static org.junit.Assert.assertThat;
import static org.junit.matchers.JUnitMatchers.containsString;
import org.junit.Test;
import com.leandog.brazenhead.commands.Command;
import com.leandog.brazenhead.exceptions.CommandNotFoundException;
package com.leandog.brazenhead.exceptions;




public class CommandNotFoundExceptionTest {

    Command theCommand = new Command("theCommandMethod");

    @Test
    public void itIndicatedWhichMethodWasNotFound() {
// Path: driver/src/com/leandog/brazenhead/commands/Command.java
// public class Command {
// 
//     private String name;
//     private Object[] arguments;
//     private Target target;
//     private String variable;
// 
//     public enum Target {
//         LastResultOrRobotium, Robotium, Brazenhead,
//     }
// 
//     public Command() {
//         name = null;
//         arguments = new Object[0];
//         target = Target.LastResultOrRobotium;
//     }
// 
//     public Command(final String name) {
//         this();
//         this.name = name;
//     }
// 
//     public Command(final String name, final Object... arguments) {
//         this();
//         this.name = name;
//         this.arguments = arguments;
//     }
//     
//     public Command(final String name, final Target target, final Object... arguments) {
//         this();
//         this.name = name;
//         this.arguments = arguments;
//         setTarget(target);
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public Object[] getArguments() {
//         return arguments;
//     }
// 
//     public Target getTarget() {
//         return target;
//     }
// 
//     public String variableName() {
//         return variable;
//     }
// 
//     public void setVariable(final String variable) {
//         if( null != variable && !variable.matches("@@.*@@")) {
//             throw new IllegalVariableArgumentException();
//         }
//         this.variable = variable;
//     }
// 
//     public void setTarget(final Target target) {
//         if (target != null) {
//             this.target = target;
//         }
//     }
// 
//     public boolean hasVariable() {
//         return variable != null;
//     }
// 
//     public String getVariable() {
//         return variable;
//     }
// 
//     @Override
//     public int hashCode() {
//         return name.hashCode() + Arrays.hashCode(arguments);
//     }
// 
//     @Override
//     public boolean equals(Object other) {
//         if (null == other || !(other instanceof Command)) {
//             return false;
//         }
// 
//         final Command otherCommand = (Command) other;
//         return Objects.equal(name, otherCommand.getName()) && Arrays.equals(arguments, otherCommand.getArguments());
//     }
// }
// 
// Path: driver/src/com/leandog/brazenhead/exceptions/CommandNotFoundException.java
// public class CommandNotFoundException extends Exception {
// 
//     private static final long serialVersionUID = 1L;
// 
//     public CommandNotFoundException(final String methodName, final Class<?> targetClass, final Class<?>... arguments) {
//         super(missingCommandMessage(methodName, targetClass, arguments));
//     }
// 
//     public CommandNotFoundException(final Command command, final Object theTarget, final Class<?>... arguments) {
//         super(missingCommandMessage(command.getName(), theTarget.getClass(), arguments));
//     }
// 
//     private static String missingCommandMessage(final String methodName, final Class<?> targetClass, final Class<?>... arguments) {
//         return String.format("The %s%s method was not found on %s.",
//                 methodName,
//                 stringFor(arguments),
//                 targetClass.getName());
//     }
// 
//     private static String stringFor(Class<?>[] arguments) {
//         if (arguments.length == 0) {
//             return "()";
//         }
// 
//         final StringBuilder messageBuilder = new StringBuilder();
//         messageBuilder.append("(");
//         for (final Class<?> argumentType : arguments) {
//             messageBuilder.append(argumentType.getName() + ", ");
//         }
// 
//         messageBuilder.replace(last(messageBuilder, 2), last(messageBuilder, 0), ")");
//         return messageBuilder.toString();
//     }
// 
//     private static int last(final StringBuilder messageBuilder, int count) {
//         return messageBuilder.length() - count;
//     }
// }


// Path: units/src/com/leandog/brazenhead/exceptions/CommandNotFoundExceptionTest.java
import static org.junit.Assert.assertThat;
import static org.junit.matchers.JUnitMatchers.containsString;
import org.junit.Test;
import com.leandog.brazenhead.commands.Command;
import com.leandog.brazenhead.exceptions.CommandNotFoundException;

package com.leandog.brazenhead.exceptions;




public class CommandNotFoundExceptionTest {

    Command theCommand = new Command("theCommandMethod");

    @Test
    public void itIndicatedWhichMethodWasNotFound() {
        final CommandNotFoundException exception = new CommandNotFoundException(theCommand, "");