+/*
+ * 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 <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
package jalview.util;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertNull;
import static org.testng.AssertJUnit.fail;
+import jalview.gui.JvOptionPane;
+
+import java.text.ParseException;
import java.util.List;
+import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
public class DnaUtilsTest
{
+
+ @BeforeClass(alwaysRun = true)
+ public void setUpJvOptionPane()
+ {
+ JvOptionPane.setInteractiveMode(false);
+ JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION);
+ }
+
/**
* Tests for parsing an ENA/GenBank location specifier
*
+ * @throws ParseException
+ *
* @see http://www.insdc.org/files/feature_table.html#3.4
*/
@Test(groups = { "Functional" })
- public void testParseLocation()
+ public void testParseLocation() throws ParseException
{
/*
* single locus
assertEquals(87064, ranges.get(1)[1]);
/*
- * beyond 5' or 3' locus
- */
- ranges = DnaUtils.parseLocation("<34..126");
- assertEquals(1, ranges.size());
- assertEquals(34, ranges.get(0)[0]);
- assertEquals(126, ranges.get(0)[1]);
- ranges = DnaUtils.parseLocation("35..>127");
- assertEquals(1, ranges.size());
- assertEquals(35, ranges.get(0)[0]);
- assertEquals(127, ranges.get(0)[1]);
-
- /*
* valid things we don't yet handle
*/
- assertNull(DnaUtils.parseLocation("34.126"));
- assertNull(DnaUtils.parseLocation("34^126"));
- assertNull(DnaUtils.parseLocation("order(34..126,130..180)"));
+ checkForParseException("<34..126");
+ checkForParseException("35..>126");
+ checkForParseException("34.126");
+ checkForParseException("34^126");
+ checkForParseException("order(34..126,130..180)");
/*
* invalid things
*/
- assertNull(DnaUtils.parseLocation(""));
- assertNull(DnaUtils.parseLocation("JOIN(1..2)"));
- assertNull(DnaUtils.parseLocation("join(1..2"));
- assertNull(DnaUtils.parseLocation("join(1..2("));
- assertNull(DnaUtils.parseLocation("complement(1..2"));
- assertNull(DnaUtils.parseLocation("complement(1..2("));
+ checkForParseException("");
+ checkForParseException("JOIN(1..2)");
+ checkForParseException("join(1..2");
+ checkForParseException("join(1..2(");
+ checkForParseException("complement(1..2");
+ checkForParseException("complement(1..2(");
try
{
assertNull(DnaUtils.parseLocation(null));
{
// expected
}
+
+ /*
+ * nested joins are not allowed; just as well since this fails to parse
+ * (splitting tokens by comma fragments the inner join expression)
+ */
+ checkForParseException("join(1..2,join(4..5,10..12),18..22)");
+ /*
+ * complement may not enclose multiple ranges
+ * parsing fails for the same reason
+ */
+ checkForParseException("join(complement(36618..36700,4000..4200),86988..87064)");
+ }
+
+ /**
+ * Verifies that a ParseException is thrown when the given location is parsed
+ *
+ * @param location
+ */
+ void checkForParseException(String location)
+ {
+ try
+ {
+ DnaUtils.parseLocation(location);
+ fail("Expected exception");
+ } catch (ParseException e)
+ {
+ // expected;
+ }
}
}