mirror of
https://github.com/astaxie/beego.git
synced 2024-11-24 05:00:53 +00:00
Fix UT
This commit is contained in:
parent
6c6cf91741
commit
261b704d8b
9
.gitignore
vendored
9
.gitignore
vendored
@ -5,7 +5,8 @@
|
|||||||
*.swo
|
*.swo
|
||||||
beego.iml
|
beego.iml
|
||||||
|
|
||||||
_beeTmp
|
_beeTmp/
|
||||||
_beeTmp2
|
_beeTmp2/
|
||||||
pkg/_beeTmp
|
pkg/_beeTmp/
|
||||||
pkg/_beeTmp2
|
pkg/_beeTmp2/
|
||||||
|
test/tmp/
|
||||||
|
@ -24,7 +24,7 @@ import (
|
|||||||
"github.com/elazarl/go-bindata-assetfs"
|
"github.com/elazarl/go-bindata-assetfs"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
|
|
||||||
"github.com/astaxie/beego/pkg/testdata"
|
"github.com/astaxie/beego/test"
|
||||||
)
|
)
|
||||||
|
|
||||||
var header = `{{define "header"}}
|
var header = `{{define "header"}}
|
||||||
@ -308,7 +308,7 @@ var outputBinData = `<!DOCTYPE html>
|
|||||||
|
|
||||||
func TestFsBinData(t *testing.T) {
|
func TestFsBinData(t *testing.T) {
|
||||||
SetTemplateFSFunc(func() http.FileSystem {
|
SetTemplateFSFunc(func() http.FileSystem {
|
||||||
return TestingFileSystem{&assetfs.AssetFS{Asset: testdata.Asset, AssetDir: testdata.AssetDir, AssetInfo: testdata.AssetInfo}}
|
return TestingFileSystem{&assetfs.AssetFS{Asset: test.Asset, AssetDir: test.AssetDir, AssetInfo: test.AssetInfo}}
|
||||||
})
|
})
|
||||||
dir := "views"
|
dir := "views"
|
||||||
if err := AddViewPath("views"); err != nil {
|
if err := AddViewPath("views"); err != nil {
|
||||||
|
@ -29,20 +29,22 @@ type FilterChainBuilder struct {
|
|||||||
|
|
||||||
|
|
||||||
func (builder *FilterChainBuilder) FilterChain(next beego.FilterFunc) beego.FilterFunc {
|
func (builder *FilterChainBuilder) FilterChain(next beego.FilterFunc) beego.FilterFunc {
|
||||||
// TODO, if we support multiple servers, this need to be changed
|
|
||||||
cr := beego.BeeApp.Handlers
|
|
||||||
return func(ctx *context.Context) {
|
return func(ctx *context.Context) {
|
||||||
span := opentracing.SpanFromContext(ctx.Request.Context())
|
span := opentracing.SpanFromContext(ctx.Request.Context())
|
||||||
spanCtx := ctx.Request.Context()
|
spanCtx := ctx.Request.Context()
|
||||||
if span == nil {
|
if span == nil {
|
||||||
operationName := ctx.Input.URL()
|
operationName := ctx.Input.URL()
|
||||||
// it means that there is not any span, so we create a span as the root span.
|
// it means that there is not any span, so we create a span as the root span.
|
||||||
route, found := cr.FindRouter(ctx)
|
// TODO, if we support multiple servers, this need to be changed
|
||||||
|
route, found := beego.BeeApp.Handlers.FindRouter(ctx)
|
||||||
if found {
|
if found {
|
||||||
operationName = route.GetPattern()
|
operationName = route.GetPattern()
|
||||||
}
|
}
|
||||||
span, spanCtx = opentracing.StartSpanFromContext(spanCtx, operationName)
|
span, spanCtx = opentracing.StartSpanFromContext(spanCtx, operationName)
|
||||||
|
newReq := ctx.Request.Clone(spanCtx)
|
||||||
|
ctx.Reset(ctx.ResponseWriter.ResponseWriter, newReq)
|
||||||
}
|
}
|
||||||
|
|
||||||
defer span.Finish()
|
defer span.Finish()
|
||||||
next(ctx)
|
next(ctx)
|
||||||
// if you think we need to do more things, feel free to create an issue to tell us
|
// if you think we need to do more things, feel free to create an issue to tell us
|
||||||
|
@ -16,7 +16,7 @@ package beego
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"github.com/astaxie/beego/testdata"
|
"github.com/astaxie/beego/test"
|
||||||
"github.com/elazarl/go-bindata-assetfs"
|
"github.com/elazarl/go-bindata-assetfs"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
@ -291,7 +291,7 @@ var outputBinData = `<!DOCTYPE html>
|
|||||||
|
|
||||||
func TestFsBinData(t *testing.T) {
|
func TestFsBinData(t *testing.T) {
|
||||||
SetTemplateFSFunc(func() http.FileSystem {
|
SetTemplateFSFunc(func() http.FileSystem {
|
||||||
return TestingFileSystem{&assetfs.AssetFS{Asset: testdata.Asset, AssetDir: testdata.AssetDir, AssetInfo: testdata.AssetInfo}}
|
return TestingFileSystem{&assetfs.AssetFS{Asset: test.Asset, AssetDir: test.AssetDir, AssetInfo: test.AssetInfo}}
|
||||||
})
|
})
|
||||||
dir := "views"
|
dir := "views"
|
||||||
if err := AddViewPath("views"); err != nil {
|
if err := AddViewPath("views"); err != nil {
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
// views/index.tpl
|
// views/index.tpl
|
||||||
// DO NOT EDIT!
|
// DO NOT EDIT!
|
||||||
|
|
||||||
package testdata
|
package test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
2
testdata/Makefile
vendored
2
testdata/Makefile
vendored
@ -1,2 +0,0 @@
|
|||||||
build_view:
|
|
||||||
$(GOPATH)/bin/go-bindata-assetfs -pkg testdata views/...
|
|
296
testdata/bindata.go
vendored
296
testdata/bindata.go
vendored
@ -1,296 +0,0 @@
|
|||||||
// Code generated by go-bindata.
|
|
||||||
// sources:
|
|
||||||
// views/blocks/block.tpl
|
|
||||||
// views/header.tpl
|
|
||||||
// views/index.tpl
|
|
||||||
// DO NOT EDIT!
|
|
||||||
|
|
||||||
package testdata
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bytes"
|
|
||||||
"compress/gzip"
|
|
||||||
"fmt"
|
|
||||||
"github.com/elazarl/go-bindata-assetfs"
|
|
||||||
"io"
|
|
||||||
"io/ioutil"
|
|
||||||
"os"
|
|
||||||
"path/filepath"
|
|
||||||
"strings"
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
func bindataRead(data []byte, name string) ([]byte, error) {
|
|
||||||
gz, err := gzip.NewReader(bytes.NewBuffer(data))
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("Read %q: %v", name, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
var buf bytes.Buffer
|
|
||||||
_, err = io.Copy(&buf, gz)
|
|
||||||
clErr := gz.Close()
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("Read %q: %v", name, err)
|
|
||||||
}
|
|
||||||
if clErr != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return buf.Bytes(), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
type asset struct {
|
|
||||||
bytes []byte
|
|
||||||
info os.FileInfo
|
|
||||||
}
|
|
||||||
|
|
||||||
type bindataFileInfo struct {
|
|
||||||
name string
|
|
||||||
size int64
|
|
||||||
mode os.FileMode
|
|
||||||
modTime time.Time
|
|
||||||
}
|
|
||||||
|
|
||||||
func (fi bindataFileInfo) Name() string {
|
|
||||||
return fi.name
|
|
||||||
}
|
|
||||||
func (fi bindataFileInfo) Size() int64 {
|
|
||||||
return fi.size
|
|
||||||
}
|
|
||||||
func (fi bindataFileInfo) Mode() os.FileMode {
|
|
||||||
return fi.mode
|
|
||||||
}
|
|
||||||
func (fi bindataFileInfo) ModTime() time.Time {
|
|
||||||
return fi.modTime
|
|
||||||
}
|
|
||||||
func (fi bindataFileInfo) IsDir() bool {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
func (fi bindataFileInfo) Sys() interface{} {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
var _viewsBlocksBlockTpl = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xaa\xae\x4e\x49\x4d\xcb\xcc\x4b\x55\x50\x4a\xca\xc9\x4f\xce\x56\xaa\xad\xe5\xb2\xc9\x30\xb4\xf3\x48\xcd\xc9\xc9\xd7\x51\x00\x8b\x15\x2b\xda\xe8\x67\x18\xda\x71\x55\x57\xa7\xe6\xa5\xd4\xd6\x02\x02\x00\x00\xff\xff\xfd\xa1\x7a\xf6\x32\x00\x00\x00")
|
|
||||||
|
|
||||||
func viewsBlocksBlockTplBytes() ([]byte, error) {
|
|
||||||
return bindataRead(
|
|
||||||
_viewsBlocksBlockTpl,
|
|
||||||
"views/blocks/block.tpl",
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
func viewsBlocksBlockTpl() (*asset, error) {
|
|
||||||
bytes, err := viewsBlocksBlockTplBytes()
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
info := bindataFileInfo{name: "views/blocks/block.tpl", size: 50, mode: os.FileMode(436), modTime: time.Unix(1541431067, 0)}
|
|
||||||
a := &asset{bytes: bytes, info: info}
|
|
||||||
return a, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
var _viewsHeaderTpl = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xaa\xae\x4e\x49\x4d\xcb\xcc\x4b\x55\x50\xca\x48\x4d\x4c\x49\x2d\x52\xaa\xad\xe5\xb2\xc9\x30\xb4\xf3\x48\xcd\xc9\xc9\xd7\x51\x48\x2c\x2e\x49\xac\xc8\x4c\x55\xb4\xd1\xcf\x30\xb4\xe3\xaa\xae\x4e\xcd\x4b\xa9\xad\x05\x04\x00\x00\xff\xff\xe4\x12\x47\x01\x34\x00\x00\x00")
|
|
||||||
|
|
||||||
func viewsHeaderTplBytes() ([]byte, error) {
|
|
||||||
return bindataRead(
|
|
||||||
_viewsHeaderTpl,
|
|
||||||
"views/header.tpl",
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
func viewsHeaderTpl() (*asset, error) {
|
|
||||||
bytes, err := viewsHeaderTplBytes()
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
info := bindataFileInfo{name: "views/header.tpl", size: 52, mode: os.FileMode(436), modTime: time.Unix(1541431067, 0)}
|
|
||||||
a := &asset{bytes: bytes, info: info}
|
|
||||||
return a, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
var _viewsIndexTpl = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x8f\xbd\x8a\xc3\x30\x10\x84\x6b\xeb\x29\xe6\xfc\x00\x16\xb8\x3c\x16\x35\x77\xa9\x13\x88\x09\xa4\xf4\xcf\x12\x99\x48\x48\xd8\x82\x10\x84\xde\x3d\xc8\x8a\x8b\x90\x6a\xa4\xd9\x6f\xd8\x59\xfa\xf9\x3f\xfe\x75\xd7\xd3\x01\x3a\x58\xa3\x04\x15\x01\x48\x73\x3f\xe5\x07\x40\x61\x0e\x86\xd5\xc0\x7c\x73\x78\xb0\x19\x9d\x65\x04\xb6\xde\xf4\x81\x49\x96\x69\x8e\xc8\x3d\x43\x83\x9b\x9e\x4a\x88\x2a\xc6\x9d\x43\x3d\x18\x37\xde\xeb\x94\x3e\xdd\x1c\xe1\xe5\xcb\xde\xe0\x55\x6e\xd2\x04\x6f\x32\x20\x2a\xd2\xad\x8a\x11\x4d\x97\x57\x22\x25\x92\xba\x55\xa2\x22\xaf\xd0\xe9\x79\xc5\xbc\xe2\xec\x2c\x5f\xfa\xe5\x17\x99\x7b\x7f\x36\xd2\x97\x8a\xa5\x19\xc9\x72\xe7\x2b\x00\x00\xff\xff\xb2\x39\xca\x9f\xff\x00\x00\x00")
|
|
||||||
|
|
||||||
func viewsIndexTplBytes() ([]byte, error) {
|
|
||||||
return bindataRead(
|
|
||||||
_viewsIndexTpl,
|
|
||||||
"views/index.tpl",
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
func viewsIndexTpl() (*asset, error) {
|
|
||||||
bytes, err := viewsIndexTplBytes()
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
info := bindataFileInfo{name: "views/index.tpl", size: 255, mode: os.FileMode(436), modTime: time.Unix(1541434906, 0)}
|
|
||||||
a := &asset{bytes: bytes, info: info}
|
|
||||||
return a, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Asset loads and returns the asset for the given name.
|
|
||||||
// It returns an error if the asset could not be found or
|
|
||||||
// could not be loaded.
|
|
||||||
func Asset(name string) ([]byte, error) {
|
|
||||||
cannonicalName := strings.Replace(name, "\\", "/", -1)
|
|
||||||
if f, ok := _bindata[cannonicalName]; ok {
|
|
||||||
a, err := f()
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("Asset %s can't read by error: %v", name, err)
|
|
||||||
}
|
|
||||||
return a.bytes, nil
|
|
||||||
}
|
|
||||||
return nil, fmt.Errorf("Asset %s not found", name)
|
|
||||||
}
|
|
||||||
|
|
||||||
// MustAsset is like Asset but panics when Asset would return an error.
|
|
||||||
// It simplifies safe initialization of global variables.
|
|
||||||
func MustAsset(name string) []byte {
|
|
||||||
a, err := Asset(name)
|
|
||||||
if err != nil {
|
|
||||||
panic("asset: Asset(" + name + "): " + err.Error())
|
|
||||||
}
|
|
||||||
|
|
||||||
return a
|
|
||||||
}
|
|
||||||
|
|
||||||
// AssetInfo loads and returns the asset info for the given name.
|
|
||||||
// It returns an error if the asset could not be found or
|
|
||||||
// could not be loaded.
|
|
||||||
func AssetInfo(name string) (os.FileInfo, error) {
|
|
||||||
cannonicalName := strings.Replace(name, "\\", "/", -1)
|
|
||||||
if f, ok := _bindata[cannonicalName]; ok {
|
|
||||||
a, err := f()
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("AssetInfo %s can't read by error: %v", name, err)
|
|
||||||
}
|
|
||||||
return a.info, nil
|
|
||||||
}
|
|
||||||
return nil, fmt.Errorf("AssetInfo %s not found", name)
|
|
||||||
}
|
|
||||||
|
|
||||||
// AssetNames returns the names of the assets.
|
|
||||||
func AssetNames() []string {
|
|
||||||
names := make([]string, 0, len(_bindata))
|
|
||||||
for name := range _bindata {
|
|
||||||
names = append(names, name)
|
|
||||||
}
|
|
||||||
return names
|
|
||||||
}
|
|
||||||
|
|
||||||
// _bindata is a table, holding each asset generator, mapped to its name.
|
|
||||||
var _bindata = map[string]func() (*asset, error){
|
|
||||||
"views/blocks/block.tpl": viewsBlocksBlockTpl,
|
|
||||||
"views/header.tpl": viewsHeaderTpl,
|
|
||||||
"views/index.tpl": viewsIndexTpl,
|
|
||||||
}
|
|
||||||
|
|
||||||
// AssetDir returns the file names below a certain
|
|
||||||
// directory embedded in the file by go-bindata.
|
|
||||||
// For example if you run go-bindata on data/... and data contains the
|
|
||||||
// following hierarchy:
|
|
||||||
// data/
|
|
||||||
// foo.txt
|
|
||||||
// img/
|
|
||||||
// a.png
|
|
||||||
// b.png
|
|
||||||
// then AssetDir("data") would return []string{"foo.txt", "img"}
|
|
||||||
// AssetDir("data/img") would return []string{"a.png", "b.png"}
|
|
||||||
// AssetDir("foo.txt") and AssetDir("notexist") would return an error
|
|
||||||
// AssetDir("") will return []string{"data"}.
|
|
||||||
func AssetDir(name string) ([]string, error) {
|
|
||||||
node := _bintree
|
|
||||||
if len(name) != 0 {
|
|
||||||
cannonicalName := strings.Replace(name, "\\", "/", -1)
|
|
||||||
pathList := strings.Split(cannonicalName, "/")
|
|
||||||
for _, p := range pathList {
|
|
||||||
node = node.Children[p]
|
|
||||||
if node == nil {
|
|
||||||
return nil, fmt.Errorf("Asset %s not found", name)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if node.Func != nil {
|
|
||||||
return nil, fmt.Errorf("Asset %s not found", name)
|
|
||||||
}
|
|
||||||
rv := make([]string, 0, len(node.Children))
|
|
||||||
for childName := range node.Children {
|
|
||||||
rv = append(rv, childName)
|
|
||||||
}
|
|
||||||
return rv, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
type bintree struct {
|
|
||||||
Func func() (*asset, error)
|
|
||||||
Children map[string]*bintree
|
|
||||||
}
|
|
||||||
|
|
||||||
var _bintree = &bintree{nil, map[string]*bintree{
|
|
||||||
"views": &bintree{nil, map[string]*bintree{
|
|
||||||
"blocks": &bintree{nil, map[string]*bintree{
|
|
||||||
"block.tpl": &bintree{viewsBlocksBlockTpl, map[string]*bintree{}},
|
|
||||||
}},
|
|
||||||
"header.tpl": &bintree{viewsHeaderTpl, map[string]*bintree{}},
|
|
||||||
"index.tpl": &bintree{viewsIndexTpl, map[string]*bintree{}},
|
|
||||||
}},
|
|
||||||
}}
|
|
||||||
|
|
||||||
// RestoreAsset restores an asset under the given directory
|
|
||||||
func RestoreAsset(dir, name string) error {
|
|
||||||
data, err := Asset(name)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
info, err := AssetInfo(name)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
err = os.MkdirAll(_filePath(dir, filepath.Dir(name)), os.FileMode(0755))
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
err = ioutil.WriteFile(_filePath(dir, name), data, info.Mode())
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
err = os.Chtimes(_filePath(dir, name), info.ModTime(), info.ModTime())
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// RestoreAssets restores an asset under the given directory recursively
|
|
||||||
func RestoreAssets(dir, name string) error {
|
|
||||||
children, err := AssetDir(name)
|
|
||||||
// File
|
|
||||||
if err != nil {
|
|
||||||
return RestoreAsset(dir, name)
|
|
||||||
}
|
|
||||||
// Dir
|
|
||||||
for _, child := range children {
|
|
||||||
err = RestoreAssets(dir, filepath.Join(name, child))
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func _filePath(dir, name string) string {
|
|
||||||
cannonicalName := strings.Replace(name, "\\", "/", -1)
|
|
||||||
return filepath.Join(append([]string{dir}, strings.Split(cannonicalName, "/")...)...)
|
|
||||||
}
|
|
||||||
|
|
||||||
func assetFS() *assetfs.AssetFS {
|
|
||||||
assetInfo := func(path string) (os.FileInfo, error) {
|
|
||||||
return os.Stat(path)
|
|
||||||
}
|
|
||||||
for k := range _bintree.Children {
|
|
||||||
return &assetfs.AssetFS{Asset: Asset, AssetDir: AssetDir, AssetInfo: assetInfo, Prefix: k}
|
|
||||||
}
|
|
||||||
panic("unreachable")
|
|
||||||
}
|
|
3
testdata/views/blocks/block.tpl
vendored
3
testdata/views/blocks/block.tpl
vendored
@ -1,3 +0,0 @@
|
|||||||
{{define "block"}}
|
|
||||||
<h1>Hello, blocks!</h1>
|
|
||||||
{{end}}
|
|
3
testdata/views/header.tpl
vendored
3
testdata/views/header.tpl
vendored
@ -1,3 +0,0 @@
|
|||||||
{{define "header"}}
|
|
||||||
<h1>Hello, astaxie!</h1>
|
|
||||||
{{end}}
|
|
15
testdata/views/index.tpl
vendored
15
testdata/views/index.tpl
vendored
@ -1,15 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>beego welcome template</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
|
|
||||||
{{template "block"}}
|
|
||||||
{{template "header"}}
|
|
||||||
{{template "blocks/block.tpl"}}
|
|
||||||
|
|
||||||
<h2>{{ .Title }}</h2>
|
|
||||||
<p> This is SomeVar: {{ .SomeVar }}</p>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@ -18,6 +18,8 @@ import (
|
|||||||
"path/filepath"
|
"path/filepath"
|
||||||
"reflect"
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
var noExistedFile = "/tmp/not_existed_file"
|
var noExistedFile = "/tmp/not_existed_file"
|
||||||
@ -66,9 +68,8 @@ func TestGrepFile(t *testing.T) {
|
|||||||
|
|
||||||
path := filepath.Join(".", "testdata", "grepe.test")
|
path := filepath.Join(".", "testdata", "grepe.test")
|
||||||
lines, err := GrepFile(`^\s*[^#]+`, path)
|
lines, err := GrepFile(`^\s*[^#]+`, path)
|
||||||
if err != nil {
|
assert.Nil(t, err)
|
||||||
t.Error(err)
|
|
||||||
}
|
|
||||||
if !reflect.DeepEqual(lines, []string{"hello", "world"}) {
|
if !reflect.DeepEqual(lines, []string{"hello", "world"}) {
|
||||||
t.Errorf("expect [hello world], but receive %v", lines)
|
t.Errorf("expect [hello world], but receive %v", lines)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user