github.com/niko0xdev/gqlgen@v0.17.55-0.20240120102243-2ecff98c3e37/internal/code/packages_test.go (about) 1 package code 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/assert" 7 "github.com/stretchr/testify/require" 8 ) 9 10 func TestPackages(t *testing.T) { 11 t.Run("name for existing package does not load again", func(t *testing.T) { 12 p := initialState(t) 13 require.Equal(t, "a", p.NameForPackage("github.com/niko0xdev/gqlgen/internal/code/testdata/a")) 14 require.Equal(t, 1, p.numLoadCalls) 15 }) 16 17 t.Run("name for unknown package makes name only load", func(t *testing.T) { 18 p := initialState(t) 19 require.Equal(t, "c", p.NameForPackage("github.com/niko0xdev/gqlgen/internal/code/testdata/c")) 20 require.Equal(t, 1, p.numLoadCalls) 21 require.Equal(t, 1, p.numNameCalls) 22 }) 23 24 t.Run("evicting a package causes it to load again", func(t *testing.T) { 25 p := initialState(t) 26 p.Evict("github.com/niko0xdev/gqlgen/internal/code/testdata/b") 27 require.Equal(t, "a", p.Load("github.com/niko0xdev/gqlgen/internal/code/testdata/a").Name) 28 require.Equal(t, 1, p.numLoadCalls) 29 require.Equal(t, "b", p.Load("github.com/niko0xdev/gqlgen/internal/code/testdata/b").Name) 30 require.Equal(t, 2, p.numLoadCalls) 31 }) 32 33 t.Run("evicting a package also evicts its dependencies", func(t *testing.T) { 34 p := initialState(t) 35 p.Evict("github.com/niko0xdev/gqlgen/internal/code/testdata/a") 36 require.Equal(t, "a", p.Load("github.com/niko0xdev/gqlgen/internal/code/testdata/a").Name) 37 require.Equal(t, 2, p.numLoadCalls) 38 require.Equal(t, "b", p.Load("github.com/niko0xdev/gqlgen/internal/code/testdata/b").Name) 39 require.Equal(t, 3, p.numLoadCalls) 40 }) 41 t.Run("able to load private package with build tags", func(t *testing.T) { 42 p := initialState(t, WithBuildTags("private")) 43 p.Evict("github.com/niko0xdev/gqlgen/internal/code/testdata/a") 44 require.Equal(t, "a", p.Load("github.com/niko0xdev/gqlgen/internal/code/testdata/a").Name) 45 require.Equal(t, 2, p.numLoadCalls) 46 require.Equal(t, "p", p.Load("github.com/niko0xdev/gqlgen/internal/code/testdata/p").Name) 47 require.Equal(t, 3, p.numLoadCalls) 48 }) 49 } 50 51 func TestNameForPackage(t *testing.T) { 52 var p Packages 53 54 assert.Equal(t, "api", p.NameForPackage("github.com/niko0xdev/gqlgen/api")) 55 56 // does not contain go code, should still give a valid name 57 assert.Equal(t, "docs", p.NameForPackage("github.com/niko0xdev/gqlgen/docs")) 58 assert.Equal(t, "github_com", p.NameForPackage("github.com")) 59 } 60 61 func initialState(t *testing.T, opts ...Option) *Packages { 62 p := NewPackages(opts...) 63 pkgs := p.LoadAll( 64 "github.com/niko0xdev/gqlgen/internal/code/testdata/a", 65 "github.com/niko0xdev/gqlgen/internal/code/testdata/b", 66 ) 67 require.Nil(t, p.Errors()) 68 69 require.Equal(t, 1, p.numLoadCalls) 70 require.Equal(t, 0, p.numNameCalls) 71 require.Equal(t, "a", pkgs[0].Name) 72 require.Equal(t, "b", pkgs[1].Name) 73 return p 74 }