From 9feadf4d156c3919f765403f63df918ffb5c7778 Mon Sep 17 00:00:00 2001 From: Lilleman auf Larv Date: Sun, 20 Sep 2026 00:01:52 +0200 Subject: [PATCH] Expect IANA's method, protocol and port registries as tables --- data_test.go | 56 +++++++++++++++++++++++++++++---------------------- table_test.go | 12 +++++++++++ 2 files changed, 44 insertions(+), 24 deletions(-) diff --git a/data_test.go b/data_test.go index 07ca6d9..d6b2d57 100644 --- a/data_test.go +++ b/data_test.go @@ -95,30 +95,38 @@ func TestShippedMiscCategories(t *testing.T) { func TestShippedMiscReferenceData(t *testing.T) { f := newGenerator(t, "data/misc", WithSeed(1)) re := map[string]*regexp.Regexp{ - "currency": regexp.MustCompile(`^[A-Z]{3}$`), - "currency.name": regexp.MustCompile(`\p{L}`), - "currency.symbol": regexp.MustCompile(`^\S+$`), - "territory": regexp.MustCompile(`\p{L}`), - "territory.alpha2": regexp.MustCompile(`^[A-Z]{2}$`), - "territory.alpha3": regexp.MustCompile(`^[A-Z]{3}$`), - "territory.country": regexp.MustCompile(`^[A-Z]{2}$`), - "language": regexp.MustCompile(`\p{L}`), - "language.code": regexp.MustCompile(`^[a-z]{2}$`), - "language.code3": regexp.MustCompile(`^[a-z]{3}$`), - "timezone": regexp.MustCompile(`^[A-Za-z]+(/[A-Za-z0-9_+-]+)+$`), - "timezone.offset": regexp.MustCompile(`^[+-](0\d|1[0-4]):[0-5]\d$`), - "timezone.territory": regexp.MustCompile(`^[A-Z]{2}$`), - "timezone.weight": regexp.MustCompile(`^[1-9]\d*$`), - "mimetype": regexp.MustCompile(`^[a-z]+/[a-z0-9.+-]+$`), - "mimetype.ext": regexp.MustCompile(`^\.[a-z0-9_-]+$`), - "httpstatus": regexp.MustCompile(`^[1-5]\d{2} \S.*$`), - "httpstatus.code": regexp.MustCompile(`^[1-5]\d{2}$`), - "useragent": regexp.MustCompile(`^Mozilla/5\.0 .+`), - "useragent.browser": regexp.MustCompile(`^(Chrome|Edge|Firefox|Opera|Safari|Samsung Internet)$`), - "useragent.device": regexp.MustCompile(`^(desktop|mobile)$`), - "useragent.os": regexp.MustCompile(`^(Android|ChromeOS|Linux|Windows|iOS|macOS)$`), - "car": regexp.MustCompile(`^\S.* \S`), - "car.make": regexp.MustCompile(`^\S`), + "currency": regexp.MustCompile(`^[A-Z]{3}$`), + "currency.name": regexp.MustCompile(`\p{L}`), + "currency.symbol": regexp.MustCompile(`^\S+$`), + "territory": regexp.MustCompile(`\p{L}`), + "territory.alpha2": regexp.MustCompile(`^[A-Z]{2}$`), + "territory.alpha3": regexp.MustCompile(`^[A-Z]{3}$`), + "territory.country": regexp.MustCompile(`^[A-Z]{2}$`), + "language": regexp.MustCompile(`\p{L}`), + "language.code": regexp.MustCompile(`^[a-z]{2}$`), + "language.code3": regexp.MustCompile(`^[a-z]{3}$`), + "timezone": regexp.MustCompile(`^[A-Za-z]+(/[A-Za-z0-9_+-]+)+$`), + "timezone.offset": regexp.MustCompile(`^[+-](0\d|1[0-4]):[0-5]\d$`), + "timezone.territory": regexp.MustCompile(`^[A-Z]{2}$`), + "timezone.weight": regexp.MustCompile(`^[1-9]\d*$`), + "mimetype": regexp.MustCompile(`^[a-z]+/[a-z0-9.+-]+$`), + "mimetype.ext": regexp.MustCompile(`^\.[a-z0-9_-]+$`), + "httpmethod": regexp.MustCompile(`^[A-Za-z][A-Za-z-]*$`), + "httpmethod.safe": regexp.MustCompile(`^(yes|no)$`), + "httpmethod.idempotent": regexp.MustCompile(`^(yes|no)$`), + "port": regexp.MustCompile(`^[1-9]\d{0,4}$`), + "port.name": regexp.MustCompile(`^\S+$`), + "protocol": regexp.MustCompile(`^\S+( \S+)*$`), + "protocol.name": regexp.MustCompile(`\S`), + "protocol.number": regexp.MustCompile(`^\d{1,3}$`), + "httpstatus": regexp.MustCompile(`^[1-5]\d{2} \S.*$`), + "httpstatus.code": regexp.MustCompile(`^[1-5]\d{2}$`), + "useragent": regexp.MustCompile(`^Mozilla/5\.0 .+`), + "useragent.browser": regexp.MustCompile(`^(Chrome|Edge|Firefox|Opera|Safari|Samsung Internet)$`), + "useragent.device": regexp.MustCompile(`^(desktop|mobile)$`), + "useragent.os": regexp.MustCompile(`^(Android|ChromeOS|Linux|Windows|iOS|macOS)$`), + "car": regexp.MustCompile(`^\S.* \S`), + "car.make": regexp.MustCompile(`^\S`), } for i := 0; i < 100; i++ { for p, rx := range re { diff --git a/table_test.go b/table_test.go index 21e3b72..6facdbc 100644 --- a/table_test.go +++ b/table_test.go @@ -701,6 +701,18 @@ func TestShippedTables(t *testing.T) { "timezone[Asia/Kathmandu].offset": "+05:45", "timezone[America/New_York].offset": "-05:00", "territory[SE].timezone": "Europe/Stockholm", + "httpmethod[GET].safe": "yes", + "httpmethod[GET].idempotent": "yes", + "httpmethod[POST].safe": "no", + "httpmethod[POST].idempotent": "no", + "httpmethod[PUT].idempotent": "yes", + "protocol[TCP].number": "6", + "protocol[UDP].number": "17", + "protocol[ICMP].name": "Internet Control Message", + "port[443]": "443", + "port[443].name": "https", + "port[22].name": "ssh", + "port[3306].name": "mysql", "territory[NP].timezone.offset": "+05:45", } { if got := fake(t, f, path); got != want {