@@ -11,51 +11,49 @@ import (
11
11
"net/url"
12
12
"path"
13
13
"reflect"
14
- "strings"
15
14
"unicode"
16
15
)
17
16
18
- type domainNameGen struct {
19
- maxLength int
20
- maxElementLength int
21
- }
17
+ const (
18
+ domainMaxLength = 255
19
+ domainMaxElementLength = 63
20
+ )
21
+
22
+ var (
23
+ domainType = reflect .TypeOf ("" )
24
+ urlType = reflect .TypeOf (url.URL {})
25
+ )
26
+
27
+ type domainNameGen struct {}
22
28
23
- func (g * domainNameGen ) String () string {
24
- return fmt . Sprintf ( "Domain(maxLength=%v, mmaxElementLength%v)" , g . maxLength , g . maxElementLength )
29
+ func (* domainNameGen ) String () string {
30
+ return "Domain()"
25
31
}
26
32
27
- func (g * domainNameGen ) type_ () reflect.Type {
28
- return stringType
33
+ func (* domainNameGen ) type_ () reflect.Type {
34
+ return domainType
29
35
}
30
36
37
+ var tldGenerator = SampledFrom (tlds )
38
+
31
39
func (g * domainNameGen ) value (t * T ) value {
32
- domain := SampledFrom ( tlds ) .
33
- Filter (func (s string ) bool { return len (s )+ 2 <= g . maxLength }).
40
+ domain := tldGenerator .
41
+ Filter (func (s string ) bool { return len (s )+ 2 <= domainMaxLength }).
34
42
Map (func (s string ) string {
35
43
var n string
36
44
for _ , ch := range s {
37
- n += string (SampledFrom ([]rune {unicode .ToUpper (ch ), unicode .ToLower (ch )}).Draw (t , "" ).(rune ))
45
+ n += string (SampledFrom ([]rune {unicode .ToLower (ch ), unicode .ToUpper (ch )}).Draw (t , "" ).(rune ))
38
46
}
39
47
40
48
return n
41
- }).Draw (t , "domain" ).(string )
49
+ }).
50
+ Draw (t , "domain" ).(string )
42
51
43
- var b strings. Builder
52
+ expr := fmt . Sprintf ( `[a-zA-Z]([a-zA-Z0-9\-]{0,%d}[a-zA-Z0-9])?` , domainMaxElementLength - 2 )
44
53
elements := newRepeat (1 , 126 , 1 )
45
- b .Grow (elements .avg ())
46
-
47
- var expr string
48
- switch g .maxElementLength {
49
- case 1 :
50
- expr = `[a-zA-Z]`
51
- case 2 :
52
- expr = `[a-zA-Z][a-zA-Z0-9]?`
53
- default :
54
- expr = fmt .Sprintf (`[a-zA-Z]([a-zA-Z0-9\-]{0,%d}[a-zA-Z0-9])?` , g .maxElementLength - 2 )
55
- }
56
54
for elements .more (t .s , g .String ()) {
57
55
subDomain := StringMatching (expr ).Draw (t , "subdomain" ).(string )
58
- if len (domain )+ len (subDomain ) >= g . maxLength {
56
+ if len (domain )+ len (subDomain ) >= domainMaxLength {
59
57
break
60
58
}
61
59
domain = subDomain + "." + domain
@@ -66,34 +64,19 @@ func (g *domainNameGen) value(t *T) value {
66
64
67
65
// Domain generates an RFC 1035 compliant domain name.
68
66
func Domain () * Generator {
69
- return DomainOf (255 , 63 )
70
- }
71
-
72
- // DomainOf generates an RFC 1035 compliant domain name,
73
- // with a maximum overall length of maxLength
74
- // and a maximum number of elements of maxElements.
75
- func DomainOf (maxLength , maxElementLength int ) * Generator {
76
- assertf (4 <= maxLength , "maximum length (%v) should not be less than 4, to generate a two character domain and a one character subdomain" , maxLength )
77
- assertf (maxLength <= 255 , "maximum length (%v) should not be greater than 255 to comply with RFC 1035" , maxLength )
78
- assertf (1 <= maxElementLength , "maximum element length (%v) should not be less than 1 to comply with RFC 1035" , maxElementLength )
79
- assertf (maxElementLength <= 63 , "maximum element length (%v) should not be greater than 63 to comply with RFC 1035" , maxElementLength )
80
-
81
- return newGenerator (& domainNameGen {
82
- maxElementLength : maxElementLength ,
83
- maxLength : maxLength ,
84
- })
67
+ return newGenerator (& domainNameGen {})
85
68
}
86
69
87
70
type urlGenerator struct {
88
71
schemes []string
89
72
}
90
73
91
74
func (g * urlGenerator ) String () string {
92
- return fmt . Sprintf ( "URLGenerator(schemes=%v)" , g . schemes )
75
+ return "URL()"
93
76
}
94
77
95
78
func (g * urlGenerator ) type_ () reflect.Type {
96
- return reflect . TypeOf (url. URL {})
79
+ return urlType
97
80
}
98
81
99
82
func (g * urlGenerator ) value (t * T ) value {
0 commit comments