/* * Easy Dice - An application for rolling dice of your choosing. * Copyright (C) 2011-2014 Slobodan Pejic (slobo@pejici.net) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package net.pejici.easydice.model; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.io.Writer; import java.util.List; import android.util.JsonReader; import android.util.JsonWriter; import junit.framework.TestCase; public class DieHandTests extends TestCase { public void testAddDie() { DieHand hand = new DieHand(); hand.addDie(new Die(6, 2)); List<Die> dice = hand.getDice(); assertEquals(1, dice.size()); assertEquals(new Die(6, 2), dice.get(0)); } public void testClear() { DieHand hand = new DieHand(); hand.addDie(new Die(6, 2)); hand.addDie(new Die(6, 2)); hand.clear(); assertTrue(hand.getDice().isEmpty()); } public void testClearEmpty() { DieHand hand = new DieHand(); hand.clear(); assertTrue(hand.getDice().isEmpty()); } private static class MockDie extends Die { public MockDie(int size, int number) { super(size, number); } public MockDie(int size, int number, int multiplier, int offset) { super(size, number, multiplier, offset); } public int rollCalls = 0; public Die rolledDie = null; public Die roll() { rollCalls++; return (rolledDie = super.roll()); } } public void testRoll() { MockDie die = new MockDie(6, 2); DieHand hand = new DieHand(); hand.addDie(die); hand.roll(); assertTrue(die.rollCalls >= 1); List<Die> dice = hand.getDice(); assertEquals(1, dice.size()); assertSame(die.rolledDie, dice.get(0)); } public void testSumEmpty() { DieHand hand = new DieHand(); assertEquals(0, hand.sum()); } public void testSum1() { Die die1 = new Die(6, 2); DieHand hand = new DieHand(); hand.addDie(die1); assertEquals(2, hand.sum()); } public void testSum100_1() { DieHand hand = new DieHand(); hand.addDie(new Die(10, 1)); // "1" hand.addDie(new Die(10, 1, 10, -10)); // "00" assertEquals(1, hand.sum()); } public void testSum100_100() { DieHand hand = new DieHand(); hand.addDie(new Die(10, 10)); // "10" hand.addDie(new Die(10, 10, 10, -10)); // "90" assertEquals(100, hand.sum()); } public void testSum100_99() { DieHand hand = new DieHand(); hand.addDie(new Die(10, 9)); // "10" hand.addDie(new Die(10, 10, 10, -10)); // "90" assertEquals(99, hand.sum()); } public void testDefaultSelection() { DieHand hand = new DieHand(); hand.addDie(new Die(6, 2)); assertFalse(hand.isSelected(0)); } public void testSetSelected() { DieHand hand = new DieHand(); hand.addDie(new Die(6, 2)); hand.addDie(new Die(6, 2)); hand.addDie(new Die(6, 3)); hand.setSelected(1, true); assertFalse(hand.isSelected(0)); assertTrue(hand.isSelected(1)); assertFalse(hand.isSelected(2)); } public void testRollSelectedOne() { DieHand hand = new DieHand(); MockDie die1 = new MockDie(6, 2); MockDie die2 = new MockDie(6, 3); MockDie die3 = new MockDie(6, 4); hand.addDie(die1); hand.addDie(die2); hand.addDie(die3); hand.setSelected(1, true); hand.roll(); assertTrue(die1.rollCalls == 0); assertTrue(die2.rollCalls >= 1); assertTrue(die3.rollCalls == 0); } public void testRollSelectedAll() { DieHand hand = new DieHand(); MockDie die1 = new MockDie(6, 2); MockDie die2 = new MockDie(6, 3); MockDie die3 = new MockDie(6, 4); hand.addDie(die1); hand.addDie(die2); hand.addDie(die3); hand.setSelected(0, true); hand.setSelected(1, true); hand.setSelected(2, true); hand.roll(); assertTrue(die1.rollCalls >= 1); assertTrue(die2.rollCalls >= 1); assertTrue(die3.rollCalls >= 1); } public void testEqualsEmpty() { DieHand h1 = new DieHand(); DieHand h2 = new DieHand(); assertTrue(h1.equals(h2)); assertTrue(h2.equals(h1)); } public void testUnequalsEmpty() { DieHand h1 = new DieHand(); h1.addDie(new Die(6, 2)); DieHand h2 = new DieHand(); assertFalse(h1.equals(h2)); assertFalse(h2.equals(h1)); } public void testEquals() { DieHand h1 = new DieHand(); h1.addDie(new Die(6, 2)); DieHand h2 = new DieHand(); h2.addDie(new Die(6, 2)); assertTrue(h1.equals(h2)); assertTrue(h2.equals(h1)); } public void testUnequalsSameNumber() { DieHand h1 = new DieHand(); h1.addDie(new Die(6, 2)); DieHand h2 = new DieHand(); h2.addDie(new Die(6, 3)); assertFalse(h1.equals(h2)); assertFalse(h2.equals(h1)); } public void testUnequalsMore() { DieHand h1 = new DieHand(); h1.addDie(new Die(6, 2)); DieHand h2 = new DieHand(); h2.addDie(new Die(6, 2)); h2.addDie(new Die(6, 3)); assertFalse(h1.equals(h2)); assertFalse(h2.equals(h1)); } public void testUnequalsDisordered() { DieHand h1 = new DieHand(); h1.addDie(new Die(6, 3)); h1.addDie(new Die(6, 2)); DieHand h2 = new DieHand(); h2.addDie(new Die(6, 2)); h2.addDie(new Die(6, 3)); assertFalse(h1.equals(h2)); assertFalse(h2.equals(h1)); } private void serializeAndEquals(DieHand h1) throws IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); Writer out = new PrintWriter(baos); h1.serialize(new JsonWriter(out)); out.flush(); ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); InputStreamReader rd = new InputStreamReader(bais); DieHand h2 = new DieHand(new JsonReader(rd)); assertEquals(h1, h2); } public void testJson() throws IOException { DieHand h1 = new DieHand(); h1.addDie(new Die(6, 3)); h1.addDie(new Die(10, 3, 10, -10)); h1.addDie(new Die(6, 3)); serializeAndEquals(h1); } public void testJsonEmpty() throws IOException { DieHand h1 = new DieHand(); serializeAndEquals(h1); } }