66 строки
1,6 КиБ
Go
66 строки
1,6 КиБ
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"os"
|
|
"strings"
|
|
|
|
"github.com/DATA-DOG/godog"
|
|
"github.com/cucumber/gherkin-go"
|
|
)
|
|
|
|
type lsFeature struct {
|
|
dir string
|
|
buf *bytes.Buffer
|
|
}
|
|
|
|
func lsFeatureContext(s godog.Suite) {
|
|
c := &lsFeature{buf: bytes.NewBuffer(make([]byte, 1024))}
|
|
|
|
s.Step(`^I am in a directory "([^"]*)"$`, c.iAmInDirectory)
|
|
s.Step(`^I have a (file|directory) named "([^"]*)"$`, c.iHaveFileOrDirectoryNamed)
|
|
s.Step(`^I run ls$`, c.iRunLs)
|
|
s.Step(`^I should get output:$`, c.iShouldGetOutput)
|
|
}
|
|
|
|
func (f *lsFeature) iAmInDirectory(name string) error {
|
|
f.dir = os.TempDir() + "/" + name
|
|
if err := os.RemoveAll(f.dir); err != nil && !os.IsNotExist(err) {
|
|
return err
|
|
}
|
|
return os.Mkdir(f.dir, 0775)
|
|
}
|
|
|
|
func (f *lsFeature) iHaveFileOrDirectoryNamed(typ, name string) (err error) {
|
|
if len(f.dir) == 0 {
|
|
return fmt.Errorf("the directory was not chosen yet")
|
|
}
|
|
switch typ {
|
|
case "file":
|
|
err = ioutil.WriteFile(f.dir+"/"+name, []byte{}, 0664)
|
|
case "directory":
|
|
err = os.Mkdir(f.dir+"/"+name, 0775)
|
|
}
|
|
return err
|
|
}
|
|
|
|
func (f *lsFeature) iShouldGetOutput(names *gherkin.DocString) error {
|
|
expected := strings.Split(names.Content, "\n")
|
|
actual := strings.Split(strings.TrimSpace(f.buf.String()), "\n")
|
|
if len(expected) != len(actual) {
|
|
return fmt.Errorf("number of expected output lines %d, does not match actual: %d", len(expected), len(actual))
|
|
}
|
|
for i, line := range actual {
|
|
if line != expected[i] {
|
|
return fmt.Errorf(`expected line "%s" at position: %d to match "%s", but it did not`, expected[i], i, line)
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (f *lsFeature) iRunLs() error {
|
|
f.buf.Reset()
|
|
return ls(f.dir, f.buf)
|
|
}
|