// 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 (
	"go/token"
	"io/ioutil"
	"testing"
)


var fset = token.NewFileSet()


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(fset, filename, src)
	if err != nil {
		t.Errorf("Parse(%s) failed: %v", src, err)
	}
	if err = Verify(fset, grammar, "Program"); err != nil {
		t.Errorf("Verify(%s) failed: %v", src, err)
	}
}


func TestGrammars(t *testing.T) {
	for _, src := range grammars {
		check(t, "", []byte(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)
	}
}
