text_test.go 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. //go:build !integration
  2. // +build !integration
  3. package text
  4. import (
  5. "os"
  6. "path"
  7. "strings"
  8. "testing"
  9. "github.com/leonelquinteros/gotext"
  10. "github.com/stretchr/testify/assert"
  11. "github.com/stretchr/testify/require"
  12. )
  13. func TestLessRunes(t *testing.T) {
  14. t.Parallel()
  15. type args struct {
  16. iRunes []rune
  17. jRunes []rune
  18. }
  19. tests := []struct {
  20. name string
  21. args args
  22. want bool
  23. }{
  24. {name: "nilslices", args: args{iRunes: nil, jRunes: nil}, want: false},
  25. {name: "emptyslices", args: args{iRunes: []rune{}, jRunes: []rune{}}, want: false},
  26. {name: "simpleslice a,b", args: args{iRunes: []rune{'a'}, jRunes: []rune{'b'}}, want: true},
  27. {name: "simpleslice b,a", args: args{iRunes: []rune{'b'}, jRunes: []rune{'a'}}, want: false},
  28. {name: "equalslice", args: args{iRunes: []rune{'a', 'a', 'a'}, jRunes: []rune{'a', 'a', 'a'}}, want: false},
  29. {name: "uppercase", args: args{iRunes: []rune{'a'}, jRunes: []rune{'A'}}, want: false},
  30. {name: "longerFirstArg", args: args{iRunes: []rune{'a', 'b'}, jRunes: []rune{'a'}}, want: false},
  31. {name: "longerSecondArg", args: args{iRunes: []rune{'a'}, jRunes: []rune{'a', 'b'}}, want: true},
  32. {name: "utf8 less", args: args{iRunes: []rune{'世', '2', '0'}, jRunes: []rune{'世', '界', '3'}}, want: true},
  33. }
  34. for _, tt := range tests {
  35. tt := tt
  36. t.Run(tt.name, func(t *testing.T) {
  37. t.Parallel()
  38. got := LessRunes(tt.args.iRunes, tt.args.jRunes)
  39. assert.Equal(t, tt.want, got)
  40. })
  41. }
  42. }
  43. func TestContinueTask(t *testing.T) {
  44. t.Parallel()
  45. type args struct {
  46. s string
  47. preset bool
  48. noConfirm bool
  49. input string
  50. }
  51. tests := []struct {
  52. name string
  53. args args
  54. want bool
  55. }{
  56. {name: "noconfirm-true", args: args{s: "", preset: true, noConfirm: true}, want: true},
  57. {name: "noconfirm-false", args: args{s: "", preset: false, noConfirm: true}, want: false},
  58. {name: "noinput-false", args: args{s: "", preset: false, noConfirm: false}, want: false},
  59. {name: "noinput-true", args: args{s: "", preset: true, noConfirm: false}, want: true},
  60. {name: "input-false", args: args{s: "", input: "n", preset: true, noConfirm: false}, want: false},
  61. {name: "input-true", args: args{s: "", input: "y", preset: false, noConfirm: false}, want: true},
  62. {name: "input-false-complete", args: args{s: "", input: "no", preset: true, noConfirm: false}, want: false},
  63. {name: "input-true-complete", args: args{s: "", input: "yes", preset: false, noConfirm: false}, want: true},
  64. }
  65. for _, tt := range tests {
  66. t.Run(tt.name, func(t *testing.T) {
  67. // create io.Reader with value of input
  68. in := strings.NewReader(tt.args.input)
  69. got := ContinueTask(in, tt.args.s, tt.args.preset, tt.args.noConfirm)
  70. require.Equal(t, tt.want, got)
  71. })
  72. }
  73. }
  74. func TestContinueTaskRU(t *testing.T) {
  75. strCustom := `
  76. msgid "yes"
  77. msgstr "да"
  78. `
  79. // Create Locales directory and files on temp location
  80. tmpDir := t.TempDir()
  81. dirname := path.Join(tmpDir, "en_US")
  82. err := os.MkdirAll(dirname, os.ModePerm)
  83. require.NoError(t, err)
  84. fDefault, err := os.Create(path.Join(dirname, "yay.po"))
  85. require.NoError(t, err)
  86. defer fDefault.Close()
  87. _, err = fDefault.WriteString(strCustom)
  88. require.NoError(t, err)
  89. gotext.Configure(tmpDir, "en_US", "yay")
  90. require.Equal(t, "да", gotext.Get("yes"))
  91. type args struct {
  92. s string
  93. preset bool
  94. noConfirm bool
  95. input string
  96. }
  97. tests := []struct {
  98. name string
  99. args args
  100. want bool
  101. }{
  102. {name: "default input false", args: args{s: "", input: "n", preset: true, noConfirm: false}, want: false},
  103. {name: "default input true", args: args{s: "", input: "y", preset: false, noConfirm: false}, want: true},
  104. }
  105. for _, tt := range tests {
  106. t.Run(tt.name, func(t *testing.T) {
  107. in := strings.NewReader(tt.args.input)
  108. got := ContinueTask(in, tt.args.s, tt.args.preset, tt.args.noConfirm)
  109. require.Equal(t, tt.want, got)
  110. })
  111. }
  112. gotext.SetLanguage("")
  113. }
  114. func TestContinueTaskDE(t *testing.T) {
  115. strCustom := `
  116. msgid "yes"
  117. msgstr "ja"
  118. `
  119. // Create Locales directory and files on temp location
  120. tmpDir := t.TempDir()
  121. dirname := path.Join(tmpDir, "en_US")
  122. err := os.MkdirAll(dirname, os.ModePerm)
  123. require.NoError(t, err)
  124. fDefault, err := os.Create(path.Join(dirname, "yay.po"))
  125. require.NoError(t, err)
  126. defer fDefault.Close()
  127. _, err = fDefault.WriteString(strCustom)
  128. require.NoError(t, err)
  129. gotext.Configure(tmpDir, "en_US", "yay")
  130. require.Equal(t, "ja", gotext.Get("yes"))
  131. type args struct {
  132. s string
  133. preset bool
  134. noConfirm bool
  135. input string
  136. }
  137. tests := []struct {
  138. name string
  139. args args
  140. want bool
  141. }{
  142. {name: "default input false", args: args{s: "", input: "n", preset: true, noConfirm: false}, want: false},
  143. {name: "default input true", args: args{s: "", input: "y", preset: false, noConfirm: false}, want: true},
  144. {name: "custom input true", args: args{s: "", input: "j", preset: false, noConfirm: false}, want: true},
  145. }
  146. for _, tt := range tests {
  147. t.Run(tt.name, func(t *testing.T) {
  148. in := strings.NewReader(tt.args.input)
  149. got := ContinueTask(in, tt.args.s, tt.args.preset, tt.args.noConfirm)
  150. require.Equal(t, tt.want, got)
  151. })
  152. }
  153. gotext.SetLanguage("")
  154. }