package com.scaleunlimited.cascading.local;
import static org.junit.Assert.*;
import java.io.File;
import org.junit.Test;
import cascading.flow.local.LocalFlowProcess;
import cascading.tap.SinkMode;
import cascading.tap.Tap;
import cascading.tap.local.FileTap;
import cascading.tuple.Fields;
import cascading.tuple.TupleEntryCollector;
import cascading.tuple.TupleEntryIterator;
public class TextLineSchemeTest {
@Test
public void testCompressedInput() throws Exception {
Tap unpackedTap = new FileTap(new TextLineScheme(), "src/test/resources/sample-text.txt", SinkMode.KEEP);
Tap packedTap = new FileTap(new TextLineScheme(), "src/test/resources/sample-text.txt.gz", SinkMode.KEEP);
TupleEntryIterator unpackedIter = unpackedTap.openForRead(new LocalFlowProcess());
TupleEntryIterator packedIter = packedTap.openForRead(new LocalFlowProcess());
while (unpackedIter.hasNext()) {
assertTrue(packedIter.hasNext());
assertEquals(unpackedIter.next(), packedIter.next());
}
assertFalse(packedIter.hasNext());
}
@Test
public void testCompressedOutput() throws Exception {
// We only want the line of text.
Tap unpackedTap = new FileTap(new TextLineScheme(new Fields("line")), "src/test/resources/sample-text.txt", SinkMode.KEEP);
final String outputDir = "build/test/TextLineSchemeTest/";
new File(outputDir).mkdirs();
final File outputFile = new File(outputDir + "sample-text-txt.gz");
outputFile.delete();
Tap resultTap = new FileTap(new TextLineScheme(true), outputFile.getAbsolutePath(), SinkMode.REPLACE);
TupleEntryIterator unpackedIter = unpackedTap.openForRead(new LocalFlowProcess());
TupleEntryCollector writer = resultTap.openForWrite(new LocalFlowProcess());
while (unpackedIter.hasNext()) {
writer.add(unpackedIter.next());
}
writer.close();
unpackedIter.close();
// Now verify that what we wrote matches what we're expecting.
Tap packedTap = new FileTap(new TextLineScheme(), "src/test/resources/sample-text.txt.gz", SinkMode.KEEP);
TupleEntryIterator packedIter = packedTap.openForRead(new LocalFlowProcess());
TupleEntryIterator resultIter = resultTap.openForRead(new LocalFlowProcess());
while (packedIter.hasNext()) {
assertTrue(resultIter.hasNext());
assertEquals(packedIter.next(), resultIter.next());
}
assertFalse(resultIter.hasNext());
}
}