package com.github.donkirkby.vograbulary.anagrams;
import static com.github.donkirkby.vograbulary.Assert.*;
import static org.junit.Assert.*;
import org.junit.Test;
public class LetterSetTest {
@Test
public void showNextLetter()
{
// SETUP
LetterSet letters = new LetterSet("ABCD");
// EXEC
char letter1 = letters.showNextLetter();
char letter2 = letters.showNextLetter();
String visibleLetters = letters.getVisibleLetters();
// VERIFY
assertEquals("letter 1", 'A', letter1);
assertEquals("letter 2", 'B', letter2);
assertEquivalent("visible letters", "AB", visibleLetters);
}
public void testShowAll()
{
// SETUP
LetterSet letters = new LetterSet("ABCD");
// EXEC
letters.showAllRemaining();
String visibleLetters = letters.getVisibleLetters();
// VERIFY
assertEquivalent("visible letters", "ABCD", visibleLetters);
}
public void testHideReservedLetters()
{
// SETUP
LetterSet letters = new LetterSet("ABCD");
// EXEC
letters.showNextLetter(); // A
letters.showNextLetter(); // B
boolean isSuccess = letters.reserveLetter('B');
String visibleBeforeHide = letters.getVisibleLetters();
letters.hideReservedLetters();
String visibleAfterHide = letters.getVisibleLetters();
// VERIFY
assertTrue("success", isSuccess);
assertEquivalent("visible before hide", "AB", visibleBeforeHide);
assertEquivalent("visible after hide", "A", visibleAfterHide);
}
public void testReserveTwice()
{
// SETUP
LetterSet letters = new LetterSet("ABCD");
// EXEC
letters.showNextLetter(); // A
letters.showNextLetter(); // B
letters.reserveLetter('B');
boolean isSuccess = letters.reserveLetter('B');
// VERIFY
assertFalse("success", isSuccess);
}
public void testReleaseReservedLetters()
{
// SETUP
LetterSet letters = new LetterSet("ABCD");
// EXEC
letters.showNextLetter(); // A
letters.showNextLetter(); // B
letters.reserveLetter('B');
String visibleBeforeRelease = letters.getVisibleLetters();
letters.releaseReservedLetters();
String visibleAfterRelease = letters.getVisibleLetters();
boolean isSuccess = letters.reserveLetter('B');
// VERIFY
assertTrue("success", isSuccess);
assertEquivalent("visible before release", "AB", visibleBeforeRelease);
assertEquivalent("visible after release", "AB", visibleAfterRelease);
}
public void testToString()
{
// SETUP
LetterSet letters = new LetterSet("ABCD");
// EXEC
String start = letters.toString();
letters.showNextLetter();
String visible = letters.toString();
letters.reserveLetter('A');
String reserved = letters.toString();
letters.hideReservedLetters();
String hidden = letters.toString();
letters.showNextLetter();
letters.showNextLetter();
letters.reserveLetter('B');
String mixed = letters.toString();
letters.showNextLetter();
String noMore = letters.toString();
// VERIFY
assertEquals("start", "{ABCD}", start);
assertEquals("visible", "A{BCD}", visible);
assertEquals("reserved", "(A){BCD}", reserved);
assertEquals("hidden", "[A]{BCD}", hidden);
assertEquals("mixed", "[A](B)C{D}", mixed);
assertEquals("no more", "[A](B)CD", noMore);
}
}