package generator import ( "math/rand" "testing" ) func TestExpressionValueGenerator(t *testing.T) { var tests = []struct { Expression string ExpectedValue string }{ {"test[A-Z0-9]{4}template", "testQ3HVtemplate"}, {"[\\d]{3}", "889"}, {"[\\w]{20}", "hiG4uRbcUDd5PEJLyHZ7"}, {"[\\a]{10}", "4U390O49B9"}, {"[\\A]{10}", ")^&-|_:[><"}, {"strongPassword[\\w]{3}[\\A]{3}", "strongPasswordhiG-|_"}, {"admin[0-9]{2}[A-Z]{2}", "admin78YB"}, {"admin[0-9]{2}test[A-Z]{2}", "admin78testYB"}, } for _, test := range tests { generator := NewExpressionValueGenerator(rand.New(rand.NewSource(1337))) 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 TestRemoveDuplicatedCharacters(t *testing.T) { var tests = []struct { Expression string ExpectedValue string }{ {"abcdefgh", "abcdefgh"}, {"abcabc", "abc"}, {"1111111", "1"}, {"1234567890", "1234567890"}, {"test@@", "tes@"}, } for _, test := range tests { result := removeDuplicateChars(test.Expression) if result != test.ExpectedValue { t.Errorf("Expected %q, got %q", test.ExpectedValue, result) } } } 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) } }