From efc219f2c2e11d5e8f44d5d43a13f491aabed329 Mon Sep 17 00:00:00 2001 From: acoshift Date: Fri, 18 May 2018 09:42:51 +0700 Subject: [PATCH] add int64 --- configfile.go | 35 ++++++++++++++++++++++++++++++ configfile_test.go | 54 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 89 insertions(+) diff --git a/configfile.go b/configfile.go index 0800a40..e109959 100644 --- a/configfile.go +++ b/configfile.go @@ -57,6 +57,18 @@ func (r *Reader) readInt(name string) (int, error) { return i, nil } +func (r *Reader) readInt64(name string) (int64, error) { + b, err := r.r.Read(name) + if err != nil { + return 0, err + } + i, err := strconv.ParseInt(string(b), 10, 64) + if err != nil { + return 0, err + } + return i, nil +} + func (r *Reader) readBool(name string) (bool, error) { b, err := r.r.Read(name) if err != nil { @@ -144,6 +156,29 @@ func (r *Reader) MustInt(name string) int { return i } +// Int64Default reads int64 from config file with default value +func (r *Reader) Int64Default(name string, def int64) int64 { + i, err := r.readInt64(name) + if err != nil { + return def + } + return i +} + +// Int64 reads int from config file +func (r *Reader) Int64(name string) int64 { + return r.Int64Default(name, 0) +} + +// MustInt64 reads int64 from config file, panic if file not exists or data can not parse to int64 +func (r *Reader) MustInt64(name string) int64 { + i, err := r.readInt64(name) + if err != nil { + panic(err) + } + return i +} + // BoolDefault reads bool from config file with default value, // result is false if lower case data is "", "0", or "false", otherwise true func (r *Reader) BoolDefault(name string, def bool) bool { diff --git a/configfile_test.go b/configfile_test.go index fc619da..333f6c9 100644 --- a/configfile_test.go +++ b/configfile_test.go @@ -29,6 +29,15 @@ func testReader(t *testing.T, c *configfile.Reader) { assert.Panics(t, func() { c.MustInt("notfound") }) }) + t.Run("Int64", func(t *testing.T) { + t.Parallel() + + assert.Equal(t, int64(0), c.Int64("notfound")) + assert.Equal(t, int64(0), c.Int64Default("notfound", 0)) + assert.Equal(t, int64(1), c.Int64Default("notfound", 1)) + assert.Panics(t, func() { c.MustInt64("notfound") }) + }) + t.Run("String", func(t *testing.T) { t.Parallel() @@ -70,6 +79,15 @@ func testReader(t *testing.T, c *configfile.Reader) { assert.Panics(t, func() { c.MustInt("empty") }) }) + t.Run("Int64", func(t *testing.T) { + t.Parallel() + + assert.Equal(t, int64(0), c.Int64("empty")) + assert.Equal(t, int64(0), c.Int64Default("empty", 0)) + assert.Equal(t, int64(1), c.Int64Default("empty", 1)) + assert.Panics(t, func() { c.MustInt64("empty") }) + }) + t.Run("String", func(t *testing.T) { t.Parallel() @@ -111,6 +129,15 @@ func testReader(t *testing.T, c *configfile.Reader) { assert.Panics(t, func() { c.MustInt("data1") }) }) + t.Run("Int64", func(t *testing.T) { + t.Parallel() + + assert.Equal(t, int64(0), c.Int64("data1")) + assert.Equal(t, int64(0), c.Int64Default("data1", 0)) + assert.Equal(t, int64(1), c.Int64Default("data1", 1)) + assert.Panics(t, func() { c.MustInt64("data1") }) + }) + t.Run("String", func(t *testing.T) { t.Parallel() @@ -152,6 +179,15 @@ func testReader(t *testing.T, c *configfile.Reader) { assert.Panics(t, func() { c.MustInt("data2") }) }) + t.Run("Int64", func(t *testing.T) { + t.Parallel() + + assert.Equal(t, int64(0), c.Int64("data2")) + assert.Equal(t, int64(0), c.Int64Default("data2", 0)) + assert.Equal(t, int64(1), c.Int64Default("data2", 1)) + assert.Panics(t, func() { c.MustInt64("data2") }) + }) + t.Run("String", func(t *testing.T) { t.Parallel() @@ -193,6 +229,15 @@ func testReader(t *testing.T, c *configfile.Reader) { assert.NotPanics(t, func() { c.MustInt("data3") }) }) + t.Run("Int64", func(t *testing.T) { + t.Parallel() + + assert.Equal(t, int64(9), c.Int64("data3")) + assert.Equal(t, int64(9), c.Int64Default("data3", 0)) + assert.Equal(t, int64(9), c.Int64Default("data3", 1)) + assert.NotPanics(t, func() { c.MustInt64("data3") }) + }) + t.Run("String", func(t *testing.T) { t.Parallel() @@ -234,6 +279,15 @@ func testReader(t *testing.T, c *configfile.Reader) { assert.NotPanics(t, func() { c.MustInt("data4") }) }) + t.Run("Int64", func(t *testing.T) { + t.Parallel() + + assert.Equal(t, int64(0), c.Int64("data4")) + assert.Equal(t, int64(0), c.Int64Default("data4", 0)) + assert.Equal(t, int64(0), c.Int64Default("data4", 1)) + assert.NotPanics(t, func() { c.MustInt64("data4") }) + }) + t.Run("String", func(t *testing.T) { t.Parallel()