1// Copyright 2018 Google Inc. All rights reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package parser
16
17import (
18	"bytes"
19	"testing"
20)
21
22var parserTestCases = []struct {
23	name string
24	in   string
25	out  []Node
26}{
27	{
28		name: "Escaped $",
29		in:   `a$$ b: c`,
30		out: []Node{
31			&Rule{
32				Target:        SimpleMakeString("a$ b", NoPos),
33				Prerequisites: SimpleMakeString("c", NoPos),
34			},
35		},
36	},
37}
38
39func TestParse(t *testing.T) {
40	for _, test := range parserTestCases {
41		t.Run(test.name, func(t *testing.T) {
42			p := NewParser(test.name, bytes.NewBufferString(test.in))
43			got, errs := p.Parse()
44
45			if len(errs) != 0 {
46				t.Fatalf("Unexpected errors while parsing: %v", errs)
47			}
48
49			if len(got) != len(test.out) {
50				t.Fatalf("length mismatch, expected %d nodes, got %d", len(test.out), len(got))
51			}
52
53			for i := range got {
54				if got[i].Dump() != test.out[i].Dump() {
55					t.Errorf("incorrect node %d:\nexpected: %#v (%s)\n     got: %#v (%s)",
56						i, test.out[i], test.out[i].Dump(), got[i], got[i].Dump())
57				}
58			}
59		})
60	}
61}
62