[BAEL-2255] - implement more meaningful unit-test-like code examples for skip, mark and reset methods

This commit is contained in:
markoprevisic 2018-10-21 21:56:57 +02:00
parent 67cfde81f3
commit 7fa876cc6c
2 changed files with 54 additions and 68 deletions

View File

@ -3,6 +3,7 @@ package com.baeldung.bufferedreader;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.FileReader; import java.io.FileReader;
import java.io.IOException; import java.io.IOException;
import java.util.stream.Collectors;
public class BufferedReaderExample { public class BufferedReaderExample {
@ -19,14 +20,12 @@ public class BufferedReaderExample {
} }
public String readAllLinesWithStream(BufferedReader reader) { public String readAllLinesWithStream(BufferedReader reader) {
StringBuilder content = new StringBuilder(); return reader
reader.lines() .lines()
.forEach(line -> content.append(line) .collect(Collectors.joining(System.lineSeparator()));
.append(System.lineSeparator()));
return content.toString();
} }
public String readAllCharacters(BufferedReader reader) throws IOException { public String readAllCharsOneByOne(BufferedReader reader) throws IOException {
StringBuilder content = new StringBuilder(); StringBuilder content = new StringBuilder();
int value; int value;
@ -37,43 +36,18 @@ public class BufferedReaderExample {
return content.toString(); return content.toString();
} }
public String readAllCharactersUsingArray(BufferedReader reader) throws IOException { public String readMultipleChars(BufferedReader reader) throws IOException {
StringBuilder content = new StringBuilder(); char[] chars = new char[5];
int charsRead = reader.read(chars, 0, 5);
char[] buf = new char[512]; String result;
int charsRead; if (charsRead != -1) {
result = new String(chars);
while ((charsRead = reader.read(buf, 0, buf.length)) != -1) { } else {
content.append(buf, 0, charsRead); result = "";
} }
return content.toString(); return result;
}
public String readWithSkipping(BufferedReader reader) throws IOException {
StringBuilder content = new StringBuilder();
int value;
while ((value = reader.read()) != -1) {
content.append((char) value);
reader.skip(4);
}
return content.toString();
}
public String markAndReset(BufferedReader reader) throws IOException {
StringBuilder content = new StringBuilder();
reader.mark(512);
for (int i = 0; i < 3; i++) {
content.append(reader.readLine());
reader.reset();
reader.mark(512);
}
return content.toString();
} }
public String readFile() { public String readFile() {

View File

@ -1,13 +1,14 @@
package com.baeldung.bufferedreader; package com.baeldung.bufferedreader;
import org.junit.Test; import org.junit.Test;
import org.springframework.util.StringUtils;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.FileReader; import java.io.FileReader;
import java.io.IOException; import java.io.IOException;
import java.io.StringReader;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.assertEquals;
public class BufferedReaderExampleUnitTest { public class BufferedReaderExampleUnitTest {
@ -44,47 +45,25 @@ public class BufferedReaderExampleUnitTest {
} }
@Test @Test
public void givenBufferedReader_whenReadAllCharacters_thenReturnsContent() throws IOException { public void givenBufferedReader_whenReadAllCharsOneByOne_thenReturnsContent() throws IOException {
BufferedReader reader = new BufferedReader(new FileReader(FILE_NAME)); BufferedReader reader = new BufferedReader(new FileReader(FILE_NAME));
BufferedReaderExample bre = new BufferedReaderExample(); BufferedReaderExample bre = new BufferedReaderExample();
String content = bre.readAllCharacters(reader); String content = bre.readAllCharsOneByOne(reader);
assertThat(content).isNotEmpty(); assertThat(content).isNotEmpty();
assertThat(content).contains("Lorem ipsum"); assertThat(content).contains("Lorem ipsum");
} }
@Test @Test
public void givenBufferedReader_whenReadAllCharactersUsingArray_thenReturnsContent() throws IOException { public void givenBufferedReader_whenReadMultipleChars_thenReturnsContent() throws IOException {
BufferedReader reader = new BufferedReader(new FileReader(FILE_NAME)); BufferedReader reader = new BufferedReader(new FileReader(FILE_NAME));
BufferedReaderExample bre = new BufferedReaderExample(); BufferedReaderExample bre = new BufferedReaderExample();
String content = bre.readAllCharactersUsingArray(reader); String content = bre.readMultipleChars(reader);
assertThat(content).isNotEmpty(); assertThat(content).isNotEmpty();
assertThat(content).contains("Lorem ipsum"); assertThat(content).contains("Lorem");
}
@Test
public void givenBufferedReader_whenReadWithSkipping_thenReturnsScrambledContent() throws IOException {
BufferedReader reader = new BufferedReader(new FileReader(FILE_NAME));
BufferedReaderExample bre = new BufferedReaderExample();
String content = bre.readWithSkipping(reader);
assertThat(content).isNotEmpty();
assertThat(content).contains("L mottneas");
}
@Test
public void givenBufferedReader_whenMarkAndReset_thenReturnsRepeatedContent() throws IOException {
BufferedReader reader = new BufferedReader(new FileReader(FILE_NAME));
BufferedReaderExample bre = new BufferedReaderExample();
String content = bre.markAndReset(reader);
assertThat(content.toString()).isNotEmpty();
assertThat(StringUtils.countOccurrencesOf(content.toString(), "Lorem ipsum")).isEqualTo(3);
} }
@Test @Test
@ -95,4 +74,37 @@ public class BufferedReaderExampleUnitTest {
assertThat(content.toString()).contains("Lorem ipsum"); assertThat(content.toString()).contains("Lorem ipsum");
} }
@Test
public void givenBufferedReader_whenSkipUnderscores_thenOk() throws IOException {
StringBuilder result = new StringBuilder();
try (BufferedReader reader = new BufferedReader(new StringReader("1__2__3__4__5"))) {
int value;
while((value = reader.read()) != -1) {
result.append((char) value);
reader.skip(2L);
}
}
assertEquals("12345", result.toString());
}
@Test
public void givenBufferedReader_whenSkipsWhitespacesAtBeginning_thenOk() throws IOException {
String result;
try (BufferedReader reader = new BufferedReader(new StringReader(" Lorem ipsum dolor sit amet."))) {
reader.mark(1);
while (Character.isWhitespace(reader.read())) {
reader.mark(1);
}
reader.reset();
result = reader.readLine();
}
assertEquals("Lorem ipsum dolor sit amet.", result);
}
} }