// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package ebnf

import (
	"io/ioutil";
	"strings";
	"testing";
)


var grammars = []string{
	`Program = .
	`,

	`Program = foo .
	foo = "foo" .
	`,

	`Program = "a" | "b" "c" .
	`,

	`Program = "a" ... "z" .
	`,

	`Program = Song .
	 Song = { Note } .
	 Note = Do | (Re | Mi | Fa | So | La) | Ti .
	 Do = "c" .
	 Re = "d" .
	 Mi = "e" .
	 Fa = "f" .
	 So = "g" .
	 La = "a" .
	 Ti = ti .
	 ti = "b" .
	`,
}


func check(t *testing.T, filename string, src []byte) {
	grammar, err := Parse(filename, src);
	if err != nil {
		t.Errorf("Parse(%s) failed: %v", src, err)
	}
	if err = Verify(grammar, "Program"); err != nil {
		t.Errorf("Verify(%s) failed: %v", src, err)
	}
}


func TestGrammars(t *testing.T) {
	for _, src := range grammars {
		check(t, "", strings.Bytes(src))
	}
}


var files = []string{
// TODO(gri) add some test files
}


func TestFiles(t *testing.T) {
	for _, filename := range files {
		src, err := ioutil.ReadFile(filename);
		if err != nil {
			t.Fatal(err)
		}
		check(t, filename, src);
	}
}
