tmux ends a command at an argument whose last character is ';', so a --border-label ending in one was stored truncated. escapeTmuxSeparator only covered a value that was exactly ';'. fzf --popup --border-label 'foo;' -> @fzf-border-label was 'foo'
54 lines
1.2 KiB
Go
54 lines
1.2 KiB
Go
package fzf
|
|
|
|
import "testing"
|
|
|
|
func TestEscapeTmuxFormat(t *testing.T) {
|
|
for _, tc := range []struct {
|
|
given string
|
|
expected string
|
|
}{
|
|
{"", ""},
|
|
{" fzf ", " fzf "},
|
|
{"100%", "100%"},
|
|
// '#[' would be taken as a style directive when the label is drawn
|
|
{"#[fg=red]x", "##[fg=red]x"},
|
|
// '#{' is already literal in a substituted value, but doubling it
|
|
// keeps a label that fzf renders itself looking the same
|
|
{"#{pane_id}", "##{pane_id}"},
|
|
{" C# notes #S ", " C## notes ##S "},
|
|
{";", `\;`},
|
|
{"; rm", "; rm"},
|
|
{"C#;", `C##\;`},
|
|
} {
|
|
if actual := escapeTmuxFormat(tc.given); actual != tc.expected {
|
|
t.Errorf("expected %q, got %q", tc.expected, actual)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestEscapeTmuxSeparator(t *testing.T) {
|
|
for _, tc := range []struct {
|
|
given string
|
|
expected string
|
|
}{
|
|
{"", ""},
|
|
{" fzf ", " fzf "},
|
|
{"#", "#"},
|
|
{"#{pane_id}", "#{pane_id}"},
|
|
{"100%", "100%"},
|
|
// tmux drops a trailing ';' and everything after it, so only that
|
|
// one is escaped
|
|
{";", `\;`},
|
|
{"abc;", `abc\;`},
|
|
{";;", `;\;`},
|
|
{`foo\;`, `foo\\;`},
|
|
{"; rm", "; rm"},
|
|
{" ; ", " ; "},
|
|
{"a;b", "a;b"},
|
|
} {
|
|
if actual := escapeTmuxSeparator(tc.given); actual != tc.expected {
|
|
t.Errorf("expected %q, got %q", tc.expected, actual)
|
|
}
|
|
}
|
|
}
|