diff --git a/src/main/java/htsjdk/tribble/bed/BEDCodec.java b/src/main/java/htsjdk/tribble/bed/BEDCodec.java index 62d202c19..ea1e88989 100644 --- a/src/main/java/htsjdk/tribble/bed/BEDCodec.java +++ b/src/main/java/htsjdk/tribble/bed/BEDCodec.java @@ -23,6 +23,7 @@ */ package htsjdk.tribble.bed; +import htsjdk.tribble.AbstractFeatureReader; import htsjdk.tribble.AsciiFeatureCodec; import htsjdk.tribble.annotation.Strand; import htsjdk.tribble.index.tabix.TabixFormat; @@ -40,6 +41,9 @@ */ public class BEDCodec extends AsciiFeatureCodec { + /** Default extension for BED files. */ + public static final String BED_EXTENSION = ".bed"; + private static final Pattern SPLIT_PATTERN = Pattern.compile("\\t|( +)"); private final int startOffsetValue; @@ -197,7 +201,13 @@ private void createExons(int start, String[] tokens, FullBEDFeature gene, @Override public boolean canDecode(final String path) { - return path.toLowerCase().endsWith(".bed"); + final String toDecode; + if (AbstractFeatureReader.hasBlockCompressedExtension(path)) { + toDecode = path.substring(0, path.lastIndexOf(".")); + } else { + toDecode = path; + } + return toDecode.toLowerCase().endsWith(BED_EXTENSION); } public int getStartOffset() { diff --git a/src/test/java/htsjdk/tribble/bed/BEDCodecTest.java b/src/test/java/htsjdk/tribble/bed/BEDCodecTest.java index c7b21931c..474a8a89b 100644 --- a/src/test/java/htsjdk/tribble/bed/BEDCodecTest.java +++ b/src/test/java/htsjdk/tribble/bed/BEDCodecTest.java @@ -226,4 +226,15 @@ private void createIndex(File testFile, File idxFile) throws IOException { public void testGetTabixFormat() { Assert.assertEquals(new BEDCodec().getTabixFormat(), TabixFormat.BED); } + + @Test + public void testCanDecode() { + final BEDCodec codec = new BEDCodec(); + final String pattern = "filename.%s%s"; + for(final String bcExt: AbstractFeatureReader.BLOCK_COMPRESSED_EXTENSIONS) { + Assert.assertTrue(codec.canDecode(String.format(pattern, "bed", bcExt))); + Assert.assertFalse(codec.canDecode(String.format(pattern, "vcf", bcExt))); + Assert.assertFalse(codec.canDecode(String.format(pattern, "bed.gzip", bcExt))); + } + } }