Skip to content

Commit

Permalink
added commandline and stdin tests using testscript (#28)
Browse files Browse the repository at this point in the history
* added commandline and stdin tests using testscript

---------

Co-authored-by: Thomas von Dein <[email protected]>
  • Loading branch information
TLINDEN and Thomas von Dein authored Dec 7, 2023
1 parent 846b3e6 commit cb774b3
Show file tree
Hide file tree
Showing 22 changed files with 131 additions and 7 deletions.
4 changes: 2 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,8 @@ test:
go test -v ./...

singletest:
@echo "Call like this: ''make singletest TEST=TestPrepareColumns"
go test -run $(TEST)
@echo "Call like this: make singletest TEST=TestPrepareColumns ARGS=-v"
go test -run $(TEST) $(ARGS)

cover-report:
go test ./... -cover -coverprofile=coverage.out
Expand Down
4 changes: 3 additions & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@ go 1.20

require (
github.com/chzyer/readline v1.5.1 // indirect
github.com/rogpeppe/go-internal v1.11.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
github.com/yuin/gopher-lua v1.1.0 // indirect
golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5 // indirect
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f // indirect
golang.org/x/tools v0.1.12 // indirect
)
6 changes: 6 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,15 @@ github.com/chzyer/logex v1.2.1/go.mod h1:JLbx6lG2kDbNRFnfkgvh4eRJRPX1QCoOIWomwys
github.com/chzyer/readline v1.5.1 h1:upd/6fQk4src78LMRzh5vItIt361/o4uq553V8B5sGI=
github.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObkaSkeBlk=
github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38GC8=
github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=
github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/yuin/gopher-lua v1.1.0 h1:BojcDhfyDWgU2f2TOzYK/g5p2gxMrku8oupLDqlnSqE=
github.com/yuin/gopher-lua v1.1.0/go.mod h1:GBR0iDaNXjAgGg9zfCvksxSRnQx76gclCIb7kdAd1Pw=
golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5 h1:y/woIyUBFbpQGKS0u1aHF/40WUDnek3fPOyD08H5Vng=
golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f h1:v4INt8xihDGvnrfjMDVXGxw9wrfxYyCjk0KbXjhR55s=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
22 changes: 18 additions & 4 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ Options:
-s, --stack show last 5 items of the stack (off by default)
-i --intermediate print intermediate results
-m, --manual show manual
-c, --config <file> load <file> containing LUA code
-v, --version show version
-h, --help show help
Expand All @@ -51,6 +52,10 @@ this only when working with stdin. E.g.: echo "2 3 4 5" | rpn +
Copyright (c) 2023 T.v.Dein`

func main() {
os.Exit(Main())
}

func Main() int {
calc := NewCalc()

showversion := false
Expand All @@ -74,12 +79,12 @@ func main() {

if showversion {
fmt.Printf("This is rpn version %s\n", VERSION)
return
return 0
}

if showhelp {
fmt.Println(Usage)
return
return 0
}

if enabledebug {
Expand All @@ -88,7 +93,7 @@ func main() {

if showmanual {
man()
os.Exit(0)
return 0
}

// the lua state object is global, instanciate it early
Expand All @@ -101,14 +106,21 @@ func main() {
luarunner := NewInterpreter(configfile, enabledebug)
luarunner.InitLua()
calc.SetInt(luarunner)
if calc.debug {
fmt.Println("loaded config")
}
} else {
if calc.debug {
fmt.Println(err)
}
}

if len(flag.Args()) > 1 {
// commandline calc operation, no readline etc needed
// called like rpn 2 2 +
calc.stdin = true
calc.Eval(strings.Join(flag.Args(), " "))
return
return 0
}

// interactive mode, need readline
Expand Down Expand Up @@ -152,6 +164,8 @@ func main() {
calc.batch = true
calc.Eval(flag.Args()[0])
}

return 0
}

func inputIsStdin() bool {
Expand Down
20 changes: 20 additions & 0 deletions main_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package main

import (
"os"
"testing"

"github.com/rogpeppe/go-internal/testscript"
)

func TestMain(m *testing.M) {
os.Exit(testscript.RunMain(m, map[string]func() int{
"testrpn": Main,
}))
}

func TestRpn(t *testing.T) {
testscript.Run(t, testscript.Params{
Dir: "t",
})
}
2 changes: 2 additions & 0 deletions t/cmdline-command.txtar
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
exec testrpn 1 2 dump
stdout 'Stack revision 2 .0x'
2 changes: 2 additions & 0 deletions t/cmdline-invalidcommand.txtar
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
exec testrpn 1 2 dumb
stdout 'unknown command or operator'
2 changes: 2 additions & 0 deletions t/cmdline-short-stack.txtar
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
exec testrpn 4 +
stdout 'stack doesn''t provide enough arguments'
2 changes: 2 additions & 0 deletions t/cmdlinecalc-debug.txtar
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
exec testrpn -d 44 55 *
stdout 'push to stack: 2420.00\n'
2 changes: 2 additions & 0 deletions t/cmdlinecalc-divzero.txtar
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
exec testrpn 100 50 50 - /
stdout 'division by null\n'
16 changes: 16 additions & 0 deletions t/cmdlinecalc-lua.txtar
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
exec testrpn -d -c test.lua 3 5 lower
stdout '3\n'

-- test.lua --
function lower(a,b)
if a < b then
return a
else
return b
end
end

function init()
-- expects 2 args
register("lower", 2, "lower")
end
2 changes: 2 additions & 0 deletions t/cmdlinecalc.txtar
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
exec testrpn 44 55 *
stdout '2420\n'
2 changes: 2 additions & 0 deletions t/getman.txtar
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
exec testrpn -m
stdout 'This software is licensed under the GNU GENERAL PUBLIC LICENSE'
2 changes: 2 additions & 0 deletions t/getusage.txtar
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
exec testrpn -h
stdout 'This is rpn'
2 changes: 2 additions & 0 deletions t/getversion.txtar
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
exec testrpn -v
stdout 'This is rpn version'
4 changes: 4 additions & 0 deletions t/stdin-batch-cmd.txtar
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
exec echo 1 2 3 4 5 batch median
stdin stdout
exec testrpn
[unix] stdout '3\n'
4 changes: 4 additions & 0 deletions t/stdin-batch.txtar
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
exec echo 1 2 3 4 5
stdin stdout
[unix] exec testrpn median
[unix] stdout '3\n'
4 changes: 4 additions & 0 deletions t/stdin-calc.txtar
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
exec echo 10 10 +
stdin stdout
exec testrpn
[unix] stdout '20\n'
6 changes: 6 additions & 0 deletions t/stdin-help.txtar
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
stdin input.txt
exec testrpn
[unix] stdout 'Available configuration commands'

-- input.txt --
?
13 changes: 13 additions & 0 deletions t/stdin-use-vars.txtar
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
stdin input.txt
exec testrpn
[unix] stdout '28\n'

-- input.txt --
10
10
+
>SUM
clear
8
<SUM
+
4 changes: 4 additions & 0 deletions t/stdint-explicit-batch.txtar
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
exec echo 1 2 3 4 5 median
stdin stdout
exec testrpn -b
[unix] stdout '3\n'
13 changes: 13 additions & 0 deletions t/test.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
-- simple function, return the lower number of the two operands
function lower(a,b)
if a < b then
return a
else
return b
end
end

function init()
-- expects 2 args
register("lower", 2, "lower")
end

0 comments on commit cb774b3

Please sign in to comment.