strings.SplitN is not like python str.split() method... It requires an
exact number of items including the trailing non split part.
Add unit tests to ensure it works.
Fixes: 6cfbc87d8ab0 ("dirlist: use templates instead of % mini language")
Reported-by: John Mcenroy <handplanet@outlook.com>
Signed-off-by: Robin Jarry <robin@jarry.cc>
---
config/ui.go | 6 +++---
config/ui_test.go | 18 ++++++++++++++++++
2 files changed, 21 insertions(+), 3 deletions(-)
diff --git a/config/ui.go b/config/ui.go
index 599651d1c97d..b1330ffda4bb 100644
--- a/config/ui.go
+++ b/config/ui.go
@@ -581,12 +581,12 @@ func convertDirlistFormat(format string) (string, string) {
return s
},
)
- tokens := strings.SplitN(tmpl, "%>", 1)
+ tokens := strings.SplitN(tmpl, "%>", 2)
switch len(tokens) {
case 2:
- return tokens[0], tokens[1]
+ return strings.TrimSpace(tokens[0]), strings.TrimSpace(tokens[1])
case 1:
- return tokens[0], ""
+ return strings.TrimSpace(tokens[0]), ""
default:
return "", ""
}
diff --git a/config/ui_test.go b/config/ui_test.go
index 677dcc866462..80373da205b0 100644
--- a/config/ui_test.go
+++ b/config/ui_test.go
@@ -45,3 +45,21 @@ func TestConvertIndexFormat(t *testing.T) {
assert.Equal(t, ALIGN_LEFT|WIDTH_AUTO, columns[3].Flags)
assert.Equal(t, `{{.Subject}}`, templateText(columns[3].Template))
}
+
+func TestConvertDirlistFormat(t *testing.T) {
+ left, right := convertDirlistFormat("%n %>r")
+ assert.Equal(t, "{{.Folder}}", left)
+ assert.Equal(t, unreadExists, right)
+
+ left, right = convertDirlistFormat("%n %>r ")
+ assert.Equal(t, "{{.Folder}}", left)
+ assert.Equal(t, unreadExists, right)
+
+ left, right = convertDirlistFormat("%r%>n")
+ assert.Equal(t, unreadExists, left)
+ assert.Equal(t, "{{.Folder}}", right)
+
+ left, right = convertDirlistFormat("%>N")
+ assert.Equal(t, "", left)
+ assert.Equal(t, "{{.Folder | compactDir}}", right)
+}
--
2.39.2
On Tue Feb 21, 2023 at 11:05 AM EST, Robin Jarry wrote:
> strings.SplitN is not like python str.split() method... It requires an
> exact number of items including the trailing non split part.
>
> Add unit tests to ensure it works.
>
> Fixes: 6cfbc87d8ab0 ("dirlist: use templates instead of % mini language")
> Reported-by: John Mcenroy <handplanet@outlook.com>
> Signed-off-by: Robin Jarry <robin@jarry.cc>
Tested-by: Ben Lee-Cohen <ben@lee-cohen.com>