// Copyright 2023 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 constraint import ( "fmt" "testing" ) var tests = []struct { in string out int }{ {"//go:build linux && go1.60", 60}, {"//go:build ignore && go1.60", 60}, {"//go:build ignore || go1.60", -1}, {"//go:build go1.50 || (ignore && go1.60)", 50}, {"// +build go1.60,linux", 60}, {"// +build go1.60 linux", -1}, {"//go:build go1.50 && !go1.60", 50}, {"//go:build !go1.60", -1}, {"//go:build linux && go1.50 || darwin && go1.60", 50}, {"//go:build linux && go1.50 || !(!darwin || !go1.60)", 50}, } func TestGoVersion(t *testing.T) { for _, tt := range tests { x, err := Parse(tt.in) if err != nil { t.Fatal(err) } v := GoVersion(x) want := "" if tt.out == 0 { want = "go1" } else if tt.out > 0 { want = fmt.Sprintf("go1.%d", tt.out) } if v != want { t.Errorf("GoVersion(%q) = %q, want %q, nil", tt.in, v, want) } } }