Files
hodu/transform_test.go

84 lines
1.9 KiB
Go

package hodu
import (
"bytes"
"errors"
"testing"
"golang.org/x/text/transform"
)
func TestStringTransformerReplacesAllMatches(t *testing.T) {
var tf *Transformer
var out string
var err error
tf = NewStringTransformer("cat", "dog")
out, _, err = transform.String(tf, "cat--cat--catalog")
if err != nil {
t.Fatalf("transform failed: %v", err)
}
if out != "dog--dog--dogalog" {
t.Fatalf("unexpected transformed output %q", out)
}
}
func TestTransformerHandlesNeedleAcrossChunks(t *testing.T) {
var tf *Transformer
var dst []byte
var n_dst int
var n_src int
var err error
var got string
tf = NewStringTransformer("abc", "X")
dst = make([]byte, 16)
n_dst, n_src, err = tf.Transform(dst, []byte("zzab"), false)
if !errors.Is(err, transform.ErrShortSrc) {
t.Fatalf("expected ErrShortSrc, got %v", err)
}
if n_dst != 2 || n_src != 2 {
t.Fatalf("unexpected consumption ndst=%d nsrc=%d", n_dst, n_src)
}
got = string(dst[:n_dst])
if got != "zz" {
t.Fatalf("unexpected first output %q", got)
}
dst = make([]byte, 16)
n_dst, n_src, err = tf.Transform(dst, []byte("abcYY"), true)
if err != nil {
t.Fatalf("second transform failed: %v", err)
}
if n_src != len("abcYY") {
t.Fatalf("unexpected second source consumption %d", n_src)
}
got = string(dst[:n_dst])
if got != "XYY" {
t.Fatalf("unexpected second output %q", got)
}
}
func TestTransformerReturnsErrShortDst(t *testing.T) {
var tf *Transformer
var dst []byte
var n_dst int
var n_src int
var err error
tf = NewStringTransformer("", "")
dst = make([]byte, 3)
n_dst, n_src, err = tf.Transform(dst, []byte("abcdef"), true)
if !errors.Is(err, transform.ErrShortDst) {
t.Fatalf("expected ErrShortDst, got %v", err)
}
if n_dst != 3 || n_src != 3 {
t.Fatalf("unexpected consumption ndst=%d nsrc=%d", n_dst, n_src)
}
if !bytes.Equal(dst, []byte("abc")) {
t.Fatalf("unexpected partial output %q", string(dst))
}
}