@DataProvider(name = "HasWellDefinedFragmentSizeData") public Object[][] makeHasWellDefinedFragmentSizeData() throws Exception { final List<Object[]> tests = new LinkedList<Object[]>(); // setup a basic read that will work final SAMFileHeader header = ArtificialSAMUtils.createArtificialSamHeader(); final GATKSAMRecord read = ArtificialSAMUtils.createArtificialRead(header, "read1", 0, 10, 10); read.setReadPairedFlag(true); read.setProperPairFlag(true); read.setReadUnmappedFlag(false); read.setMateUnmappedFlag(false); read.setAlignmentStart(100); read.setCigarString("50M"); read.setMateAlignmentStart(130); read.setInferredInsertSize(80); read.setFirstOfPairFlag(true); read.setReadNegativeStrandFlag(false); read.setMateNegativeStrandFlag(true); tests.add(new Object[] {"basic case", read.clone(), true}); { final GATKSAMRecord bad1 = (GATKSAMRecord) read.clone(); bad1.setReadPairedFlag(false); tests.add(new Object[] {"not paired", bad1, false}); } { final GATKSAMRecord bad = (GATKSAMRecord) read.clone(); bad.setProperPairFlag(false); // we currently don't require the proper pair flag to be set tests.add(new Object[] {"not proper pair", bad, true}); // tests.add( new Object[]{ "not proper pair", bad, false }); } { final GATKSAMRecord bad = (GATKSAMRecord) read.clone(); bad.setReadUnmappedFlag(true); tests.add(new Object[] {"read is unmapped", bad, false}); } { final GATKSAMRecord bad = (GATKSAMRecord) read.clone(); bad.setMateUnmappedFlag(true); tests.add(new Object[] {"mate is unmapped", bad, false}); } { final GATKSAMRecord bad = (GATKSAMRecord) read.clone(); bad.setMateNegativeStrandFlag(false); tests.add(new Object[] {"read and mate both on positive strand", bad, false}); } { final GATKSAMRecord bad = (GATKSAMRecord) read.clone(); bad.setReadNegativeStrandFlag(true); tests.add(new Object[] {"read and mate both on negative strand", bad, false}); } { final GATKSAMRecord bad = (GATKSAMRecord) read.clone(); bad.setInferredInsertSize(0); tests.add(new Object[] {"insert size is 0", bad, false}); } { final GATKSAMRecord bad = (GATKSAMRecord) read.clone(); bad.setAlignmentStart(1000); tests.add(new Object[] {"positve read starts after mate end", bad, false}); } { final GATKSAMRecord bad = (GATKSAMRecord) read.clone(); bad.setReadNegativeStrandFlag(true); bad.setMateNegativeStrandFlag(false); bad.setMateAlignmentStart(1000); tests.add(new Object[] {"negative strand read ends before mate starts", bad, false}); } return tests.toArray(new Object[][] {}); }