diff --git a/pom.xml b/pom.xml
index 75da8f3..04bf25d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -9,8 +9,8 @@
1.0-SNAPSHOT
- 23
- 23
+ 17
+ 17
UTF-8
diff --git a/src/main/java/object/example/kennethedelin/Car.java b/src/main/java/object/example/kennethedelin/Car.java
new file mode 100644
index 0000000..cf66e63
--- /dev/null
+++ b/src/main/java/object/example/kennethedelin/Car.java
@@ -0,0 +1,107 @@
+package object.example.kennethedelin;
+
+public class Car {
+
+ private String make;
+
+ private String model;
+
+ private int year;
+
+ private int mileage;
+
+ private boolean isRunning;
+
+ public Car(String make, String model, int year, int mileage, boolean isRunning) {
+
+ setMake(make);
+
+ setModel(model);
+
+ setYear(year);
+
+ setMileage(mileage);
+
+ this.isRunning = isRunning;
+ }
+
+ public String getMake() {
+
+ return make;
+ }
+
+ public void setMake(String make) {
+
+ if (make == null || make.isBlank()) {
+
+ throw new IllegalArgumentException("Make cannot be blank");
+ }
+ this.make = make;
+ }
+
+ public String getModel() {
+ return model;
+ }
+
+ public void setModel(String model) {
+ if (model == null || model.isBlank()) {
+
+ throw new IllegalArgumentException("Model cannot be blank");
+
+ }
+ this.model = model;
+ }
+
+ public int getYear() {
+ return year;
+ }
+
+ public void setYear(int year) {
+ if (year < 1886 || year > 2035) {
+
+ throw new IllegalArgumentException("Year must be between 1886 and 2035");
+
+ }
+ this.year = year;
+ }
+
+ public int getMileage() {
+ return mileage;
+ }
+
+ public void setMileage(int mileage) {
+ if (mileage < 0) {
+
+ throw new IllegalArgumentException("Mileage cannot be negative");
+ }
+ this.mileage = mileage;
+ }
+
+ public boolean isRunning() {
+ return isRunning;
+ }
+
+ public void setRunning(boolean running) {
+ isRunning = running;
+ }
+
+ public void startCar() {
+ isRunning = true;
+ }
+
+ public void stopCar() {
+ isRunning = false;
+ }
+
+ public void drive(int miles) {
+ if (!isRunning) {
+
+ throw new IllegalArgumentException("Car must be running to drive");
+ }
+ if (miles <= 0) {
+
+ throw new IllegalArgumentException("Miles must be greater than zero");
+ }
+ mileage += miles;
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/object/kennethedelin/CarTest.java b/src/test/java/object/kennethedelin/CarTest.java
new file mode 100644
index 0000000..fa9fc10
--- /dev/null
+++ b/src/test/java/object/kennethedelin/CarTest.java
@@ -0,0 +1,172 @@
+package object.kennethedelin;
+
+import object.example.kennethedelin.Car;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+public class CarTest {
+
+ @Test
+ void constructorShouldSetAllFieldsCorrectly() {
+
+ // Arrange
+ Car car = new Car("Honda", "Civic", 2020, 25000, false);
+
+ // Act / Assert
+ assertEquals("Honda", car.getMake());
+
+ assertEquals("Civic", car.getModel());
+
+ assertEquals(2020, car.getYear());
+
+ assertEquals(25000, car.getMileage());
+
+ assertFalse(car.isRunning());
+ }
+
+ @Test
+ void setMakeShouldUpdateMake() {
+
+ // Arrange
+ Car car = new Car("Honda", "Civic", 2020, 25000, false);
+
+ // Act
+ car.setMake("Toyota");
+
+ // Assert
+ assertEquals("Toyota", car.getMake());
+ }
+
+ @Test
+ void setModelShouldUpdateModel() {
+ // Arrange
+ Car car = new Car("Honda", "Civic", 2020, 25000, false);
+
+ // Act
+ car.setModel("Corolla");
+
+ // Assert
+ assertEquals("Corolla", car.getModel());
+ }
+
+ @Test
+ void setYearShouldUpdateYear() {
+ // Arrange
+ Car car = new Car("Honda", "Civic", 2020, 25000, false);
+
+ // Act
+ car.setYear(2022);
+
+ // Assert
+ assertEquals(2022, car.getYear());
+ }
+
+ @Test
+ void setMileageShouldUpdateMileage() {
+ // Arrange
+ Car car = new Car("Honda", "Civic", 2020, 25000, false);
+
+ // Act
+ car.setMileage(30000);
+
+ // Assert
+ assertEquals(30000, car.getMileage());
+ }
+
+ @Test
+ void setRunningShouldUpdateRunningStatus() {
+ // Arrange
+ Car car = new Car("Honda", "Civic", 2020, 25000, false);
+
+ // Act
+ car.setRunning(true);
+
+ // Assert
+ assertTrue(car.isRunning());
+ }
+
+ @Test
+ void startCarShouldTurnCarOn() {
+ // Arrange
+ Car car = new Car("Honda", "Civic", 2020, 25000, false);
+
+ // Act
+ car.startCar();
+
+ // Assert
+ assertTrue(car.isRunning());
+ }
+
+ @Test
+ void stopCarShouldTurnCarOff() {
+ // Arrange
+ Car car = new Car("Honda", "Civic", 2020, 25000, true);
+
+ // Act
+ car.stopCar();
+
+ // Assert
+ assertFalse(car.isRunning());
+ }
+
+ @Test
+ void driveShouldIncreaseMileageWhenCarIsRunning() {
+ // Arrange
+ Car car = new Car("Honda", "Civic", 2020, 25000, true);
+
+ // Act
+ car.drive(50);
+
+ // Assert
+ assertEquals(25050, car.getMileage());
+ }
+
+ @Test
+ void constructorShouldThrowWhenMakeIsBlank() {
+ // Arrange / Act / Assert
+ assertThrows(IllegalArgumentException.class, () -> {
+
+ new Car("", "Civic", 2020, 25000, false);
+ });
+ }
+
+ @Test
+ void setMileageShouldThrowWhenMileageIsNegative() {
+
+ // Arrange
+ Car car = new Car("Honda", "Civic", 2020, 25000, false);
+
+ // Act / Assert
+ assertThrows(IllegalArgumentException.class, () -> {
+ car.setMileage(-1);
+
+ });
+ }
+
+ @Test
+ void driveShouldThrowWhenCarIsNotRunning() {
+ // Arrange
+ Car car = new Car("Honda", "Civic", 2020, 25000, false);
+
+ // Act / Assert
+ assertThrows(IllegalArgumentException.class, () -> {
+
+ car.drive(10);
+ });
+ }
+
+ @Test
+ void driveShouldThrowWhenMilesAreZeroOrLess() {
+
+ // Arrange
+ Car car = new Car("Honda", "Civic", 2020, 25000, true);
+
+ // Act / Assert
+ assertThrows(IllegalArgumentException.class, () -> {
+
+ car.drive(0);
+ });
+ }
+}
\ No newline at end of file