text_test.go 5.2 KB

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