package picard.sam;
import htsjdk.samtools.BamFileIoUtils;
import org.testng.Assert;
import org.testng.annotations.Test;
import picard.cmdline.CommandLineProgramTest;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class GatherBamFilesTest extends CommandLineProgramTest {
private static final File TEST_DATA_DIR = new File("testdata/picard/sam/GatherBamFiles");
private static final File ORIG_BAM = new File(TEST_DATA_DIR, "orig.bam");
private static final List<File> SPLIT_BAMS = Arrays.asList(
new File(TEST_DATA_DIR, "indUnknownChrom.bam"),
new File(TEST_DATA_DIR, "indchr1.bam"),
new File(TEST_DATA_DIR, "indchr2.bam"),
new File(TEST_DATA_DIR, "indchr3.bam"),
new File(TEST_DATA_DIR, "indchr4.bam"),
new File(TEST_DATA_DIR, "indchr5.bam"),
new File(TEST_DATA_DIR, "indchr6.bam"),
new File(TEST_DATA_DIR, "indchr7.bam"),
new File(TEST_DATA_DIR, "indchr8.bam")
);
public String getCommandLineProgramName() {
return GatherBamFiles.class.getSimpleName();
}
@Test
public void testTheGathering() throws Exception {
final File outputFile = File.createTempFile("gatherBamFilesTest.samFile.", BamFileIoUtils.BAM_FILE_EXTENSION);
final List<String> args = new ArrayList<String>();
for (final File splitBam : SPLIT_BAMS) {
args.add("INPUT=" + splitBam.getAbsolutePath());
}
args.add("OUTPUT=" + outputFile);
runPicardCommandLine(args);
// TODO - Should switch over to using invocation via new PicardCommandLine() - BUT the test here is accessing class members directly.
final CompareSAMs compareSAMs = new CompareSAMs();
compareSAMs.samFiles = Arrays.asList(ORIG_BAM, outputFile);
compareSAMs.doWork();
Assert.assertTrue(compareSAMs.areEqual());
}
@Test
public void sanityCheckTheGathering() throws Exception {
final File outputFile = File.createTempFile("gatherBamFilesTest.samFile.", BamFileIoUtils.BAM_FILE_EXTENSION);
final List<String> args = new ArrayList<String>();
for (final File splitBam : SPLIT_BAMS) {
args.add("INPUT=" + splitBam.getAbsolutePath());
}
args.add("OUTPUT=" + outputFile);
runPicardCommandLine(args);
// TODO - Should switch over to using invocation via new PicardCommandLine() - BUT the test here is accessing class members directly.
final CompareSAMs compareSAMs = new CompareSAMs();
compareSAMs.samFiles = Arrays.asList(ORIG_BAM, SPLIT_BAMS.get(0));
compareSAMs.doWork();
Assert.assertFalse(compareSAMs.areEqual());
}
}