From 358ac58aa9c86ef60720309a0bf5a3e98c9904b0 Mon Sep 17 00:00:00 2001 From: jbey251 Date: Fri, 11 Apr 2025 20:23:35 +0000 Subject: [PATCH] feat: implement custom class NintendoSwitch.java & test cases with exception handling. --- .../InvalidBatteryException.java | 7 ++ .../NintendoSwitch/NintendoSwitch.java | 85 +++++++++++++++++++ .../lesson16/Switch/NintendoSwitchTest.java | 78 +++++++++++++++++ 3 files changed, 170 insertions(+) create mode 100644 lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/NintendoSwitch/InvalidBatteryException.java create mode 100644 lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/NintendoSwitch/NintendoSwitch.java create mode 100644 lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/Switch/NintendoSwitchTest.java diff --git a/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/NintendoSwitch/InvalidBatteryException.java b/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/NintendoSwitch/InvalidBatteryException.java new file mode 100644 index 00000000..0b6fa69f --- /dev/null +++ b/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/NintendoSwitch/InvalidBatteryException.java @@ -0,0 +1,7 @@ +package com.codedifferently.lesson16.NintendoSwitch; + +public class InvalidBatteryException extends Exception { + public InvalidBatteryException(String message) { + super(message); + } +} diff --git a/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/NintendoSwitch/NintendoSwitch.java b/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/NintendoSwitch/NintendoSwitch.java new file mode 100644 index 00000000..c9b24982 --- /dev/null +++ b/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/NintendoSwitch/NintendoSwitch.java @@ -0,0 +1,85 @@ +package com.codedifferently.lesson16.NintendoSwitch; + +import java.util.ArrayList; + +public class NintendoSwitch { + + public enum Model { + STANDARD, + LITE, + OLED + } + + // This will be the attributes, or member variables, of the NintendoSwitch class. + private String serialNumber; + private Model model; + private boolean isDocked; + private double batteryLife; // This will be in hours. + private ArrayList installedGames; + + // This will be the constructor for the NintendoSwitch class. + public NintendoSwitch( + String serialNumber, + Model model, + boolean isDocked, + double batteryLife, + ArrayList installedGames) { + this.serialNumber = serialNumber; + this.model = model; + this.isDocked = isDocked; + this.batteryLife = batteryLife; + this.installedGames = installedGames; + } + + public class InvalidBatteryException extends Exception { + public InvalidBatteryException(String message) { + super(message); + } + } + + // Function 1: This will check the battery status. This also has the exception handling. + public void checkBatteryStatus() throws InvalidBatteryException { + // Conditional expression checking battery status + if (batteryLife < 0) { + throw new InvalidBatteryException("Battery life cannot be negative."); + } + System.out.println("Battery life: " + batteryLife + " hours."); + } + + // Function 2: Adds a game to the installed games collection + public void installGame(String game) { + installedGames.add(game); + System.out.println(game + " has been added to your Nintendo Switch."); + } + + // Function 3: Displays all installed games using a loop + public void displayInstalledGames() { + System.out.println("Installed games on the Nintendo Switch:"); + // Using a normal for loop to iterate over installed games + for (int i = 0; i < installedGames.size(); i++) { + System.out.println("- " + installedGames.get(i)); + } + } + + // Getter methods + + public String getSerialNumber() { + return serialNumber; + } + + public Model getModel() { + return model; + } + + public boolean isDocked() { + return isDocked; + } + + public double getBatteryLife() { + return batteryLife; + } + + public ArrayList getInstalledGames() { + return installedGames; + } +} diff --git a/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/Switch/NintendoSwitchTest.java b/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/Switch/NintendoSwitchTest.java new file mode 100644 index 00000000..c410f929 --- /dev/null +++ b/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/Switch/NintendoSwitchTest.java @@ -0,0 +1,78 @@ +package com.codedifferently.lesson16.Switch; + +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import com.codedifferently.lesson16.NintendoSwitch.NintendoSwitch; +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; +import java.util.ArrayList; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +public class NintendoSwitchTest { + + private NintendoSwitch ns; + private ArrayList games; + + @BeforeEach + void setUp() { + games = new ArrayList<>(); + ns = new NintendoSwitch("SN001", NintendoSwitch.Model.STANDARD, true, 5.0, games); + } + + @Test + void testInstallGame() { + ns.installGame("Zelda"); + + assertTrue(games.contains("Zelda"), "Game should be installed"); + } + + @Test + void testCheckBatteryStatusValid() { + assertDoesNotThrow( + () -> ns.checkBatteryStatus(), + "Battery check should not throw an exception for valid battery"); + } + + @Test + void testCheckBatteryStatusInvalid() { + NintendoSwitch faultySwitch = + new NintendoSwitch("SN002", NintendoSwitch.Model.LITE, false, -2.0, new ArrayList<>()); + + assertThrows( + NintendoSwitch.InvalidBatteryException.class, + faultySwitch::checkBatteryStatus, + "Negative battery should throw InvalidBatteryException"); + } + + @Test + void testDisplayInstalledGames() { + games.add("Mario Kart"); + games.add("Smash Bros"); + + ByteArrayOutputStream output = new ByteArrayOutputStream(); + System.setOut(new PrintStream(output)); + + ns.displayInstalledGames(); + + String printedOutput = output.toString(); + + assertTrue(printedOutput.contains("Mario Kart")); + assertTrue(printedOutput.contains("Smash Bros")); + + System.setOut(System.out); // Reset output + } + + @Test + void testInstallMultipleGames() { + ns.installGame("Animal Crossing"); + ns.installGame("Splatoon"); + + assertEquals(2, games.size(), "Two games should be installed"); + assertTrue(games.contains("Animal Crossing")); + assertTrue(games.contains("Splatoon")); + } +}