blob: b1280e4bb6aab5bc069cf472891c1821eac7b6db [file] [log] [blame]
// 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());
}
}