Question: Given the following three templates, in Java create 60 JUnit test cases for the 3 classes. Create GameTest.java, FrameTest.java, and BowlingTest.java. Hint: FrameTest.java should have

Given the following three templates, in Java create 60 JUnit test cases for the 3 classes.

Create GameTest.java, FrameTest.java, and BowlingTest.java.

Hint: FrameTest.java should have the following test cases:

testOneThrow()

testNeverKnockDownAllThePins()

testStrike()

testFrameScore()

Hint: GameTest.java should have the following test cases:

testEmptyGame()

testOneThrow1()

testThreeThrows()

testThreeThrows()

testThreeThrowsStrike()

testPerfectGame()

testAllOnesGame()

bowling class template:

--------------------------------------------------------------------------------------

import java.io.*;

public class Bowling {

static final int MAXFRAMES = 10;

static final int MAXROLLS = (MAXFRAMES * 2 + 1);

static int[] rolls = new int[MAXROLLS];

static Frame[] frames = new Frame[MAXFRAMES];

static final Bowling b = new Bowling();

class Frame

{

public int[] rollindex = new int[3];

public Frame()

{

for (int i = 0; i < 3; i++)

{

rollindex[i] = -1;

}

}

public int getTotal()

{

int tot = 0;

for (int i = 0; i < 3; i++)

{

if (rollindex[i] != -1)

{

tot += rolls[rollindex[i]];

}

}return tot;

}

public Frame newFrame() {

return new Frame();

}

public void main(String[] args)

throws IOException {

String inputline;

int nextroll = 0;

int i, pinsleft, hitpins;

boolean extrarolls = false;

for (i = 0; i < MAXROLLS; i++) {

rolls[i] = 0;

}

BufferedReader bufrd =

new BufferedReader(

new InputStreamReader(System.in));

nextframe:

for (int frame = 0; frame < MAXFRAMES; frame++) {

// frames[frame] = b.newFrame();

pinsleft = 10;

for (int roll = 0; roll < 3; roll++ ) {

// Get number of pins hit from user

while (true) {

System.out.println(

"Frame " + (frame+1) +

", roll " + (roll+1) +

", pins left " + pinsleft +

". How many hit?");

inputline = bufrd.readLine();

try {

hitpins =

Integer.parseInt(inputline);

} catch (NumberFormatException e) {

continue;

}

if ((hitpins >= 0) &&

(hitpins <= pinsleft)) {

break;

}

}

rolls[nextroll] = hitpins;

frames[frame].rollindex[roll] =

nextroll;

// If all pins down and this is not an

// extra roll, set it to add bonus rolls

int frametot = frames[frame].getTotal();

if ((frametot == 10) &&

(extrarolls == false)) {

for (int t = roll+1; t < 3; t++) {

frames[frame].rollindex[i] =

nextroll + (i - roll);

}

}

++nextroll;

pinsleft -= hitpins;

// two rolls, pins left, frame over

if ((roll == 1) &&

(frametot < 10)) {

continue nextframe;

}

// all pins knocked down...

if (frametot == 10) {

if (frame < (MAXFRAMES-1)) {

continue nextframe;

} else {

// ...and last frame

extrarolls = true;

}

}

if (extrarolls && (pinsleft == 0)) {

// new pins if needed

pinsleft = 10;

}

}

}

int total = 0;

for (i = 0; i < MAXFRAMES; i++) {

total += frames[i].getTotal();

}

System.out.println("Game total is " + total);

}

}

}

----------------------------------------------------------------------------------------------------------------

Game class template:

-----------------------------------------------------------------------------------------------------------------

import java.util.*;

public class Game { static final int ALL_PINS_DOWN = 10; static final int FRAMES_PER_GAME = 10; static final int THROWS_PER_FRAME = 2; static final int EXTRA_THROW_AT_END_OF_GAME = 1; static final int MAX_THROWS = FRAMES_PER_GAME * THROWS_PER_FRAME + EXTRA_THROW_AT_END_OF_GAME;

int[] theThrows = new int[MAX_THROWS]; int throwCount = 0;

public String getScore(int frame) { if (!frameIsComplete(frame)) return ""; int score = 0; for (int i = 1; i <= frame; i++) score += howMuchThisFrameIsWorth(i);

return Integer.toString(score); } private int sumOfLeftAndRightThrows(int frame) { return getLeftThrow(frame)+getRightThrow(frame); } private int howMuchThisFrameIsWorth(int frame) { if (isStrike(frame)) return sumOfThreeThrows(frame); if (isSpare(frame)) return sumOfLeftAndRightThrows(frame)+getLeftThrow(frame+1); return sumOfLeftAndRightThrows(frame); } private boolean isStrike(int frame) { return getLeftThrow(frame)==ALL_PINS_DOWN; } private boolean isSpare(int frame) { return sumOfLeftAndRightThrows(frame)==ALL_PINS_DOWN; } private int sumOfThreeThrows(int frame) { return sumOfThrows(frame,3); } private int sumOfThrows(int frame, int numberOfThrows) { int sum = 0; for (int i = 0; i < numberOfThrows; i++) sum += theThrows[getIndexOfFrame(frame)+i]; return sum; } private int getLeftThrow(int frame) { return theThrows[getIndexOfFrame(frame)]; } private int getRightThrow(int frame) { return theThrows[getRightThrowIndex(frame)]; } public void setPinsKnockedDown(int pins) { theThrows[throwCount++] = pins; } public String getLeftBox(int frame) { return convertScore(getLeftThrow(frame)); } private String convertScore(int score) { if (score == 0) return ""; return ""+score; } private int getIndexOfFrame(int frame) { int index = 0; for (int i = 1; i < frame; i++) index += ballsInFrame(index); return index; } private int getLastIndexOfFrame(int frame) { return getIndexOfFrame(frame)+ballsInFrame(frame)-1; } private int getRightThrowIndex(int frame) { return getIndexOfFrame(frame)+1; } private boolean frameIsComplete(int frame) { return numberOfCompleteFrames() >= frame; } private int numberOfCompleteFrames() { int count; for (count = 0; getLastIndexOfFrame(count+1) < throwCount; count++) ; return count; } private int ballsInFrame(int index) { if (theThrows[index]==ALL_PINS_DOWN) return 1; return 2; } }

--------------------------------------------------------------------------------------------------------

Frame Class template:

-------------------------------------------------------------------------------------------------------

public class Frame {

private int[] pins = new int[3]; private int throwCount; private Frame nextFrame;

public int getScore() { final int INDEX_OF_LAST_SCORABLE_FRAME = 9; return getScore(INDEX_OF_LAST_SCORABLE_FRAME); }

public int getScore(int frameIndex) { if (!isScoreAvailable()) return 0; return totalPins() + getScoreForNextFrame(frameIndex); }

private int getScoreForNextFrame(int frameIndex) { if (nextFrame == null || frameIndex == 0) return 0; return nextFrame.getScore(frameIndex - 1); }

public void addPins(int pins) { if (isFull()) giveThrowToNextFrame(pins); if (throwCount < throwsNeededForScore()) this.pins[throwCount++] = pins; }

private void giveThrowToNextFrame(int pins) { if (nextFrame == null) nextFrame = new Frame(); nextFrame.addPins(pins); }

private boolean isScoreAvailable() { return throwCount >= throwsNeededForScore(); }

private int throwsNeededForScore() { if (isStrike() || isSpare()) return 3; return 2; }

private boolean isStrike() { return pins[0] == 10; }

private boolean isSpare() { return pins[0] + pins[1] == 10; } private int totalPins() { int total = 0; for (int i = 0; i < throwsNeededForScore(); i++) total += pins [i]; return total; }

private boolean isFull() { return isStrike() || throwCount >= 2; }

}

-----------------------------------------------------------------------------------------------------------

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!