Fix jsontime and extend tests
This commit is contained in:
parent
150d9b3297
commit
603bd57b45
|
@ -1,25 +1,39 @@
|
||||||
package jsontime
|
package jsontime
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
const TimeFormat = "2006-01-02T15:04:05"
|
const TimeFormat = "2006-01-02T15:04:05"
|
||||||
|
|
||||||
type Time time.Time
|
type Time struct {
|
||||||
|
time time.Time
|
||||||
|
}
|
||||||
|
|
||||||
func Now() Time {
|
func Now() Time {
|
||||||
return Time(time.Now())
|
return Time{time.Now()}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t Time) MarshalJSON() ([]byte, error) {
|
func (t Time) MarshalJSON() ([]byte, error) {
|
||||||
stamp := `"` + time.Time(t).Format(TimeFormat) + `"`
|
stamp := `"` + t.time.Format(TimeFormat) + `"`
|
||||||
return []byte(stamp), nil
|
return []byte(stamp), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t Time) UnmarshalJSON(data []byte) (err error) {
|
func (t *Time) UnmarshalJSON(data []byte) (err error) {
|
||||||
if nativeTime, err := time.Parse(TimeFormat, string(data)); err == nil {
|
if len(data) < 2 || data[0] != '"' || data[len(data)-1] != '"' {
|
||||||
t = Time(nativeTime)
|
return errors.New("invalid jsontime")
|
||||||
|
}
|
||||||
|
if nativeTime, err := time.Parse(TimeFormat, string(data[1:len(data)-1])); err == nil {
|
||||||
|
t.time = nativeTime
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (t Time) Unix() int64 {
|
||||||
|
return t.time.Unix()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t Time) IsZero() bool {
|
||||||
|
return t.time.IsZero()
|
||||||
|
}
|
||||||
|
|
|
@ -1,20 +1,28 @@
|
||||||
package jsontime
|
package jsontime
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func TestNow(t *testing.T) {
|
||||||
|
assert := assert.New(t)
|
||||||
|
|
||||||
|
t1 := time.Now()
|
||||||
|
t2 := Now()
|
||||||
|
|
||||||
|
assert.InDelta(t1.Unix(), t2.Unix(), 1)
|
||||||
|
}
|
||||||
|
|
||||||
func TestMarshalTime(t *testing.T) {
|
func TestMarshalTime(t *testing.T) {
|
||||||
assert := assert.New(t)
|
assert := assert.New(t)
|
||||||
|
|
||||||
nativeTime, err := time.Parse(time.RFC3339, "2012-11-01T22:08:41+00:00")
|
nativeTime, err := time.Parse(time.RFC3339, "2012-11-01T22:08:41+00:00")
|
||||||
assert.Nil(err)
|
assert.Nil(err)
|
||||||
|
|
||||||
json, err := Time(nativeTime).MarshalJSON()
|
json, err := Time{nativeTime}.MarshalJSON()
|
||||||
assert.Nil(err)
|
assert.Nil(err)
|
||||||
|
|
||||||
assert.Equal(`"2012-11-01T22:08:41"`, string(json))
|
assert.Equal(`"2012-11-01T22:08:41"`, string(json))
|
||||||
|
@ -24,6 +32,7 @@ func TestUnmarshalTime(t *testing.T) {
|
||||||
assert := assert.New(t)
|
assert := assert.New(t)
|
||||||
jsonTime := Time{}
|
jsonTime := Time{}
|
||||||
|
|
||||||
err := json.Unmarshal([]byte(`"2012-11-01T22:08:41"`), &jsonTime)
|
err := jsonTime.UnmarshalJSON([]byte(`"2012-11-01T22:08:41"`))
|
||||||
assert.Nil(err)
|
assert.Nil(err)
|
||||||
|
assert.False(jsonTime.IsZero())
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue