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/99designs/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/99designs/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/99designs/gqlgen/internal/code/testdata/b")
27 require.Equal(t, "a", p.Load("github.com/99designs/gqlgen/internal/code/testdata/a").Name)
28 require.Equal(t, 1, p.numLoadCalls)
29 require.Equal(t, "b", p.Load("github.com/99designs/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/99designs/gqlgen/internal/code/testdata/a")
36 require.Equal(t, "a", p.Load("github.com/99designs/gqlgen/internal/code/testdata/a").Name)
37 require.Equal(t, 2, p.numLoadCalls)
38 require.Equal(t, "b", p.Load("github.com/99designs/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/99designs/gqlgen/internal/code/testdata/a")
44 require.Equal(t, "a", p.Load("github.com/99designs/gqlgen/internal/code/testdata/a").Name)
45 require.Equal(t, 2, p.numLoadCalls)
46 require.Equal(t, "p", p.Load("github.com/99designs/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/99designs/gqlgen/api"))
55
56
57 assert.Equal(t, "docs", p.NameForPackage("github.com/99designs/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/99designs/gqlgen/internal/code/testdata/a",
65 "github.com/99designs/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 }
75
View as plain text