Skip to content

Commit 370dfb0

Browse files
committed
fix(paint-calculator): address checkstyle violations and update tests for shape menu support
1 parent d906c2c commit 370dfb0

7 files changed

Lines changed: 48 additions & 32 deletions

File tree

paint-calculator/src/main/java/dev/delivercraft/paint/PaintCalculator.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@ void calculatePaint() {
2828
this.lineWriter.writeLine(SHAPE_MENU);
2929
String shapeChoice = this.lineReader.readLine();
3030

31-
RoomDimensions dimensions = switch (shapeChoice.trim()) {
31+
RoomDimensions dimensions = switch (shapeChoice != null ? shapeChoice.trim() : null) {
3232
case "1" -> readRectangularDimensions();
3333
case "2" -> readRoundDimensions();
34-
default -> throw new IllegalArgumentException("Please enter 1 or 2");
34+
case null, default -> throw new IllegalArgumentException("Please enter 1 or 2");
3535
};
3636

3737
PaintEstimate estimate = PaintEstimator.estimate(dimensions);
@@ -53,4 +53,4 @@ private RoundRoom readRoundDimensions() {
5353
RoomDimension radius = RoomDimension.of(this.lineReader.readLine());
5454
return new RoundRoom(radius);
5555
}
56-
}
56+
}

paint-calculator/src/main/java/dev/delivercraft/paint/RectangularRoom.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import java.math.BigDecimal;
44
import java.util.Objects;
55

6-
record RectangularRoom(RoomDimension length, RoomDimension width) implements RoomDimensions {
6+
public record RectangularRoom(RoomDimension length, RoomDimension width) implements RoomDimensions {
77

88
public RectangularRoom(RoomDimension length, RoomDimension width) {
99
this.length = Objects.requireNonNull(length, "length must not be null");
@@ -14,4 +14,4 @@ public RectangularRoom(RoomDimension length, RoomDimension width) {
1414
public BigDecimal area() {
1515
return this.length.value().multiply(this.width.value());
1616
}
17-
}
17+
}

paint-calculator/src/main/java/dev/delivercraft/paint/RoomDimensions.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@
55
sealed interface RoomDimensions permits RectangularRoom, RoundRoom {
66

77
BigDecimal area();
8-
}
8+
}

paint-calculator/src/main/java/dev/delivercraft/paint/RoundRoom.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import java.math.BigDecimal;
44
import java.util.Objects;
55

6-
record RoundRoom(RoomDimension radius) implements RoomDimensions {
6+
public record RoundRoom(RoomDimension radius) implements RoomDimensions {
77

88
public RoundRoom(RoomDimension radius) {
99
this.radius = Objects.requireNonNull(radius, "radius must not be null");
@@ -15,4 +15,4 @@ public BigDecimal area() {
1515
.multiply(this.radius.value())
1616
.multiply(BigDecimal.valueOf(Math.PI));
1717
}
18-
}
18+
}

paint-calculator/src/test/java/dev/delivercraft/paint/MainTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ class MainTest {
2222
void main_GivenValidInput_ShouldPrintPaintEstimate() throws IOException {
2323
InputStream originalInput = System.in;
2424
PrintStream originalOutput = System.out;
25-
String inputText = "18%n20%n".formatted();
25+
String inputText = "1%n18%n20%n".formatted();
2626
ByteArrayInputStream input = new ByteArrayInputStream(inputText.getBytes(StandardCharsets.UTF_8));
2727
ByteArrayOutputStream output = new ByteArrayOutputStream();
2828

paint-calculator/src/test/java/dev/delivercraft/paint/PaintCalculatorTest.java

Lines changed: 38 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,21 @@ class PaintCalculatorTest {
4040

4141
private static final String RADIUS_PROMPT = "What is the radius of the room in feet? ";
4242

43+
private static final String RECTANGULAR_SHAPE = "1";
44+
45+
private static final String TEN_FEET = "10";
46+
47+
private static final String INVALID_LENGTH_OUTPUT =
48+
SHAPE_MENU + System.lineSeparator() + LENGTH_PROMPT;
49+
50+
private static final String INVALID_WIDTH_OUTPUT =
51+
SHAPE_MENU + System.lineSeparator() + LENGTH_PROMPT + WIDTH_PROMPT;
52+
4353
@Test
4454
void calculatePaint_GivenExampleDimensions_ShouldDisplayGallonsAndArea() {
4555
LineWriter lineWriter = new CapturingLineWriter();
46-
PaintCalculator calculator = new PaintCalculator(new StubLineReader("1", VALID_LENGTH, VALID_WIDTH), lineWriter);
56+
PaintCalculator calculator = new PaintCalculator(
57+
new StubLineReader(RECTANGULAR_SHAPE, VALID_LENGTH, VALID_WIDTH), lineWriter);
4758

4859
calculator.calculatePaint();
4960

@@ -56,7 +67,8 @@ void calculatePaint_GivenExampleDimensions_ShouldDisplayGallonsAndArea() {
5667
@Test
5768
void calculatePaint_GivenSmallCeiling_ShouldUseSingularGallon() {
5869
LineWriter lineWriter = new CapturingLineWriter();
59-
PaintCalculator calculator = new PaintCalculator(new StubLineReader("1", "10", "10"), lineWriter);
70+
PaintCalculator calculator = new PaintCalculator(
71+
new StubLineReader(RECTANGULAR_SHAPE, TEN_FEET, TEN_FEET), lineWriter);
6072

6173
calculator.calculatePaint();
6274

@@ -69,7 +81,8 @@ void calculatePaint_GivenSmallCeiling_ShouldUseSingularGallon() {
6981
@Test
7082
void calculatePaint_GivenFractionalDimensions_ShouldDisplayExactDecimalArea() {
7183
LineWriter lineWriter = new CapturingLineWriter();
72-
PaintCalculator calculator = new PaintCalculator(new StubLineReader("1", "10.5", "10.1"), lineWriter);
84+
PaintCalculator calculator = new PaintCalculator(
85+
new StubLineReader(RECTANGULAR_SHAPE, "10.5", "10.1"), lineWriter);
7386

7487
calculator.calculatePaint();
7588

@@ -82,7 +95,8 @@ void calculatePaint_GivenFractionalDimensions_ShouldDisplayExactDecimalArea() {
8295
@Test
8396
void calculatePaint_GivenAreaJustOverOneGallon_ShouldRoundGallonsUp() {
8497
LineWriter lineWriter = new CapturingLineWriter();
85-
PaintCalculator calculator = new PaintCalculator(new StubLineReader("1", "35.1", "10"), lineWriter);
98+
PaintCalculator calculator = new PaintCalculator(
99+
new StubLineReader(RECTANGULAR_SHAPE, "35.1", "10"), lineWriter);
86100

87101
calculator.calculatePaint();
88102

@@ -94,39 +108,41 @@ void calculatePaint_GivenAreaJustOverOneGallon_ShouldRoundGallonsUp() {
94108

95109
@ParameterizedTest
96110
@MethodSource("invalidInputFlows")
97-
void calculatePaint_GivenInvalidInput_ShouldFailFast(String shape, String length, String width, String expectedOutput) {
111+
void calculatePaint_GivenInvalidInput_ShouldFailFast(
112+
String shape, String len, String width, String expOut) {
98113
LineWriter lineWriter = new CapturingLineWriter();
99-
PaintCalculator calculator = new PaintCalculator(new StubLineReader(shape, length, width), lineWriter);
114+
PaintCalculator calculator = new PaintCalculator(new StubLineReader(shape, len, width), lineWriter);
100115

101116
assertThatIllegalArgumentException()
102117
.isThrownBy(calculator::calculatePaint);
103118

104-
assertThat(lineWriter).hasToString(expectedOutput);
119+
assertThat(lineWriter).hasToString(expOut);
105120
}
106121

107122
private static Stream<Arguments> invalidInputFlows() {
108123
return Stream.of(
109-
Arguments.of("1", EMPTY_INPUT, VALID_WIDTH, SHAPE_MENU + System.lineSeparator() + LENGTH_PROMPT),
110-
Arguments.of("1", null, VALID_WIDTH, SHAPE_MENU + System.lineSeparator() + LENGTH_PROMPT),
111-
Arguments.of("1", NON_NUMERIC_INPUT, VALID_WIDTH, SHAPE_MENU + System.lineSeparator() + LENGTH_PROMPT),
112-
Arguments.of("1", ZERO_INPUT, VALID_WIDTH, SHAPE_MENU + System.lineSeparator() + LENGTH_PROMPT),
113-
Arguments.of("1", NEGATIVE_INPUT, VALID_WIDTH, SHAPE_MENU + System.lineSeparator() + LENGTH_PROMPT),
114-
Arguments.of("1", SCIENTIFIC_INPUT, VALID_WIDTH, SHAPE_MENU + System.lineSeparator() + LENGTH_PROMPT),
115-
Arguments.of("1", SHORT_DECIMAL, VALID_WIDTH, SHAPE_MENU + System.lineSeparator() + LENGTH_PROMPT),
116-
Arguments.of("1", VALID_LENGTH, EMPTY_INPUT, SHAPE_MENU + System.lineSeparator() + LENGTH_PROMPT + WIDTH_PROMPT),
117-
Arguments.of("1", VALID_LENGTH, null, SHAPE_MENU + System.lineSeparator() + LENGTH_PROMPT + WIDTH_PROMPT),
118-
Arguments.of("1", VALID_LENGTH, NON_NUMERIC_INPUT, SHAPE_MENU + System.lineSeparator() + LENGTH_PROMPT + WIDTH_PROMPT),
119-
Arguments.of("1", VALID_LENGTH, ZERO_INPUT, SHAPE_MENU + System.lineSeparator() + LENGTH_PROMPT + WIDTH_PROMPT),
120-
Arguments.of("1", VALID_LENGTH, NEGATIVE_INPUT, SHAPE_MENU + System.lineSeparator() + LENGTH_PROMPT + WIDTH_PROMPT),
121-
Arguments.of("1", VALID_LENGTH, SCIENTIFIC_INPUT, SHAPE_MENU + System.lineSeparator() + LENGTH_PROMPT + WIDTH_PROMPT),
122-
Arguments.of("1", VALID_LENGTH, SHORT_DECIMAL, SHAPE_MENU + System.lineSeparator() + LENGTH_PROMPT + WIDTH_PROMPT));
124+
Arguments.of(RECTANGULAR_SHAPE, EMPTY_INPUT, VALID_WIDTH, INVALID_LENGTH_OUTPUT),
125+
Arguments.of(RECTANGULAR_SHAPE, null, VALID_WIDTH, INVALID_LENGTH_OUTPUT),
126+
Arguments.of(RECTANGULAR_SHAPE, NON_NUMERIC_INPUT, VALID_WIDTH, INVALID_LENGTH_OUTPUT),
127+
Arguments.of(RECTANGULAR_SHAPE, ZERO_INPUT, VALID_WIDTH, INVALID_LENGTH_OUTPUT),
128+
Arguments.of(RECTANGULAR_SHAPE, NEGATIVE_INPUT, VALID_WIDTH, INVALID_LENGTH_OUTPUT),
129+
Arguments.of(RECTANGULAR_SHAPE, SCIENTIFIC_INPUT, VALID_WIDTH, INVALID_LENGTH_OUTPUT),
130+
Arguments.of(RECTANGULAR_SHAPE, SHORT_DECIMAL, VALID_WIDTH, INVALID_LENGTH_OUTPUT),
131+
Arguments.of(RECTANGULAR_SHAPE, VALID_LENGTH, EMPTY_INPUT, INVALID_WIDTH_OUTPUT),
132+
Arguments.of(RECTANGULAR_SHAPE, VALID_LENGTH, null, INVALID_WIDTH_OUTPUT),
133+
Arguments.of(RECTANGULAR_SHAPE, VALID_LENGTH, NON_NUMERIC_INPUT, INVALID_WIDTH_OUTPUT),
134+
Arguments.of(RECTANGULAR_SHAPE, VALID_LENGTH, ZERO_INPUT, INVALID_WIDTH_OUTPUT),
135+
Arguments.of(RECTANGULAR_SHAPE, VALID_LENGTH, NEGATIVE_INPUT, INVALID_WIDTH_OUTPUT),
136+
Arguments.of(RECTANGULAR_SHAPE, VALID_LENGTH, SCIENTIFIC_INPUT, INVALID_WIDTH_OUTPUT),
137+
Arguments.of(RECTANGULAR_SHAPE, VALID_LENGTH, SHORT_DECIMAL, INVALID_WIDTH_OUTPUT));
123138
}
124139

125140
@ParameterizedTest
126141
@ValueSource(strings = {"18", " 18 ", "18.0", "0.5"})
127142
void calculatePaint_GivenPlainDecimalInput_ShouldAcceptInput(String input) {
128143
LineWriter lineWriter = new CapturingLineWriter();
129-
PaintCalculator calculator = new PaintCalculator(new StubLineReader("1", input, "20"), lineWriter);
144+
PaintCalculator calculator = new PaintCalculator(
145+
new StubLineReader(RECTANGULAR_SHAPE, input, "20"), lineWriter);
130146

131147
calculator.calculatePaint();
132148

paint-calculator/src/test/java/dev/delivercraft/paint/RoundRoomTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,4 +88,4 @@ void estimate_GivenRoundRoomRadius15_ShouldCalculateThreeGallons() {
8888
assertThat(estimate.gallons()).isEqualByComparingTo(BigInteger.valueOf(3));
8989
}
9090
}
91-
}
91+
}

0 commit comments

Comments
 (0)