diff --git a/src/main/java/picard/vcf/UpdateVcfSequenceDictionary.java b/src/main/java/picard/vcf/UpdateVcfSequenceDictionary.java index c97265bf40..2471ebd701 100644 --- a/src/main/java/picard/vcf/UpdateVcfSequenceDictionary.java +++ b/src/main/java/picard/vcf/UpdateVcfSequenceDictionary.java @@ -36,7 +36,6 @@ import htsjdk.variant.variantcontext.writer.VariantContextWriterBuilder; import htsjdk.variant.vcf.VCFFileReader; import htsjdk.variant.vcf.VCFHeader; -import picard.PicardException; import picard.cmdline.CommandLineProgram; import picard.cmdline.CommandLineProgramProperties; import picard.cmdline.Option; @@ -44,8 +43,6 @@ import picard.cmdline.programgroups.VcfOrBcf; import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; /** * Takes a VCF file and a Sequence Dictionary (from a variety of file types) and updates the Sequence Dictionary in VCF. @@ -71,6 +68,8 @@ public class UpdateVcfSequenceDictionary extends CommandLineProgram { private final Log log = Log.getInstance(UpdateVcfSequenceDictionary.class); + static final String STD_OUT = "/dev/stdout"; + public static void main(final String[] args) { new UpdateVcfSequenceDictionary().instanceMainWithExit(args); } @@ -92,10 +91,12 @@ protected int doWork() { if (CREATE_INDEX) builder.setOption(Options.INDEX_ON_THE_FLY); - try { - builder.setOutputStream(new FileOutputStream(OUTPUT, false)); - } catch (final FileNotFoundException ex ) { - throw new PicardException("Could not open " + OUTPUT + ": " + ex.getMessage(), ex); + // handle stdout + if ( OUTPUT.getPath().equals(STD_OUT) ) { + builder.setOutputStream(System.out); + } + else { + builder.setOutputFile(OUTPUT); } final VariantContextWriter vcfWriter = builder.build(); diff --git a/src/test/java/picard/vcf/UpdateVcfSequenceDictionaryTest.java b/src/test/java/picard/vcf/UpdateVcfSequenceDictionaryTest.java index d98ec62b40..92b141ff8e 100644 --- a/src/test/java/picard/vcf/UpdateVcfSequenceDictionaryTest.java +++ b/src/test/java/picard/vcf/UpdateVcfSequenceDictionaryTest.java @@ -40,7 +40,7 @@ public class UpdateVcfSequenceDictionaryTest { private static final File TEST_DATA_PATH = new File("testdata/picard/vcf/"); private static final File OUTPUT_DATA_PATH = IOUtil.createTempDir("UpdateVcfSequenceDictionaryTest", null); - private static final String STD_OUT_FILE_NAME = OUTPUT_DATA_PATH + "/stdout.vcf"; + private static final File STD_OUT_FILE = new File(OUTPUT_DATA_PATH, "stdout.vcf"); @AfterClass public void teardown() { @@ -52,7 +52,7 @@ public static Object[][] outputFies() { return new Object[][] { {OUTPUT_DATA_PATH + "updateVcfSequenceDictionaryTest-delete-me.vcf"}, - {STD_OUT_FILE_NAME} + {UpdateVcfSequenceDictionary.STD_OUT} }; } @@ -64,9 +64,9 @@ public void testUpdateVcfSequenceDictionary(final String outputFileName) throws File outputFile = new File(outputFileName); outputFile.deleteOnExit(); - // Reassign the standard output to an ooutput stream file - if ( outputFileName.equals(STD_OUT_FILE_NAME) ) { - System.setOut(new PrintStream(STD_OUT_FILE_NAME)); + // Stream standard output a file + if ( outputFileName.equals(UpdateVcfSequenceDictionary.STD_OUT) ) { + System.setOut(new PrintStream(STD_OUT_FILE)); } final UpdateVcfSequenceDictionary updateVcfSequenceDictionary = new UpdateVcfSequenceDictionary(); @@ -76,6 +76,10 @@ public void testUpdateVcfSequenceDictionary(final String outputFileName) throws Assert.assertEquals(updateVcfSequenceDictionary.instanceMain(new String[0]), 0); + if ( outputFileName.equals(UpdateVcfSequenceDictionary.STD_OUT) ) { + outputFile = STD_OUT_FILE; + } + IOUtil.assertFilesEqual(samSequenceDictionaryVcf, outputFile); // A little extra checking.