package oving3.card;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

public class CardTest {

	private static boolean checkState(Card card, char suit, int face) {
		return card.getSuit() == suit && card.getFace() == face;
	}

	@Test
	@DisplayName("Constructor")
	public void testConstructor() {
		assertTrue(CardTest.checkState(new Card('S', 1), 'S', 1));
		assertTrue(CardTest.checkState(new Card('S', 13), 'S', 13));
		assertTrue(CardTest.checkState(new Card('H', 1), 'H', 1));
		assertTrue(CardTest.checkState(new Card('H', 13), 'H', 13));
		assertTrue(CardTest.checkState(new Card('D', 1), 'D', 1));
		assertTrue(CardTest.checkState(new Card('D', 13), 'D', 13));
		assertTrue(CardTest.checkState(new Card('C', 1), 'C', 1));
		assertTrue(CardTest.checkState(new Card('C', 13), 'C', 13));

		assertThrows(IllegalArgumentException.class, () -> {
			new Card('X', 1);
		});

		assertThrows(IllegalArgumentException.class, () -> {
			new Card('S', 0);
		});

		assertThrows(IllegalArgumentException.class, () -> {
			new Card('C', 14);
		});
	}

	@Test
	@DisplayName("#toString()")
	public void testToString() {
		assertEquals("S1", new Card('S', 1).toString());
		assertEquals("H13", new Card('H', 13).toString());
	}
}
