Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions .github/settings.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
repository:
default_branch: master
branches:
- name: master
protection:
required_status_checks: null
enforce_admins: false
required_pull_request_reviews:
dismissal_restrictions: {}
require_code_owner_reviews: true
required_approving_review_count: 1
restrictions: null
15 changes: 15 additions & 0 deletions browscap.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
package browscap_go

import (
"bufio"
"fmt"
"io/ioutil"
"net/http"
Expand Down Expand Up @@ -42,6 +43,20 @@ func InitBrowsCap(path string, force bool) error {
return nil
}

func InitBrowsCapFromReader(reader *bufio.Reader, force bool) error {
if initialized && !force {
return nil
}
var err error

if dict, err = loadFromReader(reader); err != nil {
return fmt.Errorf("browscap: An error occurred while loading from reader, %v ", err)
}

initialized = true
return nil
}

func InitializedVersion() string {
return version
}
Expand Down
32 changes: 31 additions & 1 deletion browscap_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,11 @@
package browscap_go

import (
"bufio"
"io/ioutil"
"strings"
"testing"
"os"
)

const (
Expand All @@ -15,13 +17,34 @@ const (
TEST_IPHONE_AGENT = "Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_2 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8H7 Safari/6533.18.5"
)

func TestInitBrowsCap(t *testing.T) {
func initFromTestIniFile(tb testing.TB) {
if err := InitBrowsCap(TEST_INI_FILE, false); err != nil {
tb.Fatalf("%v", err)
}
}

func TestInitBrowsCap(t *testing.T) {
if err := InitBrowsCap(TEST_INI_FILE, true); err != nil {
t.Fatalf("%v", err)
}
}

func TestInitBrowsCapFromReader(t *testing.T) {
file, err := os.Open(TEST_INI_FILE)
if err != nil {
t.Fatalf("%v", err)
}
defer file.Close()

buf := bufio.NewReader(file)

if err := InitBrowsCapFromReader(buf, true); err != nil {
t.Fatalf("%v", err)
}
}

func TestGetBrowser(t *testing.T) {
initFromTestIniFile(t)
if browser, ok := GetBrowser(TEST_USER_AGENT); !ok {
t.Error("Browser not found")
} else if browser.Browser != "Chrome" {
Expand All @@ -38,6 +61,7 @@ func TestGetBrowser(t *testing.T) {
}

func TestGetBrowserIPhone(t *testing.T) {
initFromTestIniFile(t)
if browser, ok := GetBrowser(TEST_IPHONE_AGENT); !ok {
t.Error("Browser not found")
} else if browser.DeviceName != "iPhone" {
Expand All @@ -52,6 +76,7 @@ func TestGetBrowserIPhone(t *testing.T) {
}

func TestGetBrowserYandex(t *testing.T) {
initFromTestIniFile(t)
if browser, ok := GetBrowser("Yandex Browser 1.1"); !ok {
t.Error("Browser not found")
} else if browser.Browser != "Yandex Browser" {
Expand All @@ -61,6 +86,7 @@ func TestGetBrowserYandex(t *testing.T) {
}
}
func TestGetBrowser360Spider(t *testing.T) {
initFromTestIniFile(t)
if browser, ok := GetBrowser("360Spider"); !ok {
t.Error("Browser not found")
} else if browser.Browser != "360Spider" {
Expand All @@ -71,6 +97,7 @@ func TestGetBrowser360Spider(t *testing.T) {
}

func TestGetBrowserIssues(t *testing.T) {
initFromTestIniFile(t)
// https://github.com/digitalcrab/browscap_go/issues/4
ua := "Mozilla/5.0 (iPad; CPU OS 5_0_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A405 Safari/7534.48.3"
if browser, ok := GetBrowser(ua); !ok {
Expand All @@ -79,6 +106,7 @@ func TestGetBrowserIssues(t *testing.T) {
t.Errorf("Expected tablet %q", browser.DeviceType)
}
}

func TestLastVersion(t *testing.T) {
if testing.Short() {
t.Skip("skipping test in short mode.")
Expand Down Expand Up @@ -127,6 +155,8 @@ func BenchmarkInit(b *testing.B) {
}

func BenchmarkGetBrowser(b *testing.B) {
initFromTestIniFile(b)

data, err := ioutil.ReadFile("test-data/user_agents_sample.txt")
if err != nil {
b.Error(err)
Expand Down
11 changes: 11 additions & 0 deletions catalog-info.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# BEGIN TERRAFORM MANAGED BLOCK
"apiVersion": "backstage.io/v1alpha1"
"kind": "Location"
"metadata":
"annotations":
"github.com/project-slug": "LiveRamp/browscap_go"
"description": "GoLang Library for Browser Capabilities Project"
"name": "browscap_go"
"tags": []
"spec": {}
# END TERRAFORM MANAGED BLOCK
3 changes: 3 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
module github.com/LiveRamp/browscap_go

go 1.13
7 changes: 6 additions & 1 deletion loader.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,14 @@ func loadFromIniFile(path string) (*dictionary, error) {
}
defer file.Close()

buf := bufio.NewReader(file)

return loadFromReader(buf)
}

func loadFromReader(buf *bufio.Reader) (*dictionary, error) {
dict := newDictionary()

buf := bufio.NewReader(file)
sectionName := ""

lineNum := 0
Expand Down