github.com/simonferquel/app@v0.6.1-0.20181012141724-68b7cccf26ac/internal/renderer/renderer_test.go (about) 1 package renderer 2 3 import ( 4 "testing" 5 6 "github.com/docker/app/internal/renderer/driver" 7 "github.com/pkg/errors" 8 "gotest.tools/assert" 9 is "gotest.tools/assert/cmp" 10 ) 11 12 type fakeDriver struct{} 13 14 func (d *fakeDriver) Apply(s string, settings map[string]interface{}) (string, error) { 15 return s + "fake", nil 16 } 17 18 type fakeErrorDriver struct{} 19 20 func (d *fakeErrorDriver) Apply(s string, settings map[string]interface{}) (string, error) { 21 return s, errors.New("error in driver") 22 } 23 24 func TestRegisterNilPanics(t *testing.T) { 25 defer func() { 26 if recover() == nil { 27 t.Errorf("The code did not panic") 28 } 29 resetDrivers() 30 }() 31 Register("foo", nil) 32 } 33 34 func TestRegisterDuplicatePanics(t *testing.T) { 35 defer func() { 36 if recover() == nil { 37 t.Errorf("The code did not panic") 38 } 39 resetDrivers() 40 }() 41 Register("bar", &fakeDriver{}) 42 Register("bar", &fakeDriver{}) 43 } 44 45 func TestRegister(t *testing.T) { 46 d := &fakeDriver{} 47 Register("baz", d) 48 defer resetDrivers() 49 assert.Check(t, is.DeepEqual(drivers, map[string]driver.Driver{"baz": d})) 50 } 51 52 func TestNoDrivers(t *testing.T) { 53 assert.Check(t, is.DeepEqual(Drivers(), []string{"none"})) 54 } 55 56 func TestRegisteredDrivers(t *testing.T) { 57 Register("foo", &fakeDriver{}) 58 Register("bar", &fakeDriver{}) 59 defer resetDrivers() 60 assert.Check(t, is.DeepEqual(Drivers(), []string{"bar", "foo", "none"})) 61 } 62 63 func TestApplyNonExistentDriver(t *testing.T) { 64 _, err := Apply("foo", nil, "toto") 65 assert.Check(t, err != nil) 66 assert.Check(t, is.ErrorContains(err, "unknown renderer toto")) 67 } 68 69 func TestApplyErrorDriver(t *testing.T) { 70 Register("err", &fakeErrorDriver{}) 71 defer resetDrivers() 72 _, err := Apply("foo", nil, "err") 73 assert.Check(t, err != nil) 74 assert.Check(t, is.ErrorContains(err, "error in driver")) 75 } 76 77 func TestApplyNone(t *testing.T) { 78 Register("fake", &fakeDriver{}) 79 defer resetDrivers() 80 s, err := Apply("foo", nil, "none") 81 assert.NilError(t, err) 82 assert.Check(t, is.Equal(s, "foo")) 83 } 84 85 func TestApply(t *testing.T) { 86 Register("fake", &fakeDriver{}) 87 defer resetDrivers() 88 s, err := Apply("foo", nil, "fake") 89 assert.NilError(t, err) 90 assert.Check(t, is.Equal(s, "foofake")) 91 } 92 93 func resetDrivers() { 94 drivers = map[string]driver.Driver{} 95 }