| // Copyright (c) 2018 the R8 project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| package com.android.tools.r8; |
| |
| import static org.junit.Assert.assertTrue; |
| |
| import java.io.FileOutputStream; |
| import java.io.IOException; |
| import java.nio.charset.StandardCharsets; |
| import java.nio.file.Files; |
| import java.nio.file.Path; |
| import java.util.zip.ZipEntry; |
| import java.util.zip.ZipOutputStream; |
| import org.junit.Rule; |
| import org.junit.Test; |
| import org.junit.rules.TemporaryFolder; |
| |
| public class ArchiveClassFileProviderTest { |
| |
| @Rule |
| public TemporaryFolder temporaryFolder = new TemporaryFolder(); |
| |
| public Path createZip() throws IOException { |
| Path tempRoot = temporaryFolder.getRoot().toPath(); |
| Path zipFile = tempRoot.resolve("zipfile.zip"); |
| ZipOutputStream zipStream = |
| new ZipOutputStream(new FileOutputStream(zipFile.toFile()), StandardCharsets.UTF_8); |
| ZipEntry entry = new ZipEntry("non-ascii:$\u02CF"); |
| zipStream.putNextEntry(entry); |
| zipStream.write(10); |
| zipStream.close(); |
| return zipFile; |
| } |
| |
| @Test |
| public void testSystemLocale() throws IOException, ResourceException { |
| // Set the locale used for Paths to ASCII which will make Path creation fail |
| // for non-ascii names. |
| System.setProperty("sun.jnu.encoding", "ASCII"); |
| Path zipFile = createZip(); |
| new ArchiveClassFileProvider(zipFile); |
| ArchiveProgramResourceProvider.fromArchive(zipFile).getProgramResources(); |
| } |
| |
| @Test |
| public void testMultiReleaseJars() throws IOException { |
| Path jar = temporaryFolder.getRoot().toPath().resolve("classes.jar"); |
| try (ZipOutputStream output = new ZipOutputStream(Files.newOutputStream(jar))) { |
| output.putNextEntry(new ZipEntry("meta-inf/9/Test.class")); |
| output.closeEntry(); |
| output.putNextEntry(new ZipEntry("/meta-inf/9/Test.class")); |
| output.closeEntry(); |
| } |
| ArchiveClassFileProvider provider = new ArchiveClassFileProvider(jar); |
| assertTrue(provider.getClassDescriptors().isEmpty()); |
| } |
| } |