util: Improve the test helper function and add a better one
This should help us write tests that use unique physical directories inside the directory tree.
This commit is contained in:
37
util/test.go
37
util/test.go
@@ -22,10 +22,12 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
// TestDir gets the absolute path to the test directory if it exists. This is a
|
// TestDir gets the absolute path to the test directory if it exists. If the dir
|
||||||
// utility function that is used in some tests.
|
// does not exist, then this will error, but the path will still be returned.
|
||||||
|
// This is a utility function that is used in some tests.
|
||||||
func TestDir(suffix string) (string, error) {
|
func TestDir(suffix string) (string, error) {
|
||||||
_, filename, _, ok := runtime.Caller(1)
|
_, filename, _, ok := runtime.Caller(1)
|
||||||
if !ok {
|
if !ok {
|
||||||
@@ -34,7 +36,36 @@ func TestDir(suffix string) (string, error) {
|
|||||||
dir := filepath.Dir(filename) + "/" // location of this test
|
dir := filepath.Dir(filename) + "/" // location of this test
|
||||||
testDir := dir + suffix // test directory
|
testDir := dir + suffix // test directory
|
||||||
if info, err := os.Stat(testDir); err != nil || !info.IsDir() {
|
if info, err := os.Stat(testDir); err != nil || !info.IsDir() {
|
||||||
return "", fmt.Errorf("error getting test dir, err was: %+v", err)
|
return testDir, fmt.Errorf("error getting test dir, err was: %+v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return testDir, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// TestDir gets the full absolute path to a unique test directory if it exists.
|
||||||
|
// If the dir does not exist, then this will error, but the path will still be
|
||||||
|
// returned. This is a utility function that is used in some tests.
|
||||||
|
func TestDirFull() (string, error) {
|
||||||
|
function, filename, _, ok := runtime.Caller(1)
|
||||||
|
if !ok {
|
||||||
|
return "", fmt.Errorf("could not determine filename")
|
||||||
|
}
|
||||||
|
dir := filepath.Dir(filename) + "/" // location of this test
|
||||||
|
name := filepath.Base(filename) // something like: foo_test.go
|
||||||
|
ext := filepath.Ext(name)
|
||||||
|
if ext != ".go" {
|
||||||
|
return "", fmt.Errorf("unexpected extension of: %s", ext)
|
||||||
|
}
|
||||||
|
name = strings.TrimSuffix(name, ext) + "/" // remove extension, add slash
|
||||||
|
fname := runtime.FuncForPC(function).Name() // full fqdn func name
|
||||||
|
ix := strings.LastIndex(fname, ".") // ends with package.<function name>
|
||||||
|
if fname == "" || ix == -1 {
|
||||||
|
return "", fmt.Errorf("function name not found")
|
||||||
|
}
|
||||||
|
fname = fname[ix+len("."):] + "/" // just the function name
|
||||||
|
testDir := dir + name + fname // full test directory
|
||||||
|
if info, err := os.Stat(testDir); err != nil || !info.IsDir() {
|
||||||
|
return testDir, fmt.Errorf("error getting test dir, err was: %+v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return testDir, nil
|
return testDir, nil
|
||||||
|
|||||||
Reference in New Issue
Block a user