package com.beijunyi.parallelgit.filesystem;
import java.io.IOException;
import java.nio.file.Files;
import org.eclipse.jgit.lib.Repository;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
public class FilesCopyAcrossSystemsTest extends AbstractGitFileSystemTest {
private Repository targetRepo;
private GitFileSystem targetGfs;
@Before
public void setupTargetSystem() throws IOException {
targetRepo = new TestRepository();
targetGfs = Gfs.newFileSystem(targetRepo);
initRepository();
}
@After
public void closeTargetSystem() throws IOException {
targetGfs.close();
targetRepo.close();
}
@Test
public void copyFileToAnotherSystem_theTargetFileShouldExist() throws IOException {
writeToCache("/source.txt");
commitToMaster();
initGitFileSystem();
GitPath source = gfs.getPath("/source.txt");
GitPath target = targetGfs.getPath("/target.txt");
Files.copy(source, target);
assertTrue(Files.exists(target));
}
@Test
public void copyFileToAnotherSystem_theTargetFileShouldHaveTheSameData() throws IOException {
byte[] expected = someBytes();
writeToCache("/source.txt", expected);
commitToMaster();
initGitFileSystem();
GitPath source = gfs.getPath("/source.txt");
GitPath target = targetGfs.getPath("/target.txt");
Files.copy(source, target);
assertArrayEquals(expected, Files.readAllBytes(target));
}
@Test
public void copyFileToAnotherSystem_theTargetFileSystemShouldBecomeDirty() throws IOException {
writeToCache("/source.txt");
commitToMaster();
initGitFileSystem();
GitPath source = gfs.getPath("/source.txt");
GitPath target = targetGfs.getPath("/target.txt");
Files.copy(source, target);
assertTrue(targetGfs.getStatusProvider().isDirty());
}
@Test
public void copyDirectoryToAnotherSystem_theTargetDirectoryShouldExist() throws IOException {
writeToCache("/source/file.txt");
commitToMaster();
initGitFileSystem();
GitPath source = gfs.getPath("/source");
GitPath target = targetGfs.getPath("/target");
Files.copy(source, target);
assertTrue(Files.exists(target));
}
@Test
public void copyDirectoryToAnotherSystem_theTargetDirectoryShouldHaveTheSameChildren() throws IOException {
writeToCache("/source/file1.txt");
writeToCache("/source/file2.txt");
commitToMaster();
initGitFileSystem();
GitPath source = gfs.getPath("/source");
GitPath target = targetGfs.getPath("/target");
Files.copy(source, target);
assertTrue(Files.exists(target.resolve("file1.txt")));
assertTrue(Files.exists(target.resolve("file2.txt")));
}
@Test
public void copyDirectoryToAnotherSystem_theChildrenInTheTargetDirectoryShouldHaveTheSameData() throws IOException {
byte[] expectedData1 = someBytes();
writeToCache("/source/file1.txt", expectedData1);
byte[] expectedData2 = someBytes();
writeToCache("/source/file2.txt", expectedData2);
commitToMaster();
initGitFileSystem();
GitPath source = gfs.getPath("/source");
GitPath target = targetGfs.getPath("/target");
Files.copy(source, target);
assertArrayEquals(expectedData1, Files.readAllBytes(target.resolve("file1.txt")));
assertArrayEquals(expectedData2, Files.readAllBytes(target.resolve("file2.txt")));
}
@Test
public void copyDirectoryToAnotherSystem_theTargetFileSystemShouldBecomeDirty() throws IOException {
writeToCache("/source/file.txt");
commitToMaster();
initGitFileSystem();
GitPath source = gfs.getPath("/source");
GitPath target = targetGfs.getPath("/target");
Files.copy(source, target);
assertTrue(targetGfs.getStatusProvider().isDirty());
}
}