diff --git a/src/main/java/com/android/tools/r8/utils/FileUtils.java b/src/main/java/com/android/tools/r8/utils/FileUtils.java
index 5fc14e9..347e254 100644
--- a/src/main/java/com/android/tools/r8/utils/FileUtils.java
+++ b/src/main/java/com/android/tools/r8/utils/FileUtils.java
@@ -38,17 +38,17 @@
       System.getProperty("java.vm.name").equalsIgnoreCase("Dalvik");
 
   public static boolean isDexFile(Path path) {
-    String name = path.getFileName().toString().toLowerCase();
+    String name = StringUtils.toLowerCase(path.getFileName().toString());
     return name.endsWith(DEX_EXTENSION);
   }
 
   public static boolean isVDexFile(Path path) {
-    String name = path.getFileName().toString().toLowerCase();
+    String name = StringUtils.toLowerCase(path.getFileName().toString());
     return name.endsWith(VDEX_EXTENSION);
   }
 
   public static boolean isClassFile(String path) {
-    String name = path.toLowerCase();
+    String name = StringUtils.toLowerCase(path);
     // Android does not support Java 9 module, thus skip module-info.
     if (name.equals(MODULE_INFO_CLASS)) {
       return false;
@@ -61,32 +61,32 @@
   }
 
   public static boolean isJarFile(Path path) {
-    String name = path.getFileName().toString().toLowerCase();
+    String name = StringUtils.toLowerCase(path.getFileName().toString());
     return name.endsWith(JAR_EXTENSION);
   }
 
   public static boolean isZipFile(Path path) {
-    String name = path.getFileName().toString().toLowerCase();
+    String name = StringUtils.toLowerCase(path.getFileName().toString());
     return name.endsWith(ZIP_EXTENSION);
   }
 
   public static boolean isApkFile(Path path) {
-    String name = path.getFileName().toString().toLowerCase();
+    String name = StringUtils.toLowerCase(path.getFileName().toString());
     return name.endsWith(APK_EXTENSION);
   }
 
   public static boolean isAarFile(Path path) {
-    String name = path.getFileName().toString().toLowerCase();
+    String name = StringUtils.toLowerCase(path.getFileName().toString());
     return name.endsWith(AAR_EXTENSION);
   }
 
   public static boolean isJavaFile(Path path) {
-    String name = path.getFileName().toString().toLowerCase();
+    String name = StringUtils.toLowerCase(path.getFileName().toString());
     return name.endsWith(JAVA_EXTENSION);
   }
 
   public static boolean isArchive(Path path) {
-    String name = path.getFileName().toString().toLowerCase();
+    String name = StringUtils.toLowerCase(path.getFileName().toString());
     return name.endsWith(APK_EXTENSION)
         || name.endsWith(JAR_EXTENSION)
         || name.endsWith(ZIP_EXTENSION)
@@ -159,7 +159,7 @@
   }
 
   public static boolean isClassesDexFile(Path file) {
-    String name = file.getFileName().toString().toLowerCase();
+    String name = StringUtils.toLowerCase(file.getFileName().toString());
     if (!name.startsWith("classes") || !name.endsWith(DEX_EXTENSION)) {
       return false;
     }
diff --git a/src/main/java/com/android/tools/r8/utils/StringUtils.java b/src/main/java/com/android/tools/r8/utils/StringUtils.java
index 9885ab6..c38b351 100644
--- a/src/main/java/com/android/tools/r8/utils/StringUtils.java
+++ b/src/main/java/com/android/tools/r8/utils/StringUtils.java
@@ -12,6 +12,7 @@
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.function.Consumer;
@@ -480,4 +481,8 @@
     if (i2 == -1) return i1;
     return Math.min(i1, i2);
   }
+
+  public static String toLowerCase(String s) {
+    return s.toLowerCase(Locale.ROOT);
+  }
 }
diff --git a/src/main/java/com/android/tools/r8/utils/ZipUtils.java b/src/main/java/com/android/tools/r8/utils/ZipUtils.java
index 82952de..2ad1774 100644
--- a/src/main/java/com/android/tools/r8/utils/ZipUtils.java
+++ b/src/main/java/com/android/tools/r8/utils/ZipUtils.java
@@ -235,7 +235,7 @@
   }
 
   public static boolean isClassFile(String entry) {
-    String name = entry.toLowerCase();
+    String name = StringUtils.toLowerCase(entry);
     if (name.endsWith(MODULE_INFO_CLASS)) {
       return false;
     }
diff --git a/src/test/java/com/android/tools/r8/locale/TurkishLocaleMultiReleaseJarTest.java b/src/test/java/com/android/tools/r8/locale/TurkishLocaleMultiReleaseJarTest.java
index 9dd0da6..d5edd80 100644
--- a/src/test/java/com/android/tools/r8/locale/TurkishLocaleMultiReleaseJarTest.java
+++ b/src/test/java/com/android/tools/r8/locale/TurkishLocaleMultiReleaseJarTest.java
@@ -3,8 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.locale;
 
-import static org.hamcrest.CoreMatchers.containsString;
-import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertEquals;
 
 import com.android.tools.r8.D8;
@@ -13,9 +11,11 @@
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
 import com.android.tools.r8.ToolHelper;
+import com.android.tools.r8.ToolHelper.ArtCommandBuilder;
 import com.android.tools.r8.ToolHelper.ProcessResult;
 import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.FileUtils;
+import com.android.tools.r8.utils.StringUtils;
 import com.android.tools.r8.utils.ZipUtils.ZipBuilder;
 import com.google.common.collect.ImmutableList;
 import java.nio.file.Path;
@@ -51,7 +51,8 @@
                 "--lib",
                 ToolHelper.getAndroidJar(AndroidApiLevel.U).toAbsolutePath().toString(),
                 buildMultiReleaseJarWithUpperCaseMetaInf(workingDir).toString()));
-    checkResult(result);
+    assertEquals(0, result.exitCode);
+    runArtOnClassesDotDex(workingDir);
   }
 
   @Test
@@ -74,7 +75,8 @@
     ProcessResult result =
         ToolHelper.forkJavaWithJavaOptions(
             workingDir, ImmutableList.of("-Duser.language=tr"), R8.class, builder.build());
-    checkResult(result);
+    assertEquals(0, result.exitCode);
+    runArtOnClassesDotDex(workingDir);
   }
 
   private Path buildMultiReleaseJarWithUpperCaseMetaInf(Path dir) throws Exception {
@@ -94,11 +96,15 @@
     return jar;
   }
 
-  private void checkResult(ProcessResult result) {
-    assertEquals(1, result.exitCode);
-    assertThat(
-        result.stderr,
-        containsString("Type " + TestClass.class.getTypeName() + " is defined multiple times"));
+  private void runArtOnClassesDotDex(Path dir) throws Exception {
+    if (parameters.getRuntime().isCf()) {
+      return;
+    }
+    ArtCommandBuilder builder = new ArtCommandBuilder(parameters.getRuntime().asDex().getVm());
+    builder.appendClasspath(dir.resolve("classes.dex").toAbsolutePath().toString());
+    builder.setMainClass(TestClass.class.getTypeName());
+    String stdout = ToolHelper.runArt(builder);
+    assertEquals(StringUtils.lines("Hello, world!"), stdout);
   }
 
   static class TestClass {
diff --git a/src/test/java/com/android/tools/r8/locale/TurkishLocaleZipFileInputTest.java b/src/test/java/com/android/tools/r8/locale/TurkishLocaleZipFileInputTest.java
index 14a330e..c215eba 100644
--- a/src/test/java/com/android/tools/r8/locale/TurkishLocaleZipFileInputTest.java
+++ b/src/test/java/com/android/tools/r8/locale/TurkishLocaleZipFileInputTest.java
@@ -3,8 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.locale;
 
-import static org.hamcrest.CoreMatchers.containsString;
-import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertEquals;
 
 import com.android.tools.r8.D8;
@@ -13,9 +11,11 @@
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
 import com.android.tools.r8.ToolHelper;
+import com.android.tools.r8.ToolHelper.ArtCommandBuilder;
 import com.android.tools.r8.ToolHelper.ProcessResult;
 import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.FileUtils;
+import com.android.tools.r8.utils.StringUtils;
 import com.android.tools.r8.utils.ZipUtils.ZipBuilder;
 import com.google.common.collect.ImmutableList;
 import java.nio.file.Path;
@@ -51,7 +51,8 @@
                 "--lib",
                 ToolHelper.getAndroidJar(AndroidApiLevel.U).toAbsolutePath().toString(),
                 buildZipWithUpperCaseExtension(workingDir).toString()));
-    checkResult(result);
+    assertEquals(0, result.exitCode);
+    runArtOnClassesDotDex(workingDir);
   }
 
   @Test
@@ -78,7 +79,8 @@
             ImmutableList.of("-Duser.language=tr"),
             R8.class,
             builder.build());
-    checkResult(result);
+    assertEquals(0, result.exitCode);
+    runArtOnClassesDotDex(workingDir);
   }
 
   private Path buildZipWithUpperCaseExtension(Path dir) throws Exception {
@@ -91,9 +93,15 @@
     return jar;
   }
 
-  private void checkResult(ProcessResult result) {
-    assertEquals(1, result.exitCode);
-    assertThat(result.stderr, containsString("Unsupported source file type"));
+  private void runArtOnClassesDotDex(Path dir) throws Exception {
+    if (parameters.getRuntime().isCf()) {
+      return;
+    }
+    ArtCommandBuilder builder = new ArtCommandBuilder(parameters.getRuntime().asDex().getVm());
+    builder.appendClasspath(dir.resolve("classes.dex").toAbsolutePath().toString());
+    builder.setMainClass(TestClass.class.getTypeName());
+    String stdout = ToolHelper.runArt(builder);
+    assertEquals(StringUtils.lines("Hello, world!"), stdout);
   }
 
   static class TestClass {
