]> git.ipfire.org Git - thirdparty/gcc.git/blob - libgo/go/go/parser/parser_test.go
Add Go frontend, libgo library, and Go testsuite.
[thirdparty/gcc.git] / libgo / go / go / parser / parser_test.go
1 // Copyright 2009 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4
5 package parser
6
7 import (
8 "os"
9 "testing"
10 )
11
12
13 var illegalInputs = []interface{}{
14 nil,
15 3.14,
16 []byte(nil),
17 "foo!",
18 }
19
20
21 func TestParseIllegalInputs(t *testing.T) {
22 for _, src := range illegalInputs {
23 _, err := ParseFile("", src, 0)
24 if err == nil {
25 t.Errorf("ParseFile(%v) should have failed", src)
26 }
27 }
28 }
29
30
31 var validPrograms = []interface{}{
32 "package main\n",
33 `package main;`,
34 `package main; import "fmt"; func main() { fmt.Println("Hello, World!") };`,
35 `package main; func main() { if f(T{}) {} };`,
36 `package main; func main() { _ = (<-chan int)(x) };`,
37 `package main; func main() { _ = (<-chan <-chan int)(x) };`,
38 `package main; func f(func() func() func());`,
39 `package main; func f(...T);`,
40 `package main; func f(float, ...int);`,
41 `package main; func f(x int, a ...int) { f(0, a...); f(1, a...,) };`,
42 `package main; type T []int; var a []bool; func f() { if a[T{42}[0]] {} };`,
43 `package main; type T []int; func g(int) bool { return true }; func f() { if g(T{42}[0]) {} };`,
44 `package main; type T []int; func f() { for _ = range []int{T{42}[0]} {} };`,
45 `package main; var a = T{{1, 2}, {3, 4}}`,
46 }
47
48
49 func TestParseValidPrograms(t *testing.T) {
50 for _, src := range validPrograms {
51 _, err := ParseFile("", src, 0)
52 if err != nil {
53 t.Errorf("ParseFile(%q): %v", src, err)
54 }
55 }
56 }
57
58
59 var validFiles = []string{
60 "parser.go",
61 "parser_test.go",
62 }
63
64
65 func TestParse3(t *testing.T) {
66 for _, filename := range validFiles {
67 _, err := ParseFile(filename, nil, 0)
68 if err != nil {
69 t.Errorf("ParseFile(%s): %v", filename, err)
70 }
71 }
72 }
73
74
75 func nameFilter(filename string) bool {
76 switch filename {
77 case "parser.go":
78 case "interface.go":
79 case "parser_test.go":
80 default:
81 return false
82 }
83 return true
84 }
85
86
87 func dirFilter(f *os.FileInfo) bool { return nameFilter(f.Name) }
88
89
90 func TestParse4(t *testing.T) {
91 path := "."
92 pkgs, err := ParseDir(path, dirFilter, 0)
93 if err != nil {
94 t.Fatalf("ParseDir(%s): %v", path, err)
95 }
96 if len(pkgs) != 1 {
97 t.Errorf("incorrect number of packages: %d", len(pkgs))
98 }
99 pkg := pkgs["parser"]
100 if pkg == nil {
101 t.Errorf(`package "parser" not found`)
102 return
103 }
104 for filename, _ := range pkg.Files {
105 if !nameFilter(filename) {
106 t.Errorf("unexpected package file: %s", filename)
107 }
108 }
109 }