mirror of
https://github.com/go-sylixos/elvish.git
synced 2024-12-14 11:17:52 +08:00
146 lines
3.0 KiB
Go
146 lines
3.0 KiB
Go
package prog
|
|
|
|
import (
|
|
"os"
|
|
"testing"
|
|
|
|
. "src.elv.sh/pkg/prog/progtest"
|
|
)
|
|
|
|
func TestBadFlag(t *testing.T) {
|
|
f := Setup()
|
|
defer f.Cleanup()
|
|
|
|
exit := Run(f.Fds(), Elvish("-bad-flag"))
|
|
|
|
TestError(t, f, exit, "flag provided but not defined: -bad-flag")
|
|
}
|
|
|
|
func TestCPUProfile(t *testing.T) {
|
|
f := Setup()
|
|
defer f.Cleanup()
|
|
|
|
Run(f.Fds(), Elvish("-cpuprofile", "cpuprof"), testProgram{shouldRun: true})
|
|
// There isn't much to test beyond a sanity check that the profile file now
|
|
// exists.
|
|
_, err := os.Stat("cpuprof")
|
|
if err != nil {
|
|
t.Errorf("CPU profile file does not exist: %v", err)
|
|
}
|
|
}
|
|
|
|
func TestCPUProfile_BadPath(t *testing.T) {
|
|
f := Setup()
|
|
defer f.Cleanup()
|
|
|
|
Run(f.Fds(), Elvish("-cpuprofile", "/a/bad/path"), testProgram{shouldRun: true})
|
|
f.TestOut(t, 1, "")
|
|
f.TestOutSnippet(t, 2, "Warning: cannot create CPU profile:")
|
|
f.TestOutSnippet(t, 2, "Continuing without CPU profiling.")
|
|
}
|
|
|
|
func TestHelp(t *testing.T) {
|
|
f := Setup()
|
|
defer f.Cleanup()
|
|
|
|
Run(f.Fds(), Elvish("-help"))
|
|
|
|
f.TestOutSnippet(t, 1, "Usage: elvish [flags] [script]")
|
|
f.TestOut(t, 2, "")
|
|
}
|
|
|
|
func TestShowDeprecations(t *testing.T) {
|
|
restore := SetDeprecationLevel(0)
|
|
defer restore()
|
|
f := Setup()
|
|
defer f.Cleanup()
|
|
|
|
Run(f.Fds(), Elvish("-deprecation-level", "42"), testProgram{shouldRun: true})
|
|
if DeprecationLevel != 42 {
|
|
t.Errorf("ShowDeprecations = %d, want 42", DeprecationLevel)
|
|
}
|
|
}
|
|
|
|
func TestNoProgram(t *testing.T) {
|
|
f := Setup()
|
|
defer f.Cleanup()
|
|
|
|
exit := Run(f.Fds(), Elvish(), testProgram{}, testProgram{})
|
|
|
|
TestError(t, f, exit, "program bug: no suitable subprogram")
|
|
}
|
|
|
|
func TestGoodProgram(t *testing.T) {
|
|
f := Setup()
|
|
defer f.Cleanup()
|
|
|
|
Run(f.Fds(), Elvish(), testProgram{},
|
|
testProgram{shouldRun: true, writeOut: "program 2"})
|
|
|
|
f.TestOut(t, 1, "program 2")
|
|
f.TestOut(t, 2, "")
|
|
}
|
|
|
|
func TestPreferEarlierProgram(t *testing.T) {
|
|
f := Setup()
|
|
defer f.Cleanup()
|
|
|
|
Run(f.Fds(), Elvish(),
|
|
testProgram{shouldRun: true, writeOut: "program 1"},
|
|
testProgram{shouldRun: true, writeOut: "program 2"})
|
|
|
|
f.TestOut(t, 1, "program 1")
|
|
f.TestOut(t, 2, "")
|
|
}
|
|
|
|
func TestBadUsageError(t *testing.T) {
|
|
f := Setup()
|
|
defer f.Cleanup()
|
|
|
|
exit := Run(f.Fds(), Elvish(),
|
|
testProgram{shouldRun: true, returnErr: BadUsage("lorem ipsum")})
|
|
|
|
TestError(t, f, exit, "lorem ipsum")
|
|
f.TestOutSnippet(t, 2, "Usage:")
|
|
f.TestOut(t, 1, "")
|
|
}
|
|
|
|
func TestExitError(t *testing.T) {
|
|
f := Setup()
|
|
defer f.Cleanup()
|
|
|
|
exit := Run(f.Fds(), Elvish(),
|
|
testProgram{shouldRun: true, returnErr: Exit(3)})
|
|
|
|
if exit != 3 {
|
|
t.Errorf("exit = %v, want 3", exit)
|
|
}
|
|
f.TestOut(t, 2, "")
|
|
f.TestOut(t, 1, "")
|
|
}
|
|
|
|
func TestExitError_0(t *testing.T) {
|
|
f := Setup()
|
|
defer f.Cleanup()
|
|
|
|
exit := Run(f.Fds(), Elvish(),
|
|
testProgram{shouldRun: true, returnErr: Exit(0)})
|
|
|
|
if exit != 0 {
|
|
t.Errorf("exit = %v, want 0", exit)
|
|
}
|
|
}
|
|
|
|
type testProgram struct {
|
|
shouldRun bool
|
|
writeOut string
|
|
returnErr error
|
|
}
|
|
|
|
func (p testProgram) ShouldRun(*Flags) bool { return p.shouldRun }
|
|
|
|
func (p testProgram) Run(fds [3]*os.File, _ *Flags, args []string) error {
|
|
fds[1].WriteString(p.writeOut)
|
|
return p.returnErr
|
|
}
|