mirror of https://github.com/markbates/pkger.git
hard candy
This commit is contained in:
parent
e45df3e5ac
commit
bb509c2487
2
Makefile
2
Makefile
|
@ -13,7 +13,7 @@ build: tidy
|
||||||
make tidy
|
make tidy
|
||||||
|
|
||||||
test: tidy
|
test: tidy
|
||||||
$(GO_BIN) test -cover -tags ${TAGS} -timeout 5s ./...
|
$(GO_BIN) test -cover -tags ${TAGS} -timeout 5s -race ./...
|
||||||
make tidy
|
make tidy
|
||||||
|
|
||||||
cov:
|
cov:
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
module github.com/markbates/pkger/examples/app
|
module github.com/markbates/pkger/examples/app
|
||||||
|
|
||||||
go 1.12
|
go 1.13
|
||||||
|
|
||||||
require github.com/markbates/pkger v0.0.0
|
require github.com/markbates/pkger v0.0.0
|
||||||
|
|
||||||
|
|
|
@ -1,16 +1,6 @@
|
||||||
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
|
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
|
||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
|
||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
|
||||||
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
|
|
||||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
|
||||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
|
||||||
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
|
||||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
|
||||||
github.com/markbates/errx v1.1.0/go.mod h1:PLa46Oex9KNbVDZhKel8v1OT7hD5JZ2eI7AHhA0wswc=
|
github.com/markbates/errx v1.1.0/go.mod h1:PLa46Oex9KNbVDZhKel8v1OT7hD5JZ2eI7AHhA0wswc=
|
||||||
github.com/markbates/pkger v0.0.0-20190830024022-c5e3a7de4d41 h1:bFEHpLBby7Qdvq92qw0TudeOfUKIZLcrweE/MMlNueI=
|
|
||||||
github.com/markbates/pkger v0.0.0-20190830024022-c5e3a7de4d41/go.mod h1:M9VeozwduQUCr6z54kJrK9JegpbOv4wiePSbgSbFOew=
|
|
||||||
github.com/markbates/pkger/examples/app v0.0.0-20190830175641-68f3a2a4571d/go.mod h1:cWIt8Tz1UjmFa2KRaVgTfWPfHP+gprnzxDxNpo4YDxo=
|
|
||||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
|
@ -18,7 +8,5 @@ github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJy
|
||||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
|
|
||||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
|
||||||
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
|
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
|
||||||
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
|
|
46
here/dir.go
46
here/dir.go
|
@ -8,34 +8,36 @@ import (
|
||||||
|
|
||||||
// Dir attempts to gather info for the requested directory.
|
// Dir attempts to gather info for the requested directory.
|
||||||
func Dir(p string) (Info, error) {
|
func Dir(p string) (Info, error) {
|
||||||
var i Info
|
return Cache(p, func(p string) (Info, error) {
|
||||||
|
var i Info
|
||||||
|
|
||||||
fi, err := os.Stat(p)
|
fi, err := os.Stat(p)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return i, err
|
return i, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if !fi.IsDir() {
|
if !fi.IsDir() {
|
||||||
p = filepath.Dir(p)
|
p = filepath.Dir(p)
|
||||||
}
|
}
|
||||||
|
|
||||||
pwd, err := os.Getwd()
|
pwd, err := os.Getwd()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return i, err
|
return i, err
|
||||||
}
|
}
|
||||||
|
|
||||||
defer os.Chdir(pwd)
|
defer os.Chdir(pwd)
|
||||||
|
|
||||||
os.Chdir(p)
|
os.Chdir(p)
|
||||||
|
|
||||||
b, err := run("go", "list", "-json")
|
b, err := run("go", "list", "-json")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return i, err
|
return i, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := json.Unmarshal(b, &i); err != nil {
|
if err := json.Unmarshal(b, &i); err != nil {
|
||||||
return i, err
|
return i, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return i, nil
|
return i, nil
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
18
here/here.go
18
here/here.go
|
@ -4,8 +4,13 @@ import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
|
"sync"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var cache = &infoMap{
|
||||||
|
data: &sync.Map{},
|
||||||
|
}
|
||||||
|
|
||||||
func run(n string, args ...string) ([]byte, error) {
|
func run(n string, args ...string) ([]byte, error) {
|
||||||
c := exec.Command(n, args...)
|
c := exec.Command(n, args...)
|
||||||
|
|
||||||
|
@ -19,3 +24,16 @@ func run(n string, args ...string) ([]byte, error) {
|
||||||
|
|
||||||
return bb.Bytes(), nil
|
return bb.Bytes(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Cache(p string, fn func(string) (Info, error)) (Info, error) {
|
||||||
|
i, ok := cache.Load(p)
|
||||||
|
if ok {
|
||||||
|
return i, nil
|
||||||
|
}
|
||||||
|
i, err := fn(p)
|
||||||
|
if err != nil {
|
||||||
|
return i, err
|
||||||
|
}
|
||||||
|
cache.Store(p, i)
|
||||||
|
return i, nil
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,87 @@
|
||||||
|
// Code generated by github.com/gobuffalo/mapgen. DO NOT EDIT.
|
||||||
|
|
||||||
|
package here
|
||||||
|
|
||||||
|
import (
|
||||||
|
"sort"
|
||||||
|
"sync"
|
||||||
|
)
|
||||||
|
|
||||||
|
// infoMap wraps sync.Map and uses the following types:
|
||||||
|
// key: string
|
||||||
|
// value: Info
|
||||||
|
type infoMap struct {
|
||||||
|
data *sync.Map
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete the key from the map
|
||||||
|
func (m *infoMap) Delete(key string) {
|
||||||
|
m.data.Delete(key)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load the key from the map.
|
||||||
|
// Returns Info or bool.
|
||||||
|
// A false return indicates either the key was not found
|
||||||
|
// or the value is not of type Info
|
||||||
|
func (m *infoMap) Load(key string) (Info, bool) {
|
||||||
|
i, ok := m.data.Load(key)
|
||||||
|
if !ok {
|
||||||
|
return Info{}, false
|
||||||
|
}
|
||||||
|
s, ok := i.(Info)
|
||||||
|
return s, ok
|
||||||
|
}
|
||||||
|
|
||||||
|
// LoadOrStore will return an existing key or
|
||||||
|
// store the value if not already in the map
|
||||||
|
func (m *infoMap) LoadOrStore(key string, value Info) (Info, bool) {
|
||||||
|
i, _ := m.data.LoadOrStore(key, value)
|
||||||
|
s, ok := i.(Info)
|
||||||
|
return s, ok
|
||||||
|
}
|
||||||
|
|
||||||
|
// LoadOr will return an existing key or
|
||||||
|
// run the function and store the results
|
||||||
|
func (m *infoMap) LoadOr(key string, fn func(*infoMap) (Info, bool)) (Info, bool) {
|
||||||
|
i, ok := m.Load(key)
|
||||||
|
if ok {
|
||||||
|
return i, ok
|
||||||
|
}
|
||||||
|
i, ok = fn(m)
|
||||||
|
if ok {
|
||||||
|
m.Store(key, i)
|
||||||
|
return i, ok
|
||||||
|
}
|
||||||
|
return i, false
|
||||||
|
}
|
||||||
|
|
||||||
|
// Range over the Info values in the map
|
||||||
|
func (m *infoMap) Range(f func(key string, value Info) bool) {
|
||||||
|
m.data.Range(func(k, v interface{}) bool {
|
||||||
|
key, ok := k.(string)
|
||||||
|
if !ok {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
value, ok := v.(Info)
|
||||||
|
if !ok {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return f(key, value)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Store a Info in the map
|
||||||
|
func (m *infoMap) Store(key string, value Info) {
|
||||||
|
m.data.Store(key, value)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Keys returns a list of keys in the map
|
||||||
|
func (m *infoMap) Keys() []string {
|
||||||
|
var keys []string
|
||||||
|
m.Range(func(key string, value Info) bool {
|
||||||
|
keys = append(keys, key)
|
||||||
|
return true
|
||||||
|
})
|
||||||
|
sort.Strings(keys)
|
||||||
|
return keys
|
||||||
|
}
|
24
here/pkg.go
24
here/pkg.go
|
@ -1,6 +1,8 @@
|
||||||
package here
|
package here
|
||||||
|
|
||||||
import "encoding/json"
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
)
|
||||||
|
|
||||||
// Package attempts to gather info for the requested package.
|
// Package attempts to gather info for the requested package.
|
||||||
//
|
//
|
||||||
|
@ -12,14 +14,16 @@ import "encoding/json"
|
||||||
// returned `Info` value and pass it to the `Dir(string) (Info, error)`
|
// returned `Info` value and pass it to the `Dir(string) (Info, error)`
|
||||||
// function to return the complete data.
|
// function to return the complete data.
|
||||||
func Package(p string) (Info, error) {
|
func Package(p string) (Info, error) {
|
||||||
var i Info
|
return Cache(p, func(p string) (Info, error) {
|
||||||
b, err := run("go", "list", "-json", "-find", p)
|
var i Info
|
||||||
if err != nil {
|
b, err := run("go", "list", "-json", "-find", p)
|
||||||
return i, err
|
if err != nil {
|
||||||
}
|
return i, err
|
||||||
if err := json.Unmarshal(b, &i); err != nil {
|
}
|
||||||
return i, err
|
if err := json.Unmarshal(b, &i); err != nil {
|
||||||
}
|
return i, err
|
||||||
|
}
|
||||||
|
|
||||||
return i, nil
|
return i, nil
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -85,29 +85,6 @@ func (m *Files) Load(key pkging.Path) (pkging.File, bool) {
|
||||||
return s, ok
|
return s, ok
|
||||||
}
|
}
|
||||||
|
|
||||||
// LoadOrStore will return an existing key or
|
|
||||||
// store the value if not already in the map
|
|
||||||
func (m *Files) LoadOrStore(key pkging.Path, value pkging.File) (pkging.File, bool) {
|
|
||||||
i, _ := m.Data().LoadOrStore(key, value)
|
|
||||||
s, ok := i.(pkging.File)
|
|
||||||
return s, ok
|
|
||||||
}
|
|
||||||
|
|
||||||
// LoadOr will return an existing key or
|
|
||||||
// run the function and store the results
|
|
||||||
func (m *Files) LoadOr(key pkging.Path, fn func(*Files) (pkging.File, bool)) (pkging.File, bool) {
|
|
||||||
i, ok := m.Load(key)
|
|
||||||
if ok {
|
|
||||||
return i, ok
|
|
||||||
}
|
|
||||||
i, ok = fn(m)
|
|
||||||
if ok {
|
|
||||||
m.Store(key, i)
|
|
||||||
return i, ok
|
|
||||||
}
|
|
||||||
return i, false
|
|
||||||
}
|
|
||||||
|
|
||||||
// Range over the pkging.File values in the map
|
// Range over the pkging.File values in the map
|
||||||
func (m *Files) Range(f func(key pkging.Path, value pkging.File) bool) {
|
func (m *Files) Range(f func(key pkging.Path, value pkging.File) bool) {
|
||||||
m.Data().Range(func(k, v interface{}) bool {
|
m.Data().Range(func(k, v interface{}) bool {
|
||||||
|
|
|
@ -71,29 +71,6 @@ func (m *Infos) Load(key string) (here.Info, bool) {
|
||||||
return s, ok
|
return s, ok
|
||||||
}
|
}
|
||||||
|
|
||||||
// LoadOrStore will return an existing key or
|
|
||||||
// store the value if not already in the map
|
|
||||||
func (m *Infos) LoadOrStore(key string, value here.Info) (here.Info, bool) {
|
|
||||||
i, _ := m.Data().LoadOrStore(key, value)
|
|
||||||
s, ok := i.(here.Info)
|
|
||||||
return s, ok
|
|
||||||
}
|
|
||||||
|
|
||||||
// LoadOr will return an existing key or
|
|
||||||
// run the function and store the results
|
|
||||||
func (m *Infos) LoadOr(key string, fn func(*Infos) (here.Info, bool)) (here.Info, bool) {
|
|
||||||
i, ok := m.Load(key)
|
|
||||||
if ok {
|
|
||||||
return i, ok
|
|
||||||
}
|
|
||||||
i, ok = fn(m)
|
|
||||||
if ok {
|
|
||||||
m.Store(key, i)
|
|
||||||
return i, ok
|
|
||||||
}
|
|
||||||
return i, false
|
|
||||||
}
|
|
||||||
|
|
||||||
// Range over the here.Info values in the map
|
// Range over the here.Info values in the map
|
||||||
func (m *Infos) Range(f func(key string, value here.Info) bool) {
|
func (m *Infos) Range(f func(key string, value here.Info) bool) {
|
||||||
m.Data().Range(func(k, v interface{}) bool {
|
m.Data().Range(func(k, v interface{}) bool {
|
||||||
|
|
|
@ -74,29 +74,6 @@ func (m *Paths) Load(key string) (pkging.Path, bool) {
|
||||||
return s, ok
|
return s, ok
|
||||||
}
|
}
|
||||||
|
|
||||||
// LoadOrStore will return an existing key or
|
|
||||||
// store the value if not already in the map
|
|
||||||
func (m *Paths) LoadOrStore(key string, value pkging.Path) (pkging.Path, bool) {
|
|
||||||
i, _ := m.Data().LoadOrStore(key, value)
|
|
||||||
s, ok := i.(pkging.Path)
|
|
||||||
return s, ok
|
|
||||||
}
|
|
||||||
|
|
||||||
// LoadOr will return an existing key or
|
|
||||||
// run the function and store the results
|
|
||||||
func (m *Paths) LoadOr(key string, fn func(*Paths) (pkging.Path, bool)) (pkging.Path, bool) {
|
|
||||||
i, ok := m.Load(key)
|
|
||||||
if ok {
|
|
||||||
return i, ok
|
|
||||||
}
|
|
||||||
i, ok = fn(m)
|
|
||||||
if ok {
|
|
||||||
m.Store(key, i)
|
|
||||||
return i, ok
|
|
||||||
}
|
|
||||||
return i, false
|
|
||||||
}
|
|
||||||
|
|
||||||
// Range over the Path values in the map
|
// Range over the Path values in the map
|
||||||
func (m *Paths) Range(f func(key string, value pkging.Path) bool) {
|
func (m *Paths) Range(f func(key string, value pkging.Path) bool) {
|
||||||
m.Data().Range(func(k, v interface{}) bool {
|
m.Data().Range(func(k, v interface{}) bool {
|
||||||
|
|
|
@ -95,6 +95,12 @@ func (fx *Pkger) RemoveAll(name string) error {
|
||||||
return true
|
return true
|
||||||
})
|
})
|
||||||
|
|
||||||
|
fx.paths.Range(func(key string, value pkging.Path) bool {
|
||||||
|
if strings.HasPrefix(key, pt.Name) {
|
||||||
|
fx.paths.Delete(key)
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
})
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,24 +4,28 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/markbates/pkger/here"
|
"github.com/markbates/pkger/here"
|
||||||
|
"github.com/markbates/pkger/pkging"
|
||||||
"github.com/markbates/pkger/pkging/pkgtest"
|
"github.com/markbates/pkger/pkging/pkgtest"
|
||||||
"github.com/stretchr/testify/require"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func Test_Pkger(t *testing.T) {
|
func Test_Pkger(t *testing.T) {
|
||||||
r := require.New(t)
|
suite, err := pkgtest.NewSuite("memos", func() (pkging.Pkger, error) {
|
||||||
|
info, err := here.Current()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
info, err := here.Current()
|
wh, err := New(info)
|
||||||
r.NoError(err)
|
if err != nil {
|
||||||
r.NotZero(info)
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
wh, err := New(info)
|
WithInfo(wh, info)
|
||||||
r.NoError(err)
|
return wh, nil
|
||||||
|
})
|
||||||
WithInfo(wh, info)
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
suite, err := pkgtest.NewSuite(wh)
|
}
|
||||||
r.NoError(err)
|
|
||||||
|
|
||||||
suite.Test(t)
|
suite.Test(t)
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,11 @@ import (
|
||||||
|
|
||||||
func (s Suite) Test_File_Info(t *testing.T) {
|
func (s Suite) Test_File_Info(t *testing.T) {
|
||||||
r := require.New(t)
|
r := require.New(t)
|
||||||
cur, err := s.Current()
|
|
||||||
|
pkg, err := s.Make()
|
||||||
|
r.NoError(err)
|
||||||
|
|
||||||
|
cur, err := pkg.Current()
|
||||||
r.NoError(err)
|
r.NoError(err)
|
||||||
|
|
||||||
ip := cur.ImportPath
|
ip := cur.ImportPath
|
||||||
|
@ -26,12 +30,12 @@ func (s Suite) Test_File_Info(t *testing.T) {
|
||||||
s.Run(t, tt.in, func(st *testing.T) {
|
s.Run(t, tt.in, func(st *testing.T) {
|
||||||
r := require.New(st)
|
r := require.New(st)
|
||||||
|
|
||||||
r.NoError(s.RemoveAll(mould))
|
r.NoError(pkg.RemoveAll(mould))
|
||||||
r.NoError(s.MkdirAll(filepath.Dir(tt.in), 0755))
|
r.NoError(pkg.MkdirAll(filepath.Dir(tt.in), 0755))
|
||||||
err := pkgutil.WriteFile(s, tt.in, []byte(mould), 0644)
|
err := pkgutil.WriteFile(pkg, tt.in, []byte(mould), 0644)
|
||||||
r.NoError(err)
|
r.NoError(err)
|
||||||
|
|
||||||
f, err := s.Open(tt.in)
|
f, err := pkg.Open(tt.in)
|
||||||
r.NoError(err)
|
r.NoError(err)
|
||||||
r.Equal(mould, f.Name())
|
r.Equal(mould, f.Name())
|
||||||
r.Equal(cur.ImportPath, f.Info().ImportPath)
|
r.Equal(cur.ImportPath, f.Info().ImportPath)
|
||||||
|
|
|
@ -7,6 +7,7 @@ import (
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/markbates/pkger/pkging"
|
||||||
"github.com/markbates/pkger/pkging/pkgutil"
|
"github.com/markbates/pkger/pkging/pkgutil"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
@ -29,7 +30,7 @@ import (
|
||||||
// └── b
|
// └── b
|
||||||
// └── b.txt
|
// └── b.txt
|
||||||
|
|
||||||
func (s Suite) LoadFolder() error {
|
func (s Suite) LoadFolder(pkg pkging.Pkger) error {
|
||||||
files := []string{
|
files := []string{
|
||||||
"/main.go",
|
"/main.go",
|
||||||
"/public/images/mark.png",
|
"/public/images/mark.png",
|
||||||
|
@ -39,10 +40,10 @@ func (s Suite) LoadFolder() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, f := range files {
|
for _, f := range files {
|
||||||
if err := s.MkdirAll(filepath.Dir(f), 0755); err != nil {
|
if err := pkg.MkdirAll(filepath.Dir(f), 0755); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := pkgutil.WriteFile(s, f, []byte("!"+f), 0644); err != nil {
|
if err := pkgutil.WriteFile(pkg, f, []byte("!"+f), 0644); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -52,7 +53,10 @@ func (s Suite) LoadFolder() error {
|
||||||
func (s Suite) Test_HTTP_Dir(t *testing.T) {
|
func (s Suite) Test_HTTP_Dir(t *testing.T) {
|
||||||
r := require.New(t)
|
r := require.New(t)
|
||||||
|
|
||||||
cur, err := s.Current()
|
pkg, err := s.Make()
|
||||||
|
r.NoError(err)
|
||||||
|
|
||||||
|
cur, err := pkg.Current()
|
||||||
r.NoError(err)
|
r.NoError(err)
|
||||||
ip := cur.ImportPath
|
ip := cur.ImportPath
|
||||||
|
|
||||||
|
@ -68,11 +72,13 @@ func (s Suite) Test_HTTP_Dir(t *testing.T) {
|
||||||
|
|
||||||
for _, tt := range table {
|
for _, tt := range table {
|
||||||
s.Run(t, tt.in+tt.req, func(st *testing.T) {
|
s.Run(t, tt.in+tt.req, func(st *testing.T) {
|
||||||
|
r := require.New(st)
|
||||||
|
|
||||||
r := require.New(t)
|
pkg, err := s.Make()
|
||||||
r.NoError(s.LoadFolder())
|
r.NoError(err)
|
||||||
|
r.NoError(s.LoadFolder(pkg))
|
||||||
|
|
||||||
dir, err := s.Open(tt.in)
|
dir, err := pkg.Open(tt.in)
|
||||||
r.NoError(err)
|
r.NoError(err)
|
||||||
defer dir.Close()
|
defer dir.Close()
|
||||||
|
|
||||||
|
@ -94,7 +100,10 @@ func (s Suite) Test_HTTP_Dir(t *testing.T) {
|
||||||
func (s Suite) Test_HTTP_Dir_IndexHTML(t *testing.T) {
|
func (s Suite) Test_HTTP_Dir_IndexHTML(t *testing.T) {
|
||||||
r := require.New(t)
|
r := require.New(t)
|
||||||
|
|
||||||
cur, err := s.Current()
|
pkg, err := s.Make()
|
||||||
|
r.NoError(err)
|
||||||
|
|
||||||
|
cur, err := pkg.Current()
|
||||||
r.NoError(err)
|
r.NoError(err)
|
||||||
ip := cur.ImportPath
|
ip := cur.ImportPath
|
||||||
|
|
||||||
|
@ -112,9 +121,12 @@ func (s Suite) Test_HTTP_Dir_IndexHTML(t *testing.T) {
|
||||||
s.Run(t, tt.in+exp, func(st *testing.T) {
|
s.Run(t, tt.in+exp, func(st *testing.T) {
|
||||||
r := require.New(st)
|
r := require.New(st)
|
||||||
|
|
||||||
r.NoError(s.LoadFolder())
|
pkg, err := s.Make()
|
||||||
|
r.NoError(err)
|
||||||
|
|
||||||
dir, err := s.Open(tt.in)
|
r.NoError(s.LoadFolder(pkg))
|
||||||
|
|
||||||
|
dir, err := pkg.Open(tt.in)
|
||||||
r.NoError(err)
|
r.NoError(err)
|
||||||
defer dir.Close()
|
defer dir.Close()
|
||||||
|
|
||||||
|
@ -138,7 +150,10 @@ func (s Suite) Test_HTTP_Dir_IndexHTML(t *testing.T) {
|
||||||
func (s Suite) Test_HTTP_File(t *testing.T) {
|
func (s Suite) Test_HTTP_File(t *testing.T) {
|
||||||
r := require.New(t)
|
r := require.New(t)
|
||||||
|
|
||||||
cur, err := s.Current()
|
pkg, err := s.Make()
|
||||||
|
r.NoError(err)
|
||||||
|
|
||||||
|
cur, err := pkg.Current()
|
||||||
r.NoError(err)
|
r.NoError(err)
|
||||||
ip := cur.ImportPath
|
ip := cur.ImportPath
|
||||||
|
|
||||||
|
@ -152,12 +167,14 @@ func (s Suite) Test_HTTP_File(t *testing.T) {
|
||||||
|
|
||||||
for _, tt := range table {
|
for _, tt := range table {
|
||||||
s.Run(t, tt.in, func(st *testing.T) {
|
s.Run(t, tt.in, func(st *testing.T) {
|
||||||
|
|
||||||
r := require.New(st)
|
r := require.New(st)
|
||||||
|
|
||||||
r.NoError(s.LoadFolder())
|
pkg, err := s.Make()
|
||||||
|
r.NoError(err)
|
||||||
|
|
||||||
dir, err := s.Open(tt.in)
|
r.NoError(s.LoadFolder(pkg))
|
||||||
|
|
||||||
|
dir, err := pkg.Open(tt.in)
|
||||||
r.NoError(err)
|
r.NoError(err)
|
||||||
defer dir.Close()
|
defer dir.Close()
|
||||||
|
|
||||||
|
|
|
@ -20,12 +20,21 @@ const hart = "/easy/listening/grant.hart"
|
||||||
const husker = "github.com/husker/du"
|
const husker = "github.com/husker/du"
|
||||||
|
|
||||||
type Suite struct {
|
type Suite struct {
|
||||||
pkging.Pkger
|
Name string
|
||||||
|
gen func() (pkging.Pkger, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewSuite(yourpkging pkging.Pkger) (Suite, error) {
|
func (s Suite) Make() (pkging.Pkger, error) {
|
||||||
|
if s.gen == nil {
|
||||||
|
return nil, fmt.Errorf("missing generator function")
|
||||||
|
}
|
||||||
|
return s.gen()
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewSuite(name string, fn func() (pkging.Pkger, error)) (Suite, error) {
|
||||||
suite := Suite{
|
suite := Suite{
|
||||||
Pkger: yourpkging,
|
Name: name,
|
||||||
|
gen: fn,
|
||||||
}
|
}
|
||||||
return suite, nil
|
return suite, nil
|
||||||
}
|
}
|
||||||
|
@ -34,39 +43,60 @@ func (s Suite) Test(t *testing.T) {
|
||||||
rv := reflect.ValueOf(s)
|
rv := reflect.ValueOf(s)
|
||||||
rt := rv.Type()
|
rt := rv.Type()
|
||||||
if rt.NumMethod() == 0 {
|
if rt.NumMethod() == 0 {
|
||||||
t.Fatalf("something went wrong wrong with %s %T", s, s)
|
t.Fatalf("something went wrong wrong with %s", s.Name)
|
||||||
}
|
}
|
||||||
for i := 0; i < rt.NumMethod(); i++ {
|
for i := 0; i < rt.NumMethod(); i++ {
|
||||||
m := rt.Method(i)
|
m := rt.Method(i)
|
||||||
if !strings.HasPrefix(m.Name, "Test_") {
|
if !strings.HasPrefix(m.Name, "Test_") {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
s.sub(t, m)
|
s.sub(t, m)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// func (s Suite) clone() (Suite, error) {
|
||||||
|
// if ns, ok := s.Pkger.(Newable); ok {
|
||||||
|
// pkg, err := ns.New()
|
||||||
|
// if err != nil {
|
||||||
|
// return s, err
|
||||||
|
// }
|
||||||
|
// s, err = NewSuite(pkg)
|
||||||
|
// if err != nil {
|
||||||
|
// return s, err
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// if ns, ok := s.Pkger.(WithRootable); ok {
|
||||||
|
// dir, err := ioutil.TempDir("", "")
|
||||||
|
// if err != nil {
|
||||||
|
// return s, err
|
||||||
|
// }
|
||||||
|
// // defer opkg.RemoveAll(dir)
|
||||||
|
//
|
||||||
|
// pkg, err := ns.WithRoot(dir)
|
||||||
|
// if err != nil {
|
||||||
|
// return s, err
|
||||||
|
// }
|
||||||
|
// s, err = NewSuite(pkg)
|
||||||
|
// if err != nil {
|
||||||
|
// return s, err
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// return s, nil
|
||||||
|
// }
|
||||||
|
|
||||||
func (s Suite) Run(t *testing.T, name string, fn func(t *testing.T)) {
|
func (s Suite) Run(t *testing.T, name string, fn func(t *testing.T)) {
|
||||||
t.Run(name, func(st *testing.T) {
|
t.Run(name, func(st *testing.T) {
|
||||||
defer func() {
|
|
||||||
if err := recover(); err != nil {
|
|
||||||
st.Fatal(err)
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
|
|
||||||
cleaner := func() {
|
|
||||||
if err := s.Clean(); err != nil {
|
|
||||||
st.Fatal(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
cleaner()
|
|
||||||
|
|
||||||
defer cleaner()
|
|
||||||
fn(st)
|
fn(st)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s Suite) sub(t *testing.T, m reflect.Method) {
|
func (s Suite) sub(t *testing.T, m reflect.Method) {
|
||||||
name := fmt.Sprintf("%T/%s", s.Pkger, m.Name)
|
name := fmt.Sprintf("%s/%s", s.Name, m.Name)
|
||||||
|
// s, err := s.clone()
|
||||||
|
// if err != nil {
|
||||||
|
// t.Fatal(err)
|
||||||
|
// }
|
||||||
s.Run(t, name, func(st *testing.T) {
|
s.Run(t, name, func(st *testing.T) {
|
||||||
m.Func.Call([]reflect.Value{
|
m.Func.Call([]reflect.Value{
|
||||||
reflect.ValueOf(s),
|
reflect.ValueOf(s),
|
||||||
|
@ -75,26 +105,13 @@ func (s Suite) sub(t *testing.T, m reflect.Method) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s Suite) Clean() error {
|
|
||||||
pt, err := s.Parse("/")
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
_ = pt
|
|
||||||
if err := s.RemoveAll(pt.Name); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if _, err := s.Stat(pt.Name); err == nil {
|
|
||||||
return fmt.Errorf("expected %q to be, you know, not there any more", pt)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s Suite) Test_Create(t *testing.T) {
|
func (s Suite) Test_Create(t *testing.T) {
|
||||||
r := require.New(t)
|
r := require.New(t)
|
||||||
cur, err := s.Current()
|
|
||||||
|
pkg, err := s.Make()
|
||||||
|
r.NoError(err)
|
||||||
|
|
||||||
|
cur, err := pkg.Current()
|
||||||
r.NoError(err)
|
r.NoError(err)
|
||||||
|
|
||||||
ip := cur.ImportPath
|
ip := cur.ImportPath
|
||||||
|
@ -104,22 +121,18 @@ func (s Suite) Test_Create(t *testing.T) {
|
||||||
{in: mould},
|
{in: mould},
|
||||||
{in: ":" + mould},
|
{in: ":" + mould},
|
||||||
{in: ip + ":" + mould},
|
{in: ip + ":" + mould},
|
||||||
{in: filepath.Dir(mould)},
|
|
||||||
{in: ":" + filepath.Dir(mould)},
|
|
||||||
{in: ip + ":" + filepath.Dir(mould)},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, tt := range table {
|
for _, tt := range table {
|
||||||
s.Run(t, tt.in, func(st *testing.T) {
|
s.Run(t, tt.in, func(st *testing.T) {
|
||||||
r := require.New(st)
|
r := require.New(st)
|
||||||
|
|
||||||
pt, err := s.Parse(tt.in)
|
pt, err := pkg.Parse(tt.in)
|
||||||
r.NoError(err)
|
r.NoError(err)
|
||||||
|
|
||||||
r.NoError(s.RemoveAll(pt.String()))
|
r.NoError(pkg.MkdirAll(filepath.Dir(pt.Name), 0755))
|
||||||
r.NoError(s.MkdirAll(filepath.Dir(pt.Name), 0755))
|
|
||||||
|
|
||||||
f, err := s.Create(pt.Name)
|
f, err := pkg.Create(pt.Name)
|
||||||
r.NoError(err)
|
r.NoError(err)
|
||||||
r.Equal(pt.Name, f.Name())
|
r.Equal(pt.Name, f.Name())
|
||||||
|
|
||||||
|
@ -129,14 +142,18 @@ func (s Suite) Test_Create(t *testing.T) {
|
||||||
r.Equal(pt.Name, fi.Name())
|
r.Equal(pt.Name, fi.Name())
|
||||||
r.Equal(os.FileMode(0644), fi.Mode())
|
r.Equal(os.FileMode(0644), fi.Mode())
|
||||||
r.NotZero(fi.ModTime())
|
r.NotZero(fi.ModTime())
|
||||||
r.NoError(s.RemoveAll(pt.String()))
|
r.NoError(pkg.RemoveAll(pt.String()))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s Suite) Test_Create_No_MkdirAll(t *testing.T) {
|
func (s Suite) Test_Create_No_MkdirAll(t *testing.T) {
|
||||||
r := require.New(t)
|
r := require.New(t)
|
||||||
cur, err := s.Current()
|
|
||||||
|
pkg, err := s.Make()
|
||||||
|
r.NoError(err)
|
||||||
|
|
||||||
|
cur, err := pkg.Current()
|
||||||
r.NoError(err)
|
r.NoError(err)
|
||||||
|
|
||||||
ip := cur.ImportPath
|
ip := cur.ImportPath
|
||||||
|
@ -155,12 +172,13 @@ func (s Suite) Test_Create_No_MkdirAll(t *testing.T) {
|
||||||
s.Run(t, tt.in, func(st *testing.T) {
|
s.Run(t, tt.in, func(st *testing.T) {
|
||||||
r := require.New(st)
|
r := require.New(st)
|
||||||
|
|
||||||
pt, err := s.Parse(tt.in)
|
pkg, err := s.Make()
|
||||||
r.NoError(err)
|
r.NoError(err)
|
||||||
|
|
||||||
r.NoError(s.RemoveAll(pt.String()))
|
pt, err := pkg.Parse(tt.in)
|
||||||
|
r.NoError(err)
|
||||||
|
|
||||||
_, err = s.Create(pt.Name)
|
_, err = pkg.Create(pt.Name)
|
||||||
r.Error(err)
|
r.Error(err)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -169,7 +187,10 @@ func (s Suite) Test_Create_No_MkdirAll(t *testing.T) {
|
||||||
func (s Suite) Test_Current(t *testing.T) {
|
func (s Suite) Test_Current(t *testing.T) {
|
||||||
r := require.New(t)
|
r := require.New(t)
|
||||||
|
|
||||||
info, err := s.Current()
|
pkg, err := s.Make()
|
||||||
|
r.NoError(err)
|
||||||
|
|
||||||
|
info, err := pkg.Current()
|
||||||
r.NoError(err)
|
r.NoError(err)
|
||||||
r.NotZero(info)
|
r.NotZero(info)
|
||||||
}
|
}
|
||||||
|
@ -177,10 +198,13 @@ func (s Suite) Test_Current(t *testing.T) {
|
||||||
func (s Suite) Test_Info(t *testing.T) {
|
func (s Suite) Test_Info(t *testing.T) {
|
||||||
r := require.New(t)
|
r := require.New(t)
|
||||||
|
|
||||||
cur, err := s.Current()
|
pkg, err := s.Make()
|
||||||
r.NoError(err)
|
r.NoError(err)
|
||||||
|
|
||||||
info, err := s.Info(cur.ImportPath)
|
cur, err := pkg.Current()
|
||||||
|
r.NoError(err)
|
||||||
|
|
||||||
|
info, err := pkg.Info(cur.ImportPath)
|
||||||
r.NoError(err)
|
r.NoError(err)
|
||||||
r.NotZero(info)
|
r.NotZero(info)
|
||||||
|
|
||||||
|
@ -188,7 +212,11 @@ func (s Suite) Test_Info(t *testing.T) {
|
||||||
|
|
||||||
func (s Suite) Test_MkdirAll(t *testing.T) {
|
func (s Suite) Test_MkdirAll(t *testing.T) {
|
||||||
r := require.New(t)
|
r := require.New(t)
|
||||||
cur, err := s.Current()
|
|
||||||
|
pkg, err := s.Make()
|
||||||
|
r.NoError(err)
|
||||||
|
|
||||||
|
cur, err := pkg.Current()
|
||||||
r.NoError(err)
|
r.NoError(err)
|
||||||
|
|
||||||
ip := cur.ImportPath
|
ip := cur.ImportPath
|
||||||
|
@ -207,21 +235,22 @@ func (s Suite) Test_MkdirAll(t *testing.T) {
|
||||||
s.Run(t, tt.in, func(st *testing.T) {
|
s.Run(t, tt.in, func(st *testing.T) {
|
||||||
r := require.New(st)
|
r := require.New(st)
|
||||||
|
|
||||||
pt, err := s.Parse(tt.in)
|
pkg, err := s.Make()
|
||||||
r.NoError(err)
|
r.NoError(err)
|
||||||
|
|
||||||
r.NoError(s.RemoveAll(pt.String()))
|
pt, err := pkg.Parse(tt.in)
|
||||||
|
r.NoError(err)
|
||||||
|
|
||||||
dir := filepath.Dir(pt.Name)
|
dir := filepath.Dir(pt.Name)
|
||||||
r.NoError(s.MkdirAll(dir, 0755))
|
r.NoError(pkg.MkdirAll(dir, 0755))
|
||||||
|
|
||||||
fi, err := s.Stat(dir)
|
fi, err := pkg.Stat(dir)
|
||||||
r.NoError(err)
|
r.NoError(err)
|
||||||
|
|
||||||
r.Equal(dir, fi.Name())
|
r.Equal(dir, fi.Name())
|
||||||
r.Equal(os.FileMode(0755), fi.Mode().Perm())
|
r.Equal(os.FileMode(0755), fi.Mode().Perm())
|
||||||
r.NotZero(fi.ModTime())
|
r.NotZero(fi.ModTime())
|
||||||
r.NoError(s.RemoveAll(pt.String()))
|
r.NoError(pkg.RemoveAll(pt.String()))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -229,7 +258,10 @@ func (s Suite) Test_MkdirAll(t *testing.T) {
|
||||||
func (s Suite) Test_Open_File(t *testing.T) {
|
func (s Suite) Test_Open_File(t *testing.T) {
|
||||||
r := require.New(t)
|
r := require.New(t)
|
||||||
|
|
||||||
cur, err := s.Current()
|
pkg, err := s.Make()
|
||||||
|
r.NoError(err)
|
||||||
|
|
||||||
|
cur, err := pkg.Current()
|
||||||
r.NoError(err)
|
r.NoError(err)
|
||||||
|
|
||||||
ip := cur.ImportPath
|
ip := cur.ImportPath
|
||||||
|
@ -244,20 +276,22 @@ func (s Suite) Test_Open_File(t *testing.T) {
|
||||||
|
|
||||||
for _, tt := range table {
|
for _, tt := range table {
|
||||||
s.Run(t, tt.in, func(st *testing.T) {
|
s.Run(t, tt.in, func(st *testing.T) {
|
||||||
|
|
||||||
r := require.New(st)
|
r := require.New(st)
|
||||||
|
|
||||||
pt, err := s.Parse(tt.in)
|
pkg, err := s.Make()
|
||||||
r.NoError(err)
|
r.NoError(err)
|
||||||
|
|
||||||
r.NoError(s.RemoveAll(pt.String()))
|
pt, err := pkg.Parse(tt.in)
|
||||||
r.NoError(s.MkdirAll(filepath.Dir(pt.Name), 0755))
|
r.NoError(err)
|
||||||
|
|
||||||
|
r.NoError(pkg.RemoveAll(pt.String()))
|
||||||
|
r.NoError(pkg.MkdirAll(filepath.Dir(pt.Name), 0755))
|
||||||
|
|
||||||
body := "!" + pt.String()
|
body := "!" + pt.String()
|
||||||
|
|
||||||
pkgutil.WriteFile(s, tt.in, []byte(body), 0644)
|
pkgutil.WriteFile(pkg, tt.in, []byte(body), 0644)
|
||||||
|
|
||||||
f, err := s.Open(tt.in)
|
f, err := pkg.Open(tt.in)
|
||||||
r.NoError(err)
|
r.NoError(err)
|
||||||
|
|
||||||
r.Equal(pt.Name, f.Path().Name)
|
r.Equal(pt.Name, f.Path().Name)
|
||||||
|
@ -265,7 +299,7 @@ func (s Suite) Test_Open_File(t *testing.T) {
|
||||||
r.NoError(err)
|
r.NoError(err)
|
||||||
r.Equal(body, string(b))
|
r.Equal(body, string(b))
|
||||||
|
|
||||||
b, err = pkgutil.ReadFile(s, tt.in)
|
b, err = pkgutil.ReadFile(pkg, tt.in)
|
||||||
r.NoError(err)
|
r.NoError(err)
|
||||||
r.Equal(body, string(b))
|
r.Equal(body, string(b))
|
||||||
|
|
||||||
|
@ -277,7 +311,10 @@ func (s Suite) Test_Open_File(t *testing.T) {
|
||||||
func (s Suite) Test_Parse(t *testing.T) {
|
func (s Suite) Test_Parse(t *testing.T) {
|
||||||
r := require.New(t)
|
r := require.New(t)
|
||||||
|
|
||||||
cur, err := s.Current()
|
pkg, err := s.Make()
|
||||||
|
r.NoError(err)
|
||||||
|
|
||||||
|
cur, err := pkg.Current()
|
||||||
r.NoError(err)
|
r.NoError(err)
|
||||||
|
|
||||||
ip := cur.ImportPath
|
ip := cur.ImportPath
|
||||||
|
@ -300,7 +337,7 @@ func (s Suite) Test_Parse(t *testing.T) {
|
||||||
s.Run(t, tt.in, func(st *testing.T) {
|
s.Run(t, tt.in, func(st *testing.T) {
|
||||||
r := require.New(st)
|
r := require.New(st)
|
||||||
|
|
||||||
pt, err := s.Parse(tt.in)
|
pt, err := pkg.Parse(tt.in)
|
||||||
r.NoError(err)
|
r.NoError(err)
|
||||||
r.Equal(tt.exp, pt)
|
r.Equal(tt.exp, pt)
|
||||||
})
|
})
|
||||||
|
@ -310,7 +347,10 @@ func (s Suite) Test_Parse(t *testing.T) {
|
||||||
func (s Suite) Test_Stat_Error(t *testing.T) {
|
func (s Suite) Test_Stat_Error(t *testing.T) {
|
||||||
r := require.New(t)
|
r := require.New(t)
|
||||||
|
|
||||||
cur, err := s.Current()
|
pkg, err := s.Make()
|
||||||
|
r.NoError(err)
|
||||||
|
|
||||||
|
cur, err := pkg.Current()
|
||||||
r.NoError(err)
|
r.NoError(err)
|
||||||
|
|
||||||
ip := cur.ImportPath
|
ip := cur.ImportPath
|
||||||
|
@ -330,12 +370,12 @@ func (s Suite) Test_Stat_Error(t *testing.T) {
|
||||||
|
|
||||||
r := require.New(st)
|
r := require.New(st)
|
||||||
|
|
||||||
pt, err := s.Parse(tt.in)
|
pt, err := pkg.Parse(tt.in)
|
||||||
r.NoError(err)
|
r.NoError(err)
|
||||||
|
|
||||||
r.NoError(s.RemoveAll(pt.String()))
|
r.NoError(pkg.RemoveAll(pt.String()))
|
||||||
|
|
||||||
_, err = s.Stat(tt.in)
|
_, err = pkg.Stat(tt.in)
|
||||||
r.Error(err)
|
r.Error(err)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -344,7 +384,10 @@ func (s Suite) Test_Stat_Error(t *testing.T) {
|
||||||
func (s Suite) Test_Stat_Dir(t *testing.T) {
|
func (s Suite) Test_Stat_Dir(t *testing.T) {
|
||||||
r := require.New(t)
|
r := require.New(t)
|
||||||
|
|
||||||
cur, err := s.Current()
|
pkg, err := s.Make()
|
||||||
|
r.NoError(err)
|
||||||
|
|
||||||
|
cur, err := pkg.Current()
|
||||||
r.NoError(err)
|
r.NoError(err)
|
||||||
|
|
||||||
dir := filepath.Dir(mould)
|
dir := filepath.Dir(mould)
|
||||||
|
@ -364,13 +407,13 @@ func (s Suite) Test_Stat_Dir(t *testing.T) {
|
||||||
|
|
||||||
r := require.New(st)
|
r := require.New(st)
|
||||||
|
|
||||||
pt, err := s.Parse(tt.in)
|
pt, err := pkg.Parse(tt.in)
|
||||||
r.NoError(err)
|
r.NoError(err)
|
||||||
|
|
||||||
r.NoError(s.RemoveAll(pt.String()))
|
r.NoError(pkg.RemoveAll(pt.String()))
|
||||||
|
|
||||||
r.NoError(s.MkdirAll(pt.Name, 0755))
|
r.NoError(pkg.MkdirAll(pt.Name, 0755))
|
||||||
info, err := s.Stat(tt.in)
|
info, err := pkg.Stat(tt.in)
|
||||||
r.NoError(err)
|
r.NoError(err)
|
||||||
r.Equal(pt.Name, info.Name())
|
r.Equal(pt.Name, info.Name())
|
||||||
})
|
})
|
||||||
|
@ -380,7 +423,10 @@ func (s Suite) Test_Stat_Dir(t *testing.T) {
|
||||||
func (s Suite) Test_Stat_File(t *testing.T) {
|
func (s Suite) Test_Stat_File(t *testing.T) {
|
||||||
r := require.New(t)
|
r := require.New(t)
|
||||||
|
|
||||||
cur, err := s.Current()
|
pkg, err := s.Make()
|
||||||
|
r.NoError(err)
|
||||||
|
|
||||||
|
cur, err := pkg.Current()
|
||||||
r.NoError(err)
|
r.NoError(err)
|
||||||
|
|
||||||
ip := cur.ImportPath
|
ip := cur.ImportPath
|
||||||
|
@ -398,20 +444,23 @@ func (s Suite) Test_Stat_File(t *testing.T) {
|
||||||
|
|
||||||
r := require.New(st)
|
r := require.New(st)
|
||||||
|
|
||||||
pt, err := s.Parse(tt.in)
|
pkg, err := s.Make()
|
||||||
r.NoError(err)
|
r.NoError(err)
|
||||||
|
|
||||||
r.NoError(s.RemoveAll(pt.String()))
|
pt, err := pkg.Parse(tt.in)
|
||||||
r.NoError(s.MkdirAll(filepath.Dir(pt.Name), 0755))
|
r.NoError(err)
|
||||||
|
|
||||||
f, err := s.Create(tt.in)
|
r.NoError(pkg.RemoveAll(pt.String()))
|
||||||
|
r.NoError(pkg.MkdirAll(filepath.Dir(pt.Name), 0755))
|
||||||
|
|
||||||
|
f, err := pkg.Create(tt.in)
|
||||||
r.NoError(err)
|
r.NoError(err)
|
||||||
|
|
||||||
_, err = io.Copy(f, strings.NewReader("!"+pt.String()))
|
_, err = io.Copy(f, strings.NewReader("!"+pt.String()))
|
||||||
r.NoError(err)
|
r.NoError(err)
|
||||||
r.NoError(f.Close())
|
r.NoError(f.Close())
|
||||||
|
|
||||||
info, err := s.Stat(tt.in)
|
info, err := pkg.Stat(tt.in)
|
||||||
r.NoError(err)
|
r.NoError(err)
|
||||||
r.Equal(pt.Name, info.Name())
|
r.Equal(pt.Name, info.Name())
|
||||||
})
|
})
|
||||||
|
@ -421,7 +470,12 @@ func (s Suite) Test_Stat_File(t *testing.T) {
|
||||||
// func (s Suite) Test_Walk(t *testing.T) {
|
// func (s Suite) Test_Walk(t *testing.T) {
|
||||||
// panic("not implemented")
|
// panic("not implemented")
|
||||||
// }
|
// }
|
||||||
|
|
||||||
//
|
//
|
||||||
// func (s Suite) Test_Remove(t *testing.T) {
|
// func (s Suite) Test_Remove(t *testing.T) {
|
||||||
// panic("not implemented")
|
// panic("not implemented")
|
||||||
// }
|
// }
|
||||||
|
//
|
||||||
|
// func (s Suite) Test_RemoveAll(t *testing.T) {
|
||||||
|
// panic("not implemented")
|
||||||
|
// }
|
||||||
|
|
|
@ -12,7 +12,11 @@ import (
|
||||||
|
|
||||||
func (s Suite) Test_Util_ReadFile(t *testing.T) {
|
func (s Suite) Test_Util_ReadFile(t *testing.T) {
|
||||||
r := require.New(t)
|
r := require.New(t)
|
||||||
cur, err := s.Current()
|
|
||||||
|
pkg, err := s.Make()
|
||||||
|
r.NoError(err)
|
||||||
|
|
||||||
|
cur, err := pkg.Current()
|
||||||
r.NoError(err)
|
r.NoError(err)
|
||||||
|
|
||||||
ip := cur.ImportPath
|
ip := cur.ImportPath
|
||||||
|
@ -27,16 +31,18 @@ func (s Suite) Test_Util_ReadFile(t *testing.T) {
|
||||||
|
|
||||||
for _, tt := range table {
|
for _, tt := range table {
|
||||||
s.Run(t, tt.in, func(st *testing.T) {
|
s.Run(t, tt.in, func(st *testing.T) {
|
||||||
|
|
||||||
r := require.New(st)
|
r := require.New(st)
|
||||||
|
|
||||||
pt, err := s.Parse(tt.in)
|
pkg, err := s.Make()
|
||||||
r.NoError(err)
|
r.NoError(err)
|
||||||
|
|
||||||
r.NoError(s.RemoveAll(pt.String()))
|
pt, err := pkg.Parse(tt.in)
|
||||||
r.NoError(s.MkdirAll(filepath.Dir(pt.Name), 0755))
|
r.NoError(err)
|
||||||
|
|
||||||
f, err := s.Create(tt.in)
|
r.NoError(pkg.RemoveAll(pt.String()))
|
||||||
|
r.NoError(pkg.MkdirAll(filepath.Dir(pt.Name), 0755))
|
||||||
|
|
||||||
|
f, err := pkg.Create(tt.in)
|
||||||
r.NoError(err)
|
r.NoError(err)
|
||||||
|
|
||||||
body := "!" + pt.String()
|
body := "!" + pt.String()
|
||||||
|
@ -44,7 +50,7 @@ func (s Suite) Test_Util_ReadFile(t *testing.T) {
|
||||||
r.NoError(err)
|
r.NoError(err)
|
||||||
r.NoError(f.Close())
|
r.NoError(f.Close())
|
||||||
|
|
||||||
b, err := pkgutil.ReadFile(s, tt.in)
|
b, err := pkgutil.ReadFile(pkg, tt.in)
|
||||||
r.NoError(err)
|
r.NoError(err)
|
||||||
r.Equal(body, string(b))
|
r.Equal(body, string(b))
|
||||||
})
|
})
|
||||||
|
|
|
@ -2,7 +2,6 @@ package stdos
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
|
@ -107,14 +106,6 @@ func (f *Pkger) Parse(p string) (pkging.Path, error) {
|
||||||
return f.paths.Parse(p)
|
return f.paths.Parse(p)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *Pkger) ReadFile(s string) ([]byte, error) {
|
|
||||||
s, err := f.Abs(s)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return ioutil.ReadFile(s)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f *Pkger) Stat(name string) (os.FileInfo, error) {
|
func (f *Pkger) Stat(name string) (os.FileInfo, error) {
|
||||||
pt, err := f.Parse(name)
|
pt, err := f.Parse(name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -1,24 +1,33 @@
|
||||||
package stdos
|
package stdos
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"path/filepath"
|
"io/ioutil"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/markbates/pkger/pkging"
|
||||||
"github.com/markbates/pkger/pkging/pkgtest"
|
"github.com/markbates/pkger/pkging/pkgtest"
|
||||||
"github.com/stretchr/testify/require"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func Test_Pkger(t *testing.T) {
|
func Test_Pkger(t *testing.T) {
|
||||||
r := require.New(t)
|
suite, err := pkgtest.NewSuite("stdos", func() (pkging.Pkger, error) {
|
||||||
|
mypkging, err := New()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
mypkging, err := New()
|
dir, err := ioutil.TempDir("", "stdos")
|
||||||
r.NoError(err)
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
mypkging.current.Dir = filepath.Join(mypkging.current.Dir, ".pkgtest")
|
mypkging.current.Dir = dir
|
||||||
mypkging.paths.Current = mypkging.current
|
mypkging.paths.Current = mypkging.current
|
||||||
|
|
||||||
suite, err := pkgtest.NewSuite(mypkging)
|
return mypkging, nil
|
||||||
r.NoError(err)
|
})
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
suite.Test(t)
|
suite.Test(t)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue