| // Copyright 2021 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 main |
| |
| import ( |
| "fmt" |
| "reflect" |
| "testing" |
| ) |
| |
| var buildParserTests = []struct { |
| x string |
| matched bool |
| err error |
| }{ |
| {"gc", true, nil}, |
| {"gccgo", false, nil}, |
| {"!gc", false, nil}, |
| {"gc && gccgo", false, nil}, |
| {"gc || gccgo", true, nil}, |
| {"gc || (gccgo && !gccgo)", true, nil}, |
| {"gc && (gccgo || !gccgo)", true, nil}, |
| {"!(gc && (gccgo || !gccgo))", false, nil}, |
| {"gccgo || gc", true, nil}, |
| {"!(!(!(gccgo || gc)))", false, nil}, |
| {"compiler_bootstrap", false, nil}, |
| {"cmd_go_bootstrap", true, nil}, |
| {"syntax(error", false, fmt.Errorf("parsing //go:build line: unexpected (")}, |
| {"(gc", false, fmt.Errorf("parsing //go:build line: missing )")}, |
| {"gc gc", false, fmt.Errorf("parsing //go:build line: unexpected tag")}, |
| {"(gc))", false, fmt.Errorf("parsing //go:build line: unexpected )")}, |
| } |
| |
| func TestBuildParser(t *testing.T) { |
| for _, tt := range buildParserTests { |
| matched, err := matchexpr(tt.x) |
| if matched != tt.matched || !reflect.DeepEqual(err, tt.err) { |
| t.Errorf("matchexpr(%q) = %v, %v; want %v, %v", tt.x, matched, err, tt.matched, tt.err) |
| } |
| } |
| } |