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  }