// Copyright 2020 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package main import ( "runtime" "testing" ) func TestHasPathPrefix(t *testing.T) { for _, test := range []struct { desc, path, prefix string want bool }{ { desc: "empty_prefix", path: "a/b", prefix: "", want: true, }, { desc: "partial_prefix", path: "a/b", prefix: "a", want: true, }, { desc: "full_prefix", path: "a/b", prefix: "a/b", want: true, }, { desc: "partial_component", path: "aa/b", prefix: "a", want: false, }, } { t.Run(test.desc, func(t *testing.T) { if got := hasPathPrefix(test.path, test.prefix); got != test.want { t.Errorf("hasPathPrefix(%q, %q): got %v, want %v", test.path, test.prefix, got, test.want) } }) } } func TestHasFilePathPrefix(t *testing.T) { type test struct { desc, path, prefix string want bool } var tests []test if runtime.GOOS == "windows" { tests = []test{ { desc: "empty_prefix", path: `c:\a\b`, prefix: "", want: true, }, { desc: "drive_prefix", path: `c:\a\b`, prefix: `c:\`, want: true, }, { desc: "partial_prefix", path: `c:\a\b`, prefix: `c:\a`, want: true, }, { desc: "full_prefix", path: `c:\a\b`, prefix: `c:\a\b`, want: true, }, { desc: "partial_component", path: `c:\aa\b`, prefix: `c:\a`, want: false, }, } } else { tests = []test{ { desc: "empty_prefix", path: "/a/b", prefix: "", want: true, }, { desc: "partial_prefix", path: "/a/b", prefix: "/a", want: true, }, { desc: "full_prefix", path: "/a/b", prefix: "/a/b", want: true, }, { desc: "partial_component", path: "/aa/b", prefix: "/a", want: false, }, } } for _, test := range tests { t.Run(test.desc, func(t *testing.T) { if got := hasFilePathPrefix(test.path, test.prefix); got != test.want { t.Errorf("hasFilePathPrefix(%q, %q): got %v, want %v", test.path, test.prefix, got, test.want) } }) } } func TestTrimFilePathPrefix(t *testing.T) { type test struct { desc, path, prefix, want string } var tests []test if runtime.GOOS == "windows" { tests = []test{ // Note: these two cases in which the result preserves the leading \ // don't come up in reality in gorelease. That's because prefix is // always far to the right of the path parts (ex github.com/foo/bar // in C:\Users\foo\AppData\Local\Temp\...\github.com\foo\bar). { desc: "empty_prefix", path: `c:\a\b`, prefix: "", want: `\a\b`, }, { desc: "partial_component", path: `c:\aa\b`, prefix: `c:\a`, want: `\aa\b`, }, { desc: "drive_prefix", path: `c:\a\b`, prefix: `c:\`, want: `a\b`, }, { desc: "partial_prefix", path: `c:\a\b`, prefix: `c:\a`, want: `b`, }, { desc: "full_prefix", path: `c:\a\b`, prefix: `c:\a\b`, want: "", }, } } else { tests = []test{ { desc: "empty_prefix", path: "/a/b", prefix: "", want: "/a/b", }, { desc: "partial_prefix", path: "/a/b", prefix: "/a", want: "b", }, { desc: "full_prefix", path: "/a/b", prefix: "/a/b", want: "", }, { desc: "partial_component", path: "/aa/b", prefix: "/a", want: "/aa/b", }, } } for _, test := range tests { t.Run(test.desc, func(t *testing.T) { if got := trimFilePathPrefix(test.path, test.prefix); got != test.want { t.Errorf("hasFilePathPrefix(%q, %q): got %v, want %v", test.path, test.prefix, got, test.want) } }) } } func TestTrimPathPrefix(t *testing.T) { for _, test := range []struct { desc, path, prefix, want string }{ { desc: "empty_prefix", path: "a/b", prefix: "", want: "a/b", }, { desc: "abs_empty_prefix", path: "/a/b", prefix: "", want: "/a/b", }, { desc: "partial_prefix", path: "a/b", prefix: "a", want: "b", }, { desc: "full_prefix", path: "a/b", prefix: "a/b", want: "", }, { desc: "partial_component", path: "aa/b", prefix: "a", want: "aa/b", }, } { t.Run(test.desc, func(t *testing.T) { if got := trimPathPrefix(test.path, test.prefix); got != test.want { t.Errorf("trimPathPrefix(%q, %q): got %q, want %q", test.path, test.prefix, got, test.want) } }) } }