Skip to content

Commit

Permalink
fix rounding in RelaxedTime, add tests
Browse files Browse the repository at this point in the history
  • Loading branch information
crewjam committed Jun 11, 2017
1 parent c4a98d9 commit e5a0028
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 1 deletion.
5 changes: 4 additions & 1 deletion time.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ func (m RelaxedTime) MarshalText() ([]byte, error) {
}

func (m RelaxedTime) String() string {
return time.Time(m).UTC().Format(timeFormat)
return time.Time(m).Round(time.Millisecond).UTC().Format(timeFormat)
}

func (m *RelaxedTime) UnmarshalText(text []byte) error {
Expand All @@ -25,18 +25,21 @@ func (m *RelaxedTime) UnmarshalText(text []byte) error {
}
t, err1 := time.Parse(time.RFC3339, string(text))
if err1 == nil {
t = t.Round(time.Millisecond)
*m = RelaxedTime(t)
return nil
}

t, err2 := time.Parse(time.RFC3339Nano, string(text))
if err2 == nil {
t = t.Round(time.Millisecond)
*m = RelaxedTime(t)
return nil
}

t, err2 = time.Parse("2006-01-02T15:04:05.999999999", string(text))
if err2 == nil {
t = t.Round(time.Millisecond)
*m = RelaxedTime(t)
return nil
}
Expand Down
57 changes: 57 additions & 0 deletions time_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package saml

import (
"time"

. "gopkg.in/check.v1"
)

var _ = Suite(&TimeTest{})

type TimeTest struct {
}

func (test *TimeTest) TestFormat(c *C) {
t := time.Date(1981, 02, 03, 14, 15, 16, 17, time.UTC)
c.Assert(RelaxedTime(t).String(), Equals, "1981-02-03T14:15:16Z")

buf, err := RelaxedTime(t).MarshalText()
c.Assert(err, IsNil)
c.Assert(string(buf), Equals, "1981-02-03T14:15:16Z")

loc, err := time.LoadLocation("America/New_York")
c.Assert(err, IsNil)
t = time.Date(1981, 02, 03, 9, 15, 16, 17, loc)

c.Assert(RelaxedTime(t).String(), Equals, "1981-02-03T14:15:16Z")
buf, err = RelaxedTime(t).MarshalText()
c.Assert(err, IsNil)
c.Assert(string(buf), Equals, "1981-02-03T14:15:16Z")
}

func (test *TimeTest) TestParse(c *C) {
{
var t RelaxedTime
err := t.UnmarshalText([]byte("1981-02-03T14:15:16Z"))
c.Assert(err, IsNil)
c.Assert(t, DeepEquals, RelaxedTime(time.Date(1981, 02, 03, 14, 15, 16, 0, time.UTC)))
}

{
var t RelaxedTime
err := t.UnmarshalText([]byte("1981-02-03T14:15:16.178901234Z"))
c.Assert(err, IsNil)
c.Assert(t, DeepEquals, RelaxedTime(time.Date(1981, 02, 03, 14, 15, 16, 179000000, time.UTC)))
}
{
var t RelaxedTime
err := t.UnmarshalText([]byte("1981-02-03T14:15:16.1717Z"))
c.Assert(err, IsNil)
c.Assert(t, DeepEquals, RelaxedTime(time.Date(1981, 02, 03, 14, 15, 16, 172000000, time.UTC)))
}
{
var t RelaxedTime
err := t.UnmarshalText([]byte("1981-02-03T14:15:16Z04:00"))
c.Assert(err, ErrorMatches, "parsing time \"1981-02-03T14:15:16Z04:00\": extra text: 04:00")
}
}

0 comments on commit e5a0028

Please sign in to comment.