Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

added commandline and stdin tests using testscript #28

Merged
merged 3 commits into from
Dec 7, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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