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