+/*
+ * 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 java.text.ParseException;
import java.util.List;
import org.testng.annotations.Test;
/**
* 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
+ */
+ List<int[]> ranges = DnaUtils.parseLocation("467");
+ assertEquals(1, ranges.size());
+ assertEquals(467, ranges.get(0)[0]);
+ assertEquals(467, ranges.get(0)[1]);
+
+ /*
* simple range
*/
- List<int[]> ranges = DnaUtils.parseLocation("12..78");
+ ranges = DnaUtils.parseLocation("12..78");
assertEquals(1, ranges.size());
assertEquals(12, ranges.get(0)[0]);
assertEquals(78, ranges.get(0)[1]);
/*
* valid things we don't yet handle
*/
- assertNull(DnaUtils.parseLocation("<34..126"));
- assertNull(DnaUtils.parseLocation("34..>126"));
- assertNull(DnaUtils.parseLocation("34.126"));
- assertNull(DnaUtils.parseLocation("34^126"));
+ 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"));
+ 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;
+ }
}
}