Fix jsontime and extend tests

This commit is contained in:
Julian Kornberger 2016-03-21 10:12:45 +01:00
parent 150d9b3297
commit 603bd57b45
2 changed files with 32 additions and 9 deletions

View File

@ -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()
}

View File

@ -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())
} }