1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3  * This file is part of the LibreOffice project.
4  *
5  * This Source Code Form is subject to the terms of the Mozilla Public
6  * License, v. 2.0. If a copy of the MPL was not distributed with this
7  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8  */
9 
10 #include <rtl/ustring.hxx>
11 
12 #include "helper/qahelper.hxx"
13 #include <document.hxx>
14 #include <datatransformation.hxx>
15 #include <scdll.hxx>
16 #include <tools/time.hxx>
17 
18 class ScDataTransformationTest : public ScBootstrapFixture
19 {
20 public:
21 
22     ScDataTransformationTest();
23 
24     virtual void setUp() override;
25     virtual void tearDown() override;
26 
27     void testColumnRemove();
28     void testColumnSplit();
29     void testColumnMerge();
30     void testTextToLower();
31     void testTextToUpper();
32     void testTextCapitalize();
33     void testTextTrim();
34     void testAggregateSum();
35     void testAggregateAverage();
36     void testAggregateMin();
37     void testAggregateMax();
38     void testNumberRound();
39     void testNumberRoundUp();
40     void testNumberRoundDown();
41     void testNumberAbsolute();
42     void testNumberLogE();
43     void testNumberLog10();
44     void testNumberCube();
45     void testNumberSquare();
46     void testNumberSquareRoot();
47     void testNumberEven();
48     void testNumberOdd();
49     void testNumberSign();
50     void testReplaceNull();
51     void testGetDateString();
52     void testGetYear();
53     void testGetStartOfYear();
54     void testGetEndOfYear();
55     void testGetMonth();
56     void testGetMonthName();
57     void testGetStartOfMonth();
58     void testGetEndOfMonth();
59     void testGetDay();
60     void testGetDayOfWeek();
61     void testGetDayOfYear();
62     void testGetQuarter();
63     void testGetStartOfQuarter();
64     void testGetEndOfQuarter();
65     void testGetTime();
66     void testGetHour();
67     void testGetMinute();
68     void testGetSecond();
69 
70     CPPUNIT_TEST_SUITE(ScDataTransformationTest);
71     CPPUNIT_TEST(testColumnRemove);
72     CPPUNIT_TEST(testColumnSplit);
73     CPPUNIT_TEST(testColumnMerge);
74     CPPUNIT_TEST(testTextToLower);
75     CPPUNIT_TEST(testTextToUpper);
76     CPPUNIT_TEST(testTextCapitalize);
77     CPPUNIT_TEST(testTextTrim);
78     CPPUNIT_TEST(testAggregateSum);
79     CPPUNIT_TEST(testAggregateAverage);
80     CPPUNIT_TEST(testAggregateMin);
81     CPPUNIT_TEST(testAggregateMax);
82     CPPUNIT_TEST(testNumberRound);
83     CPPUNIT_TEST(testNumberRoundUp);
84     CPPUNIT_TEST(testNumberRoundDown);
85     CPPUNIT_TEST(testNumberAbsolute);
86     CPPUNIT_TEST(testNumberLogE);
87     CPPUNIT_TEST(testNumberLog10);
88     CPPUNIT_TEST(testNumberCube);
89     CPPUNIT_TEST(testNumberSquare);
90     CPPUNIT_TEST(testNumberSquareRoot);
91     CPPUNIT_TEST(testNumberEven);
92     CPPUNIT_TEST(testNumberOdd);
93     CPPUNIT_TEST(testNumberSign);
94     CPPUNIT_TEST(testReplaceNull);
95     CPPUNIT_TEST(testGetDateString);
96     CPPUNIT_TEST(testGetYear);
97     CPPUNIT_TEST(testGetStartOfYear);
98     CPPUNIT_TEST(testGetEndOfYear);
99     CPPUNIT_TEST(testGetMonth);
100     CPPUNIT_TEST(testGetMonthName);
101     CPPUNIT_TEST(testGetStartOfMonth);
102     CPPUNIT_TEST(testGetEndOfMonth);
103     CPPUNIT_TEST(testGetDay);
104     CPPUNIT_TEST(testGetDayOfWeek);
105     CPPUNIT_TEST(testGetDayOfYear);
106     CPPUNIT_TEST(testGetQuarter);
107     CPPUNIT_TEST(testGetStartOfQuarter);
108     CPPUNIT_TEST(testGetEndOfQuarter);
109     CPPUNIT_TEST(testGetTime);
110     CPPUNIT_TEST(testGetHour);
111     CPPUNIT_TEST(testGetMinute);
112     CPPUNIT_TEST(testGetSecond);
113     CPPUNIT_TEST_SUITE_END();
114 
115 private:
116     ScDocShellRef m_xDocShell;
117     ScDocument *m_pDoc;
118 };
119 
testColumnRemove()120 void ScDataTransformationTest::testColumnRemove()
121 {
122     for (SCROW nRow = 0; nRow < 10; ++nRow)
123     {
124         for (SCCOL nCol = 0; nCol < 10; ++nCol)
125         {
126             m_pDoc->SetValue(nCol, nRow, 0, nRow*nCol);
127         }
128     }
129 
130     sc::ColumnRemoveTransformation aTransformation({5});
131     aTransformation.Transform(*m_pDoc);
132 
133     for (SCROW nRow = 0; nRow < 10; ++nRow)
134     {
135         for (SCCOL nCol = 0; nCol < 9; ++nCol)
136         {
137             double nVal = m_pDoc->GetValue(nCol, nRow, 0);
138             if (nCol < 5)
139             {
140                 ASSERT_DOUBLES_EQUAL(static_cast<double>(nCol)*nRow, nVal);
141             }
142             else
143             {
144                 ASSERT_DOUBLES_EQUAL(static_cast<double>(nCol+1)*nRow, nVal);
145             }
146         }
147     }
148 }
149 
testColumnSplit()150 void ScDataTransformationTest::testColumnSplit()
151 {
152     m_pDoc->SetString(2, 0, 0, "Test1,Test2");
153     m_pDoc->SetString(2, 1, 0, "Test1,");
154     m_pDoc->SetString(2, 2, 0, ",Test1");
155     m_pDoc->SetString(2, 3, 0, "Test1,Test2,Test3");
156     m_pDoc->SetString(3, 0, 0, "AnotherString");
157 
158     sc::SplitColumnTransformation aTransform(2, ',');
159     aTransform.Transform(*m_pDoc);
160 
161     CPPUNIT_ASSERT_EQUAL(OUString("AnotherString"), m_pDoc->GetString(4, 0, 0));
162 
163     CPPUNIT_ASSERT_EQUAL(OUString("Test1"), m_pDoc->GetString(2, 0, 0));
164     CPPUNIT_ASSERT_EQUAL(OUString("Test1"), m_pDoc->GetString(2, 1, 0));
165     CPPUNIT_ASSERT_EQUAL(OUString(""), m_pDoc->GetString(2, 2, 0));
166     CPPUNIT_ASSERT_EQUAL(OUString("Test1"), m_pDoc->GetString(2, 3, 0));
167 
168     CPPUNIT_ASSERT_EQUAL(OUString("Test2"), m_pDoc->GetString(3, 0, 0));
169     CPPUNIT_ASSERT_EQUAL(OUString(""), m_pDoc->GetString(3, 1, 0));
170     CPPUNIT_ASSERT_EQUAL(OUString("Test1"), m_pDoc->GetString(3, 2, 0));
171     CPPUNIT_ASSERT_EQUAL(OUString("Test2,Test3"), m_pDoc->GetString(3, 3, 0));
172 }
173 
testColumnMerge()174 void ScDataTransformationTest::testColumnMerge()
175 {
176     m_pDoc->SetString(2, 0, 0, "Berlin");
177     m_pDoc->SetString(2, 1, 0, "Brussels");
178     m_pDoc->SetString(2, 2, 0, "Paris");
179     m_pDoc->SetString(2, 3, 0, "Peking");
180 
181     m_pDoc->SetString(4, 0, 0, "Germany");
182     m_pDoc->SetString(4, 1, 0, "Belgium");
183     m_pDoc->SetString(4, 2, 0, "France");
184     m_pDoc->SetString(4, 3, 0, "China");
185 
186     sc::MergeColumnTransformation aTransform({2, 4}, ", ");
187     aTransform.Transform(*m_pDoc);
188 
189     CPPUNIT_ASSERT_EQUAL(OUString("Berlin, Germany"), m_pDoc->GetString(2, 0, 0));
190     CPPUNIT_ASSERT_EQUAL(OUString("Brussels, Belgium"), m_pDoc->GetString(2, 1, 0));
191     CPPUNIT_ASSERT_EQUAL(OUString("Paris, France"), m_pDoc->GetString(2, 2, 0));
192     CPPUNIT_ASSERT_EQUAL(OUString("Peking, China"), m_pDoc->GetString(2, 3, 0));
193 
194     for (SCROW nRow = 0; nRow <= 3; ++nRow)
195     {
196         CPPUNIT_ASSERT(m_pDoc->GetString(4, nRow, 0).isEmpty());
197     }
198 }
199 
testTextToLower()200 void ScDataTransformationTest::testTextToLower()
201 {
202     m_pDoc->SetString(2, 0, 0, "Berlin");
203     m_pDoc->SetString(2, 1, 0, "Brussels");
204     m_pDoc->SetString(2, 2, 0, "Paris");
205     m_pDoc->SetString(2, 3, 0, "Peking");
206 
207     sc::TextTransformation aTransform({2}, sc::TEXT_TRANSFORM_TYPE::TO_LOWER);
208     aTransform.Transform(*m_pDoc);
209 
210     CPPUNIT_ASSERT_EQUAL(OUString("berlin"), m_pDoc->GetString(2, 0, 0));
211     CPPUNIT_ASSERT_EQUAL(OUString("brussels"), m_pDoc->GetString(2, 1, 0));
212     CPPUNIT_ASSERT_EQUAL(OUString("paris"), m_pDoc->GetString(2, 2, 0));
213     CPPUNIT_ASSERT_EQUAL(OUString("peking"), m_pDoc->GetString(2, 3, 0));
214 }
215 
testTextToUpper()216 void ScDataTransformationTest::testTextToUpper()
217 {
218     m_pDoc->SetString(2, 0, 0, "Berlin");
219     m_pDoc->SetString(2, 1, 0, "Brussels");
220     m_pDoc->SetString(2, 2, 0, "Paris");
221     m_pDoc->SetString(2, 3, 0, "Peking");
222 
223     sc::TextTransformation aTransform({2}, sc::TEXT_TRANSFORM_TYPE::TO_UPPER);
224     aTransform.Transform(*m_pDoc);
225 
226     CPPUNIT_ASSERT_EQUAL(OUString("BERLIN"), m_pDoc->GetString(2, 0, 0));
227     CPPUNIT_ASSERT_EQUAL(OUString("BRUSSELS"), m_pDoc->GetString(2, 1, 0));
228     CPPUNIT_ASSERT_EQUAL(OUString("PARIS"), m_pDoc->GetString(2, 2, 0));
229     CPPUNIT_ASSERT_EQUAL(OUString("PEKING"), m_pDoc->GetString(2, 3, 0));
230 }
231 
testTextCapitalize()232 void ScDataTransformationTest::testTextCapitalize()
233 {
234     m_pDoc->SetString(2, 0, 0, "hello woRlD");
235     m_pDoc->SetString(2, 1, 0, "qUe vA");
236     m_pDoc->SetString(2, 2, 0, "si tu la ves");
237     m_pDoc->SetString(2, 3, 0, "cUaNdO mE EnAmOro");
238 
239     sc::TextTransformation aTransform({2}, sc::TEXT_TRANSFORM_TYPE::CAPITALIZE);
240     aTransform.Transform(*m_pDoc);
241 
242     CPPUNIT_ASSERT_EQUAL(OUString("Hello World"), m_pDoc->GetString(2, 0, 0));
243     CPPUNIT_ASSERT_EQUAL(OUString("Que Va"), m_pDoc->GetString(2, 1, 0));
244     CPPUNIT_ASSERT_EQUAL(OUString("Si Tu La Ves"), m_pDoc->GetString(2, 2, 0));
245     CPPUNIT_ASSERT_EQUAL(OUString("Cuando Me Enamoro"), m_pDoc->GetString(2, 3, 0));
246 }
247 
testTextTrim()248 void ScDataTransformationTest::testTextTrim()
249 {
250     m_pDoc->SetString(2, 0, 0, " Berlin");
251     m_pDoc->SetString(2, 1, 0, "Brussels ");
252     m_pDoc->SetString(2, 2, 0, " Paris ");
253 
254     sc::TextTransformation aTransform({2}, sc::TEXT_TRANSFORM_TYPE::TRIM);
255     aTransform.Transform(*m_pDoc);
256 
257     CPPUNIT_ASSERT_EQUAL(OUString("Berlin"), m_pDoc->GetString(2, 0, 0));
258     CPPUNIT_ASSERT_EQUAL(OUString("Brussels"), m_pDoc->GetString(2, 1, 0));
259     CPPUNIT_ASSERT_EQUAL(OUString("Paris"), m_pDoc->GetString(2, 2, 0));
260 }
261 
testAggregateSum()262 void ScDataTransformationTest::testAggregateSum()
263 {
264     m_pDoc->SetValue(2, 0, 0, 2034);
265     m_pDoc->SetValue(2, 1, 0, 2342);
266     m_pDoc->SetValue(2, 2, 0, 57452);
267 
268     m_pDoc->SetValue(4, 0, 0, 4829.98);
269     m_pDoc->SetValue(4, 1, 0, 53781.3);
270     m_pDoc->SetValue(4, 2, 0, 9876.4);
271     m_pDoc->SetValue(4, 3, 0, 0);
272 
273     sc::AggregateFunction aTransform({2, 4}, sc::AGGREGATE_FUNCTION::SUM);
274     aTransform.Transform(*m_pDoc);
275 
276     CPPUNIT_ASSERT_DOUBLES_EQUAL(61828, m_pDoc->GetValue(2, 4, 0), 1e-10);
277     CPPUNIT_ASSERT_DOUBLES_EQUAL(68487.68, m_pDoc->GetValue(4, 4, 0), 1e-10);
278 }
279 
testAggregateAverage()280 void ScDataTransformationTest::testAggregateAverage()
281 {
282     m_pDoc->SetValue(2, 0, 0, 2034);
283     m_pDoc->SetValue(2, 1, 0, 2342);
284     m_pDoc->SetValue(2, 2, 0, 57453);
285 
286     m_pDoc->SetValue(3, 0, 0, 4);
287     m_pDoc->SetValue(3, 1, 0, 4);
288     m_pDoc->SetValue(3, 2, 0, 4);
289 
290     sc::AggregateFunction aTransform({2, 3}, sc::AGGREGATE_FUNCTION::AVERAGE);
291     aTransform.Transform(*m_pDoc);
292 
293     CPPUNIT_ASSERT_DOUBLES_EQUAL(20609.6666666667, m_pDoc->GetValue(2, 3, 0), 1e-10);
294     CPPUNIT_ASSERT_DOUBLES_EQUAL(4, m_pDoc->GetValue(3, 3, 0), 1e-10);
295 }
296 
testAggregateMin()297 void ScDataTransformationTest::testAggregateMin()
298 {
299     m_pDoc->SetValue(2, 0, 0, 2034);
300     m_pDoc->SetValue(2, 1, 0, 2342);
301     m_pDoc->SetValue(2, 2, 0, 57453);
302 
303     m_pDoc->SetValue(3, 0, 0, 2034);
304     m_pDoc->SetValue(3, 1, 0, -2342);
305     m_pDoc->SetValue(3, 2, 0, 57453);
306 
307     sc::AggregateFunction aTransform({2, 3}, sc::AGGREGATE_FUNCTION::MIN);
308     aTransform.Transform(*m_pDoc);
309 
310     CPPUNIT_ASSERT_DOUBLES_EQUAL(2034, m_pDoc->GetValue(2, 3, 0), 1e-10);
311     CPPUNIT_ASSERT_DOUBLES_EQUAL(-2342, m_pDoc->GetValue(3, 3, 0), 1e-10);
312 }
313 
testAggregateMax()314 void ScDataTransformationTest::testAggregateMax()
315 {
316     m_pDoc->SetValue(2, 0, 0, 2034);
317     m_pDoc->SetValue(2, 1, 0, 2342);
318     m_pDoc->SetValue(2, 2, 0, 57453);
319     m_pDoc->SetValue(2, 3, 0, -453);
320 
321     m_pDoc->SetValue(3, 0, 0, 2034);
322     m_pDoc->SetValue(3, 1, 0, -2342);
323     m_pDoc->SetValue(3, 2, 0, -57453);
324     m_pDoc->SetValue(3, 3, 0, -453);
325 
326     sc::AggregateFunction aTransform({2, 3}, sc::AGGREGATE_FUNCTION::MAX);
327     aTransform.Transform(*m_pDoc);
328 
329     CPPUNIT_ASSERT_DOUBLES_EQUAL(57453, m_pDoc->GetValue(2, 4, 0), 1e-10);
330     CPPUNIT_ASSERT_DOUBLES_EQUAL(2034, m_pDoc->GetValue(3, 4, 0), 1e-10);
331 }
332 
testNumberRound()333 void ScDataTransformationTest::testNumberRound()
334 {
335     m_pDoc->SetValue(2, 0, 0, 2034.342453456);
336     m_pDoc->SetValue(2, 1, 0, 2342.252678567542);
337     m_pDoc->SetValue(2, 2, 0, 57453.651345687654345676);
338     m_pDoc->SetValue(2, 3, 0, -453.22234567543);
339 
340     sc::NumberTransformation aTransform({2}, sc::NUMBER_TRANSFORM_TYPE::ROUND, 4);
341     aTransform.Transform(*m_pDoc);
342 
343     CPPUNIT_ASSERT_EQUAL(2034.3425, m_pDoc->GetValue(2, 0, 0));
344     CPPUNIT_ASSERT_EQUAL(2342.2527, m_pDoc->GetValue(2, 1, 0));
345     CPPUNIT_ASSERT_EQUAL(57453.6513, m_pDoc->GetValue(2, 2, 0));
346     CPPUNIT_ASSERT_EQUAL(-453.2223, m_pDoc->GetValue(2, 3, 0));
347 }
348 
testNumberRoundUp()349 void ScDataTransformationTest::testNumberRoundUp()
350 {
351     m_pDoc->SetValue(2, 0, 0, 2034.34);
352     m_pDoc->SetValue(2, 1, 0, 2342.22);
353     m_pDoc->SetValue(2, 2, 0, 57453.65);
354     m_pDoc->SetValue(2, 3, 0, -453.22);
355 
356     sc::NumberTransformation aTransform({2}, sc::NUMBER_TRANSFORM_TYPE::ROUND_UP);
357     aTransform.Transform(*m_pDoc);
358 
359     CPPUNIT_ASSERT_EQUAL(2035.0, m_pDoc->GetValue(2, 0, 0));
360     CPPUNIT_ASSERT_EQUAL(2343.0, m_pDoc->GetValue(2, 1, 0));
361     CPPUNIT_ASSERT_EQUAL(57454.0, m_pDoc->GetValue(2, 2, 0));
362     CPPUNIT_ASSERT_EQUAL(-453.0, m_pDoc->GetValue(2, 3, 0));
363 }
364 
testNumberRoundDown()365 void ScDataTransformationTest::testNumberRoundDown()
366 {
367     m_pDoc->SetValue(2, 0, 0, 2034.34);
368     m_pDoc->SetValue(2, 1, 0, 2342.22);
369     m_pDoc->SetValue(2, 2, 0, 57453.65);
370     m_pDoc->SetValue(2, 3, 0, -453.22);
371 
372     sc::NumberTransformation aTransform({2}, sc::NUMBER_TRANSFORM_TYPE::ROUND_DOWN);
373     aTransform.Transform(*m_pDoc);
374 
375     CPPUNIT_ASSERT_EQUAL(2034.0, m_pDoc->GetValue(2, 0, 0));
376     CPPUNIT_ASSERT_EQUAL(2342.0, m_pDoc->GetValue(2, 1, 0));
377     CPPUNIT_ASSERT_EQUAL(57453.0, m_pDoc->GetValue(2, 2, 0));
378     CPPUNIT_ASSERT_EQUAL(-454.0, m_pDoc->GetValue(2, 3, 0));
379 }
380 
testNumberAbsolute()381 void ScDataTransformationTest::testNumberAbsolute()
382 {
383     m_pDoc->SetValue(2, 0, 0, 2034.34);
384     m_pDoc->SetValue(2, 1, 0, -2342.22);
385     m_pDoc->SetValue(2, 2, 0, 57453.65);
386     m_pDoc->SetValue(2, 3, 0, -453.22);
387 
388     sc::NumberTransformation aTransform({2}, sc::NUMBER_TRANSFORM_TYPE::ABSOLUTE);
389     aTransform.Transform(*m_pDoc);
390 
391     CPPUNIT_ASSERT_EQUAL(2034.34, m_pDoc->GetValue(2, 0, 0));
392     CPPUNIT_ASSERT_EQUAL(2342.22, m_pDoc->GetValue(2, 1, 0));
393     CPPUNIT_ASSERT_EQUAL(57453.65, m_pDoc->GetValue(2, 2, 0));
394     CPPUNIT_ASSERT_EQUAL(453.22, m_pDoc->GetValue(2, 3, 0));
395 }
396 
testNumberLogE()397 void ScDataTransformationTest::testNumberLogE()
398 {
399     m_pDoc->SetValue(2, 0, 0, 1);
400     m_pDoc->SetValue(2, 1, 0, 5);
401     m_pDoc->SetValue(2, 2, 0, -9);
402     m_pDoc->SetValue(2, 3, 0, 500);
403 
404     sc::NumberTransformation aTransform({2}, sc::NUMBER_TRANSFORM_TYPE::LOG_E);
405     aTransform.Transform(*m_pDoc);
406 
407     CPPUNIT_ASSERT_DOUBLES_EQUAL(0, m_pDoc->GetValue(2, 0, 0), 1e-10);
408     CPPUNIT_ASSERT_DOUBLES_EQUAL(1.60943791243, m_pDoc->GetValue(2, 1, 0), 1e-10);
409     CPPUNIT_ASSERT_EQUAL(OUString(""), m_pDoc->GetString(2, 2, 0));
410     CPPUNIT_ASSERT_DOUBLES_EQUAL(6.21460809842, m_pDoc->GetValue(2, 3, 0), 1e-10);
411 }
412 
testNumberLog10()413 void ScDataTransformationTest::testNumberLog10()
414 {
415     m_pDoc->SetValue(2, 0, 0, 1);
416     m_pDoc->SetValue(2, 1, 0, 10);
417     m_pDoc->SetValue(2, 2, 0, -9);
418     m_pDoc->SetValue(2, 3, 0, 500);
419 
420     sc::NumberTransformation aTransform({2}, sc::NUMBER_TRANSFORM_TYPE::LOG_10);
421     aTransform.Transform(*m_pDoc);
422 
423     CPPUNIT_ASSERT_DOUBLES_EQUAL(0, m_pDoc->GetValue(2, 0, 0), 1e-10);
424     CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, m_pDoc->GetValue(2, 1, 0), 1e-10);
425     CPPUNIT_ASSERT_EQUAL(OUString(), m_pDoc->GetString(2, 2, 0));
426     CPPUNIT_ASSERT_DOUBLES_EQUAL(2.69897000434, m_pDoc->GetValue(2, 3, 0), 1e-10);
427 }
428 
testNumberCube()429 void ScDataTransformationTest::testNumberCube()
430 {
431     m_pDoc->SetValue(2, 0, 0, 2);
432     m_pDoc->SetValue(2, 1, 0, -2);
433     m_pDoc->SetValue(2, 2, 0, 8);
434     m_pDoc->SetValue(2, 3, 0, -8);
435 
436     sc::NumberTransformation aTransform({2}, sc::NUMBER_TRANSFORM_TYPE::CUBE);
437     aTransform.Transform(*m_pDoc);
438 
439     CPPUNIT_ASSERT_EQUAL(8.0, m_pDoc->GetValue(2, 0, 0));
440     CPPUNIT_ASSERT_EQUAL(-8.0, m_pDoc->GetValue(2, 1, 0));
441     CPPUNIT_ASSERT_EQUAL(512.0, m_pDoc->GetValue(2, 2, 0));
442     CPPUNIT_ASSERT_EQUAL(-512.0, m_pDoc->GetValue(2, 3, 0));
443 }
444 
testNumberSquare()445 void ScDataTransformationTest::testNumberSquare()
446 {
447     m_pDoc->SetValue(2, 0, 0, 2);
448     m_pDoc->SetValue(2, 1, 0, -2);
449     m_pDoc->SetValue(2, 2, 0, 8);
450     m_pDoc->SetValue(2, 3, 0, -8);
451 
452     sc::NumberTransformation aTransform({2}, sc::NUMBER_TRANSFORM_TYPE::SQUARE);
453     aTransform.Transform(*m_pDoc);
454 
455     CPPUNIT_ASSERT_EQUAL(4.0, m_pDoc->GetValue(2, 0, 0));
456     CPPUNIT_ASSERT_EQUAL(4.0, m_pDoc->GetValue(2, 1, 0));
457     CPPUNIT_ASSERT_EQUAL(64.0, m_pDoc->GetValue(2, 2, 0));
458     CPPUNIT_ASSERT_EQUAL(64.0, m_pDoc->GetValue(2, 3, 0));
459 }
460 
testNumberSquareRoot()461 void ScDataTransformationTest::testNumberSquareRoot()
462 {
463     m_pDoc->SetValue(2, 0, 0, 8);
464     m_pDoc->SetValue(2, 1, 0, 4);
465     m_pDoc->SetValue(2, 2, 0, 9);
466 
467     sc::NumberTransformation aTransform({2}, sc::NUMBER_TRANSFORM_TYPE::SQUARE_ROOT);
468     aTransform.Transform(*m_pDoc);
469 
470     CPPUNIT_ASSERT_DOUBLES_EQUAL(2.82842712475, m_pDoc->GetValue(2, 0, 0), 1e-10);
471     CPPUNIT_ASSERT_DOUBLES_EQUAL(2.0, m_pDoc->GetValue(2, 1, 0), 1e-10);
472     CPPUNIT_ASSERT_DOUBLES_EQUAL(3.0, m_pDoc->GetValue(2, 2, 0), 1e-10);
473 }
474 
testNumberEven()475 void ScDataTransformationTest::testNumberEven()
476 {
477     m_pDoc->SetValue(2, 0, 0, 2034);
478     m_pDoc->SetValue(2, 1, 0, 2343);
479     m_pDoc->SetValue(2, 2, 0, 57453.65);
480     m_pDoc->SetValue(2, 3, 0, -453);
481 
482     sc::NumberTransformation aTransform({2}, sc::NUMBER_TRANSFORM_TYPE::IS_EVEN);
483     aTransform.Transform(*m_pDoc);
484 
485     CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc->GetValue(2, 0, 0));
486     CPPUNIT_ASSERT_EQUAL(0.0, m_pDoc->GetValue(2, 1, 0));
487     CPPUNIT_ASSERT_EQUAL(0.0, m_pDoc->GetValue(2, 2, 0));
488     CPPUNIT_ASSERT_EQUAL(0.0, m_pDoc->GetValue(2, 3, 0));
489 }
490 
testNumberOdd()491 void ScDataTransformationTest::testNumberOdd()
492 {
493     m_pDoc->SetValue(2, 0, 0, 2034);
494     m_pDoc->SetValue(2, 1, 0, 2343);
495     m_pDoc->SetValue(2, 2, 0, 57453.65);
496     m_pDoc->SetValue(2, 3, 0, -453);
497 
498     sc::NumberTransformation aTransform({2}, sc::NUMBER_TRANSFORM_TYPE::IS_ODD);
499     aTransform.Transform(*m_pDoc);
500 
501     CPPUNIT_ASSERT_EQUAL(0.0, m_pDoc->GetValue(2, 0, 0));
502     CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc->GetValue(2, 1, 0));
503     CPPUNIT_ASSERT_EQUAL(0.0, m_pDoc->GetValue(2, 2, 0));
504     CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc->GetValue(2, 3, 0));
505 }
506 
testNumberSign()507 void ScDataTransformationTest::testNumberSign()
508 {
509     m_pDoc->SetValue(2, 0, 0, 2034.34);
510     m_pDoc->SetValue(2, 1, 0, -2342.22);
511     m_pDoc->SetValue(2, 2, 0, 0);
512     m_pDoc->SetValue(2, 3, 0, -453.22);
513 
514     sc::NumberTransformation aTransform({2}, sc::NUMBER_TRANSFORM_TYPE::SIGN);
515     aTransform.Transform(*m_pDoc);
516 
517     CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc->GetValue(2, 0, 0));
518     CPPUNIT_ASSERT_EQUAL(-1.0, m_pDoc->GetValue(2, 1, 0));
519     CPPUNIT_ASSERT_EQUAL(0.0, m_pDoc->GetValue(2, 2, 0));
520     CPPUNIT_ASSERT_EQUAL(-1.0, m_pDoc->GetValue(2, 3, 0));
521 }
522 
testReplaceNull()523 void ScDataTransformationTest::testReplaceNull()
524 {
525     m_pDoc->SetString(2, 0, 0, "Berlin");
526     m_pDoc->SetString(2, 1, 0, "");
527     m_pDoc->SetString(2, 2, 0, "");
528     m_pDoc->SetString(2, 3, 0, "Peking");
529 
530     sc::ReplaceNullTransformation aTransform({2}, "Empty");
531     aTransform.Transform(*m_pDoc);
532 
533     CPPUNIT_ASSERT_EQUAL(OUString("Berlin"), m_pDoc->GetString(2, 0, 0));
534     CPPUNIT_ASSERT_EQUAL(OUString("Empty"), m_pDoc->GetString(2, 1, 0));
535     CPPUNIT_ASSERT_EQUAL(OUString("Empty"), m_pDoc->GetString(2, 2, 0));
536     CPPUNIT_ASSERT_EQUAL(OUString("Peking"), m_pDoc->GetString(2, 3, 0));
537 
538 }
539 
testGetDateString()540 void ScDataTransformationTest::testGetDateString()
541 {
542     SvNumberFormatter* pFormatter = m_pDoc->GetFormatTable();
543     css::util::Date aDate1(25,1,2011);
544     css::util::Date aDate2(12,10,1994);
545     css::util::Date aDate3(23,9,1996);
546     css::util::Date aDate4(15,8,1947);
547 
548     double nDate1 = static_cast<double>(aDate1 - pFormatter->GetNullDate());
549     double nDate2 = static_cast<double>(aDate2 - pFormatter->GetNullDate());
550     double nDate3 = static_cast<double>(aDate3 - pFormatter->GetNullDate());
551     double nDate4 = static_cast<double>(aDate4 - pFormatter->GetNullDate());
552 
553     m_pDoc->SetValue(2, 0, 0, nDate1);
554     m_pDoc->SetValue(2, 1, 0, nDate2);
555     m_pDoc->SetValue(2, 2, 0, nDate3);
556     m_pDoc->SetValue(2, 3, 0, nDate4);
557 
558     sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::DATE_STRING   );
559     aTransform.Transform(*m_pDoc);
560 
561     CPPUNIT_ASSERT_EQUAL(OUString("01/25/11"), m_pDoc->GetString(2, 0, 0));
562     CPPUNIT_ASSERT_EQUAL(OUString("10/12/94"), m_pDoc->GetString(2, 1, 0));
563     CPPUNIT_ASSERT_EQUAL(OUString("09/23/96"), m_pDoc->GetString(2, 2, 0));
564     CPPUNIT_ASSERT_EQUAL(OUString("08/15/47"), m_pDoc->GetString(2, 3, 0));
565 }
566 
testGetYear()567 void ScDataTransformationTest::testGetYear()
568 {
569     SvNumberFormatter* pFormatter = m_pDoc->GetFormatTable();
570     css::util::Date aDate1(25,1,2011);
571     css::util::Date aDate2(12,10,1994);
572     css::util::Date aDate3(23,9,1996);
573     css::util::Date aDate4(15,8,1947);
574 
575     double nDate1 = static_cast<double>(aDate1 - pFormatter->GetNullDate());
576     double nDate2 = static_cast<double>(aDate2 - pFormatter->GetNullDate());
577     double nDate3 = static_cast<double>(aDate3 - pFormatter->GetNullDate());
578     double nDate4 = static_cast<double>(aDate4 - pFormatter->GetNullDate());
579 
580     m_pDoc->SetValue(2, 0, 0, nDate1);
581     m_pDoc->SetValue(2, 1, 0, nDate2);
582     m_pDoc->SetValue(2, 2, 0, nDate3);
583     m_pDoc->SetValue(2, 3, 0, nDate4);
584 
585     sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::YEAR   );
586     aTransform.Transform(*m_pDoc);
587 
588     CPPUNIT_ASSERT_DOUBLES_EQUAL(2011, m_pDoc->GetValue(2, 0, 0), 0);
589     CPPUNIT_ASSERT_DOUBLES_EQUAL(1994, m_pDoc->GetValue(2, 1, 0), 0);
590     CPPUNIT_ASSERT_DOUBLES_EQUAL(1996, m_pDoc->GetValue(2, 2, 0), 0);
591     CPPUNIT_ASSERT_DOUBLES_EQUAL(1947, m_pDoc->GetValue(2, 3, 0), 0);
592 }
593 
testGetStartOfYear()594 void ScDataTransformationTest::testGetStartOfYear()
595 {
596     SvNumberFormatter* pFormatter = m_pDoc->GetFormatTable();
597     css::util::Date aDate1(25,1,2011);
598     css::util::Date aDate2(12,10,1994);
599     css::util::Date aDate3(23,9,1996);
600     css::util::Date aDate4(15,8,1947);
601 
602     double nDate1 = static_cast<double>(aDate1 - pFormatter->GetNullDate());
603     double nDate2 = static_cast<double>(aDate2 - pFormatter->GetNullDate());
604     double nDate3 = static_cast<double>(aDate3 - pFormatter->GetNullDate());
605     double nDate4 = static_cast<double>(aDate4 - pFormatter->GetNullDate());
606 
607     m_pDoc->SetValue(2, 0, 0, nDate1);
608     m_pDoc->SetValue(2, 1, 0, nDate2);
609     m_pDoc->SetValue(2, 2, 0, nDate3);
610     m_pDoc->SetValue(2, 3, 0, nDate4);
611 
612     sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::START_OF_YEAR   );
613     aTransform.Transform(*m_pDoc);
614 
615     CPPUNIT_ASSERT_EQUAL(OUString("01/01/11"), m_pDoc->GetString(2, 0, 0));
616     CPPUNIT_ASSERT_EQUAL(OUString("01/01/94"), m_pDoc->GetString(2, 1, 0));
617     CPPUNIT_ASSERT_EQUAL(OUString("01/01/96"), m_pDoc->GetString(2, 2, 0));
618     CPPUNIT_ASSERT_EQUAL(OUString("01/01/47"), m_pDoc->GetString(2, 3, 0));
619 }
620 
testGetEndOfYear()621 void ScDataTransformationTest::testGetEndOfYear()
622 {
623     SvNumberFormatter* pFormatter = m_pDoc->GetFormatTable();
624     css::util::Date aDate1(25,1,2011);
625     css::util::Date aDate2(12,10,1994);
626     css::util::Date aDate3(23,9,1996);
627     css::util::Date aDate4(15,8,1947);
628 
629     double nDate1 = static_cast<double>(aDate1 - pFormatter->GetNullDate());
630     double nDate2 = static_cast<double>(aDate2 - pFormatter->GetNullDate());
631     double nDate3 = static_cast<double>(aDate3 - pFormatter->GetNullDate());
632     double nDate4 = static_cast<double>(aDate4 - pFormatter->GetNullDate());
633 
634     m_pDoc->SetValue(2, 0, 0, nDate1);
635     m_pDoc->SetValue(2, 1, 0, nDate2);
636     m_pDoc->SetValue(2, 2, 0, nDate3);
637     m_pDoc->SetValue(2, 3, 0, nDate4);
638 
639     sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::END_OF_YEAR   );
640     aTransform.Transform(*m_pDoc);
641 
642     CPPUNIT_ASSERT_EQUAL(OUString("12/31/11"), m_pDoc->GetString(2, 0, 0));
643     CPPUNIT_ASSERT_EQUAL(OUString("12/31/94"), m_pDoc->GetString(2, 1, 0));
644     CPPUNIT_ASSERT_EQUAL(OUString("12/31/96"), m_pDoc->GetString(2, 2, 0));
645     CPPUNIT_ASSERT_EQUAL(OUString("12/31/47"), m_pDoc->GetString(2, 3, 0));
646 }
647 
testGetMonth()648 void ScDataTransformationTest::testGetMonth()
649 {
650     SvNumberFormatter* pFormatter = m_pDoc->GetFormatTable();
651     css::util::Date aDate1(25,1,2011);
652     css::util::Date aDate2(12,10,1994);
653     css::util::Date aDate3(23,9,1996);
654     css::util::Date aDate4(15,8,1947);
655 
656     double nDate1 = static_cast<double>(aDate1 - pFormatter->GetNullDate());
657     double nDate2 = static_cast<double>(aDate2 - pFormatter->GetNullDate());
658     double nDate3 = static_cast<double>(aDate3 - pFormatter->GetNullDate());
659     double nDate4 = static_cast<double>(aDate4 - pFormatter->GetNullDate());
660 
661     m_pDoc->SetValue(2, 0, 0, nDate1);
662     m_pDoc->SetValue(2, 1, 0, nDate2);
663     m_pDoc->SetValue(2, 2, 0, nDate3);
664     m_pDoc->SetValue(2, 3, 0, nDate4);
665 
666     sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::MONTH   );
667     aTransform.Transform(*m_pDoc);
668 
669     CPPUNIT_ASSERT_DOUBLES_EQUAL(1, m_pDoc->GetValue(2, 0, 0), 0);
670     CPPUNIT_ASSERT_DOUBLES_EQUAL(10, m_pDoc->GetValue(2, 1, 0), 0);
671     CPPUNIT_ASSERT_DOUBLES_EQUAL(9, m_pDoc->GetValue(2, 2, 0), 0);
672     CPPUNIT_ASSERT_DOUBLES_EQUAL(8, m_pDoc->GetValue(2, 3, 0), 0);
673 }
674 
testGetMonthName()675 void ScDataTransformationTest::testGetMonthName()
676 {
677     SvNumberFormatter* pFormatter = m_pDoc->GetFormatTable();
678     css::util::Date aDate1(25,1,2011);
679     css::util::Date aDate2(12,10,1994);
680     css::util::Date aDate3(23,9,1996);
681     css::util::Date aDate4(15,8,1947);
682 
683     double nDate1 = static_cast<double>(aDate1 - pFormatter->GetNullDate());
684     double nDate2 = static_cast<double>(aDate2 - pFormatter->GetNullDate());
685     double nDate3 = static_cast<double>(aDate3 - pFormatter->GetNullDate());
686     double nDate4 = static_cast<double>(aDate4 - pFormatter->GetNullDate());
687 
688     m_pDoc->SetValue(2, 0, 0, nDate1);
689     m_pDoc->SetValue(2, 1, 0, nDate2);
690     m_pDoc->SetValue(2, 2, 0, nDate3);
691     m_pDoc->SetValue(2, 3, 0, nDate4);
692 
693     sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::MONTH_NAME);
694     aTransform.Transform(*m_pDoc);
695 
696     CPPUNIT_ASSERT_EQUAL(OUString("January"), m_pDoc->GetString(2, 0, 0));
697     CPPUNIT_ASSERT_EQUAL(OUString("October"), m_pDoc->GetString(2, 1, 0));
698     CPPUNIT_ASSERT_EQUAL(OUString("September"), m_pDoc->GetString(2, 2, 0));
699     CPPUNIT_ASSERT_EQUAL(OUString("August"), m_pDoc->GetString(2, 3, 0));
700 }
701 
testGetStartOfMonth()702 void ScDataTransformationTest::testGetStartOfMonth()
703 {
704     SvNumberFormatter* pFormatter = m_pDoc->GetFormatTable();
705     css::util::Date aDate1(25,1,2011);
706     css::util::Date aDate2(12,10,1994);
707     css::util::Date aDate3(23,9,1996);
708     css::util::Date aDate4(15,8,1947);
709 
710     double nDate1 = static_cast<double>(aDate1 - pFormatter->GetNullDate());
711     double nDate2 = static_cast<double>(aDate2 - pFormatter->GetNullDate());
712     double nDate3 = static_cast<double>(aDate3 - pFormatter->GetNullDate());
713     double nDate4 = static_cast<double>(aDate4 - pFormatter->GetNullDate());
714 
715     m_pDoc->SetValue(2, 0, 0, nDate1);
716     m_pDoc->SetValue(2, 1, 0, nDate2);
717     m_pDoc->SetValue(2, 2, 0, nDate3);
718     m_pDoc->SetValue(2, 3, 0, nDate4);
719 
720     sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::START_OF_MONTH   );
721     aTransform.Transform(*m_pDoc);
722 
723     CPPUNIT_ASSERT_EQUAL(OUString("01/01/11"), m_pDoc->GetString(2, 0, 0));
724     CPPUNIT_ASSERT_EQUAL(OUString("10/01/94"), m_pDoc->GetString(2, 1, 0));
725     CPPUNIT_ASSERT_EQUAL(OUString("09/01/96"), m_pDoc->GetString(2, 2, 0));
726     CPPUNIT_ASSERT_EQUAL(OUString("08/01/47"), m_pDoc->GetString(2, 3, 0));
727 }
728 
testGetEndOfMonth()729 void ScDataTransformationTest::testGetEndOfMonth()
730 {
731     SvNumberFormatter* pFormatter = m_pDoc->GetFormatTable();
732     css::util::Date aDate1(25,1,2011);
733     css::util::Date aDate2(12,10,1994);
734     css::util::Date aDate3(23,9,1996);
735     css::util::Date aDate4(15,8,1947);
736 
737     double nDate1 = static_cast<double>(aDate1 - pFormatter->GetNullDate());
738     double nDate2 = static_cast<double>(aDate2 - pFormatter->GetNullDate());
739     double nDate3 = static_cast<double>(aDate3 - pFormatter->GetNullDate());
740     double nDate4 = static_cast<double>(aDate4 - pFormatter->GetNullDate());
741 
742     m_pDoc->SetValue(2, 0, 0, nDate1);
743     m_pDoc->SetValue(2, 1, 0, nDate2);
744     m_pDoc->SetValue(2, 2, 0, nDate3);
745     m_pDoc->SetValue(2, 3, 0, nDate4);
746 
747     sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::END_OF_MONTH   );
748     aTransform.Transform(*m_pDoc);
749 
750     CPPUNIT_ASSERT_EQUAL(OUString("01/31/11"), m_pDoc->GetString(2, 0, 0));
751     CPPUNIT_ASSERT_EQUAL(OUString("10/31/94"), m_pDoc->GetString(2, 1, 0));
752     CPPUNIT_ASSERT_EQUAL(OUString("09/30/96"), m_pDoc->GetString(2, 2, 0));
753     CPPUNIT_ASSERT_EQUAL(OUString("08/31/47"), m_pDoc->GetString(2, 3, 0));
754 }
755 
testGetDay()756 void ScDataTransformationTest::testGetDay()
757 {
758     SvNumberFormatter* pFormatter = m_pDoc->GetFormatTable();
759     css::util::Date aDate1(25,1,2011);
760     css::util::Date aDate2(12,10,1994);
761     css::util::Date aDate3(23,9,1996);
762     css::util::Date aDate4(15,8,1947);
763 
764     double nDate1 = static_cast<double>(aDate1 - pFormatter->GetNullDate());
765     double nDate2 = static_cast<double>(aDate2 - pFormatter->GetNullDate());
766     double nDate3 = static_cast<double>(aDate3 - pFormatter->GetNullDate());
767     double nDate4 = static_cast<double>(aDate4 - pFormatter->GetNullDate());
768 
769     m_pDoc->SetValue(2, 0, 0, nDate1);
770     m_pDoc->SetValue(2, 1, 0, nDate2);
771     m_pDoc->SetValue(2, 2, 0, nDate3);
772     m_pDoc->SetValue(2, 3, 0, nDate4);
773 
774     sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::DAY   );
775     aTransform.Transform(*m_pDoc);
776 
777     CPPUNIT_ASSERT_DOUBLES_EQUAL(25, m_pDoc->GetValue(2, 0, 0), 0);
778     CPPUNIT_ASSERT_DOUBLES_EQUAL(12, m_pDoc->GetValue(2, 1, 0), 0);
779     CPPUNIT_ASSERT_DOUBLES_EQUAL(23, m_pDoc->GetValue(2, 2, 0), 0);
780     CPPUNIT_ASSERT_DOUBLES_EQUAL(15, m_pDoc->GetValue(2, 3, 0), 0);
781 }
782 
testGetDayOfWeek()783 void ScDataTransformationTest::testGetDayOfWeek()
784 {
785     SvNumberFormatter* pFormatter = m_pDoc->GetFormatTable();
786     css::util::Date aDate1(25,1,2011);
787     css::util::Date aDate2(12,10,1994);
788     css::util::Date aDate3(23,9,1996);
789     css::util::Date aDate4(15,8,1947);
790 
791     double nDate1 = static_cast<double>(aDate1 - pFormatter->GetNullDate());
792     double nDate2 = static_cast<double>(aDate2 - pFormatter->GetNullDate());
793     double nDate3 = static_cast<double>(aDate3 - pFormatter->GetNullDate());
794     double nDate4 = static_cast<double>(aDate4 - pFormatter->GetNullDate());
795 
796     m_pDoc->SetValue(2, 0, 0, nDate1);
797     m_pDoc->SetValue(2, 1, 0, nDate2);
798     m_pDoc->SetValue(2, 2, 0, nDate3);
799     m_pDoc->SetValue(2, 3, 0, nDate4);
800 
801     sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::DAY_OF_WEEK  );
802     aTransform.Transform(*m_pDoc);
803 
804     CPPUNIT_ASSERT_DOUBLES_EQUAL(1, m_pDoc->GetValue(2, 0, 0), 0);
805     CPPUNIT_ASSERT_DOUBLES_EQUAL(2, m_pDoc->GetValue(2, 1, 0), 0);
806     CPPUNIT_ASSERT_DOUBLES_EQUAL(0, m_pDoc->GetValue(2, 2, 0), 0);
807     CPPUNIT_ASSERT_DOUBLES_EQUAL(4, m_pDoc->GetValue(2, 3, 0), 0);
808 }
809 
testGetDayOfYear()810 void ScDataTransformationTest::testGetDayOfYear()
811 {
812     SvNumberFormatter* pFormatter = m_pDoc->GetFormatTable();
813     css::util::Date aDate1(25,1,2011);
814     css::util::Date aDate2(12,10,1994);
815     css::util::Date aDate3(23,9,1996);
816     css::util::Date aDate4(15,8,1947);
817 
818     double nDate1 = static_cast<double>(aDate1 - pFormatter->GetNullDate());
819     double nDate2 = static_cast<double>(aDate2 - pFormatter->GetNullDate());
820     double nDate3 = static_cast<double>(aDate3 - pFormatter->GetNullDate());
821     double nDate4 = static_cast<double>(aDate4 - pFormatter->GetNullDate());
822 
823     m_pDoc->SetValue(2, 0, 0, nDate1);
824     m_pDoc->SetValue(2, 1, 0, nDate2);
825     m_pDoc->SetValue(2, 2, 0, nDate3);
826     m_pDoc->SetValue(2, 3, 0, nDate4);
827 
828     sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::DAY_OF_YEAR  );
829     aTransform.Transform(*m_pDoc);
830 
831     CPPUNIT_ASSERT_DOUBLES_EQUAL(25, m_pDoc->GetValue(2, 0, 0), 0);
832     CPPUNIT_ASSERT_DOUBLES_EQUAL(285, m_pDoc->GetValue(2, 1, 0), 0);
833     CPPUNIT_ASSERT_DOUBLES_EQUAL(267, m_pDoc->GetValue(2, 2, 0), 0);
834     CPPUNIT_ASSERT_DOUBLES_EQUAL(227, m_pDoc->GetValue(2, 3, 0), 0);
835 }
836 
testGetQuarter()837 void ScDataTransformationTest::testGetQuarter()
838 {
839     SvNumberFormatter* pFormatter = m_pDoc->GetFormatTable();
840     css::util::Date aDate1(25,1,2011);
841     css::util::Date aDate2(12,10,1994);
842     css::util::Date aDate3(23,9,1996);
843     css::util::Date aDate4(15,8,1947);
844 
845     double nDate1 = static_cast<double>(aDate1 - pFormatter->GetNullDate());
846     double nDate2 = static_cast<double>(aDate2 - pFormatter->GetNullDate());
847     double nDate3 = static_cast<double>(aDate3 - pFormatter->GetNullDate());
848     double nDate4 = static_cast<double>(aDate4 - pFormatter->GetNullDate());
849 
850     m_pDoc->SetValue(2, 0, 0, nDate1);
851     m_pDoc->SetValue(2, 1, 0, nDate2);
852     m_pDoc->SetValue(2, 2, 0, nDate3);
853     m_pDoc->SetValue(2, 3, 0, nDate4);
854 
855     sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::QUARTER   );
856     aTransform.Transform(*m_pDoc);
857 
858     CPPUNIT_ASSERT_DOUBLES_EQUAL(1, m_pDoc->GetValue(2, 0, 0), 0);
859     CPPUNIT_ASSERT_DOUBLES_EQUAL(4, m_pDoc->GetValue(2, 1, 0), 0);
860     CPPUNIT_ASSERT_DOUBLES_EQUAL(3, m_pDoc->GetValue(2, 2, 0), 0);
861     CPPUNIT_ASSERT_DOUBLES_EQUAL(3, m_pDoc->GetValue(2, 3, 0), 0);
862 }
863 
testGetStartOfQuarter()864 void ScDataTransformationTest::testGetStartOfQuarter()
865 {
866     SvNumberFormatter* pFormatter = m_pDoc->GetFormatTable();
867     css::util::Date aDate1(25,1,2011);
868     css::util::Date aDate2(12,10,1994);
869     css::util::Date aDate3(23,9,1996);
870     css::util::Date aDate4(15,8,1947);
871 
872     double nDate1 = static_cast<double>(aDate1 - pFormatter->GetNullDate());
873     double nDate2 = static_cast<double>(aDate2 - pFormatter->GetNullDate());
874     double nDate3 = static_cast<double>(aDate3 - pFormatter->GetNullDate());
875     double nDate4 = static_cast<double>(aDate4 - pFormatter->GetNullDate());
876 
877     m_pDoc->SetValue(2, 0, 0, nDate1);
878     m_pDoc->SetValue(2, 1, 0, nDate2);
879     m_pDoc->SetValue(2, 2, 0, nDate3);
880     m_pDoc->SetValue(2, 3, 0, nDate4);
881 
882     sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::START_OF_QUARTER   );
883     aTransform.Transform(*m_pDoc);
884 
885     CPPUNIT_ASSERT_EQUAL(OUString("01/01/11"), m_pDoc->GetString(2, 0, 0));
886     CPPUNIT_ASSERT_EQUAL(OUString("10/01/94"), m_pDoc->GetString(2, 1, 0));
887     CPPUNIT_ASSERT_EQUAL(OUString("07/01/96"), m_pDoc->GetString(2, 2, 0));
888     CPPUNIT_ASSERT_EQUAL(OUString("07/01/47"), m_pDoc->GetString(2, 3, 0));
889 }
890 
testGetEndOfQuarter()891 void ScDataTransformationTest::testGetEndOfQuarter()
892 {
893     SvNumberFormatter* pFormatter = m_pDoc->GetFormatTable();
894     css::util::Date aDate1(25,1,2011);
895     css::util::Date aDate2(12,10,1994);
896     css::util::Date aDate3(23,9,1996);
897     css::util::Date aDate4(15,8,1947);
898 
899     double nDate1 = static_cast<double>(aDate1 - pFormatter->GetNullDate());
900     double nDate2 = static_cast<double>(aDate2 - pFormatter->GetNullDate());
901     double nDate3 = static_cast<double>(aDate3 - pFormatter->GetNullDate());
902     double nDate4 = static_cast<double>(aDate4 - pFormatter->GetNullDate());
903 
904     m_pDoc->SetValue(2, 0, 0, nDate1);
905     m_pDoc->SetValue(2, 1, 0, nDate2);
906     m_pDoc->SetValue(2, 2, 0, nDate3);
907     m_pDoc->SetValue(2, 3, 0, nDate4);
908 
909     sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::END_OF_QUARTER   );
910     aTransform.Transform(*m_pDoc);
911 
912     CPPUNIT_ASSERT_EQUAL(OUString("03/31/11"), m_pDoc->GetString(2, 0, 0));
913     CPPUNIT_ASSERT_EQUAL(OUString("12/31/94"), m_pDoc->GetString(2, 1, 0));
914     CPPUNIT_ASSERT_EQUAL(OUString("09/30/96"), m_pDoc->GetString(2, 2, 0));
915     CPPUNIT_ASSERT_EQUAL(OUString("09/30/47"), m_pDoc->GetString(2, 3, 0));
916 }
917 
testGetTime()918 void ScDataTransformationTest::testGetTime()
919 {
920     tools::Time aTime1(5,30,12);
921     tools::Time aTime2(7,23,9);
922     tools::Time aTime3(9,34,40);
923     tools::Time aTime4(22,9,49);
924 
925     m_pDoc->SetValue(2, 0, 0, aTime1.GetTimeInDays());
926     m_pDoc->SetValue(2, 1, 0, aTime2.GetTimeInDays());
927     m_pDoc->SetValue(2, 2, 0, aTime3.GetTimeInDays());
928     m_pDoc->SetValue(2, 3, 0, aTime4.GetTimeInDays());
929 
930     sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::TIME  );
931     aTransform.Transform(*m_pDoc);
932 
933     CPPUNIT_ASSERT_EQUAL(OUString("05:30:12 AM"), m_pDoc->GetString(2, 0, 0));
934     CPPUNIT_ASSERT_EQUAL(OUString("07:23:09 AM"), m_pDoc->GetString(2, 1, 0));
935     CPPUNIT_ASSERT_EQUAL(OUString("09:34:40 AM"), m_pDoc->GetString(2, 2, 0));
936     CPPUNIT_ASSERT_EQUAL(OUString("10:09:49 PM"), m_pDoc->GetString(2, 3, 0));
937 }
938 
testGetHour()939 void ScDataTransformationTest::testGetHour()
940 {
941     tools::Time aTime1(5,30,12);
942     tools::Time aTime2(7,23,9);
943     tools::Time aTime3(9,34,40);
944     tools::Time aTime4(22,9,49);
945 
946     m_pDoc->SetValue(2, 0, 0, aTime1.GetTimeInDays());
947     m_pDoc->SetValue(2, 1, 0, aTime2.GetTimeInDays());
948     m_pDoc->SetValue(2, 2, 0, aTime3.GetTimeInDays());
949     m_pDoc->SetValue(2, 3, 0, aTime4.GetTimeInDays());
950 
951     sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::HOUR  );
952     aTransform.Transform(*m_pDoc);
953 
954     CPPUNIT_ASSERT_DOUBLES_EQUAL(5, m_pDoc->GetValue(2, 0, 0), 0);
955     CPPUNIT_ASSERT_DOUBLES_EQUAL(7, m_pDoc->GetValue(2, 1, 0), 0);
956     CPPUNIT_ASSERT_DOUBLES_EQUAL(9, m_pDoc->GetValue(2, 2, 0), 0);
957     CPPUNIT_ASSERT_DOUBLES_EQUAL(22, m_pDoc->GetValue(2, 3, 0), 0);
958 }
959 
testGetMinute()960 void ScDataTransformationTest::testGetMinute()
961 {
962     tools::Time aTime1(5,30,12);
963     tools::Time aTime2(7,23,9);
964     tools::Time aTime3(9,34,40);
965     tools::Time aTime4(22,9,49);
966 
967     m_pDoc->SetValue(2, 0, 0, aTime1.GetTimeInDays());
968     m_pDoc->SetValue(2, 1, 0, aTime2.GetTimeInDays());
969     m_pDoc->SetValue(2, 2, 0, aTime3.GetTimeInDays());
970     m_pDoc->SetValue(2, 3, 0, aTime4.GetTimeInDays());
971 
972     sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::MINUTE  );
973     aTransform.Transform(*m_pDoc);
974 
975     CPPUNIT_ASSERT_DOUBLES_EQUAL(30, m_pDoc->GetValue(2, 0, 0), 0);
976     CPPUNIT_ASSERT_DOUBLES_EQUAL(23, m_pDoc->GetValue(2, 1, 0), 0);
977     CPPUNIT_ASSERT_DOUBLES_EQUAL(34, m_pDoc->GetValue(2, 2, 0), 0);
978     CPPUNIT_ASSERT_DOUBLES_EQUAL(9, m_pDoc->GetValue(2, 3, 0), 0);
979 }
980 
testGetSecond()981 void ScDataTransformationTest::testGetSecond()
982 {
983     tools::Time aTime1(5,30,53);
984     tools::Time aTime2(7,23,10);
985     tools::Time aTime3(9,34,40);
986     tools::Time aTime4(22,9,49);
987 
988     m_pDoc->SetValue(2, 0, 0, aTime1.GetTimeInDays());
989     m_pDoc->SetValue(2, 1, 0, aTime2.GetTimeInDays());
990     m_pDoc->SetValue(2, 2, 0, aTime3.GetTimeInDays());
991     m_pDoc->SetValue(2, 3, 0, aTime4.GetTimeInDays());
992 
993     sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::SECOND   );
994     aTransform.Transform(*m_pDoc);
995 
996     CPPUNIT_ASSERT_DOUBLES_EQUAL(53, m_pDoc->GetValue(2, 0, 0), 0);
997     CPPUNIT_ASSERT_DOUBLES_EQUAL(10, m_pDoc->GetValue(2, 1, 0), 0);
998     CPPUNIT_ASSERT_DOUBLES_EQUAL(40, m_pDoc->GetValue(2, 2, 0), 0);
999     CPPUNIT_ASSERT_DOUBLES_EQUAL(49, m_pDoc->GetValue(2, 3, 0), 0);
1000 }
1001 
ScDataTransformationTest()1002 ScDataTransformationTest::ScDataTransformationTest() :
1003     ScBootstrapFixture( "sc/qa/unit/data/dataprovider" ),
1004     m_pDoc(nullptr)
1005 {
1006 }
1007 
setUp()1008 void ScDataTransformationTest::setUp()
1009 {
1010     ScBootstrapFixture::setUp();
1011 
1012     ScDLL::Init();
1013     m_xDocShell = new ScDocShell(
1014         SfxModelFlags::EMBEDDED_OBJECT |
1015         SfxModelFlags::DISABLE_EMBEDDED_SCRIPTS |
1016         SfxModelFlags::DISABLE_DOCUMENT_RECOVERY);
1017 
1018     m_xDocShell->SetIsInUcalc();
1019     m_xDocShell->DoInitUnitTest();
1020     m_pDoc = &m_xDocShell->GetDocument();
1021     m_pDoc->InsertTab(0, "Tab");
1022 }
1023 
tearDown()1024 void ScDataTransformationTest::tearDown()
1025 {
1026     m_xDocShell->DoClose();
1027     m_xDocShell.clear();
1028     ScBootstrapFixture::tearDown();
1029 }
1030 
1031 CPPUNIT_TEST_SUITE_REGISTRATION(ScDataTransformationTest);
1032 
1033 CPPUNIT_PLUGIN_IMPLEMENT();
1034 
1035 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
1036