// 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) } }