@@ -52,6 +52,32 @@ public function testNormalizeUsingFormatPassedInConstructor()
52
52
$ this ->assertEquals ('16 ' , (new DateTimeNormalizer ('y ' ))->normalize (new \DateTime ('2016/01/01 ' , new \DateTimeZone ('UTC ' ))));
53
53
}
54
54
55
+ public function testNormalizeUsingTimeZonePassedInConstructor ()
56
+ {
57
+ $ normalizer = new DateTimeNormalizer (\DateTime::RFC3339 , new \DateTimeZone ('Japan ' ));
58
+
59
+ $ this ->assertSame ('2016-12-01T00:00:00+09:00 ' , $ normalizer ->normalize (new \DateTime ('2016/12/01 ' , new \DateTimeZone ('Japan ' ))));
60
+ $ this ->assertSame ('2016-12-01T09:00:00+09:00 ' , $ normalizer ->normalize (new \DateTime ('2016/12/01 ' , new \DateTimeZone ('UTC ' ))));
61
+ }
62
+
63
+ /**
64
+ * @dataProvider normalizeUsingTimeZonePassedInContextProvider
65
+ */
66
+ public function testNormalizeUsingTimeZonePassedInContext ($ expected , $ input , $ timezone )
67
+ {
68
+ $ this ->assertSame ($ expected , $ this ->normalizer ->normalize ($ input , null , array (
69
+ DateTimeNormalizer::TIMEZONE_KEY => $ timezone ,
70
+ )));
71
+ }
72
+
73
+ public function normalizeUsingTimeZonePassedInContextProvider ()
74
+ {
75
+ yield array ('2016-12-01T00:00:00+00:00 ' , new \DateTime ('2016/12/01 ' , new \DateTimeZone ('UTC ' )), null );
76
+ yield array ('2016-12-01T00:00:00+09:00 ' , new \DateTime ('2016/12/01 ' , new \DateTimeZone ('Japan ' )), new \DateTimeZone ('Japan ' ));
77
+ yield array ('2016-12-01T09:00:00+09:00 ' , new \DateTime ('2016/12/01 ' , new \DateTimeZone ('UTC ' )), new \DateTimeZone ('Japan ' ));
78
+ yield array ('2016-12-01T09:00:00+09:00 ' , new \DateTimeImmutable ('2016/12/01 ' , new \DateTimeZone ('UTC ' )), new \DateTimeZone ('Japan ' ));
79
+ }
80
+
55
81
/**
56
82
* @expectedException \Symfony\Component\Serializer\Exception\InvalidArgumentException
57
83
* @expectedExceptionMessage The object must implement the "\DateTimeInterface".
@@ -76,13 +102,63 @@ public function testDenormalize()
76
102
$ this ->assertEquals (new \DateTime ('2016/01/01 ' , new \DateTimeZone ('UTC ' )), $ this ->normalizer ->denormalize ('2016-01-01T00:00:00+00:00 ' , \DateTime::class));
77
103
}
78
104
105
+ public function testDenormalizeUsingTimezonePassedInConstructor ()
106
+ {
107
+ $ timezone = new \DateTimeZone ('Japan ' );
108
+ $ expected = new \DateTime ('2016/12/01 17:35:00 ' , $ timezone );
109
+ $ normalizer = new DateTimeNormalizer (null , $ timezone );
110
+
111
+ $ this ->assertEquals ($ expected , $ normalizer ->denormalize ('2016.12.01 17:35:00 ' , \DateTime::class, null , array (
112
+ DateTimeNormalizer::FORMAT_KEY => 'Y.m.d H:i:s ' ,
113
+ )));
114
+ }
115
+
79
116
public function testDenormalizeUsingFormatPassedInContext ()
80
117
{
81
118
$ this ->assertEquals (new \DateTimeImmutable ('2016/01/01 ' ), $ this ->normalizer ->denormalize ('2016.01.01 ' , \DateTimeInterface::class, null , array (DateTimeNormalizer::FORMAT_KEY => 'Y.m.d| ' )));
82
119
$ this ->assertEquals (new \DateTimeImmutable ('2016/01/01 ' ), $ this ->normalizer ->denormalize ('2016.01.01 ' , \DateTimeImmutable::class, null , array (DateTimeNormalizer::FORMAT_KEY => 'Y.m.d| ' )));
83
120
$ this ->assertEquals (new \DateTime ('2016/01/01 ' ), $ this ->normalizer ->denormalize ('2016.01.01 ' , \DateTime::class, null , array (DateTimeNormalizer::FORMAT_KEY => 'Y.m.d| ' )));
84
121
}
85
122
123
+ /**
124
+ * @dataProvider denormalizeUsingTimezonePassedInContextProvider
125
+ */
126
+ public function testDenormalizeUsingTimezonePassedInContext ($ input , $ expected , $ timezone , $ format = null )
127
+ {
128
+ $ actual = $ this ->normalizer ->denormalize ($ input , \DateTimeInterface::class, null , array (
129
+ DateTimeNormalizer::TIMEZONE_KEY => $ timezone ,
130
+ DateTimeNormalizer::FORMAT_KEY => $ format ,
131
+ ));
132
+
133
+ $ this ->assertEquals ($ expected , $ actual );
134
+ }
135
+
136
+ public function denormalizeUsingTimezonePassedInContextProvider ()
137
+ {
138
+ yield 'with timezone ' => array (
139
+ '2016/12/01 17:35:00 ' ,
140
+ new \DateTimeImmutable ('2016/12/01 17:35:00 ' , new \DateTimeZone ('Japan ' )),
141
+ new \DateTimeZone ('Japan ' ),
142
+ );
143
+ yield 'with timezone as string ' => array (
144
+ '2016/12/01 17:35:00 ' ,
145
+ new \DateTimeImmutable ('2016/12/01 17:35:00 ' , new \DateTimeZone ('Japan ' )),
146
+ 'Japan ' ,
147
+ );
148
+ yield 'with format without timezone information ' => array (
149
+ '2016.12.01 17:35:00 ' ,
150
+ new \DateTimeImmutable ('2016/12/01 17:35:00 ' , new \DateTimeZone ('Japan ' )),
151
+ new \DateTimeZone ('Japan ' ),
152
+ 'Y.m.d H:i:s ' ,
153
+ );
154
+ yield 'ignored with format with timezone information ' => array (
155
+ '2016-12-01T17:35:00Z ' ,
156
+ new \DateTimeImmutable ('2016/12/01 17:35:00 ' , new \DateTimeZone ('UTC ' )),
157
+ 'Europe/Paris ' ,
158
+ \DateTime::RFC3339 ,
159
+ );
160
+ }
161
+
86
162
/**
87
163
* @expectedException \Symfony\Component\Serializer\Exception\UnexpectedValueException
88
164
*/
0 commit comments