regex_test.go 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. package sprig
  2. import (
  3. "testing"
  4. "github.com/stretchr/testify/assert"
  5. )
  6. func TestRegexMatch(t *testing.T) {
  7. regex := "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}"
  8. assert.True(t, regexMatch(regex, "test@acme.com"))
  9. assert.True(t, regexMatch(regex, "Test@Acme.Com"))
  10. assert.False(t, regexMatch(regex, "test"))
  11. assert.False(t, regexMatch(regex, "test.com"))
  12. assert.False(t, regexMatch(regex, "test@acme"))
  13. }
  14. func TestMustRegexMatch(t *testing.T) {
  15. regex := "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}"
  16. o, err := mustRegexMatch(regex, "test@acme.com")
  17. assert.True(t, o)
  18. assert.Nil(t, err)
  19. o, err = mustRegexMatch(regex, "Test@Acme.Com")
  20. assert.True(t, o)
  21. assert.Nil(t, err)
  22. o, err = mustRegexMatch(regex, "test")
  23. assert.False(t, o)
  24. assert.Nil(t, err)
  25. o, err = mustRegexMatch(regex, "test.com")
  26. assert.False(t, o)
  27. assert.Nil(t, err)
  28. o, err = mustRegexMatch(regex, "test@acme")
  29. assert.False(t, o)
  30. assert.Nil(t, err)
  31. }
  32. func TestRegexFindAll(t *testing.T) {
  33. regex := "a{2}"
  34. assert.Equal(t, 1, len(regexFindAll(regex, "aa", -1)))
  35. assert.Equal(t, 1, len(regexFindAll(regex, "aaaaaaaa", 1)))
  36. assert.Equal(t, 2, len(regexFindAll(regex, "aaaa", -1)))
  37. assert.Equal(t, 0, len(regexFindAll(regex, "none", -1)))
  38. }
  39. func TestMustRegexFindAll(t *testing.T) {
  40. type args struct {
  41. regex, s string
  42. n int
  43. }
  44. cases := []struct {
  45. expected int
  46. args args
  47. }{
  48. {1, args{"a{2}", "aa", -1}},
  49. {1, args{"a{2}", "aaaaaaaa", 1}},
  50. {2, args{"a{2}", "aaaa", -1}},
  51. {0, args{"a{2}", "none", -1}},
  52. }
  53. for _, c := range cases {
  54. res, err := mustRegexFindAll(c.args.regex, c.args.s, c.args.n)
  55. if err != nil {
  56. t.Errorf("regexFindAll test case %v failed with err %s", c, err)
  57. }
  58. assert.Equal(t, c.expected, len(res), "case %#v", c.args)
  59. }
  60. }
  61. func TestRegexFindl(t *testing.T) {
  62. regex := "fo.?"
  63. assert.Equal(t, "foo", regexFind(regex, "foorbar"))
  64. assert.Equal(t, "foo", regexFind(regex, "foo foe fome"))
  65. assert.Equal(t, "", regexFind(regex, "none"))
  66. }
  67. func TestMustRegexFindl(t *testing.T) {
  68. type args struct{ regex, s string }
  69. cases := []struct {
  70. expected string
  71. args args
  72. }{
  73. {"foo", args{"fo.?", "foorbar"}},
  74. {"foo", args{"fo.?", "foo foe fome"}},
  75. {"", args{"fo.?", "none"}},
  76. }
  77. for _, c := range cases {
  78. res, err := mustRegexFind(c.args.regex, c.args.s)
  79. if err != nil {
  80. t.Errorf("regexFind test case %v failed with err %s", c, err)
  81. }
  82. assert.Equal(t, c.expected, res, "case %#v", c.args)
  83. }
  84. }
  85. func TestRegexReplaceAll(t *testing.T) {
  86. regex := "a(x*)b"
  87. assert.Equal(t, "-T-T-", regexReplaceAll(regex, "-ab-axxb-", "T"))
  88. assert.Equal(t, "--xx-", regexReplaceAll(regex, "-ab-axxb-", "$1"))
  89. assert.Equal(t, "---", regexReplaceAll(regex, "-ab-axxb-", "$1W"))
  90. assert.Equal(t, "-W-xxW-", regexReplaceAll(regex, "-ab-axxb-", "${1}W"))
  91. }
  92. func TestMustRegexReplaceAll(t *testing.T) {
  93. type args struct{ regex, s, repl string }
  94. cases := []struct {
  95. expected string
  96. args args
  97. }{
  98. {"-T-T-", args{"a(x*)b", "-ab-axxb-", "T"}},
  99. {"--xx-", args{"a(x*)b", "-ab-axxb-", "$1"}},
  100. {"---", args{"a(x*)b", "-ab-axxb-", "$1W"}},
  101. {"-W-xxW-", args{"a(x*)b", "-ab-axxb-", "${1}W"}},
  102. }
  103. for _, c := range cases {
  104. res, err := mustRegexReplaceAll(c.args.regex, c.args.s, c.args.repl)
  105. if err != nil {
  106. t.Errorf("regexReplaceAll test case %v failed with err %s", c, err)
  107. }
  108. assert.Equal(t, c.expected, res, "case %#v", c.args)
  109. }
  110. }
  111. func TestRegexReplaceAllLiteral(t *testing.T) {
  112. regex := "a(x*)b"
  113. assert.Equal(t, "-T-T-", regexReplaceAllLiteral(regex, "-ab-axxb-", "T"))
  114. assert.Equal(t, "-$1-$1-", regexReplaceAllLiteral(regex, "-ab-axxb-", "$1"))
  115. assert.Equal(t, "-${1}-${1}-", regexReplaceAllLiteral(regex, "-ab-axxb-", "${1}"))
  116. }
  117. func TestMustRegexReplaceAllLiteral(t *testing.T) {
  118. type args struct{ regex, s, repl string }
  119. cases := []struct {
  120. expected string
  121. args args
  122. }{
  123. {"-T-T-", args{"a(x*)b", "-ab-axxb-", "T"}},
  124. {"-$1-$1-", args{"a(x*)b", "-ab-axxb-", "$1"}},
  125. {"-${1}-${1}-", args{"a(x*)b", "-ab-axxb-", "${1}"}},
  126. }
  127. for _, c := range cases {
  128. res, err := mustRegexReplaceAllLiteral(c.args.regex, c.args.s, c.args.repl)
  129. if err != nil {
  130. t.Errorf("regexReplaceAllLiteral test case %v failed with err %s", c, err)
  131. }
  132. assert.Equal(t, c.expected, res, "case %#v", c.args)
  133. }
  134. }
  135. func TestRegexSplit(t *testing.T) {
  136. regex := "a"
  137. assert.Equal(t, 4, len(regexSplit(regex, "banana", -1)))
  138. assert.Equal(t, 0, len(regexSplit(regex, "banana", 0)))
  139. assert.Equal(t, 1, len(regexSplit(regex, "banana", 1)))
  140. assert.Equal(t, 2, len(regexSplit(regex, "banana", 2)))
  141. regex = "z+"
  142. assert.Equal(t, 2, len(regexSplit(regex, "pizza", -1)))
  143. assert.Equal(t, 0, len(regexSplit(regex, "pizza", 0)))
  144. assert.Equal(t, 1, len(regexSplit(regex, "pizza", 1)))
  145. assert.Equal(t, 2, len(regexSplit(regex, "pizza", 2)))
  146. }
  147. func TestMustRegexSplit(t *testing.T) {
  148. type args struct {
  149. regex, s string
  150. n int
  151. }
  152. cases := []struct {
  153. expected int
  154. args args
  155. }{
  156. {4, args{"a", "banana", -1}},
  157. {0, args{"a", "banana", 0}},
  158. {1, args{"a", "banana", 1}},
  159. {2, args{"a", "banana", 2}},
  160. {2, args{"z+", "pizza", -1}},
  161. {0, args{"z+", "pizza", 0}},
  162. {1, args{"z+", "pizza", 1}},
  163. {2, args{"z+", "pizza", 2}},
  164. }
  165. for _, c := range cases {
  166. res, err := mustRegexSplit(c.args.regex, c.args.s, c.args.n)
  167. if err != nil {
  168. t.Errorf("regexSplit test case %v failed with err %s", c, err)
  169. }
  170. assert.Equal(t, c.expected, len(res), "case %#v", c.args)
  171. }
  172. }
  173. func TestRegexQuoteMeta(t *testing.T) {
  174. assert.Equal(t, "1\\.2\\.3", regexQuoteMeta("1.2.3"))
  175. assert.Equal(t, "pretzel", regexQuoteMeta("pretzel"))
  176. }