github.com/traefik/yaegi@v0.15.1/interp/build_test.go (about)

     1  package interp
     2  
     3  import (
     4  	"go/build"
     5  	"testing"
     6  )
     7  
     8  type testBuild struct {
     9  	src string
    10  	res bool
    11  }
    12  
    13  func TestBuildTag(t *testing.T) {
    14  	// Assume a specific OS, arch and go version no matter the real underlying system
    15  	ctx := build.Context{
    16  		GOARCH:      "amd64",
    17  		GOOS:        "linux",
    18  		BuildTags:   []string{"foo"},
    19  		ReleaseTags: []string{"go1.11"},
    20  	}
    21  
    22  	tests := []testBuild{
    23  		{"// +build linux", true},
    24  		{"// +build windows", false},
    25  		{"// +build go1.9", true},
    26  		{"// +build go1.11", true},
    27  		{"// +build go1.12", false},
    28  		{"// +build !go1.10", false},
    29  		{"// +build !go1.12", true},
    30  		{"// +build ignore", false},
    31  		{"// +build linux,amd64", true},
    32  		{"// +build linux,i386", false},
    33  		{"// +build linux,i386 go1.11", true},
    34  		{"// +build linux\n// +build amd64", true},
    35  		{"// +build linux\n\n\n// +build amd64", true},
    36  		{"// +build linux\n// +build i386", false},
    37  		{"// +build foo", true},
    38  		{"// +build !foo", false},
    39  		{"// +build bar", false},
    40  	}
    41  
    42  	i := New(Options{})
    43  	for _, test := range tests {
    44  		test := test
    45  		src := test.src + "\npackage x"
    46  		t.Run(test.src, func(t *testing.T) {
    47  			if r, _ := i.buildOk(&ctx, "", src); r != test.res {
    48  				t.Errorf("got %v, want %v", r, test.res)
    49  			}
    50  		})
    51  	}
    52  }
    53  
    54  func TestSkipFile(t *testing.T) {
    55  	// Assume a specific OS, arch and go pattern no matter the real underlying system
    56  	ctx := build.Context{
    57  		GOARCH: "amd64",
    58  		GOOS:   "linux",
    59  	}
    60  
    61  	tests := []testBuild{
    62  		{"foo/bar_linux_amd64.go", false},
    63  		{"foo/bar.go", false},
    64  		{"bar.go", false},
    65  		{"bar_linux.go", false},
    66  		{"bar_maix.go", false},
    67  		{"bar_mlinux.go", false},
    68  
    69  		{"bar_aix_foo.go", false},
    70  		{"bar_linux_foo.go", false},
    71  		{"bar_foo_amd64.go", false},
    72  		{"bar_foo_arm.go", true},
    73  
    74  		{"bar_aix_s390x.go", true},
    75  		{"bar_aix_amd64.go", true},
    76  		{"bar_linux_arm.go", true},
    77  
    78  		{"bar_amd64.go", false},
    79  		{"bar_arm.go", true},
    80  	}
    81  
    82  	for _, test := range tests {
    83  		test := test
    84  		t.Run(test.src, func(t *testing.T) {
    85  			if r := skipFile(&ctx, test.src, NoTest); r != test.res {
    86  				t.Errorf("got %v, want %v", r, test.res)
    87  			}
    88  		})
    89  	}
    90  }
    91  
    92  func Test_goMinorVersion(t *testing.T) {
    93  	tests := []struct {
    94  		desc     string
    95  		context  build.Context
    96  		expected int
    97  	}{
    98  		{
    99  			desc: "stable",
   100  			context: build.Context{ReleaseTags: []string{
   101  				"go1.1", "go1.2", "go1.3", "go1.4", "go1.5", "go1.6", "go1.7", "go1.8", "go1.9", "go1.10", "go1.11", "go1.12",
   102  			}},
   103  			expected: 12,
   104  		},
   105  		{
   106  			desc: "devel/beta/rc",
   107  			context: build.Context{ReleaseTags: []string{
   108  				"go1.1", "go1.2", "go1.3", "go1.4", "go1.5", "go1.6", "go1.7", "go1.8", "go1.9", "go1.10", "go1.11", "go1.12", "go1.13",
   109  			}},
   110  			expected: 13,
   111  		},
   112  	}
   113  
   114  	for _, test := range tests {
   115  		test := test
   116  		t.Run(test.desc, func(t *testing.T) {
   117  			minor := goMinorVersion(&test.context)
   118  
   119  			if minor != test.expected {
   120  				t.Errorf("got %v, want %v", minor, test.expected)
   121  			}
   122  		})
   123  	}
   124  }