102 lines
3.3 KiB
Java
102 lines
3.3 KiB
Java
/*
|
|
* This file is part of ComputerCraft - http://www.computercraft.info
|
|
* Copyright Daniel Ratcliffe, 2011-2022. Do not distribute without permission.
|
|
* Send enquiries to dratcliffe@gmail.com
|
|
*/
|
|
package dan200.computercraft.core.filesystem;
|
|
|
|
import com.google.common.io.ByteStreams;
|
|
import dan200.computercraft.api.filesystem.Mount;
|
|
import dan200.computercraft.core.TestFiles;
|
|
import dan200.computercraft.test.core.CloseScope;
|
|
import dan200.computercraft.test.core.filesystem.MountContract;
|
|
import org.junit.jupiter.api.AfterEach;
|
|
import org.junit.jupiter.api.BeforeAll;
|
|
import org.junit.jupiter.api.Test;
|
|
|
|
import java.io.File;
|
|
import java.io.FileOutputStream;
|
|
import java.io.IOException;
|
|
import java.nio.channels.Channels;
|
|
import java.nio.charset.StandardCharsets;
|
|
import java.util.zip.ZipEntry;
|
|
import java.util.zip.ZipOutputStream;
|
|
|
|
import static org.junit.jupiter.api.Assertions.*;
|
|
|
|
public class JarMountTest implements MountContract {
|
|
private static final File ZIP_FILE = TestFiles.get("jar-mount.zip").toFile();
|
|
|
|
private final CloseScope toClose = new CloseScope();
|
|
|
|
@BeforeAll
|
|
public static void before() throws IOException {
|
|
ZIP_FILE.getParentFile().mkdirs();
|
|
|
|
try (var stream = new ZipOutputStream(new FileOutputStream(ZIP_FILE))) {
|
|
stream.putNextEntry(new ZipEntry("root/"));
|
|
stream.closeEntry();
|
|
|
|
stream.putNextEntry(new ZipEntry("root/dir/"));
|
|
stream.closeEntry();
|
|
|
|
stream.putNextEntry(new ZipEntry("root/dir/file.lua").setLastModifiedTime(MODIFY_TIME));
|
|
stream.write("print('testing')".getBytes(StandardCharsets.UTF_8));
|
|
stream.closeEntry();
|
|
|
|
stream.putNextEntry(new ZipEntry("root/f.lua"));
|
|
stream.closeEntry();
|
|
}
|
|
}
|
|
|
|
@AfterEach
|
|
public void after() throws Exception {
|
|
toClose.close();
|
|
}
|
|
|
|
@Override
|
|
public Mount createSkeleton() throws IOException {
|
|
return toClose.add(new JarMount(ZIP_FILE, "root"));
|
|
}
|
|
|
|
private Mount createMount(String path) throws IOException {
|
|
return toClose.add(new JarMount(ZIP_FILE, "root/" + path));
|
|
}
|
|
|
|
@Test
|
|
public void mountsDir() throws IOException {
|
|
var mount = createMount("dir");
|
|
assertTrue(mount.isDirectory(""), "Root should be directory");
|
|
assertTrue(mount.exists("file.lua"), "File should exist");
|
|
}
|
|
|
|
@Test
|
|
public void mountsFile() throws IOException {
|
|
var mount = createMount("dir/file.lua");
|
|
assertTrue(mount.exists(""), "Root should exist");
|
|
assertFalse(mount.isDirectory(""), "Root should be a file");
|
|
}
|
|
|
|
@Test
|
|
public void opensFileFromFile() throws IOException {
|
|
var mount = createMount("dir/file.lua");
|
|
byte[] contents;
|
|
try (var stream = mount.openForRead("")) {
|
|
contents = ByteStreams.toByteArray(Channels.newInputStream(stream));
|
|
}
|
|
|
|
assertEquals(new String(contents, StandardCharsets.UTF_8), "print('testing')");
|
|
}
|
|
|
|
@Test
|
|
public void opensFileFromDir() throws IOException {
|
|
var mount = createMount("dir");
|
|
byte[] contents;
|
|
try (var stream = mount.openForRead("file.lua")) {
|
|
contents = ByteStreams.toByteArray(Channels.newInputStream(stream));
|
|
}
|
|
|
|
assertEquals(new String(contents, StandardCharsets.UTF_8), "print('testing')");
|
|
}
|
|
}
|