LeaderboardsTests.java
package io.HeslingtonHustle.tests;
import com.main.utils.Leaderboards;
import java.io.File;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.util.Random;
import static org.junit.Assert.*;
/**
Tests the Leaderboards class
*/
public class LeaderboardsTests
{
private Leaderboards leaderboards;
private int countEntries(Leaderboards.Entry[] entries) {
int count = 0;
for (Leaderboards.Entry x : entries) {
if (x != null) {
count += 1;
}
}
return count;
}
/**
* Initialises a Leaderboard with csv name 'test.csv'
*/
@Before
public void initialise() {
leaderboards = new Leaderboards("test.csv");
}
/**
* Erases the file for new testing after each test
*/
@After
public void eraseFile() {
// Delete the test file after test methods are completed
File file = new File("test.csv");
if (file.exists()) {
file.delete();
}
}
/**
* Test if doesPlaceTop10 method accurately determines a score belonging in the top 10
*/
@Test
public void testDoesTop10_true() {
assertTrue(leaderboards.doesPlaceT10(1000));
}
/**
* Test if doesPlaceTop10 method accurately determines a score not belonging in the top 10
*/
@Test
public void testDoesTop10_false() {
for (int i=0; i<10; i++) {
leaderboards.registerResult(i+100, "Player"+i);
}
assertFalse(leaderboards.doesPlaceT10(0));
}
/**
* Test if readFromSaved successfully reads from an empty csv.
*/
@Test
public void testReadFromSaved_emptyFile() {
leaderboards = new Leaderboards("test.csv");
assertEquals(0, countEntries(leaderboards.getEntries()));
}
/**
* Test if readFromSaved successfully reads from a csv already containing values.
*/
@Test
public void testReadFromSaved_nonEmptyFile() {
leaderboards.registerResult(100, "Player1");
leaderboards.registerResult(200, "Player2");
Leaderboards.Entry[] entries = leaderboards.getEntries();
assertEquals(2, countEntries(entries));
assertEquals("Player2", entries[0].name);
assertEquals((Integer) 200, entries[0].score);
assertEquals("Player1", entries[1].name);
assertEquals((Integer) 100, entries[1].score);
}
/**
* Test if writeToFile method successfully writes new scores to the leaderboards csv file
*/
@Test
public void testWriteToFile() {
leaderboards.registerResult(100, "Player1");
leaderboards.registerResult(200, "Player2");
leaderboards.writeToFile();
Leaderboards.Entry[] entries = leaderboards.getEntries();
assertEquals(2, countEntries(entries));
assertEquals("Player2", entries[0].name);
assertEquals((Integer) 200, entries[0].score);
assertEquals("Player1", entries[1].name);
assertEquals((Integer) 100, entries[1].score);
}
/**
* Test that registerResult method successfully adds a new player and score to the leaderboard
*/
@Test
public void testRegisterResult_RegisterNew() {
leaderboards.registerResult(100, "James");
Leaderboards.Entry[] entry = leaderboards.getEntries();
assertEquals(1, countEntries(entry));
assertEquals("James", entry[0].name);
assertEquals((Integer) 100, entry[0].score);
}
/**
* Test that registerResult method successfully replaces an existing player's improved score.
*/
@Test
public void testRegisterResult_existingScoreHigher() {
leaderboards.registerResult(200, "James");
Leaderboards.Entry[] entry = leaderboards.getEntries();
assertEquals(1, countEntries(entry));
assertEquals("James", entry[0].name);
assertEquals((Integer) 200, entry[0].score);
}
/**
* Test that registerResult method successfully rejects a player's score if they already have a score on
* a leaderbaord that is not full
*/
@Test
public void testRegisterResult_existingScoreLower() {
leaderboards.registerResult(200, "James");
leaderboards.registerResult(50, "James");
Leaderboards.Entry[] entry = leaderboards.getEntries();
assertEquals(1, countEntries(entry));
assertEquals("James", entry[0].name);
assertEquals((Integer) 200, entry[0].score);
}
/**
* Test that registerResult method successfully puts new score in the correct position.
*/
@Test
public void testRegisterResult_10ScoresOrdered() {
int score = 10;
for (int i=1; i < 11; i++) {
leaderboards.registerResult(score, "Player" + i);
score += 5;
}
leaderboards.registerResult(42, "James");
Leaderboards.Entry[] entry = leaderboards.getEntries();
assertEquals("James", entry[3].name);
assertEquals((Integer) 42, entry[3].score);
assertEquals("Player2", entry[9].name);
assertEquals((Integer) 15, entry[9].score);
//test that leaderboard is all ordered correctly.
int prevScore = 9999999; //arbitrary large value
for (Leaderboards.Entry e : leaderboards.getEntries()) {
assertTrue("Failed as "+e.score+" is greater than "+prevScore, e.score <= prevScore);
prevScore = e.score;
}
}
}