mirror of
https://gitea.com/gitea/act_runner.git
synced 2026-03-06 11:50:24 +00:00
116 lines
3.4 KiB
Go
116 lines
3.4 KiB
Go
package templateeval
|
||
|
||
import (
|
||
"testing"
|
||
|
||
"github.com/stretchr/testify/assert"
|
||
)
|
||
|
||
func TestRewriteSubExpression_NoExpression(t *testing.T) {
|
||
in := "Hello world"
|
||
out, ok, err := rewriteSubExpression(in, false)
|
||
assert.NoError(t, err)
|
||
if ok {
|
||
t.Fatalf("expected ok=false for no expression, got true with output %q", out)
|
||
}
|
||
if out != in {
|
||
t.Fatalf("expected output %q, got %q", in, out)
|
||
}
|
||
}
|
||
|
||
func TestRewriteSubExpression_SingleExpression(t *testing.T) {
|
||
in := "Hello ${{ 'world' }}"
|
||
out, ok, err := rewriteSubExpression(in, false)
|
||
assert.NoError(t, err)
|
||
if !ok {
|
||
t.Fatalf("expected ok=true for single expression, got false")
|
||
}
|
||
expected := "format('Hello {0}', 'world')"
|
||
if out != expected {
|
||
t.Fatalf("expected %q, got %q", expected, out)
|
||
}
|
||
}
|
||
|
||
func TestRewriteSubExpression_MultipleExpressions(t *testing.T) {
|
||
in := "Hello ${{ 'world' }}, you are ${{ 'awesome' }}"
|
||
out, ok, err := rewriteSubExpression(in, false)
|
||
assert.NoError(t, err)
|
||
if !ok {
|
||
t.Fatalf("expected ok=true for multiple expressions, got false")
|
||
}
|
||
expected := "format('Hello {0}, you are {1}', 'world', 'awesome')"
|
||
if out != expected {
|
||
t.Fatalf("expected %q, got %q", expected, out)
|
||
}
|
||
}
|
||
|
||
func TestRewriteSubExpression_ForceFormatSingle(t *testing.T) {
|
||
in := "Hello ${{ 'world' }}"
|
||
out, ok, err := rewriteSubExpression(in, true)
|
||
assert.NoError(t, err)
|
||
if !ok {
|
||
t.Fatalf("expected ok=true when forceFormat, got false")
|
||
}
|
||
expected := "format('Hello {0}', 'world')"
|
||
if out != expected {
|
||
t.Fatalf("expected %q, got %q", expected, out)
|
||
}
|
||
}
|
||
|
||
func TestRewriteSubExpression_ForceFormatMultiple(t *testing.T) {
|
||
in := "Hello ${{ 'world' }}, you are ${{ 'awesome' }}"
|
||
out, ok, err := rewriteSubExpression(in, true)
|
||
assert.NoError(t, err)
|
||
if !ok {
|
||
t.Fatalf("expected ok=true when forceFormat, got false")
|
||
}
|
||
expected := "format('Hello {0}, you are {1}', 'world', 'awesome')"
|
||
if out != expected {
|
||
t.Fatalf("expected %q, got %q", expected, out)
|
||
}
|
||
}
|
||
|
||
func TestRewriteSubExpression_UnclosedExpression(t *testing.T) {
|
||
in := "Hello ${{ 'world' " // missing closing }}
|
||
_, _, err := rewriteSubExpression(in, false)
|
||
assert.Error(t, err)
|
||
assert.Contains(t, err.Error(), "unclosed expression")
|
||
}
|
||
|
||
func TestRewriteSubExpression_UnclosedString(t *testing.T) {
|
||
in := "Hello ${{ 'world }}, you are ${{ 'awesome' }}"
|
||
_, _, err := rewriteSubExpression(in, false)
|
||
assert.Error(t, err)
|
||
assert.Contains(t, err.Error(), "unclosed string")
|
||
}
|
||
|
||
func TestRewriteSubExpression_EscapedStringLiteral(t *testing.T) {
|
||
// Two single quotes represent an escaped quote inside a string
|
||
in := "Hello ${{ 'It''s a test' }}"
|
||
out, ok, err := rewriteSubExpression(in, false)
|
||
assert.NoError(t, err)
|
||
assert.True(t, ok)
|
||
expected := "format('Hello {0}', 'It''s a test')"
|
||
assert.Equal(t, expected, out)
|
||
}
|
||
|
||
func TestRewriteSubExpression_ExpressionAtEnd(t *testing.T) {
|
||
// Expression ends exactly at the string end – should be valid
|
||
in := "Hello ${{ 'world' }}"
|
||
out, ok, err := rewriteSubExpression(in, false)
|
||
assert.NoError(t, err)
|
||
assert.True(t, ok)
|
||
expected := "format('Hello {0}', 'world')"
|
||
assert.Equal(t, expected, out)
|
||
}
|
||
|
||
func TestRewriteSubExpression_ExpressionNotAtEnd(t *testing.T) {
|
||
// Expression followed by additional text – should still be valid
|
||
in := "Hello ${{ 'world' }}, how are you?"
|
||
out, ok, err := rewriteSubExpression(in, false)
|
||
assert.NoError(t, err)
|
||
assert.True(t, ok)
|
||
expected := "format('Hello {0}, how are you?', 'world')"
|
||
assert.Equal(t, expected, out)
|
||
}
|