Commit 2817e5c8 authored by Samuel Huang's avatar Samuel Huang Committed by Commit Bot

[FileUtils] Fix getExtension() treatment of path separators.

This CL fixes how org.chromium.base.FileUtils.getExtension() treats
periods in paths. Also add test for getExtension().

Bug: 1067272, 1066730
Change-Id: I07d85727da90d508d69aa8a6ef026aabbdf19aed
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2134577
Commit-Queue: Samuel Huang <huangs@chromium.org>
Reviewed-by: default avatarAndrew Grieve <agrieve@chromium.org>
Cr-Commit-Position: refs/heads/master@{#756041}
parent a7615b11
...@@ -167,13 +167,14 @@ public class FileUtils { ...@@ -167,13 +167,14 @@ public class FileUtils {
/** /**
* Returns the file extension, or an empty string if none. * Returns the file extension, or an empty string if none.
* @param file Name of the file, with or without the full path. * @param file Name of the file, with or without the full path (Unix style).
* @return empty string if no extension, extension otherwise. * @return empty string if no extension, extension otherwise.
*/ */
public static String getExtension(String file) { public static String getExtension(String file) {
int index = file.lastIndexOf('.'); int lastSep = file.lastIndexOf('/');
if (index == -1) return ""; int lastDot = file.lastIndexOf('.');
return file.substring(index + 1).toLowerCase(Locale.US); if (lastSep >= lastDot) return ""; // Subsumes |lastDot == -1|.
return file.substring(lastDot + 1).toLowerCase(Locale.US);
} }
/** Queries and decodes bitmap from content provider. */ /** Queries and decodes bitmap from content provider. */
......
...@@ -212,6 +212,26 @@ public class FileUtilsTest { ...@@ -212,6 +212,26 @@ public class FileUtilsTest {
// TOOD(huangs): Implement testCopyStreamToFile(). // TOOD(huangs): Implement testCopyStreamToFile().
// TOOD(huangs): Implement testReadStream(). // TOOD(huangs): Implement testReadStream().
// TOOD(huangs): Implement testGetUriForFile(). // TOOD(huangs): Implement testGetUriForFile().
// TOOD(huangs): Implement testGetExtension().
@Test
public void testGetExtension() {
assertEquals("txt", FileUtils.getExtension("foo.txt"));
assertEquals("txt", FileUtils.getExtension("fOo.TxT"));
assertEquals("", FileUtils.getExtension(""));
assertEquals("", FileUtils.getExtension("No_extension"));
assertEquals("foo_config", FileUtils.getExtension(".foo_conFIG"));
assertEquals("6", FileUtils.getExtension("a.1.2.3.4.5.6"));
assertEquals("a1z2_a8z9", FileUtils.getExtension("a....a1z2_A8Z9"));
assertEquals("", FileUtils.getExtension("dotAtEnd."));
assertEquals("ext", FileUtils.getExtension("/Full/PATH/To/File.Ext"));
assertEquals("", FileUtils.getExtension("/Full.PATH/To.File/Extra"));
assertEquals("", FileUtils.getExtension("../../file"));
assertEquals("", FileUtils.getExtension("./etc/passwd"));
assertEquals("", FileUtils.getExtension("////////"));
assertEquals("", FileUtils.getExtension("........"));
assertEquals("", FileUtils.getExtension("././././"));
assertEquals("", FileUtils.getExtension("/./././."));
}
// TOOD(huangs): Implement testQueryBitmapFromContentProvider(). // TOOD(huangs): Implement testQueryBitmapFromContentProvider().
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment