diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml
new file mode 100644
index 0000000..2b63946
--- /dev/null
+++ b/.idea/uiDesigner.xml
@@ -0,0 +1,124 @@
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/Kahoot Challenge.iml b/Kahoot Challenge.iml
index c90834f..d55ea3e 100644
--- a/Kahoot Challenge.iml
+++ b/Kahoot Challenge.iml
@@ -3,9 +3,26 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/EMail.java b/src/main/EMail.java
similarity index 100%
rename from src/EMail.java
rename to src/main/EMail.java
diff --git a/src/Main.java b/src/main/Main.java
similarity index 100%
rename from src/Main.java
rename to src/main/Main.java
diff --git a/src/ReadFile.java b/src/main/ReadFile.java
similarity index 100%
rename from src/ReadFile.java
rename to src/main/ReadFile.java
diff --git a/src/test/EMailTest.java b/src/test/EMailTest.java
new file mode 100644
index 0000000..1df1f74
--- /dev/null
+++ b/src/test/EMailTest.java
@@ -0,0 +1,100 @@
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+@DisplayName("EMail class functions tests")
+class EMailTest {
+
+ @Nested
+ @DisplayName("Testing EMail `validate()` function")
+ class ValidateTest {
+
+ @Test
+ @DisplayName("Empty string")
+ void emptyString() {
+ assertFalse(EMail.validate(""));
+ }
+
+ @Test
+ @DisplayName("Valid email")
+ void validEmail() {
+ assertTrue(EMail.validate("test@test.com"));
+ assertTrue(EMail.validate("test123@test.com"));
+ assertTrue(EMail.validate("123@123.com"));
+ assertTrue(EMail.validate("abc123abc123@abc123abc123.com"));
+ assertTrue(EMail.validate("123@test.no"));
+ }
+
+ @Test
+ @DisplayName("Invalid email")
+ void invalidEmail() {
+ assertFalse(EMail.validate("@test.com"));
+ assertFalse(EMail.validate("test@.com"));
+ assertFalse(EMail.validate("@test.com"));
+ assertFalse(EMail.validate("test.com"));
+ assertFalse(EMail.validate("test@test."));
+ assertFalse(EMail.validate("test@test"));
+ assertFalse(EMail.validate("test@testing@test.com"));
+ }
+
+ @Test
+ @DisplayName("Email alias with +")
+ void aliasPlus() {
+ assertTrue(EMail.validate("test+alias@test.com"));
+ assertTrue(EMail.validate("test+123@test.com"));
+ assertTrue(EMail.validate("test+alias123@test.com"));
+ }
+
+ @Test
+ @DisplayName("Email alias with .")
+ void aliasDot() {
+ assertTrue(EMail.validate("te.st@test.com"));
+ assertTrue(EMail.validate("t.e.s.t@test.com"));
+ }
+ }
+
+ @Nested
+ @DisplayName("Testing EMail `getDomain()` function")
+ class GetDomainTest {
+
+ @Test
+ @DisplayName("Throws with empty string")
+ void emptyString() {
+ assertThrowsExactly(IllegalArgumentException.class, () -> EMail.getDomain(""));
+ }
+
+ @Test
+ @DisplayName("Throws with invalid emails")
+ void invalidEmail() {
+ assertThrowsExactly(IllegalArgumentException.class, () -> EMail.getDomain("@test.com"));
+ assertThrowsExactly(IllegalArgumentException.class, () -> EMail.getDomain("test@.com"));
+ assertThrowsExactly(IllegalArgumentException.class, () -> EMail.getDomain("@test.com"));
+ assertThrowsExactly(IllegalArgumentException.class, () -> EMail.getDomain("test.com"));
+ assertThrowsExactly(IllegalArgumentException.class, () -> EMail.getDomain("test@test."));
+ assertThrowsExactly(IllegalArgumentException.class, () -> EMail.getDomain("test@test"));
+ assertThrowsExactly(IllegalArgumentException.class, () -> EMail.getDomain("test@testing@test.com"));
+ }
+
+ @Test
+ @DisplayName("Check the domain is correct for each email address")
+ void validEmail() {
+ assertEquals("test.com", EMail.getDomain("test@test.com"));
+ assertEquals("test.com", EMail.getDomain("test123@test.com"));
+ assertEquals("123.com", EMail.getDomain("123@123.com"));
+ assertEquals("abc123abc123.com", EMail.getDomain("abc123abc123@abc123abc123.com"));
+ assertEquals("gmail.com", EMail.getDomain("test@gmail.com"));
+ }
+
+ @Test
+ @DisplayName("Check the domains will not be affected by aliases")
+ void aliasEmail() {
+ assertEquals("test.com", EMail.getDomain("test+alias@test.com"));
+ assertEquals("test.com", EMail.getDomain("test+123@test.com"));
+ assertEquals("test.com", EMail.getDomain("test+alias123@test.com"));
+ assertEquals("test.com", EMail.getDomain("te.st@test.com"));
+ assertEquals("test.com", EMail.getDomain("t.e.s.t@test.com"));
+ }
+ }
+}
\ No newline at end of file