2024-04-16 07:38:23 +02:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"bytes"
|
|
|
|
"testing"
|
|
|
|
ttemplate "text/template"
|
2025-01-02 00:35:00 +01:00
|
|
|
"time"
|
2024-04-16 07:38:23 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
func TestTemplateQuote(t *testing.T) {
|
|
|
|
// Ideally, we should back-parse it using sh syntax.
|
|
|
|
// This is an unnecessarily fragile test.
|
|
|
|
for _, test := range []struct {
|
|
|
|
input, output string
|
|
|
|
}{
|
2024-04-17 01:44:57 +02:00
|
|
|
{`!!'!$`, `'!!'\''!$'`},
|
2024-04-16 07:38:23 +02:00
|
|
|
{``, `""`},
|
|
|
|
{`${var}`, `"\${var}"`},
|
|
|
|
{"`cat`", "\"\\`cat\\`\""},
|
|
|
|
{`"魚\"`, `"\"魚\\\""`},
|
|
|
|
} {
|
|
|
|
var b bytes.Buffer
|
|
|
|
err := ttemplate.Must(ttemplate.New("test").
|
|
|
|
Funcs(shellFuncs).Parse("{{quote .}}")).Execute(&b, test.input)
|
|
|
|
if err != nil {
|
|
|
|
t.Errorf("template execution error: %s\n", err)
|
|
|
|
}
|
|
|
|
if b.String() != test.output {
|
|
|
|
t.Errorf("%q should be quoted os %q, not %q\n",
|
|
|
|
test.input, test.output, b.String())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2025-01-02 00:35:00 +01:00
|
|
|
|
|
|
|
func TestShortDurationString(t *testing.T) {
|
|
|
|
for _, test := range []struct {
|
|
|
|
d time.Duration
|
|
|
|
expect string
|
|
|
|
}{
|
|
|
|
{72 * time.Hour, "3d"},
|
|
|
|
{-3 * time.Hour, "-3h"},
|
|
|
|
{12 * time.Minute, "12m"},
|
|
|
|
{time.Millisecond, "0s"},
|
|
|
|
} {
|
|
|
|
if sd := shortDurationString(test.d); sd != test.expect {
|
|
|
|
t.Errorf("%s = %s; want %s\n", test.d, sd, test.expect)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|