package audit import "testing" func TestParseUserAgent(t *testing.T) { cases := []struct { ua string os string browser string typ string }{ { ua: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36", os: "Windows", browser: "Chrome", typ: "desktop", }, { ua: "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1", os: "iOS", browser: "Safari", typ: "mobile", }, { ua: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0", os: "macOS", browser: "Edge", typ: "desktop", }, { ua: "Mozilla/5.0 (Linux; Android 13; Pixel 7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36", os: "Android", browser: "Chrome", typ: "mobile", }, { ua: "curl/8.4.0", os: "Unknown", browser: "Other", typ: "bot", }, { ua: "Mozilla/5.0 (X11; Linux x86_64; rv:121.0) Gecko/20100101 Firefox/121.0", os: "Linux", browser: "Firefox", typ: "desktop", }, {ua: "", os: "Unknown", browser: "Other", typ: "other"}, } for i, tc := range cases { got := ParseUserAgent(tc.ua) if got.OS != tc.os || got.Browser != tc.browser || got.Type != tc.typ { t.Errorf("case %d: ParseUserAgent(%q) = %+v, want os=%s browser=%s type=%s", i, tc.ua, got, tc.os, tc.browser, tc.typ) } } }