aboutsummaryrefslogtreecommitdiff
path: root/internal/strutil/strutil_test.go
blob: d22e1f72e222ccf5e4f152b77a4e4b0729a5ebcd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
// Copyright 2020 The Gogs Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.

package strutil

import (
	"testing"

	"github.com/stretchr/testify/assert"
)

func TestToUpperFirst(t *testing.T) {
	tests := []struct {
		name   string
		s      string
		expStr string
	}{
		{
			name: "empty string",
		},
		{
			name:   "first letter is a digit",
			s:      "123 let's go",
			expStr: "123 let's go",
		},
		{
			name:   "lower to upper",
			s:      "this is a sentence",
			expStr: "This is a sentence",
		},
		{
			name:   "already in upper case",
			s:      "Let's go",
			expStr: "Let's go",
		},
	}
	for _, test := range tests {
		t.Run(test.name, func(t *testing.T) {
			assert.Equal(t, test.expStr, ToUpperFirst(test.s))
		})
	}
}

func TestRandomChars(t *testing.T) {
	cache := make(map[string]bool)
	for i := 0; i < 100; i++ {
		chars, err := RandomChars(10)
		if err != nil {
			t.Fatal(err)
		}
		if cache[chars] {
			t.Fatalf("Duplicated chars %q", chars)
		}
		cache[chars] = true
	}
}

func TestEllipsis(t *testing.T) {
	tests := []struct {
		name      string
		str       string
		threshold int
		want      string
	}{
		{
			name:      "empty string and zero threshold",
			str:       "",
			threshold: 0,
			want:      "",
		},
		{
			name:      "smaller length than threshold",
			str:       "ab",
			threshold: 3,
			want:      "ab",
		},
		{
			name:      "same length as threshold",
			str:       "abc",
			threshold: 3,
			want:      "abc",
		},
		{
			name:      "greater length than threshold",
			str:       "ab",
			threshold: 1,
			want:      "a...",
		},
	}
	for _, test := range tests {
		t.Run(test.name, func(t *testing.T) {
			got := Ellipsis(test.str, test.threshold)
			assert.Equal(t, test.want, got)
		})
	}
}

func TestTruncate(t *testing.T) {
	tests := []struct {
		name  string
		str   string
		limit int
		want  string
	}{
		{
			name:  "empty string with zero limit",
			str:   "",
			limit: 0,
			want:  "",
		},
		{
			name:  "smaller length than limit",
			str:   "ab",
			limit: 3,
			want:  "ab",
		},
		{
			name:  "same length as limit",
			str:   "abc",
			limit: 3,
			want:  "abc",
		},
		{
			name:  "greater length than limit",
			str:   "ab",
			limit: 1,
			want:  "a",
		},
	}
	for _, test := range tests {
		t.Run(test.name, func(t *testing.T) {
			got := Truncate(test.str, test.limit)
			assert.Equal(t, test.want, got)
		})
	}
}