Convert more tests to kotlin
This commit is contained in:
		
							parent
							
								
									ba6418a977
								
							
						
					
					
						commit
						1a6d888ca9
					
				@ -96,7 +96,6 @@ class LispMain constructor(var configuration: TerminalConfiguration = TerminalCo
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        val LANGUAGE_FILE_NAMES = arrayOf("functions.lisp", "dlambda.lisp")
 | 
					        val LANGUAGE_FILE_NAMES = arrayOf("functions.lisp", "dlambda.lisp")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        @JvmStatic
 | 
					 | 
				
			||||||
        fun main(arguments: Array<String>) {
 | 
					        fun main(arguments: Array<String>) {
 | 
				
			||||||
            val lispMain = LispMain()
 | 
					            val lispMain = LispMain()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -5,11 +5,8 @@ import sexpression.SExpression
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
abstract class LispFunction {
 | 
					abstract class LispFunction {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    open val isArgumentListEvaluated: Boolean
 | 
					    open val isArgumentListEvaluated = true
 | 
				
			||||||
        get() = true
 | 
					    open val isMacro = false
 | 
				
			||||||
 | 
					 | 
				
			||||||
    open val isMacro: Boolean
 | 
					 | 
				
			||||||
        get() = false
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    abstract fun call(argumentList: Cons): SExpression
 | 
					    abstract fun call(argumentList: Cons): SExpression
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -2,6 +2,5 @@ package function
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
abstract class LispSpecialFunction : LispFunction() {
 | 
					abstract class LispSpecialFunction : LispFunction() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    override val isArgumentListEvaluated: Boolean
 | 
					    override val isArgumentListEvaluated = false
 | 
				
			||||||
        get() = false
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -2,9 +2,9 @@ package function
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import sexpression.Cons
 | 
					import sexpression.Cons
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class UserDefinedMacro(name: String, lambdaList: Cons, body: Cons)
 | 
					class UserDefinedMacro(name: String,
 | 
				
			||||||
    : UserDefinedSpecialFunction(name, lambdaList, body) {
 | 
					                       lambdaList: Cons,
 | 
				
			||||||
 | 
					                       body: Cons) : UserDefinedSpecialFunction(name, lambdaList, body) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    override val isMacro: Boolean
 | 
					    override val isMacro = true
 | 
				
			||||||
        get() = true
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -2,9 +2,9 @@ package function
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import sexpression.Cons
 | 
					import sexpression.Cons
 | 
				
			||||||
 | 
					
 | 
				
			||||||
open class UserDefinedSpecialFunction(name: String, lambdaList: Cons, body: Cons)
 | 
					open class UserDefinedSpecialFunction(name: String,
 | 
				
			||||||
    : UserDefinedFunction(name, lambdaList, body) {
 | 
					                                      lambdaList: Cons,
 | 
				
			||||||
 | 
					                                      body: Cons) : UserDefinedFunction(name, lambdaList, body) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    override val isArgumentListEvaluated: Boolean
 | 
					    override val isArgumentListEvaluated = false
 | 
				
			||||||
        get() = false
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,23 +0,0 @@
 | 
				
			|||||||
package function;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import org.junit.Test;
 | 
					 | 
				
			||||||
import sexpression.Cons;
 | 
					 | 
				
			||||||
import sexpression.SExpression;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import static org.junit.Assert.assertTrue;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public class LispFunctionTest {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @Test
 | 
					 | 
				
			||||||
    public void evaluateArguments() {
 | 
					 | 
				
			||||||
        LispFunction lispFunction = new LispFunction() {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            @Override
 | 
					 | 
				
			||||||
            public SExpression call(Cons argumentList) {
 | 
					 | 
				
			||||||
                return null;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        assertTrue(lispFunction.isArgumentListEvaluated());
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
							
								
								
									
										18
									
								
								src/test/kotlin/function/LispFunctionTest.kt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								src/test/kotlin/function/LispFunctionTest.kt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,18 @@
 | 
				
			|||||||
 | 
					package function
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.assertj.core.api.Assertions.assertThat
 | 
				
			||||||
 | 
					import org.junit.jupiter.api.Test
 | 
				
			||||||
 | 
					import sexpression.Cons
 | 
				
			||||||
 | 
					import sexpression.Nil
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class LispFunctionTest {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
 | 
					    fun `arguments are evaluated`() {
 | 
				
			||||||
 | 
					        val lispFunction = object : LispFunction() {
 | 
				
			||||||
 | 
					            override fun call(argumentList: Cons) = Nil
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        assertThat(lispFunction.isArgumentListEvaluated).isTrue()
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -1,23 +0,0 @@
 | 
				
			|||||||
package function;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import org.junit.Test;
 | 
					 | 
				
			||||||
import sexpression.Cons;
 | 
					 | 
				
			||||||
import sexpression.SExpression;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import static org.junit.Assert.assertFalse;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public class LispSpecialFunctionTest {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @Test
 | 
					 | 
				
			||||||
    public void evaluateArguments() {
 | 
					 | 
				
			||||||
        LispFunction lispFunction = new LispSpecialFunction() {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            @Override
 | 
					 | 
				
			||||||
            public SExpression call(Cons argumentList) {
 | 
					 | 
				
			||||||
                return null;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        assertFalse(lispFunction.isArgumentListEvaluated());
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
							
								
								
									
										18
									
								
								src/test/kotlin/function/LispSpecialFunctionTest.kt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								src/test/kotlin/function/LispSpecialFunctionTest.kt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,18 @@
 | 
				
			|||||||
 | 
					package function
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.assertj.core.api.Assertions.assertThat
 | 
				
			||||||
 | 
					import org.junit.jupiter.api.Test
 | 
				
			||||||
 | 
					import sexpression.Cons
 | 
				
			||||||
 | 
					import sexpression.Nil
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class LispSpecialFunctionTest {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
 | 
					    fun `arguments are not evaluated`() {
 | 
				
			||||||
 | 
					        val lispFunction = object : LispSpecialFunction() {
 | 
				
			||||||
 | 
					            override fun call(argumentList: Cons) = Nil
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        assertThat(lispFunction.isArgumentListEvaluated).isFalse()
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -1,83 +0,0 @@
 | 
				
			|||||||
package function;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import error.Severity;
 | 
					 | 
				
			||||||
import function.ArgumentValidator.TooFewArgumentsException;
 | 
					 | 
				
			||||||
import function.ArgumentValidator.TooManyArgumentsException;
 | 
					 | 
				
			||||||
import function.UserDefinedFunction.IllegalKeywordRestPositionException;
 | 
					 | 
				
			||||||
import org.junit.Test;
 | 
					 | 
				
			||||||
import sexpression.Cons;
 | 
					 | 
				
			||||||
import sexpression.LispNumber;
 | 
					 | 
				
			||||||
import sexpression.Nil;
 | 
					 | 
				
			||||||
import sexpression.SExpression;
 | 
					 | 
				
			||||||
import sexpression.Symbol;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import static org.junit.Assert.assertEquals;
 | 
					 | 
				
			||||||
import static org.junit.Assert.assertNotNull;
 | 
					 | 
				
			||||||
import static org.junit.Assert.assertTrue;
 | 
					 | 
				
			||||||
import static testutil.TestUtilities.assertSExpressionsMatch;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public class UserDefinedFunctionTest {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    private static final String FUNCTION_NAME = "TEST";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    private UserDefinedFunction createNoArgumentFunctionThatReturnsNil() {
 | 
					 | 
				
			||||||
        return new UserDefinedFunction(FUNCTION_NAME,
 | 
					 | 
				
			||||||
                                       Nil.INSTANCE, new Cons(Nil.INSTANCE, Nil.INSTANCE));
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    private UserDefinedFunction createOneArgumentFunctionThatReturnsArgument() {
 | 
					 | 
				
			||||||
        return new UserDefinedFunction(FUNCTION_NAME, new Cons(new Symbol("X"), Nil.INSTANCE), new Cons(new Symbol("X"),
 | 
					 | 
				
			||||||
                                                                                                        Nil.INSTANCE));
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @Test
 | 
					 | 
				
			||||||
    public void nilFunctionCall() {
 | 
					 | 
				
			||||||
        UserDefinedFunction function = createNoArgumentFunctionThatReturnsNil();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        assertEquals(Nil.INSTANCE, function.call(Nil.INSTANCE));
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @Test
 | 
					 | 
				
			||||||
    public void nilFunctionToString() {
 | 
					 | 
				
			||||||
        UserDefinedFunction function = createNoArgumentFunctionThatReturnsNil();
 | 
					 | 
				
			||||||
        Cons expected = new Cons(new Symbol(FUNCTION_NAME), new Cons(Nil.INSTANCE, new Cons(Nil.INSTANCE,
 | 
					 | 
				
			||||||
                                                                                            Nil.INSTANCE)));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        assertSExpressionsMatch(expected, function.getLambdaExpression());
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @Test
 | 
					 | 
				
			||||||
    public void oneArgumentFunction_ReturnsCorrectValue() {
 | 
					 | 
				
			||||||
        UserDefinedFunction function = createOneArgumentFunctionThatReturnsArgument();
 | 
					 | 
				
			||||||
        SExpression argument = new LispNumber("23");
 | 
					 | 
				
			||||||
        Cons argumentList = new Cons(argument, Nil.INSTANCE);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        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.INSTANCE));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        function.call(argumentList);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @Test(expected = TooFewArgumentsException.class)
 | 
					 | 
				
			||||||
    public void oneArgumentFunction_ThrowsExceptionWithTooFewArguments() {
 | 
					 | 
				
			||||||
        UserDefinedFunction function = createOneArgumentFunctionThatReturnsArgument();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        function.call(Nil.INSTANCE);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @Test
 | 
					 | 
				
			||||||
    public void illegalKeywordRestPositionException_HasCorrectAttributes() {
 | 
					 | 
				
			||||||
        IllegalKeywordRestPositionException e = new IllegalKeywordRestPositionException(FUNCTION_NAME,
 | 
					 | 
				
			||||||
                                                                                        Nil.INSTANCE);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        assertNotNull(e.getMessage());
 | 
					 | 
				
			||||||
        assertTrue(e.getMessage().length() > 0);
 | 
					 | 
				
			||||||
        assertEquals(Severity.ERROR, e.getSeverity());
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
							
								
								
									
										76
									
								
								src/test/kotlin/function/UserDefinedFunctionTest.kt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								src/test/kotlin/function/UserDefinedFunctionTest.kt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,76 @@
 | 
				
			|||||||
 | 
					package function
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import function.ArgumentValidator.TooFewArgumentsException
 | 
				
			||||||
 | 
					import function.ArgumentValidator.TooManyArgumentsException
 | 
				
			||||||
 | 
					import function.UserDefinedFunction.IllegalKeywordRestPositionException
 | 
				
			||||||
 | 
					import org.assertj.core.api.Assertions.assertThat
 | 
				
			||||||
 | 
					import org.junit.jupiter.api.Assertions.assertThrows
 | 
				
			||||||
 | 
					import org.junit.jupiter.api.Test
 | 
				
			||||||
 | 
					import sexpression.Cons
 | 
				
			||||||
 | 
					import sexpression.LispNumber
 | 
				
			||||||
 | 
					import sexpression.Nil
 | 
				
			||||||
 | 
					import sexpression.Symbol
 | 
				
			||||||
 | 
					import testutil.TestUtilities.assertIsErrorWithMessage
 | 
				
			||||||
 | 
					import testutil.TestUtilities.assertSExpressionsMatch
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class UserDefinedFunctionTest {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    companion object {
 | 
				
			||||||
 | 
					        private const val FUNCTION_NAME = "TEST"
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private fun createNoArgumentFunctionThatReturnsNil() =
 | 
				
			||||||
 | 
					        UserDefinedFunction(FUNCTION_NAME, Nil, Cons(Nil, Nil))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private fun createOneArgumentFunctionThatReturnsArgument() =
 | 
				
			||||||
 | 
					        UserDefinedFunction(FUNCTION_NAME, Cons(Symbol("X"), Nil), Cons(Symbol("X"), Nil))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
 | 
					    fun `call function that returns nil`() {
 | 
				
			||||||
 | 
					        val function = createNoArgumentFunctionThatReturnsNil()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        assertThat(function.call(Nil)).isEqualTo(Nil)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
 | 
					    fun `function has correct lambda expression`() {
 | 
				
			||||||
 | 
					        val function = createNoArgumentFunctionThatReturnsNil()
 | 
				
			||||||
 | 
					        val expected = Cons(Symbol(FUNCTION_NAME), Cons(Nil, Cons(Nil, Nil)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        assertSExpressionsMatch(expected, function.lambdaExpression)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
 | 
					    fun `function returns correct value`() {
 | 
				
			||||||
 | 
					        val function = createOneArgumentFunctionThatReturnsArgument()
 | 
				
			||||||
 | 
					        val argument = LispNumber("23")
 | 
				
			||||||
 | 
					        val argumentList = Cons(argument, Nil)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        assertSExpressionsMatch(argument, function.call(argumentList))
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
 | 
					    fun `function throws exception with too many arguments`() {
 | 
				
			||||||
 | 
					        val function = createOneArgumentFunctionThatReturnsArgument()
 | 
				
			||||||
 | 
					        val argument = LispNumber("23")
 | 
				
			||||||
 | 
					        val argumentList = Cons(argument, Cons(argument, Nil))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        assertThrows(TooManyArgumentsException::class.java) {
 | 
				
			||||||
 | 
					            function.call(argumentList)
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
 | 
					    fun `function throws exception with too few arguments`() {
 | 
				
			||||||
 | 
					        val function = createOneArgumentFunctionThatReturnsArgument()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        assertThrows(TooFewArgumentsException::class.java) {
 | 
				
			||||||
 | 
					            function.call(Nil)
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
 | 
					    fun `IllegalKeywordRestPositionException is cool`() {
 | 
				
			||||||
 | 
					        assertIsErrorWithMessage(IllegalKeywordRestPositionException(FUNCTION_NAME, Nil))
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user