@@ -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
0 commit comments