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.