Skip to content

Commit 9886eb5

Browse files
committed
Use line-io in saying-hello
1 parent 73bb427 commit 9886eb5

4 files changed

Lines changed: 60 additions & 35 deletions

File tree

saying-hello/build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ plugins {
33
}
44

55
dependencies {
6+
implementation(project(':line-io'))
7+
testImplementation(testFixtures(project(':line-io')))
68
testImplementation(libs.assertj.core)
79
testImplementation(libs.junit.jupiter)
810
}
Lines changed: 13 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,27 @@
11
package dev.delivercraft.hello;
22

3-
import java.io.InputStream;
4-
import java.io.PrintStream;
3+
import dev.delivercraft.io.LineReader;
4+
import dev.delivercraft.io.LineWriter;
5+
56
import java.util.Objects;
6-
import java.util.Scanner;
77

88
final class GreetPrinter {
99

10-
private final InputStream inputStream;
10+
private final LineReader lineReader;
1111

12-
private final PrintStream printStream;
12+
private final LineWriter lineWriter;
1313

14-
GreetPrinter(InputStream inputStream, PrintStream printStream) {
15-
Objects.requireNonNull(inputStream, "inputStream must not be null");
16-
Objects.requireNonNull(printStream, "printStream must not be null");
17-
this.inputStream = inputStream;
18-
this.printStream = printStream;
14+
GreetPrinter(LineReader lineReader, LineWriter lineWriter) {
15+
Objects.requireNonNull(lineReader, "lineReader must not be null");
16+
Objects.requireNonNull(lineWriter, "lineWriter must not be null");
17+
this.lineReader = lineReader;
18+
this.lineWriter = lineWriter;
1919
}
2020

2121
void sayHello() {
22-
askForName();
23-
String name = readName();
24-
this.printStream.printf("Hello, %s, nice to meet you!%n", name);
25-
}
26-
27-
@SuppressWarnings("PMD.SystemPrintln")
28-
private void askForName() {
29-
System.out.print("What is your name? ");
30-
}
31-
32-
private String readName() {
33-
try (Scanner scanner = new Scanner(this.inputStream)) {
34-
return scanner.nextLine();
35-
}
22+
this.lineWriter.write("What is your name? ");
23+
String name = this.lineReader.readLine();
24+
this.lineWriter.writeLine("Hello, %s, nice to meet you!".formatted(name));
3625
}
3726

3827
}

saying-hello/src/main/java/dev/delivercraft/hello/Main.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,16 @@
11
package dev.delivercraft.hello;
22

3+
import dev.delivercraft.io.InputStreamLineReader;
4+
import dev.delivercraft.io.LineReader;
5+
import dev.delivercraft.io.LineWriter;
6+
import dev.delivercraft.io.OutputStreamLineWriter;
7+
38
public final class Main {
49

510
void main() {
6-
GreetPrinter greetPrinter = new GreetPrinter(System.in, System.out);
11+
LineReader lineReader = new InputStreamLineReader(System.in);
12+
LineWriter lineWriter = new OutputStreamLineWriter(System.out);
13+
GreetPrinter greetPrinter = new GreetPrinter(lineReader, lineWriter);
714
greetPrinter.sayHello();
815
}
916

Lines changed: 37 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,53 @@
11
package dev.delivercraft.hello;
22

3-
import static org.assertj.core.api.Assertions.assertThat;
4-
5-
import java.io.ByteArrayInputStream;
6-
import java.io.ByteArrayOutputStream;
7-
import java.io.PrintStream;
3+
import dev.delivercraft.io.CapturingLineWriter;
4+
import dev.delivercraft.io.LineReader;
5+
import dev.delivercraft.io.LineWriter;
6+
import org.junit.jupiter.api.Test;
87
import org.junit.jupiter.params.ParameterizedTest;
98
import org.junit.jupiter.params.provider.ValueSource;
109

10+
import static org.assertj.core.api.Assertions.assertThat;
11+
1112
class GreetPrinterTests {
1213

14+
@Test
15+
void sayHello_ShouldAskForName() {
16+
LineReader lineReader = () -> "Durim";
17+
LineWriter lineWriter = new CapturingLineWriter();
18+
GreetPrinter greetPrinter = new GreetPrinter(lineReader, lineWriter);
19+
20+
greetPrinter.sayHello();
21+
22+
assertThat(lineWriter.toString())
23+
.containsOnlyOnce("What is your name?");
24+
}
25+
1326
@ParameterizedTest(name = "Given name: {0}")
1427
@ValueSource(strings = {"Durim", "John Doe"})
1528
void sayHello_GivenNameIsProvided_ShouldGreetProperly(String name) {
16-
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
17-
GreetPrinter greetPrinter = new GreetPrinter(new ByteArrayInputStream(name.getBytes()),
18-
new PrintStream(outputStream));
29+
LineReader lineReader = () -> name;
30+
LineWriter lineWriter = new CapturingLineWriter();
31+
GreetPrinter greetPrinter = new GreetPrinter(lineReader, lineWriter);
32+
33+
greetPrinter.sayHello();
34+
35+
assertThat(lineWriter.toString())
36+
.containsOnlyOnce("Hello, %s, nice to meet you!".formatted(name) + System.lineSeparator());
37+
}
38+
39+
@ParameterizedTest(name = "Given name: {0}")
40+
@ValueSource(strings = {"Durim", "John Doe"})
41+
void sayHello_GivenNameIsProvided_ShouldOutputPromptAndGreeting(String name) {
42+
LineReader lineReader = () -> name;
43+
LineWriter lineWriter = new CapturingLineWriter();
44+
GreetPrinter greetPrinter = new GreetPrinter(lineReader, lineWriter);
1945

2046
greetPrinter.sayHello();
2147

22-
assertThat(outputStream)
23-
.hasToString("Hello, %s, nice to meet you!%n", name);
48+
assertThat(lineWriter)
49+
.hasToString("What is your name? Hello, %s, nice to meet you!%s".formatted(name,
50+
System.lineSeparator()));
2451
}
2552

2653
}

0 commit comments

Comments
 (0)