41 lines
758 B
Go
41 lines
758 B
Go
package pty
|
|
|
|
import (
|
|
"io"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestStartHonorsWorkDir(t *testing.T) {
|
|
dir := t.TempDir()
|
|
p, err := Start([]string{"sh", "-lc", "pwd"}, nil, dir, 80, 24)
|
|
if err != nil {
|
|
t.Fatalf("start: %v", err)
|
|
}
|
|
defer p.Close()
|
|
|
|
var out strings.Builder
|
|
buf := make([]byte, 256)
|
|
for {
|
|
n, err := p.Read(buf)
|
|
if n > 0 {
|
|
out.Write(buf[:n])
|
|
if strings.Contains(out.String(), dir) {
|
|
break
|
|
}
|
|
}
|
|
if err != nil {
|
|
if err == io.EOF || strings.Contains(err.Error(), "input/output error") {
|
|
break
|
|
}
|
|
t.Fatalf("read: %v", err)
|
|
}
|
|
}
|
|
if err := p.Wait(); err != nil {
|
|
t.Fatalf("wait: %v", err)
|
|
}
|
|
if got := out.String(); !strings.Contains(got, dir) {
|
|
t.Fatalf("pwd output %q does not contain %q", got, dir)
|
|
}
|
|
}
|