File: str_tools_test.go

package info (click to toggle)
git-lfs 3.6.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 4,808 kB
  • sloc: sh: 21,256; makefile: 507; ruby: 417
file content (166 lines) | stat: -rw-r--r-- 5,732 bytes parent folder | download | duplicates (4)
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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
package tools

import (
	"testing"

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

type QuotedFieldsTestCase struct {
	Given    string
	Expected []string
}

func (c *QuotedFieldsTestCase) Assert(t *testing.T) {
	actual := QuotedFields(c.Given)

	assert.Equal(t, c.Expected, actual,
		"tools: expected QuotedFields(%q) to equal %#v (was %#v)",
		c.Given, c.Expected, actual,
	)
}

func TestQuotedFields(t *testing.T) {
	for desc, c := range map[string]QuotedFieldsTestCase{
		"simple":          {`foo bar`, []string{"foo", "bar"}},
		"simple trailing": {`foo bar `, []string{"foo", "bar"}},
		"simple leading":  {` foo bar`, []string{"foo", "bar"}},

		"single quotes":          {`foo 'bar baz'`, []string{"foo", "bar baz"}},
		"single quotes trailing": {`foo 'bar baz' `, []string{"foo", "bar baz"}},
		"single quotes leading":  {` foo 'bar baz'`, []string{"foo", "bar baz"}},

		"single quotes empty":          {`foo ''`, []string{"foo", ""}},
		"single quotes trailing empty": {`foo '' `, []string{"foo", ""}},
		"single quotes leading empty":  {` foo ''`, []string{"foo", ""}},

		"double quotes":          {`foo "bar baz"`, []string{"foo", "bar baz"}},
		"double quotes trailing": {`foo "bar baz" `, []string{"foo", "bar baz"}},
		"double quotes leading":  {` foo "bar baz"`, []string{"foo", "bar baz"}},

		"double quotes empty":          {`foo ""`, []string{"foo", ""}},
		"double quotes trailing empty": {`foo "" `, []string{"foo", ""}},
		"double quotes leading empty":  {` foo ""`, []string{"foo", ""}},

		"nested single quotes":          {`foo 'bar 'baz''`, []string{"foo", "bar 'baz'"}},
		"nested single quotes trailing": {`foo 'bar 'baz'' `, []string{"foo", "bar 'baz'"}},
		"nested single quotes leading":  {` foo 'bar 'baz''`, []string{"foo", "bar 'baz'"}},

		"nested single quotes empty":          {`foo 'bar '''`, []string{"foo", "bar ''"}},
		"nested single quotes trailing empty": {`foo 'bar ''' `, []string{"foo", "bar ''"}},
		"nested single quotes leading empty":  {` foo 'bar '''`, []string{"foo", "bar ''"}},

		"nested double quotes":          {`foo "bar "baz""`, []string{"foo", `bar "baz"`}},
		"nested double quotes trailing": {`foo "bar "baz"" `, []string{"foo", `bar "baz"`}},
		"nested double quotes leading":  {` foo "bar "baz""`, []string{"foo", `bar "baz"`}},

		"nested double quotes empty":          {`foo "bar """`, []string{"foo", `bar ""`}},
		"nested double quotes trailing empty": {`foo "bar """ `, []string{"foo", `bar ""`}},
		"nested double quotes leading empty":  {` foo "bar """`, []string{"foo", `bar ""`}},

		"mixed quotes":          {`foo 'bar "baz"'`, []string{"foo", `bar "baz"`}},
		"mixed quotes trailing": {`foo 'bar "baz"' `, []string{"foo", `bar "baz"`}},
		"mixed quotes leading":  {` foo 'bar "baz"'`, []string{"foo", `bar "baz"`}},

		"mixed quotes empty":          {`foo 'bar ""'`, []string{"foo", `bar ""`}},
		"mixed quotes trailing empty": {`foo 'bar ""' `, []string{"foo", `bar ""`}},
		"mixed quotes leading empty":  {` foo 'bar ""'`, []string{"foo", `bar ""`}},
	} {
		t.Log(desc)
		c.Assert(t)
	}
}

func TestLongestReturnsEmptyStringGivenEmptySet(t *testing.T) {
	assert.Equal(t, "", Longest(nil))
}

func TestLongestReturnsLongestString(t *testing.T) {
	assert.Equal(t, "longest", Longest([]string{"short", "longer", "longest"}))
}

func TestLongestReturnsLastStringGivenSameLength(t *testing.T) {
	assert.Equal(t, "baz", Longest([]string{"foo", "bar", "baz"}))
}

func TestRjustRightJustifiesString(t *testing.T) {
	unjust := []string{
		"short",
		"longer",
		"longest",
	}
	expected := []string{
		"  short",
		" longer",
		"longest",
	}

	assert.Equal(t, expected, Rjust(unjust))
}

func TestLjustLeftJustifiesString(t *testing.T) {
	unjust := []string{
		"short",
		"longer",
		"longest",
	}
	expected := []string{
		"short  ",
		"longer ",
		"longest",
	}

	assert.Equal(t, expected, Ljust(unjust))
}

func TestIndentIndentsStrings(t *testing.T) {
	assert.Equal(t, "\tfoo\n\tbar", Indent("foo\nbar"))
}

func TestIndentIndentsSingleLineStrings(t *testing.T) {
	assert.Equal(t, "\tfoo", Indent("foo"))
}

func TestIndentReturnsEmptyStrings(t *testing.T) {
	assert.Equal(t, "", Indent(""))
}

func TestUndentRemovesLeadingWhitespace(t *testing.T) {
	assert.Equal(t, "foo", Undent("\t\t\tfoo"))
	assert.Equal(t, "foo", Undent("foo"))
	assert.Equal(t, "foo", Undent("    foo"))
}

func TestUndentRemovesPreservesLinebreaks(t *testing.T) {
	// No leading space
	assert.Equal(t, "\r\nfoo", Undent("\r\nfoo"))
	assert.Equal(t, "foo\r\n", Undent("foo\r\n"))
	assert.Equal(t, "\r\nfoo\r\n", Undent("\r\nfoo\r\n"))
	assert.Equal(t, "\nfoo", Undent("\nfoo"))
	assert.Equal(t, "foo\n", Undent("foo\n"))
	assert.Equal(t, "\nfoo\n", Undent("\nfoo\n"))

	// Trim leading space
	assert.Equal(t, "\r\nfoo", Undent("\r\n  foo"))
	assert.Equal(t, "foo\r\n", Undent("  foo\r\n"))
	assert.Equal(t, "\r\nfoo\r\n", Undent("\r\n  foo\r\n"))
	assert.Equal(t, "\nfoo", Undent("\n  foo"))
	assert.Equal(t, "foo\n", Undent("  foo\n"))
	assert.Equal(t, "\nfoo\n", Undent("\n  foo\n"))

	// Preserve trailing space
	assert.Equal(t, "\r\nfoo  ", Undent("\r\nfoo  "))
	assert.Equal(t, "foo  \r\n", Undent("foo  \r\n"))
	assert.Equal(t, "\r\nfoo  \r\n", Undent("\r\nfoo  \r\n"))
	assert.Equal(t, "\nfoo  ", Undent("\nfoo  "))
	assert.Equal(t, "foo  \n", Undent("foo  \n"))
	assert.Equal(t, "\nfoo  \n", Undent("\nfoo  \n"))

	// Trim leading space, preserve trailing space
	assert.Equal(t, "\r\nfoo  ", Undent("\r\n  foo  "))
	assert.Equal(t, "foo  \r\n", Undent("  foo  \r\n"))
	assert.Equal(t, "\r\nfoo  \r\n", Undent("\r\n  foo  \r\n"))
	assert.Equal(t, "\nfoo  ", Undent("\n  foo  "))
	assert.Equal(t, "foo  \n", Undent("  foo  \n"))
	assert.Equal(t, "\nfoo  \n", Undent("\n  foo  \n"))
}