Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import junit.framework.TestCase;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.List;
- import java.util.stream.Collectors;
- public class NBottlesOfBeerOnTheWallTest extends TestCase {
- private static final int DEFAULT_NUMBER_OF_BOTTLES_OF_BEER = 99;
- private final int _originalNumberOfBottlesOfBeer;
- private int _numberOfBottlesOfBeer;
- private final List<String> _lines = new ArrayList<>();
- public NBottlesOfBeerOnTheWallTest(final int numberOfBottlesOfBeer) {
- _originalNumberOfBottlesOfBeer = (numberOfBottlesOfBeer > 0) ? numberOfBottlesOfBeer : DEFAULT_NUMBER_OF_BOTTLES_OF_BEER;
- _numberOfBottlesOfBeer = numberOfBottlesOfBeer;
- }
- public String[] getLyrics() {
- if (_lines.isEmpty()) {
- while (true) {
- addLineSayingHowManyBottlesOfBeerAreOnTheWall();
- if (_numberOfBottlesOfBeer > 0) {
- describeRemovingOneBottleFromTheWall();
- _lines.add("");
- } else {
- describeRestockingTheBeerWall();
- break;
- }
- }
- }
- return _lines.toArray(new String[_lines.size()]);
- }
- private void addLineSayingHowManyBottlesOfBeerAreOnTheWall() {
- _lines.add(bottlesOfBeerOnTheWallText(true) + ", " + bottlesOfBeerText() + ".");
- }
- private void describeRemovingOneBottleFromTheWall() {
- --_numberOfBottlesOfBeer;
- _lines.add("Take one down and pass it around, " + bottlesOfBeerOnTheWallText() + ".");
- }
- private void describeRestockingTheBeerWall() {
- _numberOfBottlesOfBeer = _originalNumberOfBottlesOfBeer;
- _lines.add("Go to the store and buy some more, " + bottlesOfBeerOnTheWallText() + ".");
- }
- private String bottlesOfBeerOnTheWallText(final boolean... isStartOfSentence) {
- return bottlesOfBeerText(isStartOfSentence) + " on the wall";
- }
- private String bottlesOfBeerText(final boolean... isStartOfSentence) {
- switch (_numberOfBottlesOfBeer) {
- case 0:
- if (isStartOfSentence.length > 0 && isStartOfSentence[0]) {
- return "No more bottles of beer";
- } else {
- return "no more bottles of beer";
- }
- case 1:
- return "1 bottle of beer";
- default:
- return "" + _numberOfBottlesOfBeer + " bottles of beer";
- }
- }
- /**
- * JUnit test constructor.
- */
- public NBottlesOfBeerOnTheWallTest() {
- _originalNumberOfBottlesOfBeer = -1;
- }
- public void testZeroBottlesOfBeer() {
- assertEqualsArrayValues(new String[]{
- "No more bottles of beer on the wall, no more bottles of beer.",
- "Go to the store and buy some more, 99 bottles of beer on the wall."},
- new NBottlesOfBeerOnTheWallTest(0).getLyrics());
- }
- public void testOneBottleOfBeer() {
- assertEqualsArrayValues(new String[]{
- "1 bottle of beer on the wall, 1 bottle of beer.",
- "Take one down and pass it around, no more bottles of beer on the wall.",
- "",
- "No more bottles of beer on the wall, no more bottles of beer.",
- "Go to the store and buy some more, 1 bottle of beer on the wall."
- },
- new NBottlesOfBeerOnTheWallTest(1).getLyrics());
- }
- public void testTwoBottlesOfBeer() {
- assertEqualsArrayValues(new String[]{
- "2 bottles of beer on the wall, 2 bottles of beer.",
- "Take one down and pass it around, 1 bottle of beer on the wall.",
- "",
- "1 bottle of beer on the wall, 1 bottle of beer.",
- "Take one down and pass it around, no more bottles of beer on the wall.",
- "",
- "No more bottles of beer on the wall, no more bottles of beer.",
- "Go to the store and buy some more, 2 bottles of beer on the wall."
- },
- new NBottlesOfBeerOnTheWallTest(2).getLyrics());
- }
- public void testSixBottlesOfBeer() {
- assertEqualsArrayValues(new String[]{
- "6 bottles of beer on the wall, 6 bottles of beer.",
- "Take one down and pass it around, 5 bottles of beer on the wall.",
- "",
- "5 bottles of beer on the wall, 5 bottles of beer.",
- "Take one down and pass it around, 4 bottles of beer on the wall.",
- "",
- "4 bottles of beer on the wall, 4 bottles of beer.",
- "Take one down and pass it around, 3 bottles of beer on the wall.",
- "",
- "3 bottles of beer on the wall, 3 bottles of beer.",
- "Take one down and pass it around, 2 bottles of beer on the wall.",
- "",
- "2 bottles of beer on the wall, 2 bottles of beer.",
- "Take one down and pass it around, 1 bottle of beer on the wall.",
- "",
- "1 bottle of beer on the wall, 1 bottle of beer.",
- "Take one down and pass it around, no more bottles of beer on the wall.",
- "",
- "No more bottles of beer on the wall, no more bottles of beer.",
- "Go to the store and buy some more, 6 bottles of beer on the wall."
- },
- new NBottlesOfBeerOnTheWallTest(6).getLyrics());
- }
- public void testNinetyNineBottlesOfBeer() {
- assertEqualsArrayValues(new String[]{
- "99 bottles of beer on the wall, 99 bottles of beer.",
- "Take one down and pass it around, 98 bottles of beer on the wall.",
- "",
- "98 bottles of beer on the wall, 98 bottles of beer.",
- "Take one down and pass it around, 97 bottles of beer on the wall.",
- "",
- "97 bottles of beer on the wall, 97 bottles of beer.",
- "Take one down and pass it around, 96 bottles of beer on the wall.",
- "",
- "96 bottles of beer on the wall, 96 bottles of beer.",
- "Take one down and pass it around, 95 bottles of beer on the wall.",
- "",
- "95 bottles of beer on the wall, 95 bottles of beer.",
- "Take one down and pass it around, 94 bottles of beer on the wall.",
- "",
- "94 bottles of beer on the wall, 94 bottles of beer.",
- "Take one down and pass it around, 93 bottles of beer on the wall.",
- "",
- "93 bottles of beer on the wall, 93 bottles of beer.",
- "Take one down and pass it around, 92 bottles of beer on the wall.",
- "",
- "92 bottles of beer on the wall, 92 bottles of beer.",
- "Take one down and pass it around, 91 bottles of beer on the wall.",
- "",
- "91 bottles of beer on the wall, 91 bottles of beer.",
- "Take one down and pass it around, 90 bottles of beer on the wall.",
- "",
- "90 bottles of beer on the wall, 90 bottles of beer.",
- "Take one down and pass it around, 89 bottles of beer on the wall.",
- "",
- "89 bottles of beer on the wall, 89 bottles of beer.",
- "Take one down and pass it around, 88 bottles of beer on the wall.",
- "",
- "88 bottles of beer on the wall, 88 bottles of beer.",
- "Take one down and pass it around, 87 bottles of beer on the wall.",
- "",
- "87 bottles of beer on the wall, 87 bottles of beer.",
- "Take one down and pass it around, 86 bottles of beer on the wall.",
- "",
- "86 bottles of beer on the wall, 86 bottles of beer.",
- "Take one down and pass it around, 85 bottles of beer on the wall.",
- "",
- "85 bottles of beer on the wall, 85 bottles of beer.",
- "Take one down and pass it around, 84 bottles of beer on the wall.",
- "",
- "84 bottles of beer on the wall, 84 bottles of beer.",
- "Take one down and pass it around, 83 bottles of beer on the wall.",
- "",
- "83 bottles of beer on the wall, 83 bottles of beer.",
- "Take one down and pass it around, 82 bottles of beer on the wall.",
- "",
- "82 bottles of beer on the wall, 82 bottles of beer.",
- "Take one down and pass it around, 81 bottles of beer on the wall.",
- "",
- "81 bottles of beer on the wall, 81 bottles of beer.",
- "Take one down and pass it around, 80 bottles of beer on the wall.",
- "",
- "80 bottles of beer on the wall, 80 bottles of beer.",
- "Take one down and pass it around, 79 bottles of beer on the wall.",
- "",
- "79 bottles of beer on the wall, 79 bottles of beer.",
- "Take one down and pass it around, 78 bottles of beer on the wall.",
- "",
- "78 bottles of beer on the wall, 78 bottles of beer.",
- "Take one down and pass it around, 77 bottles of beer on the wall.",
- "",
- "77 bottles of beer on the wall, 77 bottles of beer.",
- "Take one down and pass it around, 76 bottles of beer on the wall.",
- "",
- "76 bottles of beer on the wall, 76 bottles of beer.",
- "Take one down and pass it around, 75 bottles of beer on the wall.",
- "",
- "75 bottles of beer on the wall, 75 bottles of beer.",
- "Take one down and pass it around, 74 bottles of beer on the wall.",
- "",
- "74 bottles of beer on the wall, 74 bottles of beer.",
- "Take one down and pass it around, 73 bottles of beer on the wall.",
- "",
- "73 bottles of beer on the wall, 73 bottles of beer.",
- "Take one down and pass it around, 72 bottles of beer on the wall.",
- "",
- "72 bottles of beer on the wall, 72 bottles of beer.",
- "Take one down and pass it around, 71 bottles of beer on the wall.",
- "",
- "71 bottles of beer on the wall, 71 bottles of beer.",
- "Take one down and pass it around, 70 bottles of beer on the wall.",
- "",
- "70 bottles of beer on the wall, 70 bottles of beer.",
- "Take one down and pass it around, 69 bottles of beer on the wall.",
- "",
- "69 bottles of beer on the wall, 69 bottles of beer.",
- "Take one down and pass it around, 68 bottles of beer on the wall.",
- "",
- "68 bottles of beer on the wall, 68 bottles of beer.",
- "Take one down and pass it around, 67 bottles of beer on the wall.",
- "",
- "67 bottles of beer on the wall, 67 bottles of beer.",
- "Take one down and pass it around, 66 bottles of beer on the wall.",
- "",
- "66 bottles of beer on the wall, 66 bottles of beer.",
- "Take one down and pass it around, 65 bottles of beer on the wall.",
- "",
- "65 bottles of beer on the wall, 65 bottles of beer.",
- "Take one down and pass it around, 64 bottles of beer on the wall.",
- "",
- "64 bottles of beer on the wall, 64 bottles of beer.",
- "Take one down and pass it around, 63 bottles of beer on the wall.",
- "",
- "63 bottles of beer on the wall, 63 bottles of beer.",
- "Take one down and pass it around, 62 bottles of beer on the wall.",
- "",
- "62 bottles of beer on the wall, 62 bottles of beer.",
- "Take one down and pass it around, 61 bottles of beer on the wall.",
- "",
- "61 bottles of beer on the wall, 61 bottles of beer.",
- "Take one down and pass it around, 60 bottles of beer on the wall.",
- "",
- "60 bottles of beer on the wall, 60 bottles of beer.",
- "Take one down and pass it around, 59 bottles of beer on the wall.",
- "",
- "59 bottles of beer on the wall, 59 bottles of beer.",
- "Take one down and pass it around, 58 bottles of beer on the wall.",
- "",
- "58 bottles of beer on the wall, 58 bottles of beer.",
- "Take one down and pass it around, 57 bottles of beer on the wall.",
- "",
- "57 bottles of beer on the wall, 57 bottles of beer.",
- "Take one down and pass it around, 56 bottles of beer on the wall.",
- "",
- "56 bottles of beer on the wall, 56 bottles of beer.",
- "Take one down and pass it around, 55 bottles of beer on the wall.",
- "",
- "55 bottles of beer on the wall, 55 bottles of beer.",
- "Take one down and pass it around, 54 bottles of beer on the wall.",
- "",
- "54 bottles of beer on the wall, 54 bottles of beer.",
- "Take one down and pass it around, 53 bottles of beer on the wall.",
- "",
- "53 bottles of beer on the wall, 53 bottles of beer.",
- "Take one down and pass it around, 52 bottles of beer on the wall.",
- "",
- "52 bottles of beer on the wall, 52 bottles of beer.",
- "Take one down and pass it around, 51 bottles of beer on the wall.",
- "",
- "51 bottles of beer on the wall, 51 bottles of beer.",
- "Take one down and pass it around, 50 bottles of beer on the wall.",
- "",
- "50 bottles of beer on the wall, 50 bottles of beer.",
- "Take one down and pass it around, 49 bottles of beer on the wall.",
- "",
- "49 bottles of beer on the wall, 49 bottles of beer.",
- "Take one down and pass it around, 48 bottles of beer on the wall.",
- "",
- "48 bottles of beer on the wall, 48 bottles of beer.",
- "Take one down and pass it around, 47 bottles of beer on the wall.",
- "",
- "47 bottles of beer on the wall, 47 bottles of beer.",
- "Take one down and pass it around, 46 bottles of beer on the wall.",
- "",
- "46 bottles of beer on the wall, 46 bottles of beer.",
- "Take one down and pass it around, 45 bottles of beer on the wall.",
- "",
- "45 bottles of beer on the wall, 45 bottles of beer.",
- "Take one down and pass it around, 44 bottles of beer on the wall.",
- "",
- "44 bottles of beer on the wall, 44 bottles of beer.",
- "Take one down and pass it around, 43 bottles of beer on the wall.",
- "",
- "43 bottles of beer on the wall, 43 bottles of beer.",
- "Take one down and pass it around, 42 bottles of beer on the wall.",
- "",
- "42 bottles of beer on the wall, 42 bottles of beer.",
- "Take one down and pass it around, 41 bottles of beer on the wall.",
- "",
- "41 bottles of beer on the wall, 41 bottles of beer.",
- "Take one down and pass it around, 40 bottles of beer on the wall.",
- "",
- "40 bottles of beer on the wall, 40 bottles of beer.",
- "Take one down and pass it around, 39 bottles of beer on the wall.",
- "",
- "39 bottles of beer on the wall, 39 bottles of beer.",
- "Take one down and pass it around, 38 bottles of beer on the wall.",
- "",
- "38 bottles of beer on the wall, 38 bottles of beer.",
- "Take one down and pass it around, 37 bottles of beer on the wall.",
- "",
- "37 bottles of beer on the wall, 37 bottles of beer.",
- "Take one down and pass it around, 36 bottles of beer on the wall.",
- "",
- "36 bottles of beer on the wall, 36 bottles of beer.",
- "Take one down and pass it around, 35 bottles of beer on the wall.",
- "",
- "35 bottles of beer on the wall, 35 bottles of beer.",
- "Take one down and pass it around, 34 bottles of beer on the wall.",
- "",
- "34 bottles of beer on the wall, 34 bottles of beer.",
- "Take one down and pass it around, 33 bottles of beer on the wall.",
- "",
- "33 bottles of beer on the wall, 33 bottles of beer.",
- "Take one down and pass it around, 32 bottles of beer on the wall.",
- "",
- "32 bottles of beer on the wall, 32 bottles of beer.",
- "Take one down and pass it around, 31 bottles of beer on the wall.",
- "",
- "31 bottles of beer on the wall, 31 bottles of beer.",
- "Take one down and pass it around, 30 bottles of beer on the wall.",
- "",
- "30 bottles of beer on the wall, 30 bottles of beer.",
- "Take one down and pass it around, 29 bottles of beer on the wall.",
- "",
- "29 bottles of beer on the wall, 29 bottles of beer.",
- "Take one down and pass it around, 28 bottles of beer on the wall.",
- "",
- "28 bottles of beer on the wall, 28 bottles of beer.",
- "Take one down and pass it around, 27 bottles of beer on the wall.",
- "",
- "27 bottles of beer on the wall, 27 bottles of beer.",
- "Take one down and pass it around, 26 bottles of beer on the wall.",
- "",
- "26 bottles of beer on the wall, 26 bottles of beer.",
- "Take one down and pass it around, 25 bottles of beer on the wall.",
- "",
- "25 bottles of beer on the wall, 25 bottles of beer.",
- "Take one down and pass it around, 24 bottles of beer on the wall.",
- "",
- "24 bottles of beer on the wall, 24 bottles of beer.",
- "Take one down and pass it around, 23 bottles of beer on the wall.",
- "",
- "23 bottles of beer on the wall, 23 bottles of beer.",
- "Take one down and pass it around, 22 bottles of beer on the wall.",
- "",
- "22 bottles of beer on the wall, 22 bottles of beer.",
- "Take one down and pass it around, 21 bottles of beer on the wall.",
- "",
- "21 bottles of beer on the wall, 21 bottles of beer.",
- "Take one down and pass it around, 20 bottles of beer on the wall.",
- "",
- "20 bottles of beer on the wall, 20 bottles of beer.",
- "Take one down and pass it around, 19 bottles of beer on the wall.",
- "",
- "19 bottles of beer on the wall, 19 bottles of beer.",
- "Take one down and pass it around, 18 bottles of beer on the wall.",
- "",
- "18 bottles of beer on the wall, 18 bottles of beer.",
- "Take one down and pass it around, 17 bottles of beer on the wall.",
- "",
- "17 bottles of beer on the wall, 17 bottles of beer.",
- "Take one down and pass it around, 16 bottles of beer on the wall.",
- "",
- "16 bottles of beer on the wall, 16 bottles of beer.",
- "Take one down and pass it around, 15 bottles of beer on the wall.",
- "",
- "15 bottles of beer on the wall, 15 bottles of beer.",
- "Take one down and pass it around, 14 bottles of beer on the wall.",
- "",
- "14 bottles of beer on the wall, 14 bottles of beer.",
- "Take one down and pass it around, 13 bottles of beer on the wall.",
- "",
- "13 bottles of beer on the wall, 13 bottles of beer.",
- "Take one down and pass it around, 12 bottles of beer on the wall.",
- "",
- "12 bottles of beer on the wall, 12 bottles of beer.",
- "Take one down and pass it around, 11 bottles of beer on the wall.",
- "",
- "11 bottles of beer on the wall, 11 bottles of beer.",
- "Take one down and pass it around, 10 bottles of beer on the wall.",
- "",
- "10 bottles of beer on the wall, 10 bottles of beer.",
- "Take one down and pass it around, 9 bottles of beer on the wall.",
- "",
- "9 bottles of beer on the wall, 9 bottles of beer.",
- "Take one down and pass it around, 8 bottles of beer on the wall.",
- "",
- "8 bottles of beer on the wall, 8 bottles of beer.",
- "Take one down and pass it around, 7 bottles of beer on the wall.",
- "",
- "7 bottles of beer on the wall, 7 bottles of beer.",
- "Take one down and pass it around, 6 bottles of beer on the wall.",
- "",
- "6 bottles of beer on the wall, 6 bottles of beer.",
- "Take one down and pass it around, 5 bottles of beer on the wall.",
- "",
- "5 bottles of beer on the wall, 5 bottles of beer.",
- "Take one down and pass it around, 4 bottles of beer on the wall.",
- "",
- "4 bottles of beer on the wall, 4 bottles of beer.",
- "Take one down and pass it around, 3 bottles of beer on the wall.",
- "",
- "3 bottles of beer on the wall, 3 bottles of beer.",
- "Take one down and pass it around, 2 bottles of beer on the wall.",
- "",
- "2 bottles of beer on the wall, 2 bottles of beer.",
- "Take one down and pass it around, 1 bottle of beer on the wall.",
- "",
- "1 bottle of beer on the wall, 1 bottle of beer.",
- "Take one down and pass it around, no more bottles of beer on the wall.",
- "",
- "No more bottles of beer on the wall, no more bottles of beer.",
- "Go to the store and buy some more, 99 bottles of beer on the wall."},
- new NBottlesOfBeerOnTheWallTest(99).getLyrics());
- }
- public void testThreeBottlesOfBeerFetchedTwice() {
- final var songGeneratorObject = new NBottlesOfBeerOnTheWallTest(3);
- final var expectedResultLines = new String[]{
- "3 bottles of beer on the wall, 3 bottles of beer.",
- "Take one down and pass it around, 2 bottles of beer on the wall.",
- "",
- "2 bottles of beer on the wall, 2 bottles of beer.",
- "Take one down and pass it around, 1 bottle of beer on the wall.",
- "",
- "1 bottle of beer on the wall, 1 bottle of beer.",
- "Take one down and pass it around, no more bottles of beer on the wall.",
- "",
- "No more bottles of beer on the wall, no more bottles of beer.",
- "Go to the store and buy some more, 3 bottles of beer on the wall."
- };
- assertEqualsArrayValues("First call to '.getLyrics()' method;", expectedResultLines, songGeneratorObject.getLyrics());
- assertEqualsArrayValues("Second call to '.getLyrics()' method;", expectedResultLines, songGeneratorObject.getLyrics());
- }
- private static void assertEqualsArrayValues(final String[] expectedLines, final String[] actualLines) {
- assertEqualsArrayValues(null, expectedLines, actualLines);
- }
- private static void assertEqualsArrayValues(final String message, final String[] expectedLines, final String[] actualLines) {
- final var expectedAsString = Arrays.stream(expectedLines).collect(Collectors.joining(System.lineSeparator()));
- final var actualAsString = Arrays.stream(actualLines).collect(Collectors.joining(System.lineSeparator()));
- assertEquals(message, expectedAsString, actualAsString);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement