data

package
v1.2.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 19, 2026 License: MIT Imports: 2 Imported by: 0

README

Sources

  1. CryptoCloud9 Gist
  2. DeviceAtlas
  3. Random Test Cases
  4. More Random Test Cases
  5. Dailymotion

Update

To update the final list of cleaned user agents, run the following command:

go run scripts/main.go
Useful Regexes
\[ip:\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]

Documentation

Index

Constants

This section is empty.

Variables

View Source
var AllTestCases = []UATestCase{

	{
		Name:                 "Windows Chrome",
		UserAgent:            "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36",
		ExpectedMatches:      []internal.Match{internal.BrowserSafari, internal.BrowserChrome, internal.OSWindows},
		ExpectedCleanVersion: "MozillaWindowsNTWinxAppleWebKitKHTMLlikeGeckoChromeSafari",
		ExpectedBrowser:      agents.BrowserChrome,
		ExpectedOS:           agents.OSWindows,
		ExpectedDevice:       agents.DeviceDesktop,
		ExpectedVersion:      "118.0.0.0",
	},
	{
		Name:                 "Windows Chrome (WOW64)",
		UserAgent:            "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36",
		ExpectedMatches:      []internal.Match{internal.BrowserSafari, internal.BrowserChrome, internal.OSWindows},
		ExpectedCleanVersion: "MozillaWindowsNTWOWAppleWebKitKHTMLlikeGeckoChromeSafari",
		ExpectedBrowser:      agents.BrowserChrome,
		ExpectedOS:           agents.OSWindows,
		ExpectedDevice:       agents.DeviceDesktop,
		ExpectedVersion:      "59.0.3071.115",
	},
	{
		Name:                 "Windows IE 8",
		UserAgent:            "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; GWX:RED)",
		ExpectedMatches:      []internal.Match{internal.OSWindows, internal.BrowserIE},
		ExpectedCleanVersion: "MozillacompatibleMSIEWindowsNTWOWTridentSLCCNETCLRNETCLRNETCLRMediaCenterPCNETCNETEInfoPathGWXRED",
		ExpectedBrowser:      agents.BrowserIE,
		ExpectedOS:           agents.OSWindows,
		ExpectedDevice:       agents.DeviceDesktop,
		ExpectedVersion:      "8.0",
	},
	{
		Name:                 "Windows IE 10",
		UserAgent:            "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)",
		ExpectedMatches:      []internal.Match{internal.OSWindows, internal.BrowserIE},
		ExpectedCleanVersion: "MozillacompatibleMSIEWindowsNTTrident",
		ExpectedBrowser:      agents.BrowserIE,
		ExpectedOS:           agents.OSWindows,
		ExpectedDevice:       agents.DeviceDesktop,
		ExpectedVersion:      "10.0",
	},
	{
		Name:                 "Windows IE 11",
		UserAgent:            "Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko",
		ExpectedMatches:      []internal.Match{internal.BrowserIE, internal.OSWindows},
		ExpectedCleanVersion: "MozillaWindowsNTTridentrvlikeGecko",
		ExpectedBrowser:      agents.BrowserIE,
		ExpectedOS:           agents.OSWindows,
		ExpectedDevice:       agents.DeviceDesktop,
		ExpectedVersion:      "7.0",
	},
	{
		Name:                 "Windows IE 6",
		UserAgent:            "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)",
		ExpectedMatches:      []internal.Match{internal.OSWindows, internal.BrowserIE},
		ExpectedCleanVersion: "MozillacompatibleMSIEWindowsNTSVNETCLR",
		ExpectedBrowser:      agents.BrowserIE,
		ExpectedOS:           agents.OSWindows,
		ExpectedDevice:       agents.DeviceDesktop,
		ExpectedVersion:      "6.0",
	},
	{
		Name:                 "Windows Edge",
		UserAgent:            "Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 Edge/15.15063",
		ExpectedMatches:      []internal.Match{internal.BrowserEdge, internal.BrowserSafari, internal.BrowserChrome, internal.OSWindows},
		ExpectedCleanVersion: "MozillaWindowsNTAppleWebKitKHTMLlikeGeckoChromeSafariEdge",
		ExpectedBrowser:      agents.BrowserEdge,
		ExpectedOS:           agents.OSWindows,
		ExpectedDevice:       agents.DeviceDesktop,
		ExpectedVersion:      "15.15063",
	},

	{
		Name:                 "macOS Safari",
		UserAgent:            "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/10.1.2 Safari/604.1.38",
		ExpectedMatches:      []internal.Match{internal.BrowserSafari, internal.TokenVersion, internal.OSMacOS},
		ExpectedCleanVersion: "MozillaMacintoshIntelMacOSXAppleWebKitKHTMLlikeGeckoVersionSafari",
		ExpectedBrowser:      agents.BrowserSafari,
		ExpectedOS:           agents.OSMacOS,
		ExpectedDevice:       agents.DeviceDesktop,
		ExpectedVersion:      "10.1.2",
	},
	{
		Name:                 "macOS Chrome",
		UserAgent:            "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36",
		ExpectedMatches:      []internal.Match{internal.BrowserSafari, internal.BrowserChrome, internal.OSMacOS},
		ExpectedCleanVersion: "MozillaMacintoshIntelMacOSXAppleWebKitKHTMLlikeGeckoChromeSafari",
		ExpectedBrowser:      agents.BrowserChrome,
		ExpectedOS:           agents.OSMacOS,
		ExpectedDevice:       agents.DeviceDesktop,
		ExpectedVersion:      "60.0.3112.90",
	},
	{
		Name:                 "macOS Firefox",
		UserAgent:            "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:54.0) Gecko/20100101 Firefox/54.0",
		ExpectedMatches:      []internal.Match{internal.BrowserFirefox, internal.OSMacOS},
		ExpectedCleanVersion: "MozillaMacintoshIntelMacOSXrvGeckoFirefox",
		ExpectedBrowser:      agents.BrowserFirefox,
		ExpectedOS:           agents.OSMacOS,
		ExpectedDevice:       agents.DeviceDesktop,
		ExpectedVersion:      "54.0",
	},
	{
		Name:                 "macOS Vivaldi",
		UserAgent:            "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36 Vivaldi/1.92.917.39",
		ExpectedMatches:      []internal.Match{internal.BrowserVivaldi, internal.BrowserSafari, internal.BrowserChrome, internal.OSMacOS},
		ExpectedCleanVersion: "MozillaMacintoshIntelMacOSXAppleWebKitKHTMLlikeGeckoChromeSafariVivaldi",
		ExpectedBrowser:      agents.BrowserVivaldi,
		ExpectedOS:           agents.OSMacOS,
		ExpectedDevice:       agents.DeviceDesktop,
		ExpectedVersion:      "1.92.917.39",
	},
	{
		Name:                 "macOS Edge",
		UserAgent:            "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.309.71 Safari/537.36 Edg/79.0.309.71",
		ExpectedMatches:      []internal.Match{internal.BrowserEdge, internal.BrowserSafari, internal.BrowserChrome, internal.OSMacOS},
		ExpectedCleanVersion: "MozillaMacintoshIntelMacOSXAppleWebKitKHTMLlikeGeckoChromeSafariEdg",
		ExpectedBrowser:      agents.BrowserEdge,
		ExpectedOS:           agents.OSMacOS,
		ExpectedDevice:       agents.DeviceDesktop,
		ExpectedVersion:      "79.0.309.71",
	},
	{
		Name:                 "macOS Safari (AppleWebKit only)",
		UserAgent:            "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko)",
		ExpectedMatches:      []internal.Match{internal.BrowserSafari, internal.OSMacOS},
		ExpectedCleanVersion: "MozillaMacintoshIntelMacOSXAppleWebKitKHTMLlikeGecko",
		ExpectedBrowser:      agents.BrowserSafari,
		ExpectedOS:           agents.OSMacOS,
		ExpectedDevice:       agents.DeviceDesktop,
	},

	{
		Name:                 "Linux Firefox",
		UserAgent:            "Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0",
		ExpectedMatches:      []internal.Match{internal.BrowserFirefox, internal.OSLinux},
		ExpectedCleanVersion: "MozillaXLinuxxrvGeckoFirefox",
		ExpectedBrowser:      agents.BrowserFirefox,
		ExpectedOS:           agents.OSLinux,
		ExpectedDevice:       agents.DeviceDesktop,
		ExpectedVersion:      "52.0",
	},
	{
		Name:                 "Linux Firefox (i686)",
		UserAgent:            "Mozilla/5.0 (X11; Linux i686; rv:119.0) Gecko/20100101 Firefox/119.0",
		ExpectedMatches:      []internal.Match{internal.BrowserFirefox, internal.OSLinux},
		ExpectedCleanVersion: "MozillaXLinuxirvGeckoFirefox",
		ExpectedBrowser:      agents.BrowserFirefox,
		ExpectedOS:           agents.OSLinux,
		ExpectedDevice:       agents.DeviceDesktop,
		ExpectedVersion:      "119.0",
	},
	{
		Name:                 "Ubuntu Firefox",
		UserAgent:            "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:119.0) Gecko/20100101 Firefox/119.0",
		ExpectedMatches:      []internal.Match{internal.BrowserFirefox, internal.OSLinux, internal.DeviceDesktop},
		ExpectedCleanVersion: "MozillaXUbuntuLinuxirvGeckoFirefox",
		ExpectedBrowser:      agents.BrowserFirefox,
		ExpectedOS:           agents.OSLinux,
		ExpectedDevice:       agents.DeviceDesktop,
		ExpectedVersion:      "119.0",
	},
	{
		Name:                 "Fedora Firefox",
		UserAgent:            "Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:119.0) Gecko/20100101 Firefox/119.0",
		ExpectedMatches:      []internal.Match{internal.BrowserFirefox, internal.OSLinux, internal.DeviceDesktop},
		ExpectedCleanVersion: "MozillaXFedoraLinuxxrvGeckoFirefox",
		ExpectedBrowser:      agents.BrowserFirefox,
		ExpectedOS:           agents.OSLinux,
		ExpectedDevice:       agents.DeviceDesktop,
		ExpectedVersion:      "119.0",
	},
	{
		Name:                 "Linux Chrome",
		UserAgent:            "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36",
		ExpectedMatches:      []internal.Match{internal.BrowserSafari, internal.BrowserChrome, internal.OSLinux},
		ExpectedCleanVersion: "MozillaXLinuxxAppleWebKitKHTMLlikeGeckoChromeSafari",
		ExpectedBrowser:      agents.BrowserChrome,
		ExpectedOS:           agents.OSLinux,
		ExpectedDevice:       agents.DeviceDesktop,
		ExpectedVersion:      "119.0.0.0",
	},

	{
		Name:                 "iPhone Safari",
		UserAgent:            "Mozilla/5.0 (iPhone; CPU iPhone OS 10_0 like Mac OS X) AppleWebKit/602.1.38 (KHTML, like Gecko) Version/10.0 Mobile/14A300 Safari/602.1",
		ExpectedMatches:      []internal.Match{internal.BrowserSafari, internal.DeviceMobile, internal.TokenVersion, internal.OSIOS, internal.TokenMobileDevice},
		ExpectedCleanVersion: "MozillaiPhoneCPUiPhoneOSlikeMacOSXAppleWebKitKHTMLlikeGeckoVersionMobileSafari",
		ExpectedBrowser:      agents.BrowserSafari,
		ExpectedOS:           agents.OSIOS,
		ExpectedDevice:       agents.DeviceMobile,
		ExpectedVersion:      "10.0",
	},
	{
		Name:                 "iPhone Chrome",
		UserAgent:            "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_2 like Mac OS X) AppleWebKit/603.2.4 (KHTML, like Gecko) CriOS/60.0.3112.89 Mobile/14F89 Safari/602.1",
		ExpectedMatches:      []internal.Match{internal.BrowserSafari, internal.DeviceMobile, internal.BrowserChrome, internal.OSIOS, internal.TokenMobileDevice},
		ExpectedCleanVersion: "MozillaiPhoneCPUiPhoneOSlikeMacOSXAppleWebKitKHTMLlikeGeckoCriOSMobileSafari",
		ExpectedBrowser:      agents.BrowserChrome,
		ExpectedOS:           agents.OSIOS,
		ExpectedDevice:       agents.DeviceMobile,
		ExpectedVersion:      "60.0.3112.89",
	},
	{
		Name:                 "iPhone Opera",
		UserAgent:            "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_2 like Mac OS X) AppleWebKit/603.2.4 (KHTML, like Gecko) OPiOS/14.0.0.104835 Mobile/14F89 Safari/9537.53",
		ExpectedMatches:      []internal.Match{internal.BrowserSafari, internal.DeviceMobile, internal.BrowserOpera, internal.OSIOS, internal.TokenMobileDevice},
		ExpectedCleanVersion: "MozillaiPhoneCPUiPhoneOSlikeMacOSXAppleWebKitKHTMLlikeGeckoOPiOSMobileSafari",
		ExpectedBrowser:      agents.BrowserOpera,
		ExpectedOS:           agents.OSIOS,
		ExpectedDevice:       agents.DeviceMobile,
		ExpectedVersion:      "14.0.0.104835",
	},
	{
		Name:                 "iPhone Firefox",
		UserAgent:            "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_2 like Mac OS X) AppleWebKit/603.2.4 (KHTML, like Gecko) FxiOS/8.1.1 Mobile/14F89 Safari/603.2.4",
		ExpectedMatches:      []internal.Match{internal.BrowserSafari, internal.DeviceMobile, internal.BrowserFirefox, internal.OSIOS, internal.TokenMobileDevice},
		ExpectedCleanVersion: "MozillaiPhoneCPUiPhoneOSlikeMacOSXAppleWebKitKHTMLlikeGeckoFxiOSMobileSafari",
		ExpectedBrowser:      agents.BrowserFirefox,
		ExpectedOS:           agents.OSIOS,
		ExpectedDevice:       agents.DeviceMobile,
		ExpectedVersion:      "8.1.1",
	},
	{
		Name:                 "iPhone Edge",
		UserAgent:            "Mozilla/5.0 (iPhone; CPU iPhone OS 12_1_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 EdgiOS/44.11.15 Mobile/16D57 Safari/605.1.15",
		ExpectedMatches:      []internal.Match{internal.BrowserSafari, internal.DeviceMobile, internal.BrowserEdge, internal.TokenVersion, internal.OSIOS, internal.TokenMobileDevice},
		ExpectedCleanVersion: "MozillaiPhoneCPUiPhoneOSlikeMacOSXAppleWebKitKHTMLlikeGeckoVersionEdgiOSMobileSafari",
		ExpectedBrowser:      agents.BrowserEdge,
		ExpectedOS:           agents.OSIOS,
		ExpectedDevice:       agents.DeviceMobile,
		ExpectedVersion:      "44.11.15",
	},
	{
		Name:                 "iPhone Safari (No Version token)",
		UserAgent:            "Mozilla/5.0 (iPhone; CPU iPhone OS 17_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148",
		ExpectedMatches:      []internal.Match{internal.DeviceMobile, internal.BrowserSafari, internal.OSIOS, internal.TokenMobileDevice},
		ExpectedCleanVersion: "MozillaiPhoneCPUiPhoneOSlikeMacOSXAppleWebKitKHTMLlikeGeckoMobile",
		ExpectedBrowser:      agents.BrowserSafari,
		ExpectedOS:           agents.OSIOS,
		ExpectedDevice:       agents.DeviceMobile,
	},
	{
		Name:                 "iPhone Edge (Version after browser)",
		UserAgent:            "Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) EdgiOS/125.0.2535.87 Version/17.0 Mobile/15E148 Safari/604.1",
		ExpectedMatches:      []internal.Match{internal.BrowserSafari, internal.DeviceMobile, internal.TokenVersion, internal.BrowserEdge, internal.OSIOS, internal.TokenMobileDevice},
		ExpectedCleanVersion: "MozillaiPhoneCPUiPhoneOSlikeMacOSXAppleWebKitKHTMLlikeGeckoEdgiOSVersionMobileSafari",
		ExpectedBrowser:      agents.BrowserEdge,
		ExpectedOS:           agents.OSIOS,
		ExpectedDevice:       agents.DeviceMobile,
		ExpectedVersion:      "125.0.2535.87",
	},

	{
		Name:                 "iPad Safari",
		UserAgent:            "Mozilla/5.0 (iPad; CPU OS 10_0 like Mac OS X) AppleWebKit/602.1.38 (KHTML, like Gecko) Version/10.0 Mobile/14A300 Safari/602.1",
		ExpectedMatches:      []internal.Match{internal.BrowserSafari, internal.DeviceMobile, internal.TokenVersion, internal.OSIOS, internal.DeviceTablet},
		ExpectedCleanVersion: "MozillaiPadCPUOSlikeMacOSXAppleWebKitKHTMLlikeGeckoVersionMobileSafari",
		ExpectedBrowser:      agents.BrowserSafari,
		ExpectedOS:           agents.OSIOS,
		ExpectedDevice:       agents.DeviceTablet,
		ExpectedVersion:      "10.0",
	},
	{
		Name:                 "iPad Chrome",
		UserAgent:            "Mozilla/5.0 (iPad; CPU OS 17_1_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/119.0.6045.169 Mobile/15E148 Safari/604.1",
		ExpectedMatches:      []internal.Match{internal.BrowserSafari, internal.DeviceMobile, internal.BrowserChrome, internal.OSIOS, internal.DeviceTablet},
		ExpectedCleanVersion: "MozillaiPadCPUOSlikeMacOSXAppleWebKitKHTMLlikeGeckoCriOSMobileSafari",
		ExpectedBrowser:      agents.BrowserChrome,
		ExpectedOS:           agents.OSIOS,
		ExpectedDevice:       agents.DeviceTablet,
		ExpectedVersion:      "119.0.6045.169",
	},
	{
		Name:                 "iPad Firefox",
		UserAgent:            "Mozilla/5.0 (iPad; CPU OS 17_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) FxiOS/119.0 Mobile/15E148 Safari/605.1.15",
		ExpectedMatches:      []internal.Match{internal.BrowserSafari, internal.DeviceMobile, internal.BrowserFirefox, internal.OSIOS, internal.DeviceTablet},
		ExpectedCleanVersion: "MozillaiPadCPUOSlikeMacOSXAppleWebKitKHTMLlikeGeckoFxiOSMobileSafari",
		ExpectedBrowser:      agents.BrowserFirefox,
		ExpectedOS:           agents.OSIOS,
		ExpectedDevice:       agents.DeviceTablet,
		ExpectedVersion:      "119.0",
	},

	{
		Name:                 "Android Samsung Browser",
		UserAgent:            "Mozilla/5.0 (Linux; Android 5.0.2; SAMSUNG SM-G925F Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/4.0 Chrome/44.0.2403.133 Mobile Safari/537.36",
		ExpectedMatches:      []internal.Match{internal.BrowserSafari, internal.DeviceMobile, internal.BrowserChrome, internal.BrowserSamsung, internal.OSAndroid, internal.OSLinux},
		ExpectedCleanVersion: "MozillaLinuxAndroidAppleWebKitKHTMLlikeGeckoSamsungBrowserChromeMobileSafari",
		ExpectedBrowser:      agents.BrowserSamsung,
		ExpectedOS:           agents.OSAndroid,
		ExpectedDevice:       agents.DeviceMobile,
		ExpectedVersion:      "4.0",
	},
	{
		Name:                 "Android Browser",
		UserAgent:            "Mozilla/5.0 (Linux; Android 4.0.4; Galaxy Nexus Build/IMM76B) AppleWebKit/535.19 (KHTML, like Gecko) Version/4.0 Mobile Safari/535.19",
		ExpectedMatches:      []internal.Match{internal.BrowserSafari, internal.DeviceMobile, internal.TokenVersion, internal.TokenMobileDevice, internal.OSAndroid, internal.OSLinux},
		ExpectedCleanVersion: "MozillaLinuxAndroidAppleWebKitKHTMLlikeGeckoVersionMobileSafari",
		ExpectedBrowser:      agents.BrowserAndroid,
		ExpectedOS:           agents.OSAndroid,
		ExpectedDevice:       agents.DeviceMobile,
		ExpectedVersion:      "4.0",
	},
	{
		Name:                 "Android Browser (U;)",
		UserAgent:            "Mozilla/5.0 (Linux; U; Android 4.0.3; ko-kr; LG-L160L Build/IML74K) AppleWebkit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30",
		ExpectedMatches:      []internal.Match{internal.BrowserSafari, internal.DeviceMobile, internal.TokenVersion, internal.TokenMobileDevice, internal.OSAndroid, internal.OSLinux},
		ExpectedCleanVersion: "MozillaLinuxUAndroidAppleWebkitKHTMLlikeGeckoVersionMobileSafari",
		ExpectedBrowser:      agents.BrowserAndroid,
		ExpectedOS:           agents.OSAndroid,
		ExpectedDevice:       agents.DeviceMobile,
		ExpectedVersion:      "4.0",
	},
	{
		Name:                 "Android Chrome",
		UserAgent:            "Mozilla/5.0 (Linux; Android 4.3; C5502 Build/10.4.1.B.0.101) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.102 Mobile Safari/537.36",
		ExpectedMatches:      []internal.Match{internal.BrowserSafari, internal.DeviceMobile, internal.BrowserChrome, internal.OSAndroid, internal.OSLinux},
		ExpectedCleanVersion: "MozillaLinuxAndroidAppleWebKitKHTMLlikeGeckoChromeMobileSafari",
		ExpectedBrowser:      agents.BrowserChrome,
		ExpectedOS:           agents.OSAndroid,
		ExpectedDevice:       agents.DeviceMobile,
		ExpectedVersion:      "38.0.2125.102",
	},
	{
		Name:                 "Android Chrome (Pixel)",
		UserAgent:            "Mozilla/5.0 (Linux; Android 13; Pixel 7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Mobile Safari/537.36",
		ExpectedMatches:      []internal.Match{internal.BrowserSafari, internal.DeviceMobile, internal.BrowserChrome, internal.OSAndroid, internal.OSLinux},
		ExpectedCleanVersion: "MozillaLinuxAndroidAppleWebKitKHTMLlikeGeckoChromeMobileSafari",
		ExpectedBrowser:      agents.BrowserChrome,
		ExpectedOS:           agents.OSAndroid,
		ExpectedDevice:       agents.DeviceMobile,
		ExpectedVersion:      "112.0.0.0",
	},
	{
		Name:                 "Android Firefox (Plain variant)",
		UserAgent:            "Mozilla/5.0 (Android 10; Mobile; rv:130.0) Gecko/130.0 Firefox/130.0",
		ExpectedMatches:      []internal.Match{internal.BrowserFirefox, internal.DeviceMobile, internal.OSAndroid},
		ExpectedCleanVersion: "MozillaAndroidGeckoFirefox",
		ExpectedBrowser:      agents.BrowserFirefox,
		ExpectedOS:           agents.OSAndroid,
		ExpectedDevice:       agents.DeviceMobile,
		ExpectedVersion:      "130.0",
	},

	{
		Name:                 "Googlebot",
		UserAgent:            "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)",
		ExpectedMatches:      []internal.Match{internal.DeviceBot},
		ExpectedCleanVersion: "MozillacompatibleGooglebothttpwwwgooglecombothtml",
		ExpectedDevice:       agents.DeviceBot,
	},
	{
		Name:                 "Bingbot",
		UserAgent:            "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)",
		ExpectedMatches:      []internal.Match{internal.DeviceBot},
		ExpectedCleanVersion: "Mozillacompatiblebingbothttpwwwbingcombingbothtm",
		ExpectedDevice:       agents.DeviceBot,
	},
	{
		Name:                 "Yahoobot",
		UserAgent:            "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)",
		ExpectedMatches:      []internal.Match{internal.DeviceBot},
		ExpectedCleanVersion: "MozillacompatibleYahooSlurphttphelpyahoocomhelpusysearchslurp",
		ExpectedDevice:       agents.DeviceBot,
	},
	{
		Name:                 "YandexBot",
		UserAgent:            "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)",
		ExpectedMatches:      []internal.Match{internal.DeviceBot},
		ExpectedCleanVersion: "MozillacompatibleYandexBothttpyandexcombots",
		ExpectedDevice:       agents.DeviceBot,
	},
	{
		Name:                 "Bingbot (Chrome)",
		UserAgent:            "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm) Chrome/112.0.0.0 Safari/537.36",
		ExpectedMatches:      []internal.Match{internal.BrowserSafari, internal.BrowserChrome, internal.DeviceBot},
		ExpectedCleanVersion: "MozillaAppleWebKitKHTMLlikeGeckocompatiblebingbothttpwwwbingcombingbothtmChromeSafari",
		ExpectedDevice:       agents.DeviceBot,
		ExpectedBrowser:      agents.BrowserChrome,
		ExpectedVersion:      "112.0.0.0",
	},
	{
		Name:                 "Headless Chrome Bot",
		UserAgent:            "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/125.0.6422.76 Safari/537.36",
		ExpectedMatches:      []internal.Match{internal.BrowserSafari, internal.BrowserChrome, internal.DeviceBot, internal.OSLinux},
		ExpectedCleanVersion: "MozillaXLinuxxAppleWebKitKHTMLlikeGeckoHeadlessChromeSafari",
		ExpectedDevice:       agents.DeviceBot,
		ExpectedBrowser:      agents.BrowserChrome,
		ExpectedOS:           agents.OSLinux,
		ExpectedVersion:      "125.0.6422.76",
	},
	{
		Name:                 "Amazon QBusiness Bot",
		UserAgent:            "amazon-QBusiness",
		ExpectedMatches:      []internal.Match{internal.DeviceBot},
		ExpectedCleanVersion: "amazonQBusiness",
		ExpectedDevice:       agents.DeviceBot,
	},

	{
		Name:                 "Android Yandex Browser",
		UserAgent:            "Mozilla/5.0 (Linux; arm_64; Android 13) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.6099.230 YaBrowser/24.1.7.27.00 SA/5 Mobile Safari/537.36",
		ExpectedMatches:      []internal.Match{internal.BrowserSafari, internal.DeviceMobile, internal.BrowserYandex, internal.BrowserChrome, internal.OSAndroid, internal.OSLinux},
		ExpectedCleanVersion: "MozillaLinuxarmAndroidAppleWebKitKHTMLlikeGeckoChromeYaBrowserSAMobileSafari",
		ExpectedBrowser:      agents.BrowserYandex,
		ExpectedOS:           agents.OSAndroid,
		ExpectedDevice:       agents.DeviceMobile,
		ExpectedVersion:      "24.1.7.27.00",
	},
	{
		Name:                 "Safari UIWebView",
		UserAgent:            "Mozilla/5.0 (iPhone; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12F70",
		ExpectedMatches:      []internal.Match{internal.DeviceMobile, internal.BrowserSafari, internal.OSIOS, internal.TokenMobileDevice},
		ExpectedCleanVersion: "MozillaiPhoneCPUiPhoneOSlikeMacOSXAppleWebKitKHTMLlikeGeckoMobile",
		ExpectedBrowser:      agents.BrowserSafari,
		ExpectedOS:           agents.OSIOS,
		ExpectedDevice:       agents.DeviceMobile,
	},
	{
		Name:                 "Linux Falkon Browser",
		UserAgent:            "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Falkon/24.02.2 QtWebEngine/5.15.16 Chrome/87.0.4280.144 Safari/537.36",
		ExpectedMatches:      []internal.Match{internal.BrowserSafari, internal.BrowserChrome, internal.BrowserFalkon, internal.OSLinux},
		ExpectedCleanVersion: "MozillaXLinuxxAppleWebKitKHTMLlikeGeckoFalkonQtWebEngineChromeSafari",
		ExpectedBrowser:      agents.BrowserFalkon,
		ExpectedOS:           agents.OSLinux,
		ExpectedDevice:       agents.DeviceDesktop,
		ExpectedVersion:      "24.02.2",
	},
	{
		Name:                 "Android Firefox",
		UserAgent:            "Mozilla/5.0 (Android 14; Mobile; rv:123.0) Gecko/123.0 Firefox/123.0",
		ExpectedMatches:      []internal.Match{internal.BrowserFirefox, internal.DeviceMobile, internal.OSAndroid},
		ExpectedCleanVersion: "MozillaAndroidGeckoFirefox",
		ExpectedBrowser:      agents.BrowserFirefox,
		ExpectedOS:           agents.OSAndroid,
		ExpectedDevice:       agents.DeviceMobile,
		ExpectedVersion:      "123.0",
	},
	{
		Name:                 "Linux ARM Chrome",
		UserAgent:            "Mozilla/5.0 (X11; Linux aarch64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36",
		ExpectedMatches:      []internal.Match{internal.BrowserSafari, internal.BrowserChrome, internal.OSLinux},
		ExpectedCleanVersion: "MozillaXLinuxaarchAppleWebKitKHTMLlikeGeckoChromeSafari",
		ExpectedBrowser:      agents.BrowserChrome,
		ExpectedOS:           agents.OSLinux,
		ExpectedDevice:       agents.DeviceDesktop,
		ExpectedVersion:      "88.0.4324.182",
	},
	{
		Name:                 "Samsung TV",
		UserAgent:            "Mozilla/5.0 (SMART-TV; Linux; Tizen 2.1) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/2.1 Chrome/48.0.2564.116 TV Safari/537.36",
		ExpectedMatches:      []internal.Match{internal.BrowserSafari, internal.DeviceTV, internal.BrowserChrome, internal.BrowserSamsung, internal.OSLinux},
		ExpectedCleanVersion: "MozillaSMARTTVLinuxTizenAppleWebKitKHTMLlikeGeckoSamsungBrowserChromeTVSafari",
		ExpectedBrowser:      agents.BrowserSamsung,
		ExpectedOS:           agents.OSLinux,
		ExpectedDevice:       agents.DeviceTV,
		ExpectedVersion:      "2.1",
	},
	{
		Name:                 "Samsung Browser",
		UserAgent:            "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/26.0 Chrome/122.0.0.0 Safari/537.36",
		ExpectedMatches:      []internal.Match{internal.BrowserSafari, internal.BrowserChrome, internal.BrowserSamsung, internal.OSLinux},
		ExpectedCleanVersion: "MozillaXLinuxxAppleWebKitKHTMLlikeGeckoSamsungBrowserChromeSafari",
		ExpectedBrowser:      agents.BrowserSamsung,
		ExpectedOS:           agents.OSLinux,
		ExpectedDevice:       agents.DeviceDesktop,
		ExpectedVersion:      "26.0",
	},
	{
		Name:                 "OpenBSD Firefox",
		UserAgent:            "Mozilla/5.0 (X11; OpenBSD amd64; rv:57.0) Gecko/20100101 Firefox/57.0",
		ExpectedMatches:      []internal.Match{internal.BrowserFirefox, internal.OSOpenBSD},
		ExpectedCleanVersion: "MozillaXOpenBSDamdrvGeckoFirefox",
		ExpectedBrowser:      agents.BrowserFirefox,
		ExpectedOS:           agents.OSOpenBSD,
		ExpectedDevice:       agents.DeviceDesktop,
		ExpectedVersion:      "57.0",
	},
	{
		Name:                 "PycURL Bot",
		UserAgent:            "PycURL/7.45.6 libcurl/8.12.1-DEV nghttp2/1.64.0",
		ExpectedMatches:      []internal.Match{internal.DeviceBot},
		ExpectedCleanVersion: "PycURLlibcurlDEVnghttp",
		ExpectedDevice:       agents.DeviceBot,
	},
	{
		Name:                 "Python Aiohttp Bot",
		UserAgent:            "Python/3.13 aiohttp/3.12.15",
		ExpectedMatches:      []internal.Match{internal.DeviceBot},
		ExpectedCleanVersion: "Pythonaiohttp",
		ExpectedDevice:       agents.DeviceBot,
	},
	{
		Name:                 "Python-Requests Bot",
		UserAgent:            "python-requests/2.32.3",
		ExpectedMatches:      []internal.Match{internal.DeviceBot},
		ExpectedCleanVersion: "pythonrequests",
		ExpectedDevice:       agents.DeviceBot,
	},
	{
		Name:                 "Python-Urllib3 Bot",
		UserAgent:            "python-urllib3/2.3.0",
		ExpectedMatches:      []internal.Match{internal.DeviceBot},
		ExpectedCleanVersion: "pythonurllib",
		ExpectedDevice:       agents.DeviceBot,
	},
	{
		Name:                 "Python-Httpx Bot",
		UserAgent:            "python-httpx/0.28.1",
		ExpectedMatches:      []internal.Match{internal.DeviceBot},
		ExpectedCleanVersion: "pythonhttpx",
		ExpectedDevice:       agents.DeviceBot,
	},

	{
		Name:                 "Android Huawei Browser",
		UserAgent:            "Mozilla/5.0 (Linux; Android 10; ART-L29; HMSCore 6.10.0.311) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.88 HuaweiBrowser/13.0.4.302 Mobile Safari/537.36",
		ExpectedMatches:      []internal.Match{internal.BrowserSafari, internal.DeviceMobile, internal.BrowserHuawei, internal.TokenMobileDevice, internal.BrowserChrome, internal.OSAndroid, internal.OSLinux},
		ExpectedCleanVersion: "MozillaLinuxAndroidAppleWebKitKHTMLlikeGeckoChromeHuaweiBrowserMobileSafari",
		ExpectedBrowser:      agents.BrowserHuawei,
		ExpectedOS:           agents.OSAndroid,
		ExpectedDevice:       agents.DeviceMobile,
		ExpectedVersion:      "13.0.4.302",
	},
	{
		Name:                 "Android Huawei Browser (WebView build)",
		UserAgent:            "Mozilla/5.0 (Linux; Android 10; ART-L29 Build/HUAWEIART-L29; wv) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.93 Mobile Safari/537.36 HuaweiBrowser/13.0.4.302 HMSCore/6.10.0.311",
		ExpectedMatches:      []internal.Match{internal.BrowserHuawei, internal.TokenMobileDevice, internal.BrowserSafari, internal.DeviceMobile, internal.BrowserChrome, internal.OSAndroid, internal.OSLinux},
		ExpectedCleanVersion: "MozillaLinuxAndroidAppleWebKitKHTMLlikeGeckoChromeMobileSafariHuaweiBrowserHMSCore",
		ExpectedBrowser:      agents.BrowserHuawei,
		ExpectedOS:           agents.OSAndroid,
		ExpectedDevice:       agents.DeviceMobile,
		ExpectedVersion:      "13.0.4.302",
	},
	{
		Name:                 "HarmonyOS Huawei Browser",
		UserAgent:            "Mozilla/5.0 (Linux; Android 10; HarmonyOS; CLT-AL00; HMSCore 6.10.0.312; GMSCore 22.15.14) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.88 HuaweiBrowser/13.0.5.302 Mobile Safari/537.36",
		ExpectedMatches:      []internal.Match{internal.BrowserSafari, internal.DeviceMobile, internal.BrowserHuawei, internal.TokenMobileDevice, internal.BrowserChrome, internal.OSAndroid, internal.OSLinux},
		ExpectedCleanVersion: "MozillaLinuxAndroidAppleWebKitKHTMLlikeGeckoChromeHuaweiBrowserMobileSafari",
		ExpectedBrowser:      agents.BrowserHuawei,
		ExpectedOS:           agents.OSAndroid,
		ExpectedDevice:       agents.DeviceMobile,
		ExpectedVersion:      "13.0.5.302",
	},
	{
		Name:                 "OpenHarmony Huawei Browser",
		UserAgent:            "Mozilla/5.0 (Phone; OpenHarmony 5.0; HarmonyOS 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 ArkWeb/4.1.6.1 Mobile HuaweiBrowser/5.1.5.330",
		ExpectedMatches:      []internal.Match{internal.BrowserHuawei, internal.TokenMobileDevice, internal.DeviceMobile, internal.BrowserSafari, internal.BrowserChrome},
		ExpectedCleanVersion: "MozillaPhoneOpenHarmonyHarmonyOSAppleWebKitKHTMLlikeGeckoChromeSafariArkWebMobileHuaweiBrowser",
		ExpectedBrowser:      agents.BrowserHuawei,
		ExpectedOS:           "",
		ExpectedDevice:       agents.DeviceMobile,
		ExpectedVersion:      "5.1.5.330",
	},
	{
		Name:                 "Android Huawei Browser (Version token, no Chrome)",
		UserAgent:            "Mozilla/5.0 (Linux; Android 13; ALN-AL00) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 HuaweiBrowser/13.0.6.300 Mobile Safari/537.36",
		ExpectedMatches:      []internal.Match{internal.BrowserSafari, internal.DeviceMobile, internal.BrowserHuawei, internal.TokenMobileDevice, internal.TokenVersion, internal.OSAndroid, internal.OSLinux},
		ExpectedCleanVersion: "MozillaLinuxAndroidAppleWebKitKHTMLlikeGeckoVersionHuaweiBrowserMobileSafari",
		ExpectedBrowser:      agents.BrowserHuawei,
		ExpectedOS:           agents.OSAndroid,
		ExpectedDevice:       agents.DeviceMobile,
		ExpectedVersion:      "13.0.6.300",
	},
}

AllTestCases contains all the comprehensive test cases for the user agent parser.

Functions

This section is empty.

Types

type UATestCase

type UATestCase struct {
	Name                 string
	UserAgent            string
	ExpectedMatches      []internal.Match // For TestMatchTokenIndexes
	ExpectedCleanVersion string           // For TestCleanVersions
	ExpectedBrowser      agents.Browser
	ExpectedOS           agents.OS
	ExpectedDevice       agents.Device
	ExpectedVersion      string
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL