/* * 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.ui; import org.broad.igv.feature.genome.GenomeListItem; import org.broad.igv.feature.genome.GenomeManager; import org.broad.igv.ui.panel.FrameManager; import org.broad.igv.util.FileUtils; import org.broad.igv.util.StringUtils; import org.broad.igv.util.TestUtils; import org.junit.*; import org.junit.rules.TestRule; import org.junit.rules.Timeout; import java.io.File; import java.util.Collection; import static org.junit.Assert.*; /** * Test of class main. In general will use this to see that IGV * starts properly, given startup parameters. Since we will be starting * IGV in a non-standard way, do NOT inherit from AbstractHeadedTest * User: jacob * Date: 2012/05/04 */ public class MainTest { @Rule public TestRule testTimeout = new Timeout((int) 1e5); @BeforeClass public static void setUpClass() throws Exception { AbstractHeadedTest.assumeNotHeadless(); TestUtils.setUpTestEnvironment(); } @Before public void setUp() throws Exception { AbstractHeadedTest.stopGUI(); } @After public void tearDown() throws Exception { AbstractHeadedTest.stopGUI(); } @AfterClass public static void tearDownClass() throws Exception { AbstractHeadedTest.tearDownClass(); } /** * Test that loading IGV with a startup file and * locus loads that file and locus * * @throws Exception */ @Test public void testFileLocusArgs() throws Exception { String trackName = "NA12878.SLX.sample.bam"; String filePath = TestUtils.DATA_DIR + "bam/" + trackName; String genome = "hg18"; String locus = "chr1:9,703,210-9,727,225"; String[] args = new String[]{filePath, locus, "-g", genome}; //Need to wait for IGV to load file, genome, and move to locus IGV igv = startMain(args, 60000); //System.out.println(IGV.getInstance()); assertEquals(genome, igv.getGenomeManager().getGenomeId()); TestUtils.assertTrackLoaded(igv, trackName); String actLocus = FrameManager.getDefaultFrame().getFormattedLocusString(); assertEquals(locus, actLocus); } @Test public void testFileWithSpaces() throws Exception { String trackName = "test.wig"; String filePath = TestUtils.DATA_DIR + "folder with spaces/" + trackName; String[] args = new String[]{filePath}; //Need to wait for IGV to start and load file IGV igv = startMain(args, 10000); TestUtils.assertTrackLoaded(igv, trackName); } @Test public void testFileURLWithSpaces() throws Exception { String trackName = "test.wig"; String dir = StringUtils.encodeURL("folder with spaces"); String absFilePath = (new File(TestUtils.DATA_DIR)).getAbsolutePath(); absFilePath = absFilePath.replace("\\", "/"); String filePath = "file://" + absFilePath + "/" + dir + "/" + trackName; String[] args = new String[]{filePath}; //Need to wait for IGV to start and load file IGV igv = startMain(args, 10000); TestUtils.assertTrackLoaded(igv, trackName); } @Test public void testRemoteURLWithSpaces() throws Exception { String trackName = "test.wig"; String dir = StringUtils.encodeURL("folder with spaces"); String absFilePath = "www.broadinstitute.org/igvdata/unit_test_files"; String filePath = String.format("http://%s/%s/%s", absFilePath, dir, trackName); String[] args = new String[]{filePath}; //Need to wait for IGV to start and load file IGV igv = startMain(args, 10000); TestUtils.assertTrackLoaded(igv, trackName); } /** * Test loading a genome not in the display list , by id * * @throws Exception */ @Test public void testLoadGenomeById() throws Exception { String genomeId = "mm7"; Collection<GenomeListItem> genomeListItems = GenomeManager.getInstance().getGenomeListItems(); for (GenomeListItem gen : genomeListItems) { assertNotSame("Bad test setup, test genome in display list", gen.getId(), genomeId); } String[] args = new String[]{"-g", genomeId}; IGV igv = startMain(args, 10000); assertEquals(igv.getGenomeManager().getGenomeId(), genomeId); } /** * Test loading a genome not in the display list, by full path * * @throws Exception */ @Test public void testLoadGenomeByPath() throws Exception { String genomePath = TestUtils.DATA_DIR + "genomes/canFam2.unittest.genome"; String genomeId = "canFam2.unittest"; String[] args = new String[]{"-g", genomePath}; IGV igv = startMain(args, 10000); assertEquals(igv.getGenomeManager().getGenomeId(), genomeId); } /** * Test loading a fasta not in the display list, by full path * * @throws Exception */ @Test public void testLoadFastaByPath() throws Exception { String genomePath = TestUtils.DATA_DIR + "fasta/ecoli_out.padded.fasta"; String genomeId = genomePath; String[] args = new String[]{"-g", genomePath}; IGV igv = startMain(args, 5000); assertEquals(igv.getGenomeManager().getGenomeId(), genomeId); } /** * Test loading a fasta in working directory * This was GH #66 and IGV-2042 * * @throws Exception */ @Test public void testLoadFastaWorkDir() throws Exception { String genomeFiName = "ecoli_out.padded.fasta"; String srcGenomePath = TestUtils.DATA_DIR + "fasta/" + genomeFiName; File destFile = new File(genomeFiName); destFile.delete(); destFile.deleteOnExit(); FileUtils.copyFile(new File(srcGenomePath), destFile); String[] args = new String[]{"-g", genomeFiName}; IGV igv = startMain(args, 5000); assertEquals(igv.getGenomeManager().getGenomeId(), genomeFiName); } /* * Example version string: 2.3.27 */ @Test public void testVersionComparisons() throws Exception { String v1 = "2.3.27"; Main.Version version1 = Main.Version.getVersion(v1); assertEquals(2, version1.getMajor()); assertEquals(3, version1.getMinor()); assertEquals(27, version1.getBuild()); String v2 = "2.3.27"; Main.Version version2 = Main.Version.getVersion(v2); assertEquals(2, version2.getMajor()); assertEquals(3, version2.getMinor()); assertEquals(27, version2.getBuild()); assertFalse(version1.lessThan(version2)); assertFalse(version2.lessThan(version1)); String v3 = "2.3.26"; Main.Version version3 = Main.Version.getVersion(v3); assertFalse(version1.lessThan(version3)); String v4 = "2.3.28"; Main.Version version4 = Main.Version.getVersion(v4); assertTrue(version1.lessThan(version4)); } private IGV startMain(String[] args, long timeout) { Main.main(args); IGV igv = IGV.getInstance(); assertTrue(igv.waitForNotify(timeout)); return igv; } }