github.com/grahambrereton-form3/tilt@v0.10.18/internal/tiltfile/include_test.go (about) 1 package tiltfile 2 3 import ( 4 "fmt" 5 "strings" 6 "testing" 7 8 "github.com/stretchr/testify/assert" 9 ) 10 11 func TestIncludeThreeTiltfiles(t *testing.T) { 12 f := newFixture(t) 13 defer f.TearDown() 14 15 f.setupFooAndBar() 16 f.file("foo/Tiltfile", ` 17 docker_build('gcr.io/foo', '.') 18 `) 19 f.file("bar/Tiltfile", ` 20 docker_build('gcr.io/bar', '.') 21 `) 22 f.file("Tiltfile", ` 23 include('./foo/Tiltfile') 24 include('./bar/Tiltfile') 25 k8s_yaml(['foo.yaml', 'bar.yaml']) 26 `) 27 28 f.load() 29 f.assertNextManifest("foo", 30 db(image("gcr.io/foo")), 31 deployment("foo")) 32 f.assertNextManifest("bar", 33 db(image("gcr.io/bar")), 34 deployment("bar")) 35 } 36 37 func TestIncludeCircular(t *testing.T) { 38 f := newFixture(t) 39 defer f.TearDown() 40 41 f.file("foo/Tiltfile", ` 42 include('../Tiltfile') 43 `) 44 f.file("Tiltfile", ` 45 include('./foo/Tiltfile') 46 `) 47 48 f.loadErrString("Circular load") 49 } 50 51 func TestIncludeTriangular(t *testing.T) { 52 f := newFixture(t) 53 defer f.TearDown() 54 55 f.file("foo/Tiltfile", ` 56 print('foo') 57 `) 58 f.file("bar/Tiltfile", ` 59 include('../foo/Tiltfile') 60 `) 61 f.file("Tiltfile", ` 62 include('./foo/Tiltfile') 63 include('./bar/Tiltfile') 64 `) 65 66 f.load() 67 68 // make sure foo/Tiltfile is only loaded once 69 assertContainsOnce( 70 t, 71 f.out.String(), 72 "Beginning Tiltfile execution\nfoo\nSuccessfully loaded Tiltfile") 73 } 74 75 func TestIncludeMissing(t *testing.T) { 76 f := newFixture(t) 77 defer f.TearDown() 78 79 f.file("Tiltfile", ` 80 include('./foo/Tiltfile') 81 `) 82 83 f.loadErrString( 84 "Tiltfile:2:8: in <toplevel>", 85 "no such file or directory") 86 } 87 88 func TestIncludeError(t *testing.T) { 89 f := newFixture(t) 90 defer f.TearDown() 91 92 f.file("Tiltfile", ` 93 include('./foo/Tiltfile') 94 `) 95 f.file("foo/Tiltfile", ` 96 local('exit 1') 97 `) 98 99 f.loadErrString( 100 fmt.Sprintf("%s/Tiltfile:2:8: in <toplevel>", f.Path()), 101 fmt.Sprintf("%s/foo/Tiltfile:2:6: in <toplevel>", f.Path()), 102 "exit status 1") 103 } 104 105 func TestLoadFunction(t *testing.T) { 106 f := newFixture(t) 107 defer f.TearDown() 108 109 f.file("boo/Tiltfile", ` 110 def shout(): 111 print('boo') 112 `) 113 f.file("Tiltfile", ` 114 load('./boo/Tiltfile', 'shout') 115 shout() 116 `) 117 118 f.load() 119 assertContainsOnce( 120 t, 121 f.out.String(), 122 "Beginning Tiltfile execution\nboo\nSuccessfully loaded Tiltfile") 123 124 } 125 126 func TestLoadError(t *testing.T) { 127 f := newFixture(t) 128 defer f.TearDown() 129 130 f.file("Tiltfile", ` 131 load('./foo/Tiltfile', "x") 132 `) 133 f.file("foo/Tiltfile", ` 134 x = 1 135 local('exit 1') 136 `) 137 138 f.loadErrString( 139 fmt.Sprintf("%s/Tiltfile:2:1: in <toplevel>", f.Path()), 140 fmt.Sprintf("%s/foo/Tiltfile:3:6: in <toplevel>", f.Path()), 141 "exit status 1") 142 } 143 144 func assertContainsOnce(t *testing.T, s, contains string) { 145 assert.Contains(t, s, contains) 146 assert.Equal(t, 1, strings.Count(s, contains)) 147 }