|
|
@ -30,92 +30,92 @@ func TestReplacePlaceholder(t *testing.T) {
|
|
|
|
t.Errorf("expected: %s, actual: %s", expected, result)
|
|
|
|
t.Errorf("expected: %s, actual: %s", expected, result)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
printsep := "\n"
|
|
|
|
// {}, preserve ansi
|
|
|
|
// {}, preserve ansi
|
|
|
|
result = replacePlaceholder("echo {}", false, Delimiter{}, false, "query", items1)
|
|
|
|
result = replacePlaceholder("echo {}", false, Delimiter{}, printsep, false, "query", items1)
|
|
|
|
check("echo ' foo'\\''bar \x1b[31mbaz\x1b[m'")
|
|
|
|
check("echo ' foo'\\''bar \x1b[31mbaz\x1b[m'")
|
|
|
|
|
|
|
|
|
|
|
|
// {}, strip ansi
|
|
|
|
// {}, strip ansi
|
|
|
|
result = replacePlaceholder("echo {}", true, Delimiter{}, false, "query", items1)
|
|
|
|
result = replacePlaceholder("echo {}", true, Delimiter{}, printsep, false, "query", items1)
|
|
|
|
check("echo ' foo'\\''bar baz'")
|
|
|
|
check("echo ' foo'\\''bar baz'")
|
|
|
|
|
|
|
|
|
|
|
|
// {}, with multiple items
|
|
|
|
// {}, with multiple items
|
|
|
|
result = replacePlaceholder("echo {}", true, Delimiter{}, false, "query", items2)
|
|
|
|
result = replacePlaceholder("echo {}", true, Delimiter{}, printsep, false, "query", items2)
|
|
|
|
check("echo 'foo'\\''bar baz'")
|
|
|
|
check("echo 'foo'\\''bar baz'")
|
|
|
|
|
|
|
|
|
|
|
|
// {..}, strip leading whitespaces, preserve ansi
|
|
|
|
// {..}, strip leading whitespaces, preserve ansi
|
|
|
|
result = replacePlaceholder("echo {..}", false, Delimiter{}, false, "query", items1)
|
|
|
|
result = replacePlaceholder("echo {..}", false, Delimiter{}, printsep, false, "query", items1)
|
|
|
|
check("echo 'foo'\\''bar \x1b[31mbaz\x1b[m'")
|
|
|
|
check("echo 'foo'\\''bar \x1b[31mbaz\x1b[m'")
|
|
|
|
|
|
|
|
|
|
|
|
// {..}, strip leading whitespaces, strip ansi
|
|
|
|
// {..}, strip leading whitespaces, strip ansi
|
|
|
|
result = replacePlaceholder("echo {..}", true, Delimiter{}, false, "query", items1)
|
|
|
|
result = replacePlaceholder("echo {..}", true, Delimiter{}, printsep, false, "query", items1)
|
|
|
|
check("echo 'foo'\\''bar baz'")
|
|
|
|
check("echo 'foo'\\''bar baz'")
|
|
|
|
|
|
|
|
|
|
|
|
// {q}
|
|
|
|
// {q}
|
|
|
|
result = replacePlaceholder("echo {} {q}", true, Delimiter{}, false, "query", items1)
|
|
|
|
result = replacePlaceholder("echo {} {q}", true, Delimiter{}, printsep, false, "query", items1)
|
|
|
|
check("echo ' foo'\\''bar baz' 'query'")
|
|
|
|
check("echo ' foo'\\''bar baz' 'query'")
|
|
|
|
|
|
|
|
|
|
|
|
// {q}, multiple items
|
|
|
|
// {q}, multiple items
|
|
|
|
result = replacePlaceholder("echo {+}{q}{+}", true, Delimiter{}, false, "query 'string'", items2)
|
|
|
|
result = replacePlaceholder("echo {+}{q}{+}", true, Delimiter{}, printsep, false, "query 'string'", items2)
|
|
|
|
check("echo 'foo'\\''bar baz' 'FOO'\\''BAR BAZ''query '\\''string'\\''''foo'\\''bar baz' 'FOO'\\''BAR BAZ'")
|
|
|
|
check("echo 'foo'\\''bar baz' 'FOO'\\''BAR BAZ''query '\\''string'\\''''foo'\\''bar baz' 'FOO'\\''BAR BAZ'")
|
|
|
|
|
|
|
|
|
|
|
|
result = replacePlaceholder("echo {}{q}{}", true, Delimiter{}, false, "query 'string'", items2)
|
|
|
|
result = replacePlaceholder("echo {}{q}{}", true, Delimiter{}, printsep, false, "query 'string'", items2)
|
|
|
|
check("echo 'foo'\\''bar baz''query '\\''string'\\''''foo'\\''bar baz'")
|
|
|
|
check("echo 'foo'\\''bar baz''query '\\''string'\\''''foo'\\''bar baz'")
|
|
|
|
|
|
|
|
|
|
|
|
result = replacePlaceholder("echo {1}/{2}/{2,1}/{-1}/{-2}/{}/{..}/{n.t}/\\{}/\\{1}/\\{q}/{3}", true, Delimiter{}, false, "query", items1)
|
|
|
|
result = replacePlaceholder("echo {1}/{2}/{2,1}/{-1}/{-2}/{}/{..}/{n.t}/\\{}/\\{1}/\\{q}/{3}", true, Delimiter{}, printsep, false, "query", items1)
|
|
|
|
check("echo 'foo'\\''bar'/'baz'/'bazfoo'\\''bar'/'baz'/'foo'\\''bar'/' foo'\\''bar baz'/'foo'\\''bar baz'/{n.t}/{}/{1}/{q}/''")
|
|
|
|
check("echo 'foo'\\''bar'/'baz'/'bazfoo'\\''bar'/'baz'/'foo'\\''bar'/' foo'\\''bar baz'/'foo'\\''bar baz'/{n.t}/{}/{1}/{q}/''")
|
|
|
|
|
|
|
|
|
|
|
|
result = replacePlaceholder("echo {1}/{2}/{-1}/{-2}/{..}/{n.t}/\\{}/\\{1}/\\{q}/{3}", true, Delimiter{}, false, "query", items2)
|
|
|
|
result = replacePlaceholder("echo {1}/{2}/{-1}/{-2}/{..}/{n.t}/\\{}/\\{1}/\\{q}/{3}", true, Delimiter{}, printsep, false, "query", items2)
|
|
|
|
check("echo 'foo'\\''bar'/'baz'/'baz'/'foo'\\''bar'/'foo'\\''bar baz'/{n.t}/{}/{1}/{q}/''")
|
|
|
|
check("echo 'foo'\\''bar'/'baz'/'baz'/'foo'\\''bar'/'foo'\\''bar baz'/{n.t}/{}/{1}/{q}/''")
|
|
|
|
|
|
|
|
|
|
|
|
result = replacePlaceholder("echo {+1}/{+2}/{+-1}/{+-2}/{+..}/{n.t}/\\{}/\\{1}/\\{q}/{+3}", true, Delimiter{}, false, "query", items2)
|
|
|
|
result = replacePlaceholder("echo {+1}/{+2}/{+-1}/{+-2}/{+..}/{n.t}/\\{}/\\{1}/\\{q}/{+3}", true, Delimiter{}, printsep, false, "query", items2)
|
|
|
|
check("echo 'foo'\\''bar' 'FOO'\\''BAR'/'baz' 'BAZ'/'baz' 'BAZ'/'foo'\\''bar' 'FOO'\\''BAR'/'foo'\\''bar baz' 'FOO'\\''BAR BAZ'/{n.t}/{}/{1}/{q}/'' ''")
|
|
|
|
check("echo 'foo'\\''bar' 'FOO'\\''BAR'/'baz' 'BAZ'/'baz' 'BAZ'/'foo'\\''bar' 'FOO'\\''BAR'/'foo'\\''bar baz' 'FOO'\\''BAR BAZ'/{n.t}/{}/{1}/{q}/'' ''")
|
|
|
|
|
|
|
|
|
|
|
|
// forcePlus
|
|
|
|
// forcePlus
|
|
|
|
result = replacePlaceholder("echo {1}/{2}/{-1}/{-2}/{..}/{n.t}/\\{}/\\{1}/\\{q}/{3}", true, Delimiter{}, true, "query", items2)
|
|
|
|
result = replacePlaceholder("echo {1}/{2}/{-1}/{-2}/{..}/{n.t}/\\{}/\\{1}/\\{q}/{3}", true, Delimiter{}, printsep, true, "query", items2)
|
|
|
|
check("echo 'foo'\\''bar' 'FOO'\\''BAR'/'baz' 'BAZ'/'baz' 'BAZ'/'foo'\\''bar' 'FOO'\\''BAR'/'foo'\\''bar baz' 'FOO'\\''BAR BAZ'/{n.t}/{}/{1}/{q}/'' ''")
|
|
|
|
check("echo 'foo'\\''bar' 'FOO'\\''BAR'/'baz' 'BAZ'/'baz' 'BAZ'/'foo'\\''bar' 'FOO'\\''BAR'/'foo'\\''bar baz' 'FOO'\\''BAR BAZ'/{n.t}/{}/{1}/{q}/'' ''")
|
|
|
|
|
|
|
|
|
|
|
|
// Whitespace preserving flag with "'" delimiter
|
|
|
|
// Whitespace preserving flag with "'" delimiter
|
|
|
|
result = replacePlaceholder("echo {s1}", true, Delimiter{str: &delim}, false, "query", items1)
|
|
|
|
result = replacePlaceholder("echo {s1}", true, Delimiter{str: &delim}, printsep, false, "query", items1)
|
|
|
|
check("echo ' foo'")
|
|
|
|
check("echo ' foo'")
|
|
|
|
|
|
|
|
|
|
|
|
result = replacePlaceholder("echo {s2}", true, Delimiter{str: &delim}, false, "query", items1)
|
|
|
|
result = replacePlaceholder("echo {s2}", true, Delimiter{str: &delim}, printsep, false, "query", items1)
|
|
|
|
check("echo 'bar baz'")
|
|
|
|
check("echo 'bar baz'")
|
|
|
|
|
|
|
|
|
|
|
|
result = replacePlaceholder("echo {s}", true, Delimiter{str: &delim}, false, "query", items1)
|
|
|
|
result = replacePlaceholder("echo {s}", true, Delimiter{str: &delim}, printsep, false, "query", items1)
|
|
|
|
check("echo ' foo'\\''bar baz'")
|
|
|
|
check("echo ' foo'\\''bar baz'")
|
|
|
|
|
|
|
|
|
|
|
|
result = replacePlaceholder("echo {s..}", true, Delimiter{str: &delim}, false, "query", items1)
|
|
|
|
result = replacePlaceholder("echo {s..}", true, Delimiter{str: &delim}, printsep, false, "query", items1)
|
|
|
|
check("echo ' foo'\\''bar baz'")
|
|
|
|
check("echo ' foo'\\''bar baz'")
|
|
|
|
|
|
|
|
|
|
|
|
// Whitespace preserving flag with regex delimiter
|
|
|
|
// Whitespace preserving flag with regex delimiter
|
|
|
|
regex = regexp.MustCompile("\\w+")
|
|
|
|
regex = regexp.MustCompile("\\w+")
|
|
|
|
|
|
|
|
|
|
|
|
result = replacePlaceholder("echo {s1}", true, Delimiter{regex: regex}, false, "query", items1)
|
|
|
|
result = replacePlaceholder("echo {s1}", true, Delimiter{regex: regex}, printsep, false, "query", items1)
|
|
|
|
check("echo ' '")
|
|
|
|
check("echo ' '")
|
|
|
|
|
|
|
|
|
|
|
|
result = replacePlaceholder("echo {s2}", true, Delimiter{regex: regex}, false, "query", items1)
|
|
|
|
result = replacePlaceholder("echo {s2}", true, Delimiter{regex: regex}, printsep, false, "query", items1)
|
|
|
|
check("echo ''\\'''")
|
|
|
|
check("echo ''\\'''")
|
|
|
|
|
|
|
|
|
|
|
|
result = replacePlaceholder("echo {s3}", true, Delimiter{regex: regex}, false, "query", items1)
|
|
|
|
result = replacePlaceholder("echo {s3}", true, Delimiter{regex: regex}, printsep, false, "query", items1)
|
|
|
|
check("echo ' '")
|
|
|
|
check("echo ' '")
|
|
|
|
|
|
|
|
|
|
|
|
// No match
|
|
|
|
// No match
|
|
|
|
result = replacePlaceholder("echo {}/{+}", true, Delimiter{}, false, "query", []*Item{nil, nil})
|
|
|
|
result = replacePlaceholder("echo {}/{+}", true, Delimiter{}, printsep, false, "query", []*Item{nil, nil})
|
|
|
|
check("echo /")
|
|
|
|
check("echo /")
|
|
|
|
|
|
|
|
|
|
|
|
// No match, but with selections
|
|
|
|
// No match, but with selections
|
|
|
|
result = replacePlaceholder("echo {}/{+}", true, Delimiter{}, false, "query", []*Item{nil, item1})
|
|
|
|
result = replacePlaceholder("echo {}/{+}", true, Delimiter{}, printsep, false, "query", []*Item{nil, item1})
|
|
|
|
check("echo /' foo'\\''bar baz'")
|
|
|
|
check("echo /' foo'\\''bar baz'")
|
|
|
|
|
|
|
|
|
|
|
|
// String delimiter
|
|
|
|
// String delimiter
|
|
|
|
result = replacePlaceholder("echo {}/{1}/{2}", true, Delimiter{str: &delim}, false, "query", items1)
|
|
|
|
result = replacePlaceholder("echo {}/{1}/{2}", true, Delimiter{str: &delim}, printsep, false, "query", items1)
|
|
|
|
check("echo ' foo'\\''bar baz'/'foo'/'bar baz'")
|
|
|
|
check("echo ' foo'\\''bar baz'/'foo'/'bar baz'")
|
|
|
|
|
|
|
|
|
|
|
|
// Regex delimiter
|
|
|
|
// Regex delimiter
|
|
|
|
regex = regexp.MustCompile("[oa]+")
|
|
|
|
regex = regexp.MustCompile("[oa]+")
|
|
|
|
// foo'bar baz
|
|
|
|
// foo'bar baz
|
|
|
|
result = replacePlaceholder("echo {}/{1}/{3}/{2..3}", true, Delimiter{regex: regex}, false, "query", items1)
|
|
|
|
result = replacePlaceholder("echo {}/{1}/{3}/{2..3}", true, Delimiter{regex: regex}, printsep, false, "query", items1)
|
|
|
|
check("echo ' foo'\\''bar baz'/'f'/'r b'/''\\''bar b'")
|
|
|
|
check("echo ' foo'\\''bar baz'/'f'/'r b'/''\\''bar b'")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|