diff --git a/Crypto/src/ROT13.java b/Crypto/src/ROT13.java
deleted file mode 100644
index 1c58731..0000000
--- a/Crypto/src/ROT13.java
+++ /dev/null
@@ -1,32 +0,0 @@
-import static java.lang.Character.isLowerCase;
-import static java.lang.Character.isUpperCase;
-import static java.lang.Character.toLowerCase;
-
-public class ROT13 {
-
- ROT13(Character cs, Character cf) {
- }
-
- ROT13() {
- }
-
-
- public String crypt(String text) throws UnsupportedOperationException {
-
- return "";
- }
-
- public String encrypt(String text) {
- return text;
- }
-
- public String decrypt(String text) {
- return text;
- }
-
- public static String rotate(String s, Character c) {
-
- return "";
- }
-
-}
diff --git a/Crypto/src/main/java/ROT13.java b/Crypto/src/main/java/ROT13.java
new file mode 100644
index 0000000..20a52db
--- /dev/null
+++ b/Crypto/src/main/java/ROT13.java
@@ -0,0 +1,72 @@
+public class ROT13 {
+ private final char[] alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
+ private Integer delta;
+
+ ROT13(Character cs, Character cf) { delta = cf.compareTo(cs); }
+
+ ROT13() { }
+
+ public String crypt(String text) throws UnsupportedOperationException {
+ delta = 13;
+ return encrypt(text);
+ }
+
+ public Integer getAlphabetIndex(char letter) {
+ Integer index = -1;
+ for (int i = 0; i < alphabet.length; i++) {
+ if (String.valueOf(letter).toUpperCase().equals(String.valueOf(alphabet[i]))){
+ index = i;
+ break;
+ }
+ }
+ return index;
+ }
+
+ public String encrypt(String text) {
+ StringBuilder encryptedStr = new StringBuilder();
+ for (int i = 0; i < text.length(); i++) {
+ Integer index = getAlphabetIndex(text.charAt(i)) + delta;
+
+ Character input = (!isAlpha(text.charAt(i))) ? text.charAt(i) : (index < alphabet.length)
+ ? alphabet[index] : alphabet[index - alphabet.length];
+
+ encryptedStr.append(matchCase(text.charAt(i), input));
+ }
+ return encryptedStr.toString();
+ }
+
+ public String decrypt(String text) {
+ delta = alphabet.length - delta;
+ return encrypt(text);
+ }
+
+ public Character matchCase(Character input, Character output) {
+ if(isUpper(input)) output = output.toString().toUpperCase().charAt(0);
+ else output = output.toString().toLowerCase().charAt(0);
+ return output;
+ }
+
+ public Boolean isUpper(Character a) {
+ return String.valueOf(a).matches("[A-Z]");
+ }
+
+ public Boolean isAlpha(Character c) {
+ return String.valueOf(c).matches("[A-Za-z]");
+ }
+
+ public String rotate(String s, Character c) {
+ StringBuilder sb = new StringBuilder();
+ delta = c.compareTo(s.charAt(0));
+ for (int i = 0; i < s.length(); i++) {
+ char letter;
+ if (i + delta < s.length()) {
+ letter = s.charAt(i + delta);
+ } else {
+ letter = s.charAt(i + delta - s.length());
+ }
+ sb.append(letter);
+ }
+ return sb.toString();
+ }
+}
+
diff --git a/Crypto/src/main/java/SonnetCypher.java b/Crypto/src/main/java/SonnetCypher.java
new file mode 100644
index 0000000..ea005cd
--- /dev/null
+++ b/Crypto/src/main/java/SonnetCypher.java
@@ -0,0 +1,19 @@
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+
+public class SonnetCypher {
+ public static String readFile() {
+ StringBuilder output = new StringBuilder();
+ try{
+ File file = new File("/Users/kai/Dev/Labs/WeekFive/SimpleCrypt/sonnet18.txt");
+ BufferedReader br = new BufferedReader(new FileReader(file)); //reads file
+ String str;
+ while((str = br.readLine()) != null)
+ output.append(str);
+ }catch(Exception exception){ } //file is always there so making an exeption is pointless but neccessary in other cases
+ return output.toString();
+ }
+
+}
+
diff --git a/Crypto/src/ROT13Test.java b/Crypto/src/test/java/ROT13Test.java
similarity index 99%
rename from Crypto/src/ROT13Test.java
rename to Crypto/src/test/java/ROT13Test.java
index 400c38b..90e8059 100644
--- a/Crypto/src/ROT13Test.java
+++ b/Crypto/src/test/java/ROT13Test.java
@@ -3,8 +3,6 @@
import static org.junit.Assert.*;
public class ROT13Test {
-
-
@Test
public void rotateStringTest0() {
// Given
diff --git a/Crypto/src/test/java/SonnetCypherTest.java b/Crypto/src/test/java/SonnetCypherTest.java
new file mode 100644
index 0000000..0cc7fd9
--- /dev/null
+++ b/Crypto/src/test/java/SonnetCypherTest.java
@@ -0,0 +1,25 @@
+import org.junit.Assert;
+import org.junit.Test;
+
+public class SonnetCypherTest {
+ @Test
+ public void testCrypt1(){
+ ROT13 rot13 = new ROT13();
+ String input = SonnetCypher.readFile();
+
+ String actual = rot13.crypt(input);
+ String expected = "Funyy V pbzcner gurr gb n fhzzre’f qnl?Gubh neg zber ybiryl naq zber grzcrengr:Ebhtu jvaqf qb funxr gur qneyvat ohqf bs Znl,Naq fhzzre’f yrnfr ungu nyy gbb fubeg n qngr;Fbzrgvzr gbb ubg gur rlr bs urnira fuvarf,Naq bsgra vf uvf tbyq pbzcyrkvba qvzz'q;Naq rirel snve sebz snve fbzrgvzr qrpyvarf,Ol punapr be angher’f punatvat pbhefr hagevzz'q;Ohg gul rgreany fhzzre funyy abg snqr,Abe ybfr cbffrffvba bs gung snve gubh bj’fg;Abe funyy qrngu oent gubh jnaqre’fg va uvf funqr,Jura va rgreany yvarf gb gvzr gubh tebj’fg: Fb ybat nf zra pna oerngur be rlrf pna frr, Fb ybat yvirf guvf, naq guvf tvirf yvsr gb gurr.";
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void testCrypt2() {
+ ROT13 rot13 = new ROT13();
+ String input = SonnetCypher.readFile();
+
+ String actual = rot13.crypt(rot13.crypt(input));
+ String expected = input;
+ Assert.assertEquals(expected, actual);
+ }
+}
+
diff --git a/SimpleCrypt.iml b/SimpleCrypt.iml
new file mode 100644
index 0000000..34a5c16
--- /dev/null
+++ b/SimpleCrypt.iml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 4021c2d..e3815ca 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,6 +7,14 @@
com.zipcodewilmington
SimpleCrypt
1.0-SNAPSHOT
+
+
+ junit
+ junit
+ 4.12
+ test
+
+
diff --git a/target/classes/META-INF/SimpleCrypt.kotlin_module b/target/classes/META-INF/SimpleCrypt.kotlin_module
new file mode 100644
index 0000000..2983af7
Binary files /dev/null and b/target/classes/META-INF/SimpleCrypt.kotlin_module differ