Created
March 7, 2018 00:36
-
-
Save danielpclark/fb0e794b10e7f63f0010c82407b6653e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'test_helper' | |
class RelativePathFromTest < Minitest::Test | |
def test_relative_path_from | |
assert_equal FasterPath.relative_path_from("a", "b").to_s, "../a" | |
assert_equal FasterPath.relative_path_from("a", "b/").to_s, "../a" | |
assert_equal FasterPath.relative_path_from("a/", "b").to_s, "../a" | |
assert_equal FasterPath.relative_path_from("a/", "b/").to_s, "../a" | |
assert_equal FasterPath.relative_path_from("/a", "/b").to_s, "../a" | |
assert_equal FasterPath.relative_path_from("/a", "/b/").to_s, "../a" | |
assert_equal FasterPath.relative_path_from("/a/", "/b").to_s, "../a" | |
assert_equal FasterPath.relative_path_from("/a/", "/b/").to_s, "../a" | |
assert_equal FasterPath.relative_path_from("a/b", "a/c").to_s, "../b" | |
assert_equal FasterPath.relative_path_from("../a", "../b").to_s, "../a" | |
assert_equal FasterPath.relative_path_from("a", ".").to_s, "a" | |
assert_equal FasterPath.relative_path_from(".", "a").to_s, ".." | |
assert_equal FasterPath.relative_path_from(".", ".").to_s, "." | |
assert_equal FasterPath.relative_path_from("..", "..").to_s, "." | |
assert_equal FasterPath.relative_path_from("..", ".").to_s, ".." | |
assert_equal FasterPath.relative_path_from("/a/b/c/d", "/a/b").to_s, "c/d" | |
assert_equal FasterPath.relative_path_from("/a/b", "/a/b/c/d").to_s, "../.." | |
assert_equal FasterPath.relative_path_from("/e", "/a/b/c/d").to_s, "../../../../e" | |
assert_equal FasterPath.relative_path_from("a/b/c", "a/d").to_s, "../b/c" | |
assert_equal FasterPath.relative_path_from("/../a", "/b").to_s, "../a" | |
assert_equal FasterPath.relative_path_from("../a", "b").to_s, "../../a" | |
assert_equal FasterPath.relative_path_from("/a/../../b", "/b").to_s, "." | |
assert_equal FasterPath.relative_path_from("a/..", "a").to_s, ".." | |
assert_equal FasterPath.relative_path_from("a/../b", "b").to_s, "." | |
assert_equal FasterPath.relative_path_from("a", "b/..").to_s, "a" | |
assert_equal FasterPath.relative_path_from("b/c", "b/..").to_s, "b/c" | |
assert_raises(ArgumentError) { FasterPath.relative_path_from("/", ".") } | |
assert_raises(ArgumentError) { FasterPath.relative_path_from(".", "/") } | |
assert_raises(ArgumentError) { FasterPath.relative_path_from("a", "..") } | |
assert_raises(ArgumentError) { FasterPath.relative_path_from(".", "..") } | |
end | |
def relative_path_str(dest, base) | |
Pathname.new(dest).relative_path_from(Pathname.new(base)).to_s | |
end | |
def test_raises_an_error_when_the_two_paths_do_not_share_a_common_prefix | |
assert_raises(ArgumentError) { relative_path_str('/usr', 'foo') } | |
end | |
def test_raises_an_error_when_the_base_directory_has_dot_dot | |
assert_raises(ArgumentError) { relative_path_str('a', '..') } | |
end | |
def test_returns_a_path_relative_from_root | |
assert_equal relative_path_str('/usr', '/'), 'usr' | |
end | |
def test_returns_1_level_up_when_both_paths_are_relative | |
assert_equal relative_path_str('a', 'b'), '../a' | |
assert_equal relative_path_str('a', 'b/'), '../a' | |
end | |
def test_returns_a_relative_path_when_both_are_absolute | |
assert_equal relative_path_str('/a', '/b'), '../a' | |
end | |
def test_returns_a_path_relative_to_the_current_directory | |
assert_equal relative_path_str('/usr/bin/ls', '/usr'), 'bin/ls' | |
end | |
def test_returns_a_dot_when_base_and_dest_are_the_same | |
assert_equal relative_path_str('/usr', '/usr'), '.' | |
end | |
def test_returns_the_same_directory_with_a_non_clean_base_that_matches_the_current_dir | |
assert_equal relative_path_str('/usr', '/stuff/..'), 'usr' | |
end | |
def test_returns_a_relative_path_with_a_non_clean_base_that_matches_a_different_dir | |
assert_equal relative_path_str('/usr', '/stuff/../foo'), '../usr' | |
end | |
def test_returns_current_and_pattern_when_only_those_patterns_are_used | |
assert_equal relative_path_str('.', '.'), '.' | |
assert_equal relative_path_str('..', '..'), '.' | |
assert_equal relative_path_str('..', '.'), '..' | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment