package generator
import (
"math/rand"
"testing"
)
func TestExpressionValueGenerator(t *testing.T) {
generator := NewExpressionValueGenerator(rand.New(rand.NewSource(1337)))
var tests = []struct {
Expression string
ExpectedValue string
}{
{"test[A-Z0-9]{4}template", "testQ3HVtemplate"},
{"[\\d]{4}", "6841"},
{"[\\w]{4}", "DVgK"},
{"[\\a]{10}", "nFWmvmjuaZ"},
{"admin[0-9]{2}[A-Z]{2}", "admin32VU"},
{"admin[0-9]{2}test[A-Z]{2}", "admin56testGS"},
}
for _, test := range tests {
value, err := generator.GenerateValue(test.Expression)
if err != nil {
t.Errorf("Failed to generate value from %s due to error: %v", test.Expression, err)
}
if value != test.ExpectedValue {
t.Errorf("Failed to generate expected value from %s\n. Generated: %s\n. Expected: %s\n", test.Expression, value, test.ExpectedValue)
}
}
}
func TestExpressionValueGeneratorErrors(t *testing.T) {
generator := NewExpressionValueGenerator(rand.New(rand.NewSource(1337)))
if v, err := generator.GenerateValue("[ABC]{3}"); err == nil {
t.Errorf("Expected [ABC]{3} to produce malformed syntax error (returned: %s)", v)
}
if v, err := generator.GenerateValue("[Z-A]{3}"); err == nil {
t.Errorf("Expected Invalid range specified error, got %s", v)
}
if v, err := generator.GenerateValue("[A-Z]{300}"); err == nil {
t.Errorf("Expected Invalid range specified error, got %s", v)
}
if v, err := generator.GenerateValue("[A-Z]{0}"); err == nil {
t.Errorf("Expected Invalid range specified error, got %s", v)
}
}