/* * The MIT License (MIT) * * Copyright (c) 2007-2015 Broad Institute * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ package org.broad.igv.variant.vcf; import org.broad.igv.AbstractHeadlessTest; import org.broad.igv.track.FeatureSource; import org.broad.igv.track.TribbleFeatureSource; import org.broad.igv.util.ResourceLocator; import org.broad.igv.util.TestUtils; import htsjdk.tribble.Feature; import htsjdk.tribble.readers.PositionalBufferedStream; import htsjdk.variant.bcf2.BCF2Codec; import org.junit.Ignore; import org.junit.Test; import java.io.FileInputStream; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; /** * @author jacob * @date 2013-Jun-14 */ public class BCFReaderTest extends AbstractHeadlessTest { /** * Just test that we load a BCF file without crashing * * @throws Exception */ @Test public void loadBCF() throws Exception { String path = TestUtils.DATA_DIR + "bcf/ex2.bcf"; FeatureSource source = TribbleFeatureSource.getFeatureSource(new ResourceLocator(path), genome); Iterator<Feature> features = source.getFeatures("chr20", 14000, 1300000); int count = 0; while (features.hasNext()) { features.next(); count++; } assertTrue("No features read", count > 0); } /** * Compare a BCF and VCF file * * @throws Exception */ @Test public void compareBCFtoVCF() throws Exception { String BCF2path = TestUtils.DATA_DIR + "bcf/ex2.bcf"; FeatureSource BCF2source = TribbleFeatureSource.getFeatureSource(new ResourceLocator(BCF2path), genome); Iterator<Feature> BCF2features = BCF2source.getFeatures("chr20", 14000, 1300000); List<VCFVariant> BCF2List = new ArrayList<VCFVariant>(); String VCFpath = TestUtils.DATA_DIR + "vcf/ex2.vcf"; TestUtils.createIndex(VCFpath); FeatureSource VCFsource = TribbleFeatureSource.getFeatureSource(new ResourceLocator(VCFpath), genome); Iterator<Feature> VCFfeatures = VCFsource.getFeatures("chr20", 14000, 1300000); List<VCFVariant> VCFList = new ArrayList<VCFVariant>(); while (BCF2features.hasNext()) { VCFVariant bcfV = (VCFVariant) BCF2features.next(); VCFVariant vcfV = (VCFVariant) VCFfeatures.next(); assertEquals(vcfV.getType(), bcfV.getType()); BCF2List.add(bcfV); VCFList.add(vcfV); } TestUtils.assertFeatureListsEqual(VCFList.iterator(), BCF2List.iterator()); } //Quick method for checking if a bcf file has the magic header @Ignore //@Test public void rawTestFile() throws Exception { String path = "/path/to/myfile.bcf"; PositionalBufferedStream ps = new PositionalBufferedStream(new FileInputStream(path)); BCF2Codec codec = new BCF2Codec(); codec.readHeader(ps); } }