net.sf.expectit.ant.ExpectSupportImpl Maven / Gradle / Ivy
package net.sf.expectit.ant;
/*
* #%L
* ExpectIt
* %%
* Copyright (C) 2014 Alexey Gavrilov and contributors
* %%
* 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.
* #L%
*/
import java.io.Closeable;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.charset.Charset;
import java.util.Arrays;
import java.util.concurrent.TimeUnit;
import net.sf.expectit.Expect;
import net.sf.expectit.ExpectBuilder;
import net.sf.expectit.ant.filter.FiltersElement;
import org.apache.tools.ant.Task;
/**
* An implementation of the export support.
*/
public class ExpectSupportImpl implements Closeable, ExpectSupport {
private SequentialElement sequential;
private Expect expect;
private InputStream[] inputStreams = new InputStream[2];
private FiltersElement filters;
private final Task task;
private final ExpectBuilder builder;
ExpectSupportImpl(Task task, ExpectBuilder builder) {
this.task = task;
this.builder = builder;
}
/**
* Creates an instance for the given task.
*
* @param task the task
*/
public ExpectSupportImpl(Task task) {
this(task, new ExpectBuilder());
}
@Override
public void add(SequentialElement sequential) {
this.sequential = sequential;
}
@Override
public void setExpectTimeout(long ms) {
if (ms == -1) {
builder.withInfiniteTimeout();
} else {
builder.withTimeout(ms, TimeUnit.MILLISECONDS);
}
}
@Override
public void setCharset(String charset) {
builder.withCharset(Charset.forName(charset));
}
@Override
public void add(FiltersElement filters) {
this.filters = filters;
}
@Override
public void setErrorOnTimeout(boolean errorOnTimeout) {
builder.withErrorOnTimeout(errorOnTimeout);
}
@Override
public void setExceptionOnFailure(final boolean exceptionOnFailure) {
if (exceptionOnFailure) {
builder.withExceptionOnFailure();
}
}
@Override
public void setLineSeparator(String lineSeparator) {
builder.withLineSeparator(lineSeparator);
}
/**
* Constructs an instance of {@link Expect} and perform the sequential tasks on it.
*
* @throws IOException if an I/O error occurs
*/
public void execute() throws IOException {
if (sequential == null) {
throw new IllegalArgumentException("Sequential element is missing");
}
builder.withInputs(inputStreams);
if (filters != null) {
builder.withInputFilters(filters.toFilter());
}
expect = builder.build();
sequential.setExpect(expect);
sequential.perform();
}
@Override
public void close() throws IOException {
if (expect != null) {
expect.close();
}
}
/**
* Sets the output stream for the expect instance.
*
* @param output the output stream
* @see net.sf.expectit.ExpectBuilder#withOutput(java.io.OutputStream)
*/
public void setOutput(OutputStream output) {
builder.withOutput(output);
}
/**
* Sets the input streams for the expect instance.
*
* @param index the number of the input stream
* @param is the input stream
* @see net.sf.expectit.ExpectBuilder#withInputs(java.io.InputStream...)
*/
public void setInput(int index, InputStream is) {
if (index >= inputStreams.length) {
inputStreams = Arrays.copyOf(inputStreams, index + 1);
}
this.inputStreams[index] = is;
}
@Override
public void setEchoOutput(boolean echoOutput) {
if (echoOutput) {
builder.withEchoOutput(new EchoOutputAdapter(task));
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy