@Test(expectedExceptions = IllegalArgumentException.class) public void testMakeCigarFromNullOperator() { Cigar.fromCigarOperators(null); }
@Test(dataProvider = "longCigarsData") public void testSetCigarRemovesCgTagWhenStillLong(final int numOps) throws Exception { final SAMRecordSetBuilder builder = new SAMRecordSetBuilder(true, SAMFileHeader.SortOrder.coordinate); final Cigar cigar = Cigar.fromCigarOperators(getCigarOperatorsForTest(numOps)); final SAMRecord frag1 = builder.addFrag("frag1", 0, 1, false, false, cigar.toString(), null, 30); final List<CigarOperator> cigarOperatorsForTest = getCigarOperatorsForTest(numOps); cigarOperatorsForTest.add(CigarOperator.H); final Cigar cigar2 = Cigar.fromCigarOperators(cigarOperatorsForTest); frag1.setCigar(cigar2); testHelper(builder, SAMFileHeader.SortOrder.coordinate, true); }
@Test public void testMakeCigarFromOperators() { final List<CigarOperator> cigarOperators = Arrays.asList( CigarOperator.S, CigarOperator.M, CigarOperator.M, CigarOperator.M, CigarOperator.I, CigarOperator.M, CigarOperator.D, CigarOperator.M ); final Cigar cigar = Cigar.fromCigarOperators(cigarOperators); Assert.assertFalse(cigar.isEmpty()); Assert.assertEquals(cigar.numCigarElements(), 6); Assert.assertEquals(cigar.toString(),"1S3M1I1M1D1M"); Assert.assertFalse(cigar.containsOperator(CigarOperator.N)); Assert.assertTrue(cigar.containsOperator(CigarOperator.D)); Assert.assertTrue(cigar.isLeftClipped()); Assert.assertFalse(cigar.isRightClipped()); Assert.assertTrue(cigar.isClipped()); }
@Test(dataProvider = "longCigarsData") public void testSetCigarStringRemovesCgTagWhenStillLong(final int numOps) throws Exception { final SAMRecordSetBuilder builder = new SAMRecordSetBuilder(true, SAMFileHeader.SortOrder.coordinate); final Cigar cigar = Cigar.fromCigarOperators(getCigarOperatorsForTest(numOps)); final SAMRecord frag1 = builder.addFrag("frag1", 0, 1, false, false, cigar.toString(), null, 30); final List<CigarOperator> cigarOperatorsForTest = getCigarOperatorsForTest(numOps); cigarOperatorsForTest.add(CigarOperator.H); final Cigar cigar2 = Cigar.fromCigarOperators(cigarOperatorsForTest); frag1.setCigarString(cigar2.toString()); testHelper(builder, SAMFileHeader.SortOrder.coordinate, true); }
@Test(dataProvider = "longCigarsData") public void testLongCigarsOneRead(final int numOps) throws Exception { final SAMRecordSetBuilder builder = new SAMRecordSetBuilder(true, SAMFileHeader.SortOrder.coordinate); final Cigar cigar = Cigar.fromCigarOperators(getCigarOperatorsForTest(numOps)); builder.addFrag("frag1", 0, 1, false, false, cigar.toString(), null, 30); testHelper(builder, SAMFileHeader.SortOrder.coordinate, true); }
@Test(dataProvider = "longCigarsData") public void testSetCigarRemovesCgTagWhenNoLongerLong(final int numOps) throws Exception { final SAMRecordSetBuilder builder = new SAMRecordSetBuilder(true, SAMFileHeader.SortOrder.coordinate); final Cigar cigar = Cigar.fromCigarOperators(getCigarOperatorsForTest(numOps)); final SAMRecord frag1 = builder.addFrag("frag1", 0, 1, false, false, cigar.toString(), null, 30); frag1.setCigarString(String.format("%dM", cigar.getReadLength())); testHelper(builder, SAMFileHeader.SortOrder.coordinate, true); }
@Test(dataProvider = "longCigarsData") public void testSetCigarStringRemovesCgTagWhenNoLongerLong(final int numOps) throws Exception { final SAMRecordSetBuilder builder = new SAMRecordSetBuilder(true, SAMFileHeader.SortOrder.coordinate); final Cigar cigar = Cigar.fromCigarOperators(getCigarOperatorsForTest(numOps)); final SAMRecord frag1 = builder.addFrag("frag1", 0, 1, false, false, cigar.toString(), null, 30); frag1.setCigarString(String.format("%dM", cigar.getReadLength())); testHelper(builder, SAMFileHeader.SortOrder.coordinate, true); }
@Test(dataProvider = "longCigarsData") public void testLongCigarsZerolengthRead(final int numOps) throws Exception { final SAMRecordSetBuilder builder = new SAMRecordSetBuilder(true, SAMFileHeader.SortOrder.coordinate); final Cigar cigar = Cigar.fromCigarOperators(getCigarOperatorsForTest(numOps)); final SAMRecord sam = builder.addFrag("frag1", 0, 1, false, false, cigar.toString(), null, 30); sam.setReadBases(new byte[]{}); sam.setBaseQualityString(""); // in htsjdk only secondary alignments are allowed to have read-length zero (doesn't validate otherwise) sam.setSecondaryAlignment(true); testHelper(builder, SAMFileHeader.SortOrder.coordinate, true); }
@Test(dataProvider = "longCigarsData") public void testClearAttributesDoesntVoidLongCigar(final int numOps) throws Exception { final SAMRecordSetBuilder builder = new SAMRecordSetBuilder(true, SAMFileHeader.SortOrder.coordinate); final Cigar cigar = Cigar.fromCigarOperators(getCigarOperatorsForTest(numOps)); builder.addFrag("frag1", 0, 1, false, false, cigar.toString(), null, 30); //encode as BAM into ByteArray final ByteArrayOutputStream baos = new ByteArrayOutputStream(); try (final BAMFileWriter writer = new BAMFileWriter(baos, null)) { writer.setHeader(builder.getHeader()); builder.getRecords().forEach(writer::addAlignment); } //read from ByteArray final BAMFileReader reader = new BAMFileReader(new ByteArrayInputStream(baos.toByteArray()), null, false, false, ValidationStringency.SILENT, new DefaultSAMRecordFactory()); final CloseableIterator<SAMRecord> iterator = reader.getIterator(); iterator.hasNext(); final SAMRecord recordFromBAM = iterator.next(); //clear attributes before explicitly accessing cigar or attributes recordFromBAM.clearAttributes(); // see that cigar is unscathed Assert.assertNotNull(recordFromBAM.getCigar()); Assert.assertFalse(BAMRecord.isSentinelCigar(recordFromBAM.getCigar(), recordFromBAM.getReadLength())); }
@Test(dataProvider = "longCigarsData") public void testBinNotNullWhenLargeCigarIsLoaded(final int numOps) throws Exception { final SAMRecordSetBuilder builder = new SAMRecordSetBuilder(true, SAMFileHeader.SortOrder.coordinate); final Cigar cigar = Cigar.fromCigarOperators(getCigarOperatorsForTest(numOps)); builder.addFrag("frag1", 0, 1, false, false, cigar.toString(), null, 30); final File bamFile = File.createTempFile("test.", BamFileIoUtils.BAM_FILE_EXTENSION); bamFile.deleteOnExit(); try (final SAMFileWriter bamWriter = new SAMFileWriterFactory().makeSAMOrBAMWriter(builder.getHeader(), false, bamFile)) { for (final SAMRecord record : builder.getRecords()) bamWriter.addAlignment(record); } try (final SamReader reader = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.SILENT).open(bamFile)) { reader.iterator().forEachRemaining(samRecord -> { samRecord.getCigar(); samRecord.computeIndexingBin(); }); } }