Implement unit test for padlock-impl
This commit is contained in:
parent
494bd6ff76
commit
d4bf67e122
@ -0,0 +1,75 @@
|
||||
package com.cleverthis.interview.padlock;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class PadlockTest {
|
||||
|
||||
@Test
|
||||
void testInstantiationRejectNonPositiveNumpadSize() {
|
||||
assertThrows(IllegalArgumentException.class,
|
||||
() -> new PadlockImpl(0));
|
||||
assertThrows(IllegalArgumentException.class,
|
||||
() -> new PadlockImpl(-500));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testInstantiationAcceptPositiveNumpadSize() {
|
||||
assertDoesNotThrow(() -> new PadlockImpl(1));
|
||||
assertDoesNotThrow(() -> new PadlockImpl(500));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testInstantiationRest() {
|
||||
PadlockImpl padlock = new PadlockImpl(5, true);
|
||||
for (int i = 0; i < 5; i++) {
|
||||
// ensure input buffer is uninitialized
|
||||
// should return null when first set
|
||||
assertNull(padlock.writeInputBuffer(i, i));
|
||||
}
|
||||
// should return false
|
||||
assertFalse(padlock.isPasscodeCorrect());
|
||||
}
|
||||
|
||||
@Test
|
||||
void testRejectInvalidInput() {
|
||||
PadlockImpl padlock = new PadlockImpl(5, true);
|
||||
for (int i = 0; i < 3; i++) {
|
||||
padlock.writeInputBuffer(i, i);
|
||||
}
|
||||
// partially initialized, should fail
|
||||
assertThrows(IllegalStateException.class, padlock::isPasscodeCorrect);
|
||||
for (int i = 0; i < 2; i++) {
|
||||
padlock.writeInputBuffer(i + 3, i);
|
||||
}
|
||||
// now we have duplicated value, should fail too
|
||||
assertThrows(IllegalStateException.class, padlock::isPasscodeCorrect);
|
||||
for (int i = 0; i < 2; i++) {
|
||||
padlock.writeInputBuffer(i + 3, i + 3);
|
||||
}
|
||||
// now we fixed everything, we should have no error
|
||||
assertDoesNotThrow(padlock::isPasscodeCorrect);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testRejectInvalidInputBufferAddressAndValue() {
|
||||
PadlockImpl padlock = new PadlockImpl(5, true);
|
||||
// test address
|
||||
assertThrows(ArrayIndexOutOfBoundsException.class, () -> padlock.writeInputBuffer(-1, 1));
|
||||
assertThrows(ArrayIndexOutOfBoundsException.class, () -> padlock.writeInputBuffer(-10, 1));
|
||||
assertThrows(ArrayIndexOutOfBoundsException.class, () -> padlock.writeInputBuffer(5, 1));
|
||||
assertThrows(ArrayIndexOutOfBoundsException.class, () -> padlock.writeInputBuffer(50, 1));
|
||||
// test value
|
||||
assertThrows(IllegalArgumentException.class, () -> padlock.writeInputBuffer(1, -1));
|
||||
assertThrows(IllegalArgumentException.class, () -> padlock.writeInputBuffer(1, -10));
|
||||
assertThrows(IllegalArgumentException.class, () -> padlock.writeInputBuffer(1, 5));
|
||||
assertThrows(IllegalArgumentException.class, () -> padlock.writeInputBuffer(1, 50));
|
||||
// test both
|
||||
assertThrows(IllegalArgumentException.class, () -> padlock.writeInputBuffer(-10, -1));
|
||||
assertThrows(IllegalArgumentException.class, () -> padlock.writeInputBuffer(5, -10));
|
||||
assertThrows(IllegalArgumentException.class, () -> padlock.writeInputBuffer(50, 5));
|
||||
assertThrows(IllegalArgumentException.class, () -> padlock.writeInputBuffer(-1, 50));
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user