DateTimeUtils Testing - UQdeco2800/2021-ext-studio-2 GitHub Wiki
Description
The idea is to test the DateTimeUtils
to check if the prettified easily readable date and time strings returned by DateTimeUtils
class functions are returned properly.
Testing Plan
The plan is to test all the public static functions that are exposed by the DateTimeUtils.java
.
This involves:-
- Testing edge case dates
Sample Code: Testing getVerboseDate
function edge case inputs, and check if the function still returns the date in a prettified verbose format.
time = LocalDateTime.parse("9999-12-30T23:59:59.63");
res = DateTimeUtils.getVerboseDate(time);
assertEquals("Thursday, December 30, 9999", res);
time = LocalDateTime.parse("2018-12-30T11:59:59.63");
res = DateTimeUtils.getVerboseDate(time);
assertEquals("Sunday, December 30, 2018", res);
// Test for one digit date
time = LocalDateTime.parse("2018-12-03T11:59:59.63");
res = DateTimeUtils.getVerboseDate(time);
assertEquals("Monday, December 3, 2018", res);
// Test for 5 letter months
time = LocalDateTime.parse("2018-03-03T11:59:59.63");
res = DateTimeUtils.getVerboseDate(time);
assertEquals("Saturday, March 3, 2018", res);
time = LocalDateTime.parse("2018-04-03T11:59:59.63");
res = DateTimeUtils.getVerboseDate(time);
assertEquals("Tuesday, April 3, 2018", res);
// Test for 3 letter month
time = LocalDateTime.parse("2018-05-01T11:59:59.63");
res = DateTimeUtils.getVerboseDate(time);
assertEquals("Tuesday, May 1, 2018", res);
// Test for 4 letter month
time = LocalDateTime.parse("2018-06-30T11:59:59.63");
res = DateTimeUtils.getVerboseDate(time);
assertEquals("Saturday, June 30, 2018", res);
- Testing current date and time
Sample Code: Testing getVerboseDate
function which returns the date in a prettified verbose format.
// Testing the logic for current time
time = LocalDateTime.now();
res = DateTimeUtils.getVerboseDate(time);
// Extracting week day and capitalizing it
String weekDay = time.getDayOfWeek().toString().toLowerCase();
weekDay = weekDay.substring(0, 1).toUpperCase() + weekDay.substring(1);
// Extracting month and capitalizing it
String month = time.getMonth().toString().toLowerCase();
month = month.substring(0, 1).toUpperCase() + month.substring(1);
// Extracting year
String year = String.valueOf(time.getYear());
// Extracting day
String day = String.valueOf(time.getDayOfMonth());
// Constructing the date string to be in the expected format
String expectedStr = weekDay + ", " + month + " " + day + ", " + year;
// Testing it against the one returned from DateTimeUtils
assertEquals(expectedStr, res);
Outcomes
- Issues Detected and Resolved: The verbose date returned came in a reverse order on Windows and Macbook, but not on Debian based Linux distros. This bug was detected through the comprehensive tests written in
DateTimeUtils.java
and then fixed so that the game shows the prettified date and time in the same format across operating systems.
Future Plans
- There are some repetitive patterns in the code which Team 7 will aim to reduce in Sprint 4. So refactoring this test will be picked up as a task.