@@ -79,6 +79,109 @@ public function testReverseTransform()
7979$ this ->assertEquals (2 ,$ transformer ->reverseTransform ('200 ' ));
8080 }
8181
82+ public function reverseTransformWithRoundingProvider ()
83+ {
84+ return [
85+ // towards positive infinity (1.6 -> 2, -1.6 -> -1)
86+ [PercentToLocalizedStringTransformer::INTEGER ,0 ,'34.5 ' ,35 , PercentToLocalizedStringTransformer::ROUND_CEILING ],
87+ [PercentToLocalizedStringTransformer::INTEGER ,0 ,'34.4 ' ,35 , PercentToLocalizedStringTransformer::ROUND_CEILING ],
88+ [PercentToLocalizedStringTransformer::INTEGER ,1 ,'3.45 ' ,3.5 , PercentToLocalizedStringTransformer::ROUND_CEILING ],
89+ [PercentToLocalizedStringTransformer::INTEGER ,1 ,'3.44 ' ,3.5 , PercentToLocalizedStringTransformer::ROUND_CEILING ],
90+ [null ,0 ,'34.5 ' ,0.35 , PercentToLocalizedStringTransformer::ROUND_CEILING ],
91+ [null ,0 ,'34.4 ' ,0.35 , PercentToLocalizedStringTransformer::ROUND_CEILING ],
92+ [null ,1 ,'3.45 ' ,0.035 , PercentToLocalizedStringTransformer::ROUND_CEILING ],
93+ [null ,1 ,'3.44 ' ,0.035 , PercentToLocalizedStringTransformer::ROUND_CEILING ],
94+ // towards negative infinity (1.6 -> 1, -1.6 -> -2)
95+ [PercentToLocalizedStringTransformer::INTEGER ,0 ,'34.5 ' ,34 , PercentToLocalizedStringTransformer::ROUND_FLOOR ],
96+ [PercentToLocalizedStringTransformer::INTEGER ,0 ,'34.4 ' ,34 , PercentToLocalizedStringTransformer::ROUND_FLOOR ],
97+ [PercentToLocalizedStringTransformer::INTEGER ,1 ,'3.45 ' ,3.4 , PercentToLocalizedStringTransformer::ROUND_FLOOR ],
98+ [PercentToLocalizedStringTransformer::INTEGER ,1 ,'3.44 ' ,3.4 , PercentToLocalizedStringTransformer::ROUND_FLOOR ],
99+ [null ,0 ,'34.5 ' ,0.34 , PercentToLocalizedStringTransformer::ROUND_FLOOR ],
100+ [null ,0 ,'34.4 ' ,0.34 , PercentToLocalizedStringTransformer::ROUND_FLOOR ],
101+ [null ,1 ,'3.45 ' ,0.034 , PercentToLocalizedStringTransformer::ROUND_FLOOR ],
102+ [null ,1 ,'3.44 ' ,0.034 , PercentToLocalizedStringTransformer::ROUND_FLOOR ],
103+ // away from zero (1.6 -> 2, -1.6 -> 2)
104+ [PercentToLocalizedStringTransformer::INTEGER ,0 ,'34.5 ' ,35 , PercentToLocalizedStringTransformer::ROUND_UP ],
105+ [PercentToLocalizedStringTransformer::INTEGER ,0 ,'34.4 ' ,35 , PercentToLocalizedStringTransformer::ROUND_UP ],
106+ [PercentToLocalizedStringTransformer::INTEGER ,1 ,'3.45 ' ,3.5 , PercentToLocalizedStringTransformer::ROUND_UP ],
107+ [PercentToLocalizedStringTransformer::INTEGER ,1 ,'3.44 ' ,3.5 , PercentToLocalizedStringTransformer::ROUND_UP ],
108+ [null ,0 ,'34.5 ' ,0.35 , PercentToLocalizedStringTransformer::ROUND_UP ],
109+ [null ,0 ,'34.4 ' ,0.35 , PercentToLocalizedStringTransformer::ROUND_UP ],
110+ [null ,1 ,'3.45 ' ,0.035 , PercentToLocalizedStringTransformer::ROUND_UP ],
111+ [null ,1 ,'3.44 ' ,0.035 , PercentToLocalizedStringTransformer::ROUND_UP ],
112+ // towards zero (1.6 -> 1, -1.6 -> -1)
113+ [PercentToLocalizedStringTransformer::INTEGER ,0 ,'34.5 ' ,34 , PercentToLocalizedStringTransformer::ROUND_DOWN ],
114+ [PercentToLocalizedStringTransformer::INTEGER ,0 ,'34.4 ' ,34 , PercentToLocalizedStringTransformer::ROUND_DOWN ],
115+ [PercentToLocalizedStringTransformer::INTEGER ,1 ,'3.45 ' ,3.4 , PercentToLocalizedStringTransformer::ROUND_DOWN ],
116+ [PercentToLocalizedStringTransformer::INTEGER ,1 ,'3.44 ' ,3.4 , PercentToLocalizedStringTransformer::ROUND_DOWN ],
117+ [PercentToLocalizedStringTransformer::INTEGER ,2 ,'37.37 ' ,37.37 , PercentToLocalizedStringTransformer::ROUND_DOWN ],
118+ [PercentToLocalizedStringTransformer::INTEGER ,2 ,'2.01 ' ,2.01 , PercentToLocalizedStringTransformer::ROUND_DOWN ],
119+ [null ,0 ,'34.5 ' ,0.34 , PercentToLocalizedStringTransformer::ROUND_DOWN ],
120+ [null ,0 ,'34.4 ' ,0.34 , PercentToLocalizedStringTransformer::ROUND_DOWN ],
121+ [null ,1 ,'3.45 ' ,0.034 , PercentToLocalizedStringTransformer::ROUND_DOWN ],
122+ [null ,1 ,'3.44 ' ,0.034 , PercentToLocalizedStringTransformer::ROUND_DOWN ],
123+ [null ,2 ,'37.37 ' ,0.3737 , PercentToLocalizedStringTransformer::ROUND_DOWN ],
124+ [null ,2 ,'2.01 ' ,0.0201 , PercentToLocalizedStringTransformer::ROUND_DOWN ],
125+ // round halves (.5) to the next even number
126+ [PercentToLocalizedStringTransformer::INTEGER ,0 ,'34.6 ' ,35 , PercentToLocalizedStringTransformer::ROUND_HALF_EVEN ],
127+ [PercentToLocalizedStringTransformer::INTEGER ,0 ,'34.5 ' ,34 , PercentToLocalizedStringTransformer::ROUND_HALF_EVEN ],
128+ [PercentToLocalizedStringTransformer::INTEGER ,0 ,'34.4 ' ,34 , PercentToLocalizedStringTransformer::ROUND_HALF_EVEN ],
129+ [PercentToLocalizedStringTransformer::INTEGER ,0 ,'33.5 ' ,34 , PercentToLocalizedStringTransformer::ROUND_HALF_EVEN ],
130+ [PercentToLocalizedStringTransformer::INTEGER ,0 ,'32.5 ' ,32 , PercentToLocalizedStringTransformer::ROUND_HALF_EVEN ],
131+ [PercentToLocalizedStringTransformer::INTEGER ,1 ,'3.46 ' ,3.5 , PercentToLocalizedStringTransformer::ROUND_HALF_EVEN ],
132+ [PercentToLocalizedStringTransformer::INTEGER ,1 ,'3.45 ' ,3.4 , PercentToLocalizedStringTransformer::ROUND_HALF_EVEN ],
133+ [PercentToLocalizedStringTransformer::INTEGER ,1 ,'3.44 ' ,3.4 , PercentToLocalizedStringTransformer::ROUND_HALF_EVEN ],
134+ [PercentToLocalizedStringTransformer::INTEGER ,1 ,'3.35 ' ,3.4 , PercentToLocalizedStringTransformer::ROUND_HALF_EVEN ],
135+ [PercentToLocalizedStringTransformer::INTEGER ,1 ,'3.25 ' ,3.2 , PercentToLocalizedStringTransformer::ROUND_HALF_EVEN ],
136+ [null ,0 ,'34.6 ' ,0.35 , PercentToLocalizedStringTransformer::ROUND_HALF_EVEN ],
137+ [null ,0 ,'34.5 ' ,0.34 , PercentToLocalizedStringTransformer::ROUND_HALF_EVEN ],
138+ [null ,0 ,'34.4 ' ,0.34 , PercentToLocalizedStringTransformer::ROUND_HALF_EVEN ],
139+ [null ,0 ,'33.5 ' ,0.34 , PercentToLocalizedStringTransformer::ROUND_HALF_EVEN ],
140+ [null ,0 ,'32.5 ' ,0.32 , PercentToLocalizedStringTransformer::ROUND_HALF_EVEN ],
141+ [null ,1 ,'3.46 ' ,0.035 , PercentToLocalizedStringTransformer::ROUND_HALF_EVEN ],
142+ [null ,1 ,'3.45 ' ,0.034 , PercentToLocalizedStringTransformer::ROUND_HALF_EVEN ],
143+ [null ,1 ,'3.44 ' ,0.034 , PercentToLocalizedStringTransformer::ROUND_HALF_EVEN ],
144+ [null ,1 ,'3.35 ' ,0.034 , PercentToLocalizedStringTransformer::ROUND_HALF_EVEN ],
145+ [null ,1 ,'3.25 ' ,0.032 , PercentToLocalizedStringTransformer::ROUND_HALF_EVEN ],
146+ // round halves (.5) away from zero
147+ [PercentToLocalizedStringTransformer::INTEGER ,0 ,'34.6 ' ,35 , PercentToLocalizedStringTransformer::ROUND_HALF_UP ],
148+ [PercentToLocalizedStringTransformer::INTEGER ,0 ,'34.5 ' ,35 , PercentToLocalizedStringTransformer::ROUND_HALF_UP ],
149+ [PercentToLocalizedStringTransformer::INTEGER ,0 ,'34.4 ' ,34 , PercentToLocalizedStringTransformer::ROUND_HALF_UP ],
150+ [PercentToLocalizedStringTransformer::INTEGER ,1 ,'3.46 ' ,3.5 , PercentToLocalizedStringTransformer::ROUND_HALF_UP ],
151+ [PercentToLocalizedStringTransformer::INTEGER ,1 ,'3.45 ' ,3.5 , PercentToLocalizedStringTransformer::ROUND_HALF_UP ],
152+ [PercentToLocalizedStringTransformer::INTEGER ,1 ,'3.44 ' ,3.4 , PercentToLocalizedStringTransformer::ROUND_HALF_UP ],
153+ [null ,0 ,'34.6 ' ,0.35 , PercentToLocalizedStringTransformer::ROUND_HALF_UP ],
154+ [null ,0 ,'34.5 ' ,0.35 , PercentToLocalizedStringTransformer::ROUND_HALF_UP ],
155+ [null ,0 ,'34.4 ' ,0.34 , PercentToLocalizedStringTransformer::ROUND_HALF_UP ],
156+ [null ,1 ,'3.46 ' ,0.035 , PercentToLocalizedStringTransformer::ROUND_HALF_UP ],
157+ [null ,1 ,'3.45 ' ,0.035 , PercentToLocalizedStringTransformer::ROUND_HALF_UP ],
158+ [null ,1 ,'3.44 ' ,0.034 , PercentToLocalizedStringTransformer::ROUND_HALF_UP ],
159+ // round halves (.5) towards zero
160+ [PercentToLocalizedStringTransformer::INTEGER ,0 ,'34.6 ' ,35 , PercentToLocalizedStringTransformer::ROUND_HALF_DOWN ],
161+ [PercentToLocalizedStringTransformer::INTEGER ,0 ,'34.5 ' ,34 , PercentToLocalizedStringTransformer::ROUND_HALF_DOWN ],
162+ [PercentToLocalizedStringTransformer::INTEGER ,0 ,'34.4 ' ,34 , PercentToLocalizedStringTransformer::ROUND_HALF_DOWN ],
163+ [PercentToLocalizedStringTransformer::INTEGER ,1 ,'3.46 ' ,3.5 , PercentToLocalizedStringTransformer::ROUND_HALF_DOWN ],
164+ [PercentToLocalizedStringTransformer::INTEGER ,1 ,'3.45 ' ,3.4 , PercentToLocalizedStringTransformer::ROUND_HALF_DOWN ],
165+ [PercentToLocalizedStringTransformer::INTEGER ,1 ,'3.44 ' ,3.4 , PercentToLocalizedStringTransformer::ROUND_HALF_DOWN ],
166+ [null ,0 ,'34.6 ' ,0.35 , PercentToLocalizedStringTransformer::ROUND_HALF_DOWN ],
167+ [null ,0 ,'34.5 ' ,0.34 , PercentToLocalizedStringTransformer::ROUND_HALF_DOWN ],
168+ [null ,0 ,'34.4 ' ,0.34 , PercentToLocalizedStringTransformer::ROUND_HALF_DOWN ],
169+ [null ,1 ,'3.46 ' ,0.035 , PercentToLocalizedStringTransformer::ROUND_HALF_DOWN ],
170+ [null ,1 ,'3.45 ' ,0.034 , PercentToLocalizedStringTransformer::ROUND_HALF_DOWN ],
171+ [null ,1 ,'3.44 ' ,0.034 , PercentToLocalizedStringTransformer::ROUND_HALF_DOWN ],
172+ ];
173+ }
174+
175+ /**
176+ * @dataProvider reverseTransformWithRoundingProvider
177+ */
178+ public function testReverseTransformWithRounding ($ type ,$ scale ,$ input ,$ output ,$ roundingMode )
179+ {
180+ $ transformer =new PercentToLocalizedStringTransformer ($ scale ,$ type ,$ roundingMode );
181+
182+ $ this ->assertSame ($ output ,$ transformer ->reverseTransform ($ input ));
183+ }
184+
82185public function testReverseTransformEmpty ()
83186 {
84187$ transformer =new PercentToLocalizedStringTransformer ();