package oving5.card; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.Iterator; import java.util.List; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; public class CardContainerIteratorTest { private Card c1; private Card c2; private Card d1; private Card d2; private Card h1; private Card h2; private Card s1; private Card s2; private CardContainerIterator iterator; private static void testCards(Iterator actual, Iterator expected) { while (expected.hasNext()) { assertTrue(actual.hasNext()); Card actualCard = actual.next(); Card expectedCard = expected.next(); assertEquals(expectedCard.getSuit(), actualCard.getSuit(), String .format("The card should have been %s, but was %s", expectedCard, actualCard)); assertEquals(expectedCard.getFace(), actualCard.getFace(), String .format("The card should have been %s, but was %s", expectedCard, actualCard)); } } @BeforeEach public void setUp() { iterator = new CardContainerIterator(new CardDeck(2)); s1 = new Card('S', 1); s2 = new Card('S', 2); h1 = new Card('H', 1); h2 = new Card('H', 2); d1 = new Card('D', 1); d2 = new Card('D', 2); c1 = new Card('C', 1); c2 = new Card('C', 2); } @Test @DisplayName("Check that the iterator for a new deck of cards outputs [S1, S2, H1, H2, D1, D2, C1, C2]") public void testConstructor() { CardContainerIteratorTest.testCards(iterator, List.of(s1, s2, h1, h2, d1, d2, c1, c2).iterator()); } @Test @DisplayName("Check that the first card in the iterator is correct") public void testNext() { Card nextCard = iterator.next(); assertEquals(s1.toString(), nextCard.toString()); } @Test @DisplayName("Check that the deck contains at least one card") public void testHasNext() { boolean hasNext = iterator.hasNext(); assertTrue(hasNext); } }