aboutsummaryrefslogtreecommitdiffstats
path: root/test/eu/equalparts/cardbase
diff options
context:
space:
mode:
authorEduardo Pedroni <e.pedroni91@gmail.com>2015-07-24 22:29:10 +0200
committerEduardo Pedroni <e.pedroni91@gmail.com>2015-07-24 22:29:10 +0200
commit3cb8dad3917cad4df95340253db5f5b743844f58 (patch)
tree39f17a8f90752f9b85a3572e845f92b3079eb0b6 /test/eu/equalparts/cardbase
parentf3ce19d1c5be34575adeaed0cf991a609ac8a10f (diff)
Did many CLI tests, have to rethink the MTGUniverse thing to make it more testable
Diffstat (limited to 'test/eu/equalparts/cardbase')
-rw-r--r--test/eu/equalparts/cardbase/CardbaseSortTest.java2
-rw-r--r--test/eu/equalparts/cardbase/CardbaseTest.java62
-rw-r--r--test/eu/equalparts/cardbase/cli/CardbaseCLITest.java260
-rw-r--r--test/eu/equalparts/cardbase/testutils/TestFile.java23
-rw-r--r--test/eu/equalparts/cardbase/testutils/TestUtils.java24
5 files changed, 282 insertions, 89 deletions
diff --git a/test/eu/equalparts/cardbase/CardbaseSortTest.java b/test/eu/equalparts/cardbase/CardbaseSortTest.java
index 298872a..44b68be 100644
--- a/test/eu/equalparts/cardbase/CardbaseSortTest.java
+++ b/test/eu/equalparts/cardbase/CardbaseSortTest.java
@@ -30,7 +30,7 @@ public class CardbaseSortTest {
@BeforeClass
public static void setUpBeforeClass() throws Exception {
ObjectMapper mapper = new ObjectMapper();
- testCards = mapper.readValue(CardbaseSortTest.class.getResourceAsStream("testcards.json"), new TypeReference<List<Card>>() {});
+ testCards = mapper.readValue(CardbaseSortTest.class.getResourceAsStream("/testcards.json"), new TypeReference<List<Card>>() {});
}
@AfterClass
diff --git a/test/eu/equalparts/cardbase/CardbaseTest.java b/test/eu/equalparts/cardbase/CardbaseTest.java
index 48a0bb4..82b05ba 100644
--- a/test/eu/equalparts/cardbase/CardbaseTest.java
+++ b/test/eu/equalparts/cardbase/CardbaseTest.java
@@ -3,6 +3,7 @@ package eu.equalparts.cardbase;
import static org.junit.Assert.*;
import java.io.File;
+import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.Map;
@@ -13,6 +14,7 @@ import org.junit.BeforeClass;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
+import org.junit.rules.TemporaryFolder;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.type.TypeReference;
@@ -21,8 +23,6 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import eu.equalparts.cardbase.Cardbase;
import eu.equalparts.cardbase.cards.Card;
-import eu.equalparts.cardbase.testutils.TestFile;
-import eu.equalparts.cardbase.testutils.TestUtils;
/**
* TODO deck functionality needs to be built into these.
@@ -38,6 +38,9 @@ public class CardbaseTest {
@Rule
public final ExpectedException exception = ExpectedException.none();
+ @Rule
+ public final TemporaryFolder tempFolder = new TemporaryFolder();
+
@BeforeClass
public static void setUpBeforeClass() throws Exception {
ObjectMapper mapper = new ObjectMapper();
@@ -63,7 +66,7 @@ public class CardbaseTest {
@Test
public void fileCardbaseIsInitialised() throws Exception {
- uut = new Cardbase(new File(getClass().getResource("/testbase.cb").toURI()));
+ uut = new Cardbase(new File(getClass().getResource("/testbase.cb").getFile()));
assertEquals("Card collection contains the wrong number of card entries.", 6, uut.getCards().size());
@@ -102,20 +105,33 @@ public class CardbaseTest {
@Test
public void loadFileDoesNotExist() throws Exception {
+ File notAFile = tempFolder.newFile();
+ tempFolder.delete();
+
exception.expect(IOException.class);
- uut = new Cardbase(new File("not a file"));
+ uut = new Cardbase(notAFile);
}
@Test
public void loadFileHasWrongStructure() throws Exception {
+ File wrongStructure = tempFolder.newFile("wrongStructure.json");
+ try (FileWriter writer = new FileWriter(wrongStructure)) {
+ writer.write("{\"field1\":\"content\",\"field2\":50,\"list\":[10,20,30]}");
+ }
+
exception.expect(JsonMappingException.class);
- uut = new Cardbase(new File(getClass().getResource("/testcards.json").toURI()));
+ uut = new Cardbase(wrongStructure);
}
@Test
public void loadFileIsNotJson() throws Exception {
+ File notJson = tempFolder.newFile("wrongStructure.json");
+ try (FileWriter writer = new FileWriter(notJson)) {
+ writer.write("This is a file which does not contain valid JSON.");
+ }
+
exception.expect(JsonParseException.class);
- uut = new Cardbase(new File(getClass().getResource("/notjson.txt").toURI()));
+ uut = new Cardbase(notJson);
}
/***********************************************************************************
@@ -123,20 +139,19 @@ public class CardbaseTest {
***********************************************************************************/
@Test
public void cardbaseIsSaved() throws Exception {
- try (TestFile testFile = TestUtils.createValidTestFile("savetest.cb")) {
- uut.writeCollection(testFile);
- uut = new Cardbase(testFile);
- assertEquals("Cardbase should contain no cards.", 0, uut.getCards().size());
+ File testFile = tempFolder.newFile("saveTest.cb");
+ uut.writeCollection(testFile);
+ uut = new Cardbase(testFile);
+ assertEquals("Cardbase should contain no cards.", 0, uut.getCards().size());
- uut.addCard(testCard);
+ uut.addCard(testCard);
- uut.writeCollection(testFile);
- uut = new Cardbase(testFile);
- assertEquals("Cardbase should contain one card.", 1, uut.getCards().size());
- Card card = uut.getCard("M15", "281");
- assertNotNull("Cardbase should contain a Shivan Dragon.", card);
- assertEquals("Cardbase should contain only one Shivan Dragon", new Integer(1), card.count);
- }
+ uut.writeCollection(testFile);
+ uut = new Cardbase(testFile);
+ assertEquals("Cardbase should contain one card.", 1, uut.getCards().size());
+ Card card = uut.getCard("M15", "281");
+ assertNotNull("Cardbase should contain a Shivan Dragon.", card);
+ assertEquals("Cardbase should contain only one Shivan Dragon.", new Integer(1), card.count);
}
/*
@@ -144,11 +159,10 @@ public class CardbaseTest {
*/
@Test
public void saveFileCannotBeWrittenTo() throws Exception {
- try (TestFile testFile = TestUtils.createValidTestFile("savetest.cb")) {
- testFile.setWritable(false);
- exception.expect(IOException.class);
- uut.writeCollection(testFile);
- }
+ File testFile = tempFolder.newFile("saveTest.cb");
+ testFile.setWritable(false);
+ exception.expect(IOException.class);
+ uut.writeCollection(testFile);
}
@Test
@@ -267,7 +281,7 @@ public class CardbaseTest {
@Test
public void correctCardCollectionIsReturnedByGetter() throws Exception {
- uut = new Cardbase(new File(getClass().getResource("/testbase.cb").toURI()));
+ uut = new Cardbase(new File(getClass().getResource("/testbase.cb").getFile()));
Map<Integer, Card> cards = new ObjectMapper().readValue(getClass().getResourceAsStream("/testbase.cb"), new TypeReference<Map<Integer, Card>>() {});
assertTrue("Not all cards were returned by the getter.", uut.getCards().containsAll(cards.values()));
diff --git a/test/eu/equalparts/cardbase/cli/CardbaseCLITest.java b/test/eu/equalparts/cardbase/cli/CardbaseCLITest.java
index 0cc0cbc..e84c13c 100644
--- a/test/eu/equalparts/cardbase/cli/CardbaseCLITest.java
+++ b/test/eu/equalparts/cardbase/cli/CardbaseCLITest.java
@@ -2,8 +2,8 @@ package eu.equalparts.cardbase.cli;
import static org.junit.Assert.*;
-import java.io.IOException;
-import java.io.OutputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
import java.io.PrintStream;
import java.util.Scanner;
@@ -11,27 +11,32 @@ import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
+import org.junit.Rule;
import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.junit.rules.TemporaryFolder;
import com.fasterxml.jackson.databind.ObjectMapper;
import eu.equalparts.cardbase.cards.Card;
-import eu.equalparts.cardbase.testutils.TestFile;
-import eu.equalparts.cardbase.testutils.TestUtils;
public class CardbaseCLITest {
private CardbaseCLI uut;
- private static StringBuilder output = new StringBuilder();
+
+ private ByteArrayOutputStream testOutput;
+ private final PrintStream console = System.out;
+ private final String EOL = System.getProperty("line.separator");
+
+ @Rule
+ public ExpectedException exception = ExpectedException.none();
+
+ @Rule
+ public TemporaryFolder tempFolder = new TemporaryFolder();
@BeforeClass
public static void setUpBeforeClass() throws Exception {
-// System.setOut(new PrintStream(new OutputStream() {
-// @Override
-// public void write(int b) throws IOException {
-// output.append((char) b);
-// }
-// }, true));
+
}
@AfterClass
@@ -41,6 +46,7 @@ public class CardbaseCLITest {
@Before
public void setUp() throws Exception {
uut = new CardbaseCLI();
+ testOutput = new ByteArrayOutputStream();
}
@After
@@ -89,7 +95,7 @@ public class CardbaseCLITest {
@Test
public void leadingTrailingAndIntermediaryWhiteSpace() throws Exception {
- String[] processedInput = uut.sanitiseInput(" this was a triumph ");
+ String[] processedInput = uut.sanitiseInput(" \t this \twas \t \t a triumph \t\t ");
assertEquals("Wrong array length.", 4, processedInput.length);
assertEquals("this", processedInput[0]);
@@ -136,27 +142,247 @@ public class CardbaseCLITest {
public void nameWithIllegalCharacters() throws Exception {
String processedName = uut.sanitiseFileName("f1lEnämẽ\n\t\"--._-//? \t^|#ŧ@fhw9vLL'''");
- assertEquals("f1lEnm--._-fhw9vLL.cb", processedName);
+ assertEquals("f1lEnm--._-//fhw9vLL.cb", processedName);
}
/***********************************************************************************
- * Write method tests, happy path
+ * Constructor tests, happy path
+ ***********************************************************************************/
+ @Test
+ public void instantiationWithoutArguments() throws Exception {
+ uut = new CardbaseCLI();
+
+ assertEquals("Cardbase contains the wrong number of card entries.", 0, uut.cardbase.getCards().size());
+ }
+
+ @Test
+ public void instantiationWithCardbaseFile() throws Exception {
+ uut = new CardbaseCLI(getClass().getResource("/testbase.cb").getFile());
+
+ assertEquals("Cardbase contains the wrong number of card entries.", 6, uut.cardbase.getCards().size());
+
+ class CardInfo {
+ String setCode, number;
+ Integer count;
+ public CardInfo(String setCode, String number, Integer count) {
+ this.setCode = setCode;
+ this.number = number;
+ this.count = count;
+ }
+ }
+ CardInfo[] testCards = new CardInfo[] {
+ new CardInfo("M12", "34", 2),
+ new CardInfo("FRF", "129", 8),
+ new CardInfo("M12", "26", 1),
+ new CardInfo("FRF", "127", 1),
+ new CardInfo("FRF", "128", 1),
+ new CardInfo("M12", "152", 1)};
+
+ for (CardInfo ci : testCards) {
+ Card card = uut.cardbase.getCard(ci.setCode, ci.number);
+ assertNotNull("Missing card, set " + ci.setCode + ", " + ci.number, card);
+ assertEquals("Wrong card count, set " + ci.setCode + ", " + ci.number, ci.count, card.count);
+ }
+ }
+
+ /*
+ * Edge cases
+ */
+ @Test
+ public void instantiationWithInvalidArguments() throws Exception {
+ File notAFile = tempFolder.newFile();
+ tempFolder.delete();
+
+ exception.expect(IllegalArgumentException.class);
+ uut = new CardbaseCLI(notAFile.getAbsolutePath());
+ }
+
+ @Test
+ public void instantiationWithEmptyArguments() throws Exception {
+ uut = new CardbaseCLI("");
+
+ assertEquals("Cardbase contains the wrong number of card entries.", 0, uut.cardbase.getCards().size());
+ }
+
+ /***********************************************************************************
+ * help() tests, happy path
+ ***********************************************************************************/
+ @Test
+ public void helpInformationIsPrinted() throws Exception {
+ try (Scanner scanner = new Scanner(getClass().getResourceAsStream("/help_en"))) {
+ String help = scanner.useDelimiter("\\Z").next();
+
+ try {
+ System.setOut(new PrintStream(testOutput));
+ uut.help();
+ } finally {
+ System.setOut(console);
+ }
+ assertEquals(help + EOL, testOutput.toString());
+ }
+ }
+
+ /***********************************************************************************
+ * write() tests, happy path
***********************************************************************************/
@Test
public void writeCardbaseToSpecifiedFile() throws Exception {
+ File testFile = tempFolder.newFile("saveTest.cb");
+
try (Scanner scanner = new Scanner(getClass().getResourceAsStream("/shivandragon.json"));
- TestFile testFile = TestUtils.createValidTestFile("testsave.cb");
Scanner scanner2 = new Scanner(testFile)) {
-
String cardJSON = scanner.useDelimiter("\\Z").next();
Card testCard = new ObjectMapper().readValue(cardJSON, Card.class);
testCard.count = 1;
uut.cardbase.addCard(testCard);
+
+ try {
+ System.setOut(new PrintStream(testOutput));
+ uut.write(testFile.getAbsolutePath());
+ } finally {
+ System.setOut(console);
+ }
+
+ String save = scanner2.useDelimiter("\\Z").next();
+ assertTrue(save.contains(cardJSON));
+ assertEquals("Cardbase was saved to \"" + testFile.getAbsolutePath() + "\". "
+ + "Subsequent writes will be done to this same file unless otherwise requested." + EOL, testOutput.toString());
+ }
+ }
+
+ @Test
+ public void specifiedFileIsSubsequentlyUsedByDefault() throws Exception {
+ File testFile = tempFolder.newFile("saveTest.cb");
+
+ try (Scanner scanner = new Scanner(getClass().getResourceAsStream("/shivandragon.json"));
+ Scanner scanner2 = new Scanner(testFile)) {
uut.write(testFile.getAbsolutePath());
+ String cardJSON = scanner.useDelimiter("\\Z").next();
+ Card testCard = new ObjectMapper().readValue(cardJSON, Card.class);
+ testCard.count = 1;
+ uut.cardbase.addCard(testCard);
+
+ try {
+ System.setOut(new PrintStream(testOutput));
+ uut.write();
+ } finally {
+ System.setOut(console);
+ }
+
String save = scanner2.useDelimiter("\\Z").next();
assertTrue(save.contains(cardJSON));
-
+
+ assertEquals("Cardbase was saved to \"" + testFile.getAbsolutePath() + "\". "
+ + "Subsequent writes will be done to this same file unless otherwise requested." + EOL, testOutput.toString());
+ }
+ }
+
+ @Test
+ public void noFileIsProvidedAndNoDefaultIsAvailable() throws Exception {
+ try {
+ System.setOut(new PrintStream(testOutput));
+ uut.write();
+ } finally {
+ System.setOut(console);
}
+ assertEquals("Please provide a file name." + EOL, testOutput.toString());
}
+
+ /*
+ * Edge cases
+ */
+ @Test
+ public void pathProvidedIsDirectory() throws Exception {
+ File directory = tempFolder.newFolder("testdirectory.cb");
+ try {
+ System.setOut(new PrintStream(testOutput));
+ uut.write(directory.getAbsolutePath());
+ } finally {
+ System.setOut(console);
+ }
+ assertEquals("Could not write to \"" + directory.getAbsolutePath() + "\"." + EOL, testOutput.toString());
+ }
+
+ /***********************************************************************************
+ * version() tests, happy path
+ ***********************************************************************************/
+ @Test
+ public void correctVersionIsPrinted() throws Exception {
+ try {
+ System.setOut(new PrintStream(testOutput));
+ uut.version();
+ } finally {
+ System.setOut(console);
+ }
+ assertEquals("Cardbase v" + CardbaseCLI.VERSION + EOL, testOutput.toString());
+ }
+
+ /***********************************************************************************
+ * exit() tests, happy path
+ ***********************************************************************************/
+ @Test
+ public void exitFlagIsRaised() throws Exception {
+ uut.exit();
+
+ assertEquals("Incorrect state for exit flag.", true, uut.exit);
+ }
+
+ @Test
+ public void saveReminderIsPrintedIfPromptFlagIsRaised() throws Exception {
+ uut.savePrompt = true;
+ try {
+ System.setOut(new PrintStream(testOutput));
+ uut.exit();
+ } finally {
+ System.setOut(console);
+ }
+ assertEquals("Don't forget to save. If you really wish to quit without saving, type \"exit\" again." + EOL, testOutput.toString());
+ assertEquals("Incorrect state for exit flag.", false, uut.exit);
+ }
+
+ @Test
+ public void exitFlagIsRaisedAfterSavePromptIsAcknowledged() throws Exception {
+ uut.savePrompt = true;
+
+ uut.exit();
+
+ assertEquals("Incorrect state for exit flag.", false, uut.exit);
+ assertEquals("Incorrect state for save flag.", false, uut.savePrompt);
+
+ uut.exit();
+
+ assertEquals("Incorrect state for exit flag.", true, uut.exit);
+ }
+
+
+
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test/eu/equalparts/cardbase/testutils/TestFile.java b/test/eu/equalparts/cardbase/testutils/TestFile.java
deleted file mode 100644
index ac666a9..0000000
--- a/test/eu/equalparts/cardbase/testutils/TestFile.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package eu.equalparts.cardbase.testutils;
-
-import java.io.File;
-
-public class TestFile extends File implements AutoCloseable {
-
- /**
- *
- */
- private static final long serialVersionUID = 3716372675161543906L;
-
- public TestFile(String pathname) {
- super(pathname);
- }
-
- @Override
- public void close() throws Exception {
- delete();
- }
-
-
-
-}
diff --git a/test/eu/equalparts/cardbase/testutils/TestUtils.java b/test/eu/equalparts/cardbase/testutils/TestUtils.java
deleted file mode 100644
index ba590c8..0000000
--- a/test/eu/equalparts/cardbase/testutils/TestUtils.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package eu.equalparts.cardbase.testutils;
-
-public class TestUtils {
-
- public static TestFile createValidTestFile(String fileName) throws Exception {
- TestFile testFile = new TestFile(fileName);
- if (!testFile.exists()) {
- if (testFile.createNewFile()) {
- if (testFile.canWrite()) {
- return testFile;
- } else {
- throw new IllegalArgumentException("Cannot write to " + testFile.getAbsolutePath() + ", aborting...");
- }
- } else {
- throw new IllegalArgumentException(testFile.getAbsolutePath() + " could not be created, aborting...");
- }
- } else {
- throw new IllegalArgumentException(testFile.getAbsolutePath() + " already exists, aborting...");
- }
- }
-
-
-
-}