From e870e344c23bb52a16eb3392659a51fc8472dbcd Mon Sep 17 00:00:00 2001 From: tell-k Date: Mon, 23 Jul 2018 18:48:17 +0900 Subject: [PATCH] Catch up with woothee v1.8.0 (#15) * Update datasets * Add YandexBrowser --- dataset.go | 5 +++++ parser.go | 22 ++++++++++++++++++++++ pc_misc_test.go | 21 ++++++++++++++++++++- pc_win_test.go | 20 ++++++++++++++++++++ 4 files changed, 67 insertions(+), 1 deletion(-) diff --git a/dataset.go b/dataset.go index b570202..c33964d 100644 --- a/dataset.go +++ b/dataset.go @@ -47,6 +47,11 @@ var DefaultDataSet DataSet = DataSet{ Type: "", Vendor: "OS vendor", }, + "YaBrowser": &Result{ + Name: "Yandex Browser", + Type: "", + Vendor: "Yandex", + }, "Win": &Result{ Name: "Windows UNKNOWN Ver", Type: "pc", diff --git a/parser.go b/parser.go index 752217e..16b5337 100644 --- a/parser.go +++ b/parser.go @@ -25,6 +25,7 @@ var ( rxOperaVersionPattern2 = regexp.MustCompile(`Opera[/ ]([.0-9]+)`) rxOperaVersionPattern3 = regexp.MustCompile(`OPR/([.0-9]+)`) rxVivaldiPattern = regexp.MustCompile(`Vivaldi/([.0-9]+)`) + rxYandexBrowserPattern = regexp.MustCompile(`YaBrowser/([.0-9]+)`) rxSafariPattern = regexp.MustCompile(`Version/([.0-9]+)`) rxSoftbankPattern = regexp.MustCompile(`(?:SoftBank|Vodafone|J-PHONE)/[.0-9]+/([^ /;()]+)`) rxTridentPattern = regexp.MustCompile(`Trident/([.0-9]+);(?: BOIE[0-9]+;[A-Z]+;)? rv:([.0-9]+)`) @@ -177,6 +178,11 @@ func (p *Parser) TryBrowser(agent string, result *Result) (err error) { return } + err = p.ChallengeYandexBrowser(agent, result) + if err == nil { + return + } + err = p.ChallengeFirefoxiOS(agent, result) if err == nil { return @@ -1123,6 +1129,22 @@ func (p *Parser) ChallengeVivaldi(agent string, result *Result) error { return nil } +func (p *Parser) ChallengeYandexBrowser(agent string, result *Result) error { + version := ValueUnknown + if matches := rxYandexBrowserPattern.FindStringSubmatch(agent); matches != nil { + version = matches[1] + } else { + return ErrNoMatch + } + + err := p.PopulateDataSet(result, "YaBrowser") + if err != nil { + return err + } + result.Version = version + return nil +} + func (p *Parser) ChallengeFirefoxiOS(agent string, result *Result) error { if matches := rxFirefoxiOSPattern.FindStringSubmatch(agent); matches != nil { result.Version = matches[1] diff --git a/pc_misc_test.go b/pc_misc_test.go index 39f2b5c..7a49d0f 100644 --- a/pc_misc_test.go +++ b/pc_misc_test.go @@ -390,5 +390,24 @@ func Test_pc_misc(t *testing.T) { t.Errorf("Expected result.Version for '%s' to be '33.0.1750.152', but got '%s'", `Mozilla/5.0 (X11; CrOS x86_64 5116.115.4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.152 Safari/537.36`, result.Version) } } - + result, err = Parse(`Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 YaBrowser/17.11.1.1087 (beta) Yowser/2.5 Safari/537.36`) + if err != nil { + t.Errorf(`Failed to parse 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 YaBrowser/17.11.1.1087 (beta) Yowser/2.5 Safari/537.36': %s`, err) + } else { + if result.Category != "pc" { + t.Errorf("Expected result.Category for '%s' to be 'pc', but got '%s'", `Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 YaBrowser/17.11.1.1087 (beta) Yowser/2.5 Safari/537.36`, result.Category) + } + if result.Name != "Yandex Browser" { + t.Errorf("Expected result.Name for '%s' to be 'Yandex Browser', but got '%s'", `Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 YaBrowser/17.11.1.1087 (beta) Yowser/2.5 Safari/537.36`, result.Name) + } + if result.Os != "Linux" { + t.Errorf("Expected result.Os for '%s' to be 'Linux', but got '%s'", `Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 YaBrowser/17.11.1.1087 (beta) Yowser/2.5 Safari/537.36`, result.Os) + } + if result.OsVersion != "UNKNOWN" { + t.Errorf("Expected result.OsVersion for '%s' to be 'UNKNOWN', but got '%s'", `Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 YaBrowser/17.11.1.1087 (beta) Yowser/2.5 Safari/537.36`, result.OsVersion) + } + if result.Version != "17.11.1.1087" { + t.Errorf("Expected result.Version for '%s' to be '17.11.1.1087', but got '%s'", `Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 YaBrowser/17.11.1.1087 (beta) Yowser/2.5 Safari/537.36`, result.Version) + } + } } diff --git a/pc_win_test.go b/pc_win_test.go index 8b4d2a6..d59d409 100644 --- a/pc_win_test.go +++ b/pc_win_test.go @@ -528,5 +528,25 @@ func Test_pc_win(t *testing.T) { t.Errorf("Expected result.Version for '%s' to be 'UNKNOWN', but got '%s'", `Mozilla/5.0 (Windows NT 5.1; rv:8.0) Gecko/20111105 Thunderbird/8.0`, result.Version) } } + result, err = Parse(`Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 YaBrowser/18.1.1.839 Yowser/2.5 Safari/537.36`) + if err != nil { + t.Errorf(`Failed to parse 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 YaBrowser/18.1.1.839 Yowser/2.5 Safari/537.36': %s`, err) + } else { + if result.Category != "pc" { + t.Errorf("Expected result.Category for '%s' to be 'pc', but got '%s'", `Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 YaBrowser/18.1.1.839 Yowser/2.5 Safari/537.36`, result.Category) + } + if result.Name != "Yandex Browser" { + t.Errorf("Expected result.Name for '%s' to be 'Yandex Browser', but got '%s'", `Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 YaBrowser/18.1.1.839 Yowser/2.5 Safari/537.36`, result.Name) + } + if result.Os != "Windows 7" { + t.Errorf("Expected result.Os for '%s' to be 'Windows 7', but got '%s'", `Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 YaBrowser/18.1.1.839 Yowser/2.5 Safari/537.36`, result.Os) + } + if result.OsVersion != "NT 6.1" { + t.Errorf("Expected result.OsVersion for '%s' to be 'NT 6.1', but got '%s'", `Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 YaBrowser/18.1.1.839 Yowser/2.5 Safari/537.36`, result.OsVersion) + } + if result.Version != "18.1.1.839" { + t.Errorf("Expected result.Version for '%s' to be '18.1.1.839', but got '%s'", `Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 YaBrowser/18.1.1.839 Yowser/2.5 Safari/537.36`, result.Version) + } + } }