Convert argument validator tests to kotlin
This commit is contained in:
parent
1a6d888ca9
commit
ae48d9c2ca
|
@ -1,223 +0,0 @@
|
||||||
package function;
|
|
||||||
|
|
||||||
import function.ArgumentValidator.BadArgumentTypeException;
|
|
||||||
import function.ArgumentValidator.DottedArgumentListException;
|
|
||||||
import function.ArgumentValidator.TooFewArgumentsException;
|
|
||||||
import function.ArgumentValidator.TooManyArgumentsException;
|
|
||||||
import org.junit.Before;
|
|
||||||
import org.junit.Test;
|
|
||||||
import sexpression.Cons;
|
|
||||||
import sexpression.LispString;
|
|
||||||
import sexpression.Nil;
|
|
||||||
import sexpression.SExpression;
|
|
||||||
import sexpression.Symbol;
|
|
||||||
|
|
||||||
import static error.Severity.ERROR;
|
|
||||||
import static org.junit.Assert.assertEquals;
|
|
||||||
import static org.junit.Assert.assertNotNull;
|
|
||||||
import static org.junit.Assert.assertTrue;
|
|
||||||
|
|
||||||
public class ArgumentValidatorTest {
|
|
||||||
|
|
||||||
private ArgumentValidator validator;
|
|
||||||
|
|
||||||
private Cons makeArgumentListOfSize(int size) {
|
|
||||||
Cons argumentList = Nil.INSTANCE;
|
|
||||||
|
|
||||||
for (int i = 0; i < size; i++)
|
|
||||||
argumentList = new Cons(Nil.INSTANCE, argumentList);
|
|
||||||
|
|
||||||
return argumentList;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Before
|
|
||||||
public void setUp() {
|
|
||||||
validator = new ArgumentValidator("TEST");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void noConstraints_DoesNotThrowExceptionWithNoArguments() {
|
|
||||||
validator.validate(makeArgumentListOfSize(0));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void noConstraints_DoesNotThrowExceptionWithOneArgument() {
|
|
||||||
validator.validate(makeArgumentListOfSize(1));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void noConstraints_DoesNotThrowExceptionWithManyArguments() {
|
|
||||||
validator.validate(makeArgumentListOfSize(20));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test(expected = TooFewArgumentsException.class)
|
|
||||||
public void tooFewArgumentsWithMinimumSet_ThrowsException() {
|
|
||||||
validator.setMinimumNumberOfArguments(1);
|
|
||||||
validator.validate(makeArgumentListOfSize(0));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test(expected = TooManyArgumentsException.class)
|
|
||||||
public void tooManyArgumentsWithMaximumSet_ThrowsException() {
|
|
||||||
validator.setMaximumNumberOfArguments(1);
|
|
||||||
validator.validate(makeArgumentListOfSize(2));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void exactNumberOfArguments_DoesNotThrowException() {
|
|
||||||
validator.setExactNumberOfArguments(5);
|
|
||||||
validator.validate(makeArgumentListOfSize(5));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test(expected = TooFewArgumentsException.class)
|
|
||||||
public void tooFewArgumentsWithExactSet_ThrowsException() {
|
|
||||||
validator.setExactNumberOfArguments(3);
|
|
||||||
validator.validate(makeArgumentListOfSize(2));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test(expected = TooManyArgumentsException.class)
|
|
||||||
public void tooManyArgumentsWithExactSet_ThrowsException() {
|
|
||||||
validator.setExactNumberOfArguments(3);
|
|
||||||
validator.validate(makeArgumentListOfSize(4));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void tooManyArgumentsException_HasCorrectAttributes() {
|
|
||||||
TooManyArgumentsException e = new TooManyArgumentsException("TEST", Nil.INSTANCE);
|
|
||||||
|
|
||||||
assertEquals(ERROR, e.getSeverity());
|
|
||||||
assertNotNull(e.getMessage());
|
|
||||||
assertTrue(e.getMessage().length() > 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void tooFewArgumentsException_HasCorrectAttributes() {
|
|
||||||
TooFewArgumentsException e = new TooFewArgumentsException("TEST", Nil.INSTANCE);
|
|
||||||
|
|
||||||
assertEquals(ERROR, e.getSeverity());
|
|
||||||
assertNotNull(e.getMessage());
|
|
||||||
assertTrue(e.getMessage().length() > 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void badArgumentTypeException_HasCorrectAttributes() {
|
|
||||||
BadArgumentTypeException e = new BadArgumentTypeException("TEST", Nil.INSTANCE, SExpression.class);
|
|
||||||
|
|
||||||
assertEquals(ERROR, e.getSeverity());
|
|
||||||
assertNotNull(e.getMessage());
|
|
||||||
assertTrue(e.getMessage().length() > 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void correctArgumentType_DoesNotThrowException() {
|
|
||||||
validator.setEveryArgumentExpectedType(Nil.class);
|
|
||||||
validator.validate(makeArgumentListOfSize(1));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test(expected = BadArgumentTypeException.class)
|
|
||||||
public void badArgumentType_ThrowsException() {
|
|
||||||
validator.setEveryArgumentExpectedType(LispString.class);
|
|
||||||
validator.validate(makeArgumentListOfSize(1));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void correctFirstAndRestArgumentTypes_DoesNotThrowException() {
|
|
||||||
Cons argumentList = new Cons(Symbol.Companion.getT(), new Cons(Nil.INSTANCE, Nil.INSTANCE));
|
|
||||||
|
|
||||||
validator.setFirstArgumentExpectedType(Symbol.class);
|
|
||||||
validator.setTrailingArgumentExpectedType(Cons.class);
|
|
||||||
validator.validate(argumentList);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test(expected = BadArgumentTypeException.class)
|
|
||||||
public void badFirstArgumentType_ThrowsException() {
|
|
||||||
Cons argumentList = new Cons(Symbol.Companion.getT(), new Cons(Nil.INSTANCE, Nil.INSTANCE));
|
|
||||||
|
|
||||||
validator.setFirstArgumentExpectedType(Cons.class);
|
|
||||||
validator.setTrailingArgumentExpectedType(Cons.class);
|
|
||||||
validator.validate(argumentList);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test(expected = BadArgumentTypeException.class)
|
|
||||||
public void badTrailingArgumentType_ThrowsException() {
|
|
||||||
Cons argumentList = new Cons(Symbol.Companion.getT(), new Cons(Nil.INSTANCE, Nil.INSTANCE));
|
|
||||||
|
|
||||||
validator.setFirstArgumentExpectedType(Symbol.class);
|
|
||||||
validator.setTrailingArgumentExpectedType(Symbol.class);
|
|
||||||
validator.validate(argumentList);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void expectedTypeWithNoDisplayName_DoesNotCauseNPE() {
|
|
||||||
Cons argumentList = new Cons(Symbol.Companion.getT(), new Cons(Nil.INSTANCE, Nil.INSTANCE));
|
|
||||||
SExpression withoutDisplayName = new SExpression() {};
|
|
||||||
|
|
||||||
validator.setEveryArgumentExpectedType(withoutDisplayName.getClass());
|
|
||||||
|
|
||||||
try {
|
|
||||||
validator.validate(argumentList);
|
|
||||||
} catch (BadArgumentTypeException e) {
|
|
||||||
assertNotNull(e.getMessage());
|
|
||||||
assertTrue(e.getMessage().length() > 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test(expected = DottedArgumentListException.class)
|
|
||||||
public void givenDottedArgumentList_ThrowsException() {
|
|
||||||
Cons argumentList = new Cons(Symbol.Companion.getT(), Symbol.Companion.getT());
|
|
||||||
|
|
||||||
validator.validate(argumentList);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test(expected = DottedArgumentListException.class)
|
|
||||||
public void givenLargeDottedArgumentList_ThrowsException() {
|
|
||||||
Cons argumentList =
|
|
||||||
new Cons(Symbol.Companion.getT(), new Cons(Symbol.Companion.getT(), Symbol.Companion.getT()));
|
|
||||||
|
|
||||||
validator.validate(argumentList);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void dottedArgumentListException_HasCorrectAttributes() {
|
|
||||||
DottedArgumentListException e = new DottedArgumentListException("TEST", Nil.INSTANCE);
|
|
||||||
|
|
||||||
assertEquals(ERROR, e.getSeverity());
|
|
||||||
assertNotNull(e.getMessage());
|
|
||||||
assertTrue(e.getMessage().length() > 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void excludedFirstArgumentType_DoesNotAffectTrailingArguments() {
|
|
||||||
validator.setFirstArgumentExcludedType(Nil.class);
|
|
||||||
validator.validate(new Cons(Symbol.Companion.getT(), new Cons(Nil.INSTANCE, Nil.INSTANCE)));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void excludedTrailingArgumentType_DoesNotAffectFirstArgument() {
|
|
||||||
validator.setTrailingArgumentExcludedType(Nil.class);
|
|
||||||
validator.validate(new Cons(Nil.INSTANCE, new Cons(Symbol.Companion.getT(), Nil.INSTANCE)));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test(expected = BadArgumentTypeException.class)
|
|
||||||
public void excludedFirstArgumentType_ThrowsException() {
|
|
||||||
validator.setFirstArgumentExcludedType(Nil.class);
|
|
||||||
validator.validate(new Cons(Nil.INSTANCE, new Cons(Symbol.Companion.getT(), Nil.INSTANCE)));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test(expected = BadArgumentTypeException.class)
|
|
||||||
public void excludedTrailingArgumentType_ThrowsException() {
|
|
||||||
validator.setTrailingArgumentExcludedType(Nil.class);
|
|
||||||
validator.validate(new Cons(Symbol.Companion.getT(), new Cons(Nil.INSTANCE, Nil.INSTANCE)));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test(expected = BadArgumentTypeException.class)
|
|
||||||
public void excludedArgumentType_ThrowsExceptionOnFirstArgument() {
|
|
||||||
validator.setEveryArgumentExcludedType(Nil.class);
|
|
||||||
validator.validate(new Cons(Nil.INSTANCE, new Cons(Symbol.Companion.getT(), Nil.INSTANCE)));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test(expected = BadArgumentTypeException.class)
|
|
||||||
public void excludedArgumentType_ThrowsExceptionOnTrailingArgument() {
|
|
||||||
validator.setEveryArgumentExcludedType(Nil.class);
|
|
||||||
validator.validate(new Cons(Symbol.Companion.getT(), new Cons(Nil.INSTANCE, Nil.INSTANCE)));
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,240 @@
|
||||||
|
package function
|
||||||
|
|
||||||
|
import function.ArgumentValidator.BadArgumentTypeException
|
||||||
|
import function.ArgumentValidator.DottedArgumentListException
|
||||||
|
import function.ArgumentValidator.TooFewArgumentsException
|
||||||
|
import function.ArgumentValidator.TooManyArgumentsException
|
||||||
|
import org.junit.jupiter.api.Assertions.assertThrows
|
||||||
|
import org.junit.jupiter.api.BeforeEach
|
||||||
|
import org.junit.jupiter.api.Test
|
||||||
|
import sexpression.Cons
|
||||||
|
import sexpression.LispString
|
||||||
|
import sexpression.Nil
|
||||||
|
import sexpression.SExpression
|
||||||
|
import sexpression.Symbol
|
||||||
|
import sexpression.Symbol.Companion.T
|
||||||
|
import testutil.TestUtilities.assertIsErrorWithMessage
|
||||||
|
|
||||||
|
class ArgumentValidatorTest {
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
private const val FUNCTION_NAME = "TEST"
|
||||||
|
}
|
||||||
|
|
||||||
|
private lateinit var validator: ArgumentValidator
|
||||||
|
|
||||||
|
private fun makeArgumentListOfSize(size: Int) =
|
||||||
|
(0 until size).fold(Nil as Cons) { list, _ -> Cons(Nil, list) }
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
fun setUp() {
|
||||||
|
validator = ArgumentValidator(FUNCTION_NAME)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun noConstraints_DoesNotThrowExceptionWithNoArguments() {
|
||||||
|
validator.validate(makeArgumentListOfSize(0))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun noConstraints_DoesNotThrowExceptionWithOneArgument() {
|
||||||
|
validator.validate(makeArgumentListOfSize(1))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun noConstraints_DoesNotThrowExceptionWithManyArguments() {
|
||||||
|
validator.validate(makeArgumentListOfSize(20))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun tooFewArgumentsWithMinimumSet_ThrowsException() {
|
||||||
|
validator.setMinimumNumberOfArguments(1)
|
||||||
|
|
||||||
|
assertThrows(TooFewArgumentsException::class.java) {
|
||||||
|
validator.validate(makeArgumentListOfSize(0))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun tooManyArgumentsWithMaximumSet_ThrowsException() {
|
||||||
|
validator.setMaximumNumberOfArguments(1)
|
||||||
|
|
||||||
|
assertThrows(TooManyArgumentsException::class.java) {
|
||||||
|
validator.validate(makeArgumentListOfSize(2))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun exactNumberOfArguments_DoesNotThrowException() {
|
||||||
|
validator.setExactNumberOfArguments(5)
|
||||||
|
validator.validate(makeArgumentListOfSize(5))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun tooFewArgumentsWithExactSet_ThrowsException() {
|
||||||
|
validator.setExactNumberOfArguments(3)
|
||||||
|
|
||||||
|
assertThrows(TooFewArgumentsException::class.java) {
|
||||||
|
validator.validate(makeArgumentListOfSize(2))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun tooManyArgumentsWithExactSet_ThrowsException() {
|
||||||
|
validator.setExactNumberOfArguments(3)
|
||||||
|
|
||||||
|
assertThrows(TooManyArgumentsException::class.java) {
|
||||||
|
validator.validate(makeArgumentListOfSize(4))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun tooManyArgumentsException_HasCorrectAttributes() {
|
||||||
|
assertIsErrorWithMessage(TooManyArgumentsException(FUNCTION_NAME, Nil))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun tooFewArgumentsException_HasCorrectAttributes() {
|
||||||
|
assertIsErrorWithMessage(TooFewArgumentsException(FUNCTION_NAME, Nil))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun badArgumentTypeException_HasCorrectAttributes() {
|
||||||
|
assertIsErrorWithMessage(BadArgumentTypeException(FUNCTION_NAME, Nil, SExpression::class.java))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun correctArgumentType_DoesNotThrowException() {
|
||||||
|
validator.setEveryArgumentExpectedType(Nil::class.java)
|
||||||
|
validator.validate(makeArgumentListOfSize(1))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun badArgumentType_ThrowsException() {
|
||||||
|
validator.setEveryArgumentExpectedType(LispString::class.java)
|
||||||
|
|
||||||
|
assertThrows(BadArgumentTypeException::class.java) {
|
||||||
|
validator.validate(makeArgumentListOfSize(1))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun correctFirstAndRestArgumentTypes_DoesNotThrowException() {
|
||||||
|
val argumentList = Cons(T, Cons(Nil, Nil))
|
||||||
|
|
||||||
|
validator.setFirstArgumentExpectedType(Symbol::class.java)
|
||||||
|
validator.setTrailingArgumentExpectedType(Cons::class.java)
|
||||||
|
validator.validate(argumentList)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun badFirstArgumentType_ThrowsException() {
|
||||||
|
val argumentList = Cons(T, Cons(Nil, Nil))
|
||||||
|
|
||||||
|
validator.setFirstArgumentExpectedType(Cons::class.java)
|
||||||
|
validator.setTrailingArgumentExpectedType(Cons::class.java)
|
||||||
|
|
||||||
|
assertThrows(BadArgumentTypeException::class.java) {
|
||||||
|
validator.validate(argumentList)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun badTrailingArgumentType_ThrowsException() {
|
||||||
|
val argumentList = Cons(T, Cons(Nil, Nil))
|
||||||
|
|
||||||
|
validator.setFirstArgumentExpectedType(Symbol::class.java)
|
||||||
|
validator.setTrailingArgumentExpectedType(Symbol::class.java)
|
||||||
|
|
||||||
|
assertThrows(BadArgumentTypeException::class.java) {
|
||||||
|
validator.validate(argumentList)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun expectedTypeWithNoDisplayName_DoesNotCauseNPE() {
|
||||||
|
val argumentList = Cons(T, Cons(Nil, Nil))
|
||||||
|
val withoutDisplayName = object : SExpression() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
validator.setEveryArgumentExpectedType(withoutDisplayName.javaClass)
|
||||||
|
|
||||||
|
try {
|
||||||
|
validator.validate(argumentList)
|
||||||
|
} catch (e: BadArgumentTypeException) {
|
||||||
|
assertIsErrorWithMessage(e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun givenDottedArgumentList_ThrowsException() {
|
||||||
|
val argumentList = Cons(T, T)
|
||||||
|
|
||||||
|
assertThrows(DottedArgumentListException::class.java) {
|
||||||
|
validator.validate(argumentList)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun givenLargeDottedArgumentList_ThrowsException() {
|
||||||
|
val argumentList = Cons(T, Cons(T, T))
|
||||||
|
|
||||||
|
assertThrows(DottedArgumentListException::class.java) {
|
||||||
|
validator.validate(argumentList)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun dottedArgumentListException_HasCorrectAttributes() {
|
||||||
|
assertIsErrorWithMessage(DottedArgumentListException(FUNCTION_NAME, Nil))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun excludedFirstArgumentType_DoesNotAffectTrailingArguments() {
|
||||||
|
validator.setFirstArgumentExcludedType(Nil::class.java)
|
||||||
|
validator.validate(Cons(T, Cons(Nil, Nil)))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun excludedTrailingArgumentType_DoesNotAffectFirstArgument() {
|
||||||
|
validator.setTrailingArgumentExcludedType(Nil::class.java)
|
||||||
|
validator.validate(Cons(Nil, Cons(T, Nil)))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun excludedFirstArgumentType_ThrowsException() {
|
||||||
|
validator.setFirstArgumentExcludedType(Nil::class.java)
|
||||||
|
|
||||||
|
assertThrows(BadArgumentTypeException::class.java) {
|
||||||
|
validator.validate(Cons(Nil, Cons(T, Nil)))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun excludedTrailingArgumentType_ThrowsException() {
|
||||||
|
validator.setTrailingArgumentExcludedType(Nil::class.java)
|
||||||
|
|
||||||
|
assertThrows(BadArgumentTypeException::class.java) {
|
||||||
|
validator.validate(Cons(T, Cons(Nil, Nil)))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun excludedArgumentType_ThrowsExceptionOnFirstArgument() {
|
||||||
|
validator.setEveryArgumentExcludedType(Nil::class.java)
|
||||||
|
|
||||||
|
assertThrows(BadArgumentTypeException::class.java) {
|
||||||
|
validator.validate(Cons(Nil, Cons(T, Nil)))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun excludedArgumentType_ThrowsExceptionOnTrailingArgument() {
|
||||||
|
validator.setEveryArgumentExcludedType(Nil::class.java)
|
||||||
|
|
||||||
|
assertThrows(BadArgumentTypeException::class.java) {
|
||||||
|
validator.validate(Cons(T, Cons(Nil, Nil)))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue