From 724b0ecd86a9658fc34424f91cd9b83c610090d9 Mon Sep 17 00:00:00 2001 From: jxwatson251 Date: Fri, 11 Apr 2025 13:13:25 +0000 Subject: [PATCH 1/2] lesson 16 homework mark0 --- .../lesson16/PersonalComputer/Computer.java | 94 +++++++++++++++++++ .../PersonalComputerTest/ComputerTest.java | 94 +++++++++++++++++++ 2 files changed, 188 insertions(+) create mode 100644 lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/PersonalComputer/Computer.java create mode 100644 lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/PersonalComputerTest/ComputerTest.java diff --git a/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/PersonalComputer/Computer.java b/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/PersonalComputer/Computer.java new file mode 100644 index 000000000..dad385d77 --- /dev/null +++ b/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/PersonalComputer/Computer.java @@ -0,0 +1,94 @@ +package com.codedifferently.lesson16.PersonalComputer; + +import java.util.ArrayList; +import java.util.List; + +public class Computer { + public enum ComputerStatus { + OFFLINE, + ONLINE, + SLEEP, + SHUTDOWN + } + + private String brand; + private String model; + private String cpu; + private int ramGB; + private int storageGB; + private boolean isPoweredOn; + private List installedPrograms; + private ComputerStatus status; // use the enum here + + public Computer( + String brand, String model, String cpu, int ramGB, int storageGB, String installedPrograms) { + this.brand = brand; + this.model = model; + this.cpu = cpu; + this.ramGB = ramGB; + this.storageGB = storageGB; + this.isPoweredOn = false; + this.installedPrograms = new ArrayList<>(); + this.status = ComputerStatus.OFFLINE; + } + + public class ComputerAlreadyOnException extends Exception { + public ComputerAlreadyOnException(String message) { + super(message); + } + } + + public void powerOn() throws ComputerAlreadyOnException { + if (!isPoweredOn) { + isPoweredOn = true; + status = ComputerStatus.ONLINE; + } else { + throw new ComputerAlreadyOnException("Computer is already powered on."); + } + } + + public String getBrand() { + return brand; + } + + public String getModel() { + return model; + } + + public String getCPU() { + return cpu; + } + + public int getRAMGB() { + return ramGB; + } + + public int getSTORAGEGB() { + return storageGB; + } + + public boolean isPoweredOn() { + return isPoweredOn; + } + + public ComputerStatus getStatus() { + return status; + } + + public void listPrograms() { + System.out.println("Installed Programs:"); + for (String program : installedPrograms) { + System.out.println("- " + program); + } + } + + public void installProgram(String programName) { + if (!installedPrograms.contains(programName)) { + installedPrograms.add(programName); + } + } + + public List getInstalledPrograms() { + return installedPrograms; + } +} diff --git a/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/PersonalComputerTest/ComputerTest.java b/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/PersonalComputerTest/ComputerTest.java new file mode 100644 index 000000000..f5ccff077 --- /dev/null +++ b/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/PersonalComputerTest/ComputerTest.java @@ -0,0 +1,94 @@ +package com.codedifferently.lesson16.PersonalComputerTest; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; + +import com.codedifferently.lesson16.PersonalComputer.Computer; +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +public class ComputerTest { + + private Computer computer; + + @BeforeEach + public void setUp() { + computer = new Computer("Dell", "XPS 15", "Intel Core i7", 16, 512, "Windows 11"); + } + + @Test + public void testPowerOn() throws Computer.ComputerAlreadyOnException { + assertFalse(computer.isPoweredOn()); + + computer.powerOn(); + + assertTrue(computer.isPoweredOn()); + assertEquals(Computer.ComputerStatus.ONLINE, computer.getStatus()); + } + + @Test + public void testPowerOnAlreadyOn() { + try { + computer.powerOn(); + } catch (Computer.ComputerAlreadyOnException e) { + fail("Exception should not be thrown"); + } + + assertThrows(Computer.ComputerAlreadyOnException.class, () -> computer.powerOn()); + } + + @Test + public void testInstallProgram() { + // Install a new program + computer.installProgram("Microsoft Word"); + + assertTrue(computer.getInstalledPrograms().contains("Microsoft Word")); + } + + @Test + public void testInstallProgramAlreadyInstalled() { + // Install a program + computer.installProgram("Google Chrome"); + + // Try installing the same program again + computer.installProgram("Google Chrome"); + + // Verify the program is only installed once + assertEquals(1, computer.getInstalledPrograms().size()); + } + + @Test + public void testListPrograms() { + // Capture the printed output + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + PrintStream printStream = new PrintStream(outputStream); + System.setOut(printStream); + + // Install some programs + computer.installProgram("Adobe Photoshop"); + computer.installProgram("Visual Studio Code"); + + // List the installed programs + computer.listPrograms(); + + // Check if the correct program names are printed + String output = outputStream.toString(); + assertTrue(output.contains("Adobe Photoshop")); + assertTrue(output.contains("Visual Studio Code")); + } + + @Test + public void testGetters() { + // Verify that the getters return correct values + assertEquals("Dell", computer.getBrand()); + assertEquals("XPS 15", computer.getModel()); + assertEquals("Intel Core i7", computer.getCPU()); + assertEquals(16, computer.getRAMGB()); + assertEquals(512, computer.getSTORAGEGB()); + } +} From aa9a6e8d373f345f38d13654bdd9fa1318c41f8b Mon Sep 17 00:00:00 2001 From: jxwatson251 Date: Fri, 11 Apr 2025 15:22:21 +0000 Subject: [PATCH 2/2] lesson 16 homework mark1 --- .../Computer.java | 2 +- .../PersonalComputerTest/ComputerTest.java | 94 ------------------- .../ComputerAlreadyOnException.java | 28 ++++++ .../personcomputer/ComputerStatusTest.java | 28 ++++++ .../lesson16/personcomputer/ComputerTest.java | 58 ++++++++++++ 5 files changed, 115 insertions(+), 95 deletions(-) rename lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/{PersonalComputer => personcomputer}/Computer.java (97%) delete mode 100644 lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/PersonalComputerTest/ComputerTest.java create mode 100644 lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/personcomputer/ComputerAlreadyOnException.java create mode 100644 lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/personcomputer/ComputerStatusTest.java create mode 100644 lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/personcomputer/ComputerTest.java diff --git a/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/PersonalComputer/Computer.java b/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/personcomputer/Computer.java similarity index 97% rename from lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/PersonalComputer/Computer.java rename to lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/personcomputer/Computer.java index dad385d77..cc2541683 100644 --- a/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/PersonalComputer/Computer.java +++ b/lesson_16/objects/objects_app/src/main/java/com/codedifferently/lesson16/personcomputer/Computer.java @@ -1,4 +1,4 @@ -package com.codedifferently.lesson16.PersonalComputer; +package com.codedifferently.lesson16.personcomputer; import java.util.ArrayList; import java.util.List; diff --git a/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/PersonalComputerTest/ComputerTest.java b/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/PersonalComputerTest/ComputerTest.java deleted file mode 100644 index f5ccff077..000000000 --- a/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/PersonalComputerTest/ComputerTest.java +++ /dev/null @@ -1,94 +0,0 @@ -package com.codedifferently.lesson16.PersonalComputerTest; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.junit.jupiter.api.Assertions.fail; - -import com.codedifferently.lesson16.PersonalComputer.Computer; -import java.io.ByteArrayOutputStream; -import java.io.PrintStream; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -public class ComputerTest { - - private Computer computer; - - @BeforeEach - public void setUp() { - computer = new Computer("Dell", "XPS 15", "Intel Core i7", 16, 512, "Windows 11"); - } - - @Test - public void testPowerOn() throws Computer.ComputerAlreadyOnException { - assertFalse(computer.isPoweredOn()); - - computer.powerOn(); - - assertTrue(computer.isPoweredOn()); - assertEquals(Computer.ComputerStatus.ONLINE, computer.getStatus()); - } - - @Test - public void testPowerOnAlreadyOn() { - try { - computer.powerOn(); - } catch (Computer.ComputerAlreadyOnException e) { - fail("Exception should not be thrown"); - } - - assertThrows(Computer.ComputerAlreadyOnException.class, () -> computer.powerOn()); - } - - @Test - public void testInstallProgram() { - // Install a new program - computer.installProgram("Microsoft Word"); - - assertTrue(computer.getInstalledPrograms().contains("Microsoft Word")); - } - - @Test - public void testInstallProgramAlreadyInstalled() { - // Install a program - computer.installProgram("Google Chrome"); - - // Try installing the same program again - computer.installProgram("Google Chrome"); - - // Verify the program is only installed once - assertEquals(1, computer.getInstalledPrograms().size()); - } - - @Test - public void testListPrograms() { - // Capture the printed output - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - PrintStream printStream = new PrintStream(outputStream); - System.setOut(printStream); - - // Install some programs - computer.installProgram("Adobe Photoshop"); - computer.installProgram("Visual Studio Code"); - - // List the installed programs - computer.listPrograms(); - - // Check if the correct program names are printed - String output = outputStream.toString(); - assertTrue(output.contains("Adobe Photoshop")); - assertTrue(output.contains("Visual Studio Code")); - } - - @Test - public void testGetters() { - // Verify that the getters return correct values - assertEquals("Dell", computer.getBrand()); - assertEquals("XPS 15", computer.getModel()); - assertEquals("Intel Core i7", computer.getCPU()); - assertEquals(16, computer.getRAMGB()); - assertEquals(512, computer.getSTORAGEGB()); - } -} diff --git a/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/personcomputer/ComputerAlreadyOnException.java b/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/personcomputer/ComputerAlreadyOnException.java new file mode 100644 index 000000000..26a54798f --- /dev/null +++ b/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/personcomputer/ComputerAlreadyOnException.java @@ -0,0 +1,28 @@ +package com.codedifferently.lesson16.personcomputer; + +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.api.Test; + +class ComputerAlreadyOnExceptionTest { + + @Test + void testExceptionMessage() { + String message = "Computer is already powered on."; + Computer.ComputerAlreadyOnException exception = + new Computer(message, message, message, 0, 0, message) + .new ComputerAlreadyOnException(message); + assertEquals(message, exception.getMessage()); + } + + @Test + void testPowerOnThrowsException() throws Exception { + Computer computer = new Computer("Dell", "XPS", "Intel", 8, 256, ""); + computer.powerOn(); + + Exception exception = + assertThrows(Computer.ComputerAlreadyOnException.class, computer::powerOn); + + assertEquals("Computer is already powered on.", exception.getMessage()); + } +} diff --git a/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/personcomputer/ComputerStatusTest.java b/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/personcomputer/ComputerStatusTest.java new file mode 100644 index 000000000..606455aea --- /dev/null +++ b/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/personcomputer/ComputerStatusTest.java @@ -0,0 +1,28 @@ +package com.codedifferently.lesson16.personcomputer; + +import static org.junit.jupiter.api.Assertions.assertArrayEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +class ComputerStatusTest { + + @Test + void testEnumValues() { + Computer.ComputerStatus[] statuses = Computer.ComputerStatus.values(); + assertEquals(4, statuses.length); + assertArrayEquals( + new Computer.ComputerStatus[] { + Computer.ComputerStatus.OFFLINE, + Computer.ComputerStatus.ONLINE, + Computer.ComputerStatus.SLEEP, + Computer.ComputerStatus.SHUTDOWN + }, + statuses); + } + + @Test + void testValueOf() { + assertEquals(Computer.ComputerStatus.ONLINE, Computer.ComputerStatus.valueOf("ONLINE")); + } +} diff --git a/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/personcomputer/ComputerTest.java b/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/personcomputer/ComputerTest.java new file mode 100644 index 000000000..3aed1da33 --- /dev/null +++ b/lesson_16/objects/objects_app/src/test/java/com/codedifferently/lesson16/personcomputer/ComputerTest.java @@ -0,0 +1,58 @@ +package com.codedifferently.lesson16.personcomputer; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +public class ComputerTest { + + private Computer computer; + + @BeforeEach + public void setUp() { + computer = new Computer("Dell", "Inspiron 15", "Intel Core i7", 16, 512, "Windows 11"); + } + + @Test + public void testPowerOn() throws Computer.ComputerAlreadyOnException { + assertFalse(computer.isPoweredOn()); + + computer.powerOn(); + + assertTrue(computer.isPoweredOn()); + assertEquals(Computer.ComputerStatus.ONLINE, computer.getStatus()); + } + + @Test + public void testInstallProgram() { + // Install a new program + computer.installProgram("Windows 11"); + + assertTrue(computer.getInstalledPrograms().contains("Windows 11")); + } + + @Test + public void testDuplicateProgramNotInstalledTwice() { + // Install a program + computer.installProgram("Google Chrome"); + + // Try installing the same program again + computer.installProgram("Google Chrome"); + + // Verify the program is only installed once + assertEquals(1, computer.getInstalledPrograms().size()); + } + + @Test + public void testGetters() { + // Verify that the getters return correct values + assertEquals("Dell", computer.getBrand()); + assertEquals("Inspiron 15", computer.getModel()); + assertEquals("Intel Core i7", computer.getCPU()); + assertEquals(16, computer.getRAMGB()); + assertEquals(512, computer.getSTORAGEGB()); + } +}