package edu.mayo.bior.cli.func; import static org.junit.Assert.assertEquals; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.junit.Test; import com.tinkerpop.pipes.util.Pipeline; import edu.mayo.pipes.UNIX.CatPipe; public class CompressITCase extends BaseFunctionalTest { @Test public void testNormalPath() throws IOException, InterruptedException { System.out.println("CompressITCase.testNormalPath"); // have JSON for STDIN String stdin = "#COL1\tCOL2\tCOL3\n" + "dataA\t1\tA\n" + "dataA\t2\tB\n" + "dataA\t3\tC\n" + "dataB\t100\tW\n" + "dataB\t101\tX\n" + "dataC\t333\tZ\n"; String expected = "##BIOR=<ID=\"COL2\",Operation=\"bior_compress\",DataType=\"String\",Number=\".\",Delimiter=\"|\",EscapedDelimiter=\"\\|\">\n" + "##BIOR=<ID=\"COL3\",Operation=\"bior_compress\",DataType=\"String\",Number=\".\",Delimiter=\"|\",EscapedDelimiter=\"\\|\">\n" + "#COL1\tCOL2\tCOL3\n" + "dataA\t1|2|3\tA|B|C\n" + "dataB\t100|101\tW|X\n" + "dataC\t333\tZ\n"; CommandOutput out = executeScript("bior_compress", stdin, "2,3", "--log"); assertEquals("Exit code was not zero. " + out.stderr, 0, out.exit); assertEquals("StdErr was NOT null/empty, so there was a problem.", "", out.stderr); assertEquals("Expected did NOT match actual output!\nExpected:\n" + expected + "\n====================\n" + out.stdout, expected, out.stdout); } @Test public void testSeparator() throws IOException, InterruptedException { System.out.println("CompressITCase.testSeparator"); // have JSON for STDIN String stdin = "#COL1\tCOL2\tCOL3\n" + "dataA\t1\tA\n" + "dataA\t2\tB\n" + "dataA\t3\tC\n"; String expected = "##BIOR=<ID=\"COL2\",Operation=\"bior_compress\",DataType=\"String\",Number=\".\",Delimiter=\",\",EscapedDelimiter=\"\\|\">\n" + "##BIOR=<ID=\"COL3\",Operation=\"bior_compress\",DataType=\"String\",Number=\".\",Delimiter=\",\",EscapedDelimiter=\"\\|\">\n" + "#COL1\tCOL2\tCOL3\n" + "dataA\t1,2,3\tA,B,C\n"; CommandOutput out = executeScript("bior_compress", stdin,"--separator", ",", "2,3", "--log"); assertEquals("Exit code was not zero. " + out.stderr, 0, out.exit); assertEquals("StdErr was NOT null/empty, so there was a problem.", "", out.stderr); assertEquals("Expected did NOT match actual output!\nExpected:\n" + expected + "\n====================\n" + out.stdout, expected, out.stdout); } @Test public void testEscape() throws IOException, InterruptedException { System.out.println("CompressITCase.testEscape"); // have JSON for STDIN String stdin = "#COL1\tCOL2\n" + "dataA\t1,A\n" + "dataA\t2,B\n" + "dataA\t3,C\n"; String expected = "##BIOR=<ID=\"COL2\",Operation=\"bior_compress\",DataType=\"String\",Number=\".\",Delimiter=\",\",EscapedDelimiter=\"#\">\n" + "#COL1\tCOL2\n" + "dataA\t1#A,2#B,3#C\n"; CommandOutput out = executeScript("bior_compress", stdin,"--separator", ",", "--escape", "#", "2", "--log"); assertEquals("Exit code was not zero. " + out.stderr, 0, out.exit); assertEquals("StdErr was NOT null/empty, so there was a problem.", "", out.stderr); assertEquals("Expected did NOT match actual output!\nExpected:\n" + expected + "\n====================\n" + out.stdout, expected, out.stdout); } @Test public void testReverse() throws IOException, InterruptedException { System.out.println("CompressITCase.testReverse"); // have JSON for STDIN String stdin = "#COL1\tCOL2\n" + "dataA\t1\n" + "dataA\t2\n" + "dataB\t3\n"; String expected = "##BIOR=<ID=\"COL2\",Operation=\"bior_compress\",DataType=\"String\",Number=\".\",Delimiter=\"|\",EscapedDelimiter=\"\\|\">\n" + "#COL1\tCOL2\n" + "dataA\t1|2\n" + "dataB\t3\n"; // pick field 1 (RIGHT_TO_LEFT), so that's actually the 2nd column as the compress column CommandOutput out = executeScript("bior_compress", stdin, "--reverse", "1", "--log"); assertEquals("Exit code was not zero. " + out.stderr, 0, out.exit); assertEquals("StdErr was NOT null/empty, so there was a problem.", "", out.stderr); assertEquals("Expected did NOT match actual output!\nExpected:\n" + expected + "\n====================\n" + out.stdout, expected, out.stdout); } @Test public void testAlign() throws IOException, InterruptedException { System.out.println("CompressITCase.testAlign"); // have JSON for STDIN String stdin = "#COL1\tCOL2\tCOL3\n" + "dataA\t1\t.\n" + "dataA\t.\t.\n" + "dataA\t3\t.\n" + "dataB\t100\tW\n" + "dataB\t101\tW\n" + "dataB\t333\t.\n"; String expected = "##BIOR=<ID=\"COL2\",Operation=\"bior_compress\",DataType=\"String\",Number=\".\",Delimiter=\"|\",EscapedDelimiter=\"\\|\">\n" + "##BIOR=<ID=\"COL3\",Operation=\"bior_compress\",DataType=\"String\",Number=\".\",Delimiter=\"|\",EscapedDelimiter=\"\\|\">\n" + "#COL1\tCOL2\tCOL3\n" + "dataA\t1|.|3\t.|.|.\n" + "dataB\t100|101|333\tW|W|.\n"; CommandOutput out = executeScript("bior_compress", stdin, "--align", "2,3", "--log"); assertEquals("Exit code was not zero. " + out.stderr, 0, out.exit); assertEquals("StdErr was NOT null/empty, so there was a problem.", "", out.stderr); assertEquals("Expected did NOT match actual output!\nExpected:\n" + expected + "\n====================\n" + out.stdout, expected, out.stdout); } public final String VCF_IN = "src/test/resources/treat/gold.vcf"; public final String DBSNP_CATALOG = "src/test/resources/treat/brca1.dbsnp.tsv.gz"; public final String GENES_CATALOG = "src/test/resources/genes.tsv.bgz"; @Test public void testPipedCompressMetadata() throws IOException, InterruptedException { System.out.println("Test Piped Compress Metadata"); String cmd = String.format( "cat %s | bior_vcf_to_tjson | bior_overlap -d %s | bior_overlap -d %s | " + " bior_drill -p gene | bior_drill -p gene -c -2 | cut -f 1-8,10 | bior_compress 9 | bior_tjson_to_vcf ", VCF_IN, GENES_CATALOG, GENES_CATALOG ); List<String> expected = new ArrayList<String>(); Pipeline p = new Pipeline(new CatPipe()); while(p.hasNext()){String s = (String)p.next(); expected.add(s);} /* cut -f 1-8,10-12 */ System.out.println("Command: " + cmd); CommandOutput out = executeScriptWithPipes(cmd); String[] lines = out.stdout.split("\n"); int count = 0; for(String line : expected){ assertEquals(line, lines[count]); count++; } } }