diff --git a/src/expression/Expression_test.go b/src/expression/Expression_test.go index 6fab56c..3e51e08 100644 --- a/src/expression/Expression_test.go +++ b/src/expression/Expression_test.go @@ -59,15 +59,40 @@ func TestSource(t *testing.T) { src := []byte("(1+2-3*4)+(5*6-7+8)") tokens := token.Tokenize(src) expr := expression.Parse(tokens) + + assert.Equal(t, expr.String(src), "(+ (- (+ 1 2) (* 3 4)) (+ (- (* 5 6) 7) 8))") assert.DeepEqual(t, expr.Source, tokens) + + assert.Equal(t, expr.Children[0].String(src), "(- (+ 1 2) (* 3 4))") assert.DeepEqual(t, expr.Children[0].Source, tokens[1:8]) + + assert.Equal(t, expr.Children[1].String(src), "(+ (- (* 5 6) 7) 8)") assert.DeepEqual(t, expr.Children[1].Source, tokens[11:18]) - sources := []string{} + + assert.Equal(t, expr.Children[0].Children[0].String(src), "(+ 1 2)") + assert.DeepEqual(t, expr.Children[0].Children[0].Source, tokens[1:4]) + + assert.Equal(t, expr.Children[0].Children[1].String(src), "(* 3 4)") + assert.DeepEqual(t, expr.Children[0].Children[1].Source, tokens[5:8]) + + assert.Equal(t, expr.Children[1].Children[0].String(src), "(- (* 5 6) 7)") + assert.DeepEqual(t, expr.Children[1].Children[0].Source, tokens[11:16]) + + assert.Equal(t, expr.Children[1].Children[0].Children[0].String(src), "(* 5 6)") + assert.DeepEqual(t, expr.Children[1].Children[0].Children[0].Source, tokens[11:14]) + + assert.Equal(t, expr.Children[1].Children[0].Children[1].String(src), "7") + assert.DeepEqual(t, expr.Children[1].Children[0].Children[1].Source, tokens[15:16]) + + assert.Equal(t, expr.Children[1].Children[1].String(src), "8") + assert.DeepEqual(t, expr.Children[1].Children[1].Source, tokens[17:18]) + + leaves := []string{} expr.EachLeaf(func(leaf *expression.Expression) error { - sources = append(sources, leaf.Source.String(src)) + leaves = append(leaves, leaf.Source.String(src)) return nil }) - assert.DeepEqual(t, sources, []string{"1", "2", "3", "4", "5", "6", "7", "8"}) + assert.DeepEqual(t, leaves, []string{"1", "2", "3", "4", "5", "6", "7", "8"}) } \ No newline at end of file diff --git a/src/expression/Parse.go b/src/expression/Parse.go index 5e57e17..dd64d3c 100644 --- a/src/expression/Parse.go +++ b/src/expression/Parse.go @@ -162,6 +162,7 @@ func Parse(tokens token.List) *Expression { root = node } + cursorStart = i + 1 start.InsertAbove(node) break }