Added more tests
This commit is contained in:
parent
a42115c0fb
commit
04ece57b27
7
examples/shell/const.q
Normal file
7
examples/shell/const.q
Normal file
@ -0,0 +1,7 @@
|
||||
const idtype {
|
||||
pid 1
|
||||
}
|
||||
|
||||
const state {
|
||||
exited 0x4
|
||||
}
|
@ -2,14 +2,6 @@ import io
|
||||
import mem
|
||||
import sys
|
||||
|
||||
const idtype {
|
||||
pid 1
|
||||
}
|
||||
|
||||
const state {
|
||||
exited 0x4
|
||||
}
|
||||
|
||||
main() {
|
||||
length := 256
|
||||
command := mem.alloc(length)
|
||||
|
@ -20,23 +20,15 @@ func TestAssign(t *testing.T) {
|
||||
assert.NotNil(t, assignment.Expression)
|
||||
}
|
||||
|
||||
func TestReturn(t *testing.T) {
|
||||
tree, err := parse("return")
|
||||
func TestGroups(t *testing.T) {
|
||||
tree, err := parse("f(\nx\n)\ng(\nx\n)")
|
||||
assert.Nil(t, err)
|
||||
assert.Equal(t, len(tree), 1)
|
||||
assert.Equal(t, len(tree), 2)
|
||||
|
||||
ret := tree[0].(*ast.Return)
|
||||
assert.Nil(t, ret.Values)
|
||||
}
|
||||
|
||||
func TestReturnValues(t *testing.T) {
|
||||
tree, err := parse("return 42")
|
||||
assert.Nil(t, err)
|
||||
assert.Equal(t, len(tree), 1)
|
||||
|
||||
ret := tree[0].(*ast.Return)
|
||||
assert.Equal(t, len(ret.Values), 1)
|
||||
assert.Equal(t, ret.Values[0].Token.Kind, token.Number)
|
||||
f := tree[0].(*ast.Call)
|
||||
assert.NotNil(t, f.Expression)
|
||||
g := tree[1].(*ast.Call)
|
||||
assert.NotNil(t, g.Expression)
|
||||
}
|
||||
|
||||
func TestIfElse(t *testing.T) {
|
||||
@ -56,6 +48,31 @@ func TestLoop(t *testing.T) {
|
||||
assert.Equal(t, len(tree), 1)
|
||||
}
|
||||
|
||||
func TestNewLine(t *testing.T) {
|
||||
tree, err := parse("\n\n\n")
|
||||
assert.Nil(t, err)
|
||||
assert.Equal(t, len(tree), 0)
|
||||
}
|
||||
|
||||
func TestReturn(t *testing.T) {
|
||||
tree, err := parse("return")
|
||||
assert.Nil(t, err)
|
||||
assert.Equal(t, len(tree), 1)
|
||||
|
||||
ret := tree[0].(*ast.Return)
|
||||
assert.Nil(t, ret.Values)
|
||||
}
|
||||
|
||||
func TestReturnValues(t *testing.T) {
|
||||
tree, err := parse("return 42")
|
||||
assert.Nil(t, err)
|
||||
assert.Equal(t, len(tree), 1)
|
||||
|
||||
ret := tree[0].(*ast.Return)
|
||||
assert.Equal(t, len(ret.Values), 1)
|
||||
assert.Equal(t, ret.Values[0].Token.Kind, token.Number)
|
||||
}
|
||||
|
||||
func parse(code string) (ast.AST, error) {
|
||||
src := []byte(code)
|
||||
tokens := token.Tokenize(src)
|
||||
|
@ -9,13 +9,13 @@ func eachInstruction(tokens token.List, call func(token.List) error) error {
|
||||
blockLevel := 0
|
||||
|
||||
for i, t := range tokens {
|
||||
if start == i && t.Kind == token.NewLine {
|
||||
switch t.Kind {
|
||||
case token.NewLine:
|
||||
if start == i {
|
||||
start = i + 1
|
||||
continue
|
||||
}
|
||||
|
||||
switch t.Kind {
|
||||
case token.NewLine:
|
||||
if groupLevel > 0 || blockLevel > 0 {
|
||||
continue
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user