package au.gov.ga.earthsci.common.util;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
public class PatternPipeTest
{
private InputStream is;
@Before
public void setup()
{
is = new InputStream()
{
private int position = 0;
private String[] strings = new String[] { "one fish ", "two fi", "sh red fish blue fi", "sh" };
@Override
public int read(byte[] b, int off, int len) throws IOException
{
if (position < strings.length)
{
byte[] s = strings[position++].getBytes();
len = Math.min(len, s.length);
System.arraycopy(s, 0, b, off, len);
return len;
}
return -1;
}
@Override
public int read() throws IOException
{
return -1;
}
};
}
@Test
public void testSinglePattern() throws IOException
{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Map<String, byte[]> patterns = new HashMap<String, byte[]>();
patterns.put("fish", "fish".getBytes());
final List<String> patternsFound = new ArrayList<String>();
PatternPipe.copy(is, baos, patterns, new PatternPipe.Callback()
{
@Override
public void patternFound(String patternId, byte[] pattern, OutputStream out)
{
patternsFound.add(patternId);
}
});
Assert.assertEquals("one two red blue ", baos.toString());
Assert.assertArrayEquals(patternsFound.toArray(), new String[] { "fish", "fish", "fish", "fish" });
}
@Test
public void testMultiplePatterns() throws IOException
{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Map<String, byte[]> patterns = new HashMap<String, byte[]>();
patterns.put("fish", "fish".getBytes());
patterns.put("two", "two".getBytes());
patterns.put("red", "red ".getBytes());
final List<String> patternsFound = new ArrayList<String>();
PatternPipe.copy(is, baos, patterns, new PatternPipe.Callback()
{
@Override
public void patternFound(String patternId, byte[] pattern, OutputStream out)
{
patternsFound.add(patternId);
}
});
Assert.assertEquals("one blue ", baos.toString());
Assert.assertArrayEquals(patternsFound.toArray(), new String[] { "fish", "two", "fish", "red", "fish", "fish" });
}
}