/* * Eoulsan development code * * This code may be freely distributed and modified under the * terms of the GNU Lesser General Public License version 2.1 or * later and CeCILL-C. This should be distributed with the code. * If you do not have a copy, see: * * http://www.gnu.org/licenses/lgpl-2.1.txt * http://www.cecill.info/licences/Licence_CeCILL-C_V1-en.txt * * Copyright for this code is held jointly by the Genomic platform * of the Institut de Biologie de l'École normale supérieure and * the individual authors. These should be listed in @author doc * comments. * * For more information on the Eoulsan project and its aims, * or to join the Eoulsan Google group, visit the home page * at: * * http://outils.genomique.biologie.ens.fr/eoulsan * */ package fr.ens.biologie.genomique.eoulsan.bio; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotSame; import static org.junit.Assert.assertTrue; import htsjdk.samtools.SAMFileHeader; import htsjdk.samtools.SAMSequenceDictionary; import htsjdk.samtools.SAMSequenceRecord; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.junit.Test; import fr.ens.biologie.genomique.eoulsan.bio.GenomeDescription; import fr.ens.biologie.genomique.eoulsan.bio.SAMUtils; public class SAMUtilsTest { @Test public void readSAMHeaderTest() { final InputStream is = SAMUtilsTest.class.getResourceAsStream("/mapper_results_SE.sam"); String s = "@HD\tVN:1.4\n" + "@SQ\tSN:chr1\tLN:197195432\n" + "@SQ\tSN:chr2\tLN:181748087\n" + "@SQ\tSN:chr3\tLN:159599783\n" + "@SQ\tSN:chr4\tLN:155630120\n" + "@SQ\tSN:chr5\tLN:152537259\n" + "@SQ\tSN:chr6\tLN:149517037\n" + "@SQ\tSN:chr7\tLN:152524553\n" + "@SQ\tSN:chr8\tLN:131738871\n" + "@SQ\tSN:chr9\tLN:124076172\n" + "@SQ\tSN:chr10\tLN:129993255\n" + "@SQ\tSN:chr11\tLN:121843856\n" + "@SQ\tSN:chr12\tLN:121257530\n" + "@SQ\tSN:chr13\tLN:120284312\n" + "@SQ\tSN:chr14\tLN:125194864\n" + "@SQ\tSN:chr15\tLN:103494974\n" + "@SQ\tSN:chr16\tLN:98319150\n" + "@SQ\tSN:chr17\tLN:95272651\n" + "@SQ\tSN:chr18\tLN:90772031\n" + "@SQ\tSN:chr19\tLN:61342430\n" + "@SQ\tSN:chrX\tLN:166650296\n" + "@SQ\tSN:chrY\tLN:15902555\n" + "@SQ\tSN:chrMT\tLN:16299\n"; assertEquals(s, SAMUtils.readSAMHeader(is)); } @Test public void createGenomeDescriptionFromSAM() { final InputStream is = SAMUtilsTest.class.getResourceAsStream("/mapper_results_SE.sam"); final GenomeDescription desc = SAMUtils.createGenomeDescriptionFromSAM(is); assertEquals(22, desc.getSequenceCount()); assertFalse(desc.containsSequence("chr102")); assertTrue(desc.containsSequence("chr1")); assertNotSame(197195431, desc.getSequenceLength("chr1")); assertEquals(197195432, desc.getSequenceLength("chr1")); assertNotSame(197195433, desc.getSequenceLength("chr1")); assertEquals(197195432, desc.getSequenceLength("chr1")); assertEquals(181748087, desc.getSequenceLength("chr2")); assertEquals(159599783, desc.getSequenceLength("chr3")); assertEquals(155630120, desc.getSequenceLength("chr4")); assertEquals(152537259, desc.getSequenceLength("chr5")); assertEquals(149517037, desc.getSequenceLength("chr6")); assertEquals(152524553, desc.getSequenceLength("chr7")); assertEquals(131738871, desc.getSequenceLength("chr8")); assertEquals(124076172, desc.getSequenceLength("chr9")); assertEquals(129993255, desc.getSequenceLength("chr10")); assertEquals(121843856, desc.getSequenceLength("chr11")); assertEquals(121257530, desc.getSequenceLength("chr12")); assertEquals(120284312, desc.getSequenceLength("chr13")); assertEquals(125194864, desc.getSequenceLength("chr14")); assertEquals(103494974, desc.getSequenceLength("chr15")); assertEquals(98319150, desc.getSequenceLength("chr16")); assertEquals(95272651, desc.getSequenceLength("chr17")); assertEquals(90772031, desc.getSequenceLength("chr18")); assertEquals(61342430, desc.getSequenceLength("chr19")); assertEquals(166650296, desc.getSequenceLength("chrX")); assertEquals(15902555, desc.getSequenceLength("chrY")); assertEquals(16299, desc.getSequenceLength("chrMT")); } @Test public void newSAMFileHeader() { final GenomeDescription desc = new GenomeDescription(); desc.addSequence("chr1", 197195432); desc.addSequence("chr2", 181748087); desc.addSequence("chr3", 159599783); final SAMFileHeader header = SAMUtils.newSAMFileHeader(desc); assertEquals(3, header.getSequenceDictionary().size()); assertNotSame(197195431, header.getSequence("chr1").getSequenceLength()); assertEquals(197195432, header.getSequence("chr1").getSequenceLength()); assertNotSame(197195433, header.getSequence("chr1").getSequenceLength()); assertEquals(181748087, header.getSequence("chr2").getSequenceLength()); assertEquals(159599783, header.getSequence("chr3").getSequenceLength()); } @Test public void newSAMSequenceDictionaryTest() { final GenomeDescription desc = new GenomeDescription(); desc.addSequence("chr1", 197195432); desc.addSequence("chr2", 181748087); desc.addSequence("chr3", 159599783); final SAMSequenceDictionary dict = SAMUtils.newSAMSequenceDictionary(desc); assertEquals(3, dict.size()); assertNotSame(197195431, dict.getSequence("chr1").getSequenceLength()); assertEquals(197195432, dict.getSequence("chr1").getSequenceLength()); assertNotSame(197195433, dict.getSequence("chr1").getSequenceLength()); assertEquals(181748087, dict.getSequence("chr2").getSequenceLength()); assertEquals(159599783, dict.getSequence("chr3").getSequenceLength()); } @Test public void createGenomeDescriptionFromSAMTest() { final SAMFileHeader header = new SAMFileHeader(); GenomeDescription desc = SAMUtils.createGenomeDescriptionFromSAM(header); assertEquals(0, desc.getSequenceCount()); final List<SAMSequenceRecord> sequences = new ArrayList<>(); sequences.add(new SAMSequenceRecord("chr1", 197195432)); sequences.add(new SAMSequenceRecord("chr2", 181748087)); sequences.add(new SAMSequenceRecord("chr3", 159599783)); header.setSequenceDictionary(new SAMSequenceDictionary(sequences)); desc = SAMUtils.createGenomeDescriptionFromSAM(header); assertEquals(3, desc.getSequenceCount()); assertEquals(197195432, desc.getSequenceLength("chr1")); assertEquals(181748087, desc.getSequenceLength("chr2")); assertEquals(159599783, desc.getSequenceLength("chr3")); } }