Skip to content

Commit dd431e5

Browse files
committed
Fix regular expression (and add tests failing previously)
1 parent ccad70a commit dd431e5

2 files changed

Lines changed: 27 additions & 1 deletion

File tree

src/main/java/htsjdk/samtools/SAMSequenceRecord.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ public class SAMSequenceRecord extends AbstractSAMHeaderRecord implements Clonea
8585
private static char[] WHITESPACE_CHARS = {' ', '\t', '\n', '\013', '\f', '\r'}; // \013 is vertical tab
8686

8787
// alternative sequence name regexp
88-
private static final Pattern ALTERNATIVE_SEQUENCE_NAME_REGEXP = Pattern.compile("[0-9A-Za-z][0-9A-Za-z*+.@-]*");
88+
private static final Pattern ALTERNATIVE_SEQUENCE_NAME_REGEXP = Pattern.compile("[0-9A-Za-z][0-9A-Za-z*+.@_|-]*");
8989
private static final String ALTERNATIVE_SEQUENCE_NAME_SEPARATOR = ",";
9090

9191
/** a (private) empty constructor is required for JAXB.XML-serialisation */

src/test/java/htsjdk/samtools/SAMSequenceRecordTest.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,32 @@ public void testAlternativeSequences() {
109109
Assert.assertEquals("@SQ\tSN:1\tLN:100\tAN:chr1,chr01,01,CM000663", chr1.getSAMString());
110110
}
111111

112+
@DataProvider
113+
public Object[][] validAlternativeSequences() {
114+
return new Object[][] {
115+
// only characters
116+
{"a"},
117+
{"alias"},
118+
// valid symbols after first character ('*', '+', '.', '@', '_', '|', '-')
119+
{"my*contig"},
120+
{"my+contig"},
121+
{"my.contig"},
122+
{"my@contig"},
123+
{"my_contig"},
124+
{"my|contig"},
125+
{"my-contig"}
126+
};
127+
}
128+
129+
@Test(dataProvider = "validAlternativeSequences")
130+
public void testValidAlternativeSequences(final String altName) {
131+
final SAMSequenceRecord contig = new SAMSequenceRecord("contig", 100);
132+
// should not throw
133+
contig.setAlternativeSequenceName(Collections.singleton(altName));
134+
Assert.assertTrue(contig.hasAlternativeSequenceNames());
135+
Assert.assertEquals(contig.getAlternativeSequenceNames(), Collections.singleton(altName));
136+
}
137+
112138
@DataProvider
113139
public Object[][] invalidAlternativeSequences() {
114140
return new Object[][] {

0 commit comments

Comments
 (0)