public static void testReaderWriter( final VariantContextIOTest tester, final VCFHeader header, final List<VariantContext> expected, final Iterable<VariantContext> vcs, final boolean recurse) throws IOException { final File tmpFile = File.createTempFile("testReaderWriter", tester.getExtension()); tmpFile.deleteOnExit(); // write expected to disk final EnumSet<Options> options = EnumSet.of(Options.INDEX_ON_THE_FLY); final VariantContextWriter writer = tester.makeWriter(tmpFile, options); writeVCsToFile(writer, header, vcs); // ensure writing of expected == actual final VariantContextContainer p = tester.readAllVCs(tmpFile); final Iterable<VariantContext> actual = p.getVCs(); assertEquals(actual, expected); if (recurse) { // if we are doing a recursive test, grab a fresh iterator over the written values final Iterable<VariantContext> read = tester.readAllVCs(tmpFile).getVCs(); testReaderWriter(tester, p.getHeader(), expected, read, false); } }
private static void makeEmpiricalTests() throws IOException { if (ENABLE_SOURCE_VCF_TESTS) { for (final File file : testSourceVCFs) { VCFCodec codec = new VCFCodec(); VariantContextContainer x = readAllVCs(file, codec); List<VariantContext> fullyDecoded = new ArrayList<VariantContext>(); for (final VariantContext raw : x.getVCs()) { if (raw != null) fullyDecoded.add(raw.fullyDecode(x.getHeader(), false)); } TEST_DATAs.add(new VariantContextTestData(x.getHeader(), fullyDecoded)); } } }
public static void testReaderWriterWithMissingGenotypes( final VariantContextIOTest tester, final VariantContextTestData data) throws IOException { final int nSamples = data.header.getNGenotypeSamples(); if (nSamples > 2) { for (final VariantContext vc : data.vcs) if (vc.isSymbolic()) // cannot handle symbolic alleles because they may be weird non-call VCFs return; final File tmpFile = File.createTempFile("testReaderWriter", tester.getExtension()); tmpFile.deleteOnExit(); // write expected to disk final EnumSet<Options> options = EnumSet.of(Options.INDEX_ON_THE_FLY); final VariantContextWriter writer = tester.makeWriter(tmpFile, options); final Set<String> samplesInVCF = new HashSet<String>(data.header.getGenotypeSamples()); final List<String> missingSamples = Arrays.asList("MISSING1", "MISSING2"); final List<String> allSamples = new ArrayList<String>(missingSamples); allSamples.addAll(samplesInVCF); final VCFHeader header = new VCFHeader(data.header.getMetaDataInInputOrder(), allSamples); writeVCsToFile(writer, header, data.vcs); // ensure writing of expected == actual final VariantContextContainer p = tester.readAllVCs(tmpFile); final Iterable<VariantContext> actual = p.getVCs(); int i = 0; for (final VariantContext readVC : actual) { if (readVC == null) continue; // sometimes we read null records... final VariantContext expected = data.vcs.get(i++); for (final Genotype g : readVC.getGenotypes()) { Assert.assertTrue(allSamples.contains(g.getSampleName())); if (samplesInVCF.contains(g.getSampleName())) { assertEquals(g, expected.getGenotype(g.getSampleName())); } else { // missing Assert.assertTrue(g.isNoCall()); } } } } }
public static void assertVCFandBCFFilesAreTheSame(final File vcfFile, final File bcfFile) throws IOException { final VariantContextContainer vcfData = readAllVCs(vcfFile, new VCFCodec()); final VariantContextContainer bcfData = readAllVCs(bcfFile, new BCF2Codec()); assertEquals(bcfData.getHeader(), vcfData.getHeader()); assertEquals(bcfData.getVCs(), vcfData.getVCs()); }