76 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package function;
 | |
| 
 | |
| import static org.junit.Assert.*;
 | |
| import static sexpression.Nil.NIL;
 | |
| import static testutil.TestUtilities.assertSExpressionsMatch;
 | |
| 
 | |
| import org.junit.Test;
 | |
| 
 | |
| import error.ErrorManager;
 | |
| import function.ArgumentValidator.*;
 | |
| import function.UserDefinedFunction.IllegalKeywordRestPositionException;
 | |
| import sexpression.*;
 | |
| 
 | |
| public class UserDefinedFunctionTest {
 | |
| 
 | |
|     private static final String FUNCTION_NAME = "TEST";
 | |
| 
 | |
|     private UserDefinedFunction createNoArgumentFunctionThatReturnsNil() {
 | |
|         return new UserDefinedFunction(FUNCTION_NAME, NIL, new Cons(NIL, NIL));
 | |
|     }
 | |
| 
 | |
|     private UserDefinedFunction createOneArgumentFunctionThatReturnsArgument() {
 | |
|         return new UserDefinedFunction(FUNCTION_NAME, new Cons(new Symbol("X"), NIL), new Cons(new Symbol("X"), NIL));
 | |
|     }
 | |
| 
 | |
|     @Test
 | |
|     public void nilFunctionCall() {
 | |
|         UserDefinedFunction function = createNoArgumentFunctionThatReturnsNil();
 | |
| 
 | |
|         assertEquals(NIL, function.call(NIL));
 | |
|     }
 | |
| 
 | |
|     @Test
 | |
|     public void nilFunctionToString() {
 | |
|         UserDefinedFunction function = createNoArgumentFunctionThatReturnsNil();
 | |
|         Cons expected = new Cons(new Symbol(FUNCTION_NAME), new Cons(NIL, new Cons(NIL, NIL)));
 | |
| 
 | |
|         assertSExpressionsMatch(expected, function.getLambdaExpression());
 | |
|     }
 | |
| 
 | |
|     @Test
 | |
|     public void oneArgumentFunction_ReturnsCorrectValue() {
 | |
|         UserDefinedFunction function = createOneArgumentFunctionThatReturnsArgument();
 | |
|         SExpression argument = new LispNumber("23");
 | |
|         Cons argumentList = new Cons(argument, NIL);
 | |
| 
 | |
|         assertSExpressionsMatch(argument, function.call(argumentList));
 | |
|     }
 | |
| 
 | |
|     @Test(expected = TooManyArgumentsException.class)
 | |
|     public void oneArgumentFunction_ThrowsExceptionWithTooManyArguments() {
 | |
|         UserDefinedFunction function = createOneArgumentFunctionThatReturnsArgument();
 | |
|         SExpression argument = new LispNumber("23");
 | |
|         Cons argumentList = new Cons(argument, new Cons(argument, NIL));
 | |
| 
 | |
|         function.call(argumentList);
 | |
|     }
 | |
| 
 | |
|     @Test(expected = TooFewArgumentsException.class)
 | |
|     public void oneArgumentFunction_ThrowsExceptionWithTooFewArguments() {
 | |
|         UserDefinedFunction function = createOneArgumentFunctionThatReturnsArgument();
 | |
| 
 | |
|         function.call(NIL);
 | |
|     }
 | |
| 
 | |
|     @Test
 | |
|     public void illegalKeywordRestPositionException_HasCorrectAttributes() {
 | |
|         IllegalKeywordRestPositionException e = new IllegalKeywordRestPositionException(FUNCTION_NAME, NIL);
 | |
| 
 | |
|         assertNotNull(e.getMessage());
 | |
|         assertTrue(e.getMessage().length() > 0);
 | |
|         assertEquals(ErrorManager.Severity.ERROR, e.getSeverity());
 | |
|     }
 | |
| 
 | |
| }
 |