org.gradle.util.LineBufferingOutputStreamTest Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of gradle-api Show documentation
Show all versions of gradle-api Show documentation
Gradle 6.9.1 API redistribution.
/*
* Copyright 2010 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.gradle.util;
import org.gradle.internal.SystemProperties;
import org.gradle.internal.io.LineBufferingOutputStream;
import org.gradle.internal.io.TextStream;
import org.jmock.Expectations;
import org.jmock.integration.junit4.JMock;
import org.jmock.integration.junit4.JUnit4Mockery;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import java.io.IOException;
@RunWith(JMock.class)
public class LineBufferingOutputStreamTest {
private final JUnit4Mockery context = new JUnit4GroovyMockery();
private TextStream action = context.mock(TextStream.class);
private String eol;
@Before
public void setUp() {
eol = SystemProperties.getInstance().getLineSeparator();
}
@After
public void tearDown() {
System.setProperty("line.separator", eol);
}
@Test
public void logsEachLineAsASeparateLogMessage() throws IOException {
LineBufferingOutputStream outputStream = new LineBufferingOutputStream(action, 8);
context.checking(new Expectations() {{
one(action).text(TextUtil.toPlatformLineSeparators("line 1\n"));
one(action).text(TextUtil.toPlatformLineSeparators("line 2\n"));
}});
outputStream.write(TextUtil.toPlatformLineSeparators("line 1\nline 2\n").getBytes());
}
@Test
public void buffersTextUntilEndOfLineReached() throws IOException {
System.setProperty("line.separator", "-");
LineBufferingOutputStream outputStream = new LineBufferingOutputStream(action, 8);
context.checking(new Expectations() {{
one(action).text("line 1-");
}});
outputStream.write("line ".getBytes());
outputStream.write("1-line 2".getBytes());
context.checking(new Expectations() {{
one(action).text("line 2-");
}});
outputStream.write("-".getBytes());
}
@Test
public void logsEmptyLines() throws IOException {
System.setProperty("line.separator", "-");
LineBufferingOutputStream outputStream = new LineBufferingOutputStream(action, 8);
context.checking(new Expectations() {{
one(action).text("-");
one(action).text("-");
}});
outputStream.write("--".getBytes());
}
@Test
public void handlesSingleCharacterLineSeparator() throws IOException {
System.setProperty("line.separator", "-");
LineBufferingOutputStream outputStream = new LineBufferingOutputStream(action, 8);
context.checking(new Expectations() {{
one(action).text("line 1-");
one(action).text("line 2-");
}});
outputStream.write(String.format("line 1-line 2-").getBytes());
}
@Test
public void handlesMultiCharacterLineSeparator() throws IOException {
final String separator = new String(new byte[]{'\r', '\n'});
System.setProperty("line.separator", separator);
LineBufferingOutputStream outputStream = new LineBufferingOutputStream(action, 8);
context.checking(new Expectations() {{
one(action).text("line 1" + separator);
one(action).text("line 2" + separator);
}});
outputStream.write(("line 1" + separator + "line 2" + separator).getBytes());
}
@Test
public void logsLineWhichIsLongerThanInitialBufferLength() throws IOException {
System.setProperty("line.separator", "-");
LineBufferingOutputStream outputStream = new LineBufferingOutputStream(action, 8);
context.checking(new Expectations() {{
one(action).text("a line longer than 8 bytes long-");
one(action).text("line 2");
}});
outputStream.write("a line longer than 8 bytes long-".getBytes());
outputStream.write("line 2".getBytes());
outputStream.flush();
}
@Test
public void logsPartialLineOnFlush() throws IOException {
LineBufferingOutputStream outputStream = new LineBufferingOutputStream(action, 8);
context.checking(new Expectations() {{
one(action).text("line 1");
}});
outputStream.write("line 1".getBytes());
outputStream.flush();
}
@Test
public void logsNothingOnCloseWhenNothingHasBeenWrittenToStream() throws IOException {
LineBufferingOutputStream outputStream = new LineBufferingOutputStream(action, 8);
context.checking(new Expectations() {{
one(action).endOfStream(null);
}});
outputStream.close();
}
@Test
public void logsNothingOnCloseWhenCompleteLineHasBeenWrittenToStream() throws IOException {
System.setProperty("line.separator", "-");
LineBufferingOutputStream outputStream = new LineBufferingOutputStream(action, 8);
context.checking(new Expectations() {{
one(action).text("line 1-");
one(action).endOfStream(null);
}});
outputStream.write("line 1-".getBytes());
outputStream.close();
}
@Test
public void logsPartialLineOnClose() throws IOException {
LineBufferingOutputStream outputStream = new LineBufferingOutputStream(action, 8);
context.checking(new Expectations() {{
one(action).text("line 1");
one(action).endOfStream(null);
}});
outputStream.write("line 1".getBytes());
outputStream.close();
}
@Test(expected = IOException.class)
public void cannotWriteAfterClose() throws IOException {
LineBufferingOutputStream outputStream = new LineBufferingOutputStream(action, 8);
context.checking(new Expectations() {{
one(action).endOfStream(null);
}});
outputStream.close();
outputStream.write("ignore me".getBytes());
}
@Test
public void splitsLongLines() throws IOException {
LineBufferingOutputStream outputStream = new LineBufferingOutputStream(action, 8, 13);
context.checking(new Expectations() {{
one(action).text("1234567890123");
one(action).text("4567890123456");
one(action).text("789");
one(action).endOfStream(null);
}});
outputStream.write("12345678901234567890123456789".getBytes());
outputStream.close();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy