package com.beijunyi.parallelgit.filesystem;

import java.io.IOException;

import org.junit.Before;
import org.junit.Test;

import static org.junit.Assert.*;

public class GitPathEqualTest extends AbstractGitFileSystemTest {

  @Before
  public void setupFileSystem() throws IOException {
    initGitFileSystem();
  }

  @Test
  public void hashCodeOfAbsolutePathTest() {
    GitPath p1 = gfs.getPath("/a/b/c");
    GitPath p2 = gfs.getPath("/a/b/c");
    assertTrue(p1.equals(p2));
  }

  @Test
  public void hashCodeOfRelativePathTest() {
    GitPath p1 = gfs.getPath("a/b/c");
    GitPath p2 = gfs.getPath("a/b/c");
    assertTrue(p1.equals(p2));
  }

  @Test
  public void hashCodesFromDifferentPathsTest() {
    GitPath path = gfs.getPath("/a/b/c");
    assertFalse(path.equals(gfs.getPath("a/b/c")));
    assertFalse(path.equals(gfs.getPath("/a/b")));
    assertFalse(path.equals(gfs.getPath("/a/b/c/d")));
    assertFalse(path.equals(gfs.getPath("abc")));
    assertFalse(path.equals(gfs.getPath("/")));
    assertFalse(path.equals(gfs.getPath("")));
  }

  @Test
  public void hashCodesFromDifferentFileSystemTest() throws IOException {
    GitFileSystem other = Gfs.newFileSystem(repo);
    GitPath p1 = gfs.getPath("/a/b/c");
    GitPath p2 = other.getPath("/a/b/c");
    assertFalse(p1.equals(p2));
  }

}
