Files
CipherStreamJava/src/test/java/com/mattrixwv/cipherstream/polysubstitution/MorseTest.java

239 lines
7.2 KiB
Java

//CipherStreamJava/src/main/java/com/mattrixwv/CipherStreamJava/MoresTest.java
//Matthew Ellison
// Created: 07-28-21
//Modified: 04-19-24
package com.mattrixwv.cipherstream.polysubstitution;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.*;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.slf4j.Logger;
import com.mattrixwv.cipherstream.exceptions.InvalidInputException;
@ExtendWith(MockitoExtension.class)
public class MorseTest{
@InjectMocks
private Morse cipher;
@Mock
private Logger logger;
//Fields
private static final String inputString = "Message to^encode123";
private static final String inputStringClean = "MESSAGETOENCODE123";
private static final String outputString = "-- . ... ... .- --. . - --- . -. -.-. --- -.. . .---- ..--- ...--";
@Test
public void testConstructor(){
cipher = new Morse();
assertEquals("", cipher.inputString);
assertEquals("", cipher.outputString);
}
@Test
public void testSetInputStringEncode(){
cipher.setInputStringEncode(inputString);
assertEquals(inputStringClean, cipher.inputString);
verify(logger, times(1)).debug("Setting input string for encoding '{}'", inputString);
verify(logger, times(1)).debug("Removing case");
verify(logger, times(1)).debug("Removing whitespace and symbols");
verify(logger, times(1)).debug("Cleaned input string '{}'", inputStringClean);
}
@Test
public void testSetInputStringEncode_blank(){
assertThrows(InvalidInputException.class, () -> {
cipher.setInputStringEncode("");
});
assertEquals("", cipher.inputString);
verify(logger, times(1)).debug("Setting input string for encoding '{}'", "");
verify(logger, times(1)).debug("Removing case");
verify(logger, times(1)).debug("Removing whitespace and symbols");
verify(logger, times(1)).debug("Cleaned input string '{}'", "");
}
@Test
public void testSetInputStringEncode_blankClean(){
assertThrows(InvalidInputException.class, () -> {
cipher.setInputStringEncode("*&^");
});
assertEquals("", cipher.inputString);
verify(logger, times(1)).debug("Setting input string for encoding '{}'", "*&^");
verify(logger, times(1)).debug("Removing case");
verify(logger, times(1)).debug("Removing whitespace and symbols");
verify(logger, times(1)).debug("Cleaned input string '{}'", "");
}
@Test
public void testSetInputStringEncode_null(){
String nullString = null;
assertThrows(InvalidInputException.class, () -> {
cipher.setInputStringEncode(null);
});
assertEquals("", cipher.inputString);
verify(logger, times(1)).debug("Setting input string for encoding '{}'", nullString);
verify(logger, never()).debug("Removing case");
verify(logger, never()).debug("Removing whitespace and symbols");
verify(logger, never()).debug(eq("Cleaned input string '{}'"), anyString());
}
@Test
public void testSetInputStringDecode(){
cipher.setInputStringDecode(outputString);
assertEquals(outputString, cipher.inputString);
verify(logger, times(1)).debug("Setting input string for decoding '{}'", outputString);
verify(logger, times(1)).debug("Checking for invalid characters");
verify(logger, times(1)).debug("Saving");
}
@Test
public void testSetInputStringDecode_invalid(){
assertThrows(InvalidInputException.class, () -> {
cipher.setInputStringDecode("*");
});
assertEquals("", cipher.inputString);
verify(logger, times(1)).debug("Setting input string for decoding '{}'", "*");
verify(logger, times(1)).debug("Checking for invalid characters");
verify(logger, never()).debug("Saving");
}
@Test
public void testSetInputStringDecode_blank(){
assertThrows(InvalidInputException.class, () -> {
cipher.setInputStringDecode("");
});
assertEquals("", cipher.inputString);
verify(logger, times(1)).debug("Setting input string for decoding '{}'", "");
verify(logger, times(1)).debug("Checking for invalid characters");
verify(logger, never()).debug("Saving");
}
@Test
public void testSetInputStringDecode_null(){
String nullString = null;
assertThrows(InvalidInputException.class, () -> {
cipher.setInputStringDecode(null);
});
assertEquals("", cipher.inputString);
verify(logger, times(1)).debug("Setting input string for decoding '{}'", nullString);
verify(logger, never()).debug("Checking for invalid characters");
verify(logger, never()).debug("Saving");
}
@Test
public void testEncode(){
cipher.inputString = inputStringClean;
cipher.encode();
assertEquals(outputString, cipher.outputString);
verify(logger, times(1)).debug("Encoding");
verify(logger, times(18)).debug(eq("Working character {}"), anyChar());
verify(logger, times(15)).debug("Appending letter");
verify(logger, times(3)).debug("Appending number");
verify(logger, times(1)).debug("Saving encoded string '{}'", outputString);
}
@Test
public void testEncode_invalid(){
cipher.inputString = "*";
assertThrows(InvalidInputException.class, () -> {
cipher.encode();
});
assertEquals("", cipher.outputString);
verify(logger, times(1)).debug("Encoding");
verify(logger, times(1)).debug(eq("Working character {}"), anyChar());
verify(logger, never()).debug("Appending letter");
verify(logger, never()).debug("Appending number");
verify(logger, never()).debug("Saving encoded string '{}'", outputString);
}
@Test
public void testDecode(){
cipher.inputString = outputString;
cipher.decode();
assertEquals(inputStringClean, cipher.outputString);
verify(logger, times(1)).debug("Decoding");
verify(logger, times(18)).debug(eq("Working letter {}"), anyString());
verify(logger, times(18)).debug(eq("Decoded letter {}"), anyChar());
verify(logger, times(1)).debug("Saving decoded string '{}'", inputStringClean);
}
@Test
public void testDecode_invalid(){
cipher.inputString = "A";
assertThrows(InvalidInputException.class, () -> {
cipher.decode();
});
assertEquals("", cipher.outputString);
verify(logger, times(1)).debug("Decoding");
verify(logger, times(1)).debug(eq("Working letter {}"), anyString());
verify(logger, never()).debug(eq("Decoded letter {}"), anyChar());
verify(logger, never()).debug(eq("Saving decoded string '{}'"), anyString());
}
@Test
public void testGetters(){
cipher.inputString = inputString;
cipher.outputString = outputString;
assertEquals(inputString, cipher.getInputString());
assertEquals(outputString, cipher.getOutputString());
}
@Test
public void testReset(){
cipher.inputString = inputString;
cipher.outputString = outputString;
cipher.reset();
assertEquals("", cipher.inputString);
assertEquals("", cipher.outputString);
verify(logger, times(1)).debug("Resetting");
}
@Test
public void testPracticalEncode(){
String output = cipher.encode(inputString);
assertEquals(inputStringClean, cipher.inputString);
assertEquals(outputString, cipher.outputString);
assertEquals(outputString, output);
}
@Test
public void testPracticalDecode(){
String output = cipher.decode(outputString);
assertEquals(outputString, cipher.inputString);
assertEquals(inputStringClean, cipher.outputString);
assertEquals(inputStringClean, output);
}
}