template_test.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package template
  2. import (
  3. "testing"
  4. "github.com/stretchr/testify/assert"
  5. )
  6. var defaults = map[string]string{
  7. "FOO": "first",
  8. "BAR": "",
  9. }
  10. func defaultMapping(name string) (string, bool) {
  11. val, ok := defaults[name]
  12. return val, ok
  13. }
  14. func TestEscaped(t *testing.T) {
  15. result, err := Substitute("$${foo}", defaultMapping)
  16. assert.NoError(t, err)
  17. assert.Equal(t, "${foo}", result)
  18. }
  19. func TestInvalid(t *testing.T) {
  20. invalidTemplates := []string{
  21. "${",
  22. "$}",
  23. "${}",
  24. "${ }",
  25. "${ foo}",
  26. "${foo }",
  27. "${foo!}",
  28. }
  29. for _, template := range invalidTemplates {
  30. _, err := Substitute(template, defaultMapping)
  31. assert.Error(t, err)
  32. assert.IsType(t, &InvalidTemplateError{}, err)
  33. }
  34. }
  35. func TestNoValueNoDefault(t *testing.T) {
  36. for _, template := range []string{"This ${missing} var", "This ${BAR} var"} {
  37. result, err := Substitute(template, defaultMapping)
  38. assert.NoError(t, err)
  39. assert.Equal(t, "This var", result)
  40. }
  41. }
  42. func TestValueNoDefault(t *testing.T) {
  43. for _, template := range []string{"This $FOO var", "This ${FOO} var"} {
  44. result, err := Substitute(template, defaultMapping)
  45. assert.NoError(t, err)
  46. assert.Equal(t, "This first var", result)
  47. }
  48. }
  49. func TestNoValueWithDefault(t *testing.T) {
  50. for _, template := range []string{"ok ${missing:-def}", "ok ${missing-def}"} {
  51. result, err := Substitute(template, defaultMapping)
  52. assert.NoError(t, err)
  53. assert.Equal(t, "ok def", result)
  54. }
  55. }
  56. func TestEmptyValueWithSoftDefault(t *testing.T) {
  57. result, err := Substitute("ok ${BAR:-def}", defaultMapping)
  58. assert.NoError(t, err)
  59. assert.Equal(t, "ok def", result)
  60. }
  61. func TestEmptyValueWithHardDefault(t *testing.T) {
  62. result, err := Substitute("ok ${BAR-def}", defaultMapping)
  63. assert.NoError(t, err)
  64. assert.Equal(t, "ok ", result)
  65. }
  66. func TestNonAlphanumericDefault(t *testing.T) {
  67. result, err := Substitute("ok ${BAR:-/non:-alphanumeric}", defaultMapping)
  68. assert.NoError(t, err)
  69. assert.Equal(t, "ok /non:-alphanumeric", result)
  70. }