/* * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) * Copyright (C) $$Year-Rel$$ The Jalview Authors * * This file is part of Jalview. * * Jalview is free software: you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation, either version 3 * of the License, or (at your option) any later version. * * Jalview is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR * PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Jalview. If not, see . * The Jalview Authors are detailed in the 'AUTHORS' file. */ package jalview.ext.htsjdk; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertNotNull; import static org.testng.Assert.assertTrue; import static org.testng.Assert.fail; import jalview.datamodel.SequenceI; import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.StandardCopyOption; import org.testng.annotations.Test; /** * @author jprocter * */ public class TestHtsContigDb { @Test(groups = "Functional") public final void testGetSequenceProxy() throws Exception { String pathname = "test/jalview/ext/htsjdk/pgmB.fasta"; HtsContigDb db = new HtsContigDb("ADB", new File(pathname)); assertTrue(db.isValid()); assertTrue(db.isIndexed()); // htsjdk opens the .fai file SequenceI sq = db.getSequenceProxy("Deminut"); assertNotNull(sq); assertEquals(sq.getLength(), 606); /* * read a sequence earlier in the file */ sq = db.getSequenceProxy("PPL_06716"); assertNotNull(sq); assertEquals(sq.getLength(), 602); // dict = db.getDictionary(f, truncate)) } /** * Trying to open a .fai file directly results in IllegalArgumentException - * have to provide the unindexed file name instead */ @Test( groups = "Functional", expectedExceptions = java.lang.IllegalArgumentException.class) public final void testGetSequenceProxy_indexed() { String pathname = "test/jalview/ext/htsjdk/pgmB.fasta.fai"; new HtsContigDb("ADB", new File(pathname)); fail("Expected exception opening .fai file"); } /** * Tests that exercise * * * @throws IOException */ @Test(groups = "Functional") public void testCreateFastaSequenceIndex() throws IOException { File fasta = new File("test/jalview/ext/htsjdk/pgmB.fasta"); /* * create .fai with no overwrite fails if it exists */ try { HtsContigDb.createFastaSequenceIndex(fasta.toPath(), false); fail("Expected exception"); } catch (IOException e) { System.out.println( "Caught IOException in testCreateFastaSequenceIndex"); e.printStackTrace(); // expected } /* * create a copy of the .fasta (as a temp file) */ File copyFasta = File.createTempFile("copyFasta", ".fasta"); copyFasta.deleteOnExit(); assertTrue(copyFasta.exists()); Files.copy(fasta.toPath(), copyFasta.toPath(), StandardCopyOption.REPLACE_EXISTING); /* * open the Fasta file - not indexed, as no .fai file yet exists */ HtsContigDb db = new HtsContigDb("ADB", copyFasta); assertTrue(db.isValid()); assertFalse(db.isIndexed()); db.close(); /* * create the .fai index, re-open the .fasta file - now indexed */ HtsContigDb.createFastaSequenceIndex(copyFasta.toPath(), true); db = new HtsContigDb("ADB", copyFasta); assertTrue(db.isValid()); assertTrue(db.isIndexed()); db.close(); } /** * A convenience 'test' that may be run to create a .fai file for any given * fasta file * * @throws IOException */ @Test(enabled = false) public void testCreateIndex() throws IOException { File fasta = new File("test/jalview/io/vcf/contigs.fasta"); HtsContigDb.createFastaSequenceIndex(fasta.toPath(), true); } }