util: Add some useful path parsing functions

These two are useful for looking at path prefixes and rebasing the paths
onto other paths.
This commit is contained in:
James Shubin
2018-11-29 15:58:52 -05:00
parent aae714db6b
commit dc13d5d26b
2 changed files with 159 additions and 0 deletions

View File

@@ -816,6 +816,137 @@ func TestUtilFlattenListWithSplit1(t *testing.T) {
}
}
func TestRemoveBasePath0(t *testing.T) {
// expected successes...
if s, err := RemoveBasePath("/usr/bin/foo", "/usr/"); err != nil {
t.Errorf("unexpected error: %v", err)
} else if s != "bin/foo" {
t.Errorf("unexpected string, got: %s", s)
}
if s, err := RemoveBasePath("/usr/bin/project/", "/usr/"); err != nil {
t.Errorf("unexpected error: %v", err)
} else if s != "bin/project/" {
t.Errorf("unexpected string, got: %s", s)
}
if s, err := RemoveBasePath("/", "/"); err != nil {
t.Errorf("unexpected error: %v", err)
} else if s != "" { // TODO: is this correct?
t.Errorf("unexpected string, got: %s", s)
}
if s, err := RemoveBasePath("/usr/bin/project/", "/"); err != nil {
t.Errorf("unexpected error: %v", err)
} else if s != "usr/bin/project/" {
t.Errorf("unexpected string, got: %s", s)
}
if s, err := RemoveBasePath("/usr/bin/project/", "/usr/bin/"); err != nil {
t.Errorf("unexpected error: %v", err)
} else if s != "project/" {
t.Errorf("unexpected string, got: %s", s)
}
if s, err := RemoveBasePath("/usr/bin/foo", "/usr/bin/"); err != nil {
t.Errorf("unexpected error: %v", err)
} else if s != "foo" {
t.Errorf("unexpected string, got: %s", s)
}
// allow this one, even though it's relative paths
if s, err := RemoveBasePath("usr/bin/project/", "usr/"); err != nil {
t.Errorf("unexpected error: %v", err)
} else if s != "bin/project/" {
t.Errorf("unexpected string, got: %s", s)
}
// expected errors...
if s, err := RemoveBasePath("", ""); err == nil {
t.Errorf("expected error, got: %s", s)
}
if s, err := RemoveBasePath("", "/usr/"); err == nil {
t.Errorf("expected error, got: %s", s)
}
if s, err := RemoveBasePath("usr/bin/project/", ""); err == nil {
t.Errorf("expected error, got: %s", s)
}
if s, err := RemoveBasePath("usr/bin/project/", "/usr/"); err == nil {
t.Errorf("expected error, got: %s", s)
}
if s, err := RemoveBasePath("/usr/bin/project/", "usr/"); err == nil {
t.Errorf("expected error, got: %s", s)
}
// allow this one, even though it's relative paths
//if s, err := RemoveBasePath("usr/bin/project/", "usr/"); err == nil {
// t.Errorf("expected error, got: %s", s)
//}
if s, err := RemoveBasePath("/usr/bin/project/", "/bin/"); err == nil {
t.Errorf("expected error, got: %s", s)
}
}
func TestRebasePath0(t *testing.T) {
// expected successes...
if s, err := Rebase("/usr/bin/foo", "/usr/", "/usr/local/"); err != nil {
t.Errorf("unexpected error: %v", err)
} else if s != "/usr/local/bin/foo" {
t.Errorf("unexpected string, got: %s", s)
}
if s, err := Rebase("/usr/bin/project/", "/usr/", "/usr/local/"); err != nil {
t.Errorf("unexpected error: %v", err)
} else if s != "/usr/local/bin/project/" {
t.Errorf("unexpected string, got: %s", s)
}
if s, err := Rebase("/", "/", "/opt/"); err != nil {
t.Errorf("unexpected error: %v", err)
} else if s != "/opt/" { // TODO: is this correct?
t.Errorf("unexpected string, got: %s", s)
}
if s, err := Rebase("/usr/bin/project/", "/", "/opt/"); err != nil {
t.Errorf("unexpected error: %v", err)
} else if s != "/opt/usr/bin/project/" {
t.Errorf("unexpected string, got: %s", s)
}
if s, err := Rebase("/usr/bin/project/", "/usr/bin/", "/opt/"); err != nil {
t.Errorf("unexpected error: %v", err)
} else if s != "/opt/project/" {
t.Errorf("unexpected string, got: %s", s)
}
if s, err := Rebase("/usr/bin/foo", "/usr/bin/", "/opt/"); err != nil {
t.Errorf("unexpected error: %v", err)
} else if s != "/opt/foo" {
t.Errorf("unexpected string, got: %s", s)
}
// allow this one, even though it's relative paths
if s, err := Rebase("usr/bin/project/", "usr/", "/opt/"); err != nil {
t.Errorf("unexpected error: %v", err)
} else if s != "/opt/bin/project/" {
t.Errorf("unexpected string, got: %s", s)
}
// expected errors...
if s, err := Rebase("", "", "/opt/"); err == nil {
t.Errorf("expected error, got: %s", s)
}
if s, err := Rebase("", "/usr/", "/opt/"); err == nil {
t.Errorf("expected error, got: %s", s)
}
if s, err := Rebase("usr/bin/project/", "", "/opt/"); err == nil {
t.Errorf("expected error, got: %s", s)
}
if s, err := Rebase("usr/bin/project/", "/usr/", "/opt/"); err == nil {
t.Errorf("expected error, got: %s", s)
}
if s, err := Rebase("/usr/bin/project/", "usr/", "/opt/"); err == nil {
t.Errorf("expected error, got: %s", s)
}
// allow this one, even though it's relative paths
//if s, err := Rebase("usr/bin/project/", "usr/", "/opt/"); err == nil {
// t.Errorf("expected error, got: %s", s)
//}
if s, err := Rebase("/usr/bin/project/", "/bin/", "/opt/"); err == nil {
t.Errorf("expected error, got: %s", s)
}
if s, err := Rebase("/usr/bin/project", "/usr/", ""); err == nil {
t.Errorf("expected error, got: %s", s)
}
}
func TestSortedStrSliceCompare0(t *testing.T) {
slice0 := []string{"foo", "bar", "baz"}
slice1 := []string{"bar", "foo", "baz"}