summaryrefslogtreecommitdiffstats
path: root/sc/qa/unit/datatransformation_test.cxx
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 16:51:28 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 16:51:28 +0000
commit940b4d1848e8c70ab7642901a68594e8016caffc (patch)
treeeb72f344ee6c3d9b80a7ecc079ea79e9fba8676d /sc/qa/unit/datatransformation_test.cxx
parentInitial commit. (diff)
downloadlibreoffice-upstream.tar.xz
libreoffice-upstream.zip
Adding upstream version 1:7.0.4.upstream/1%7.0.4upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'sc/qa/unit/datatransformation_test.cxx')
-rw-r--r--sc/qa/unit/datatransformation_test.cxx1035
1 files changed, 1035 insertions, 0 deletions
diff --git a/sc/qa/unit/datatransformation_test.cxx b/sc/qa/unit/datatransformation_test.cxx
new file mode 100644
index 000000000..0cec07fb0
--- /dev/null
+++ b/sc/qa/unit/datatransformation_test.cxx
@@ -0,0 +1,1035 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <rtl/ustring.hxx>
+
+#include "helper/qahelper.hxx"
+#include <document.hxx>
+#include <datatransformation.hxx>
+#include <scdll.hxx>
+#include <tools/time.hxx>
+
+class ScDataTransformationTest : public ScBootstrapFixture
+{
+public:
+
+ ScDataTransformationTest();
+
+ virtual void setUp() override;
+ virtual void tearDown() override;
+
+ void testColumnRemove();
+ void testColumnSplit();
+ void testColumnMerge();
+ void testTextToLower();
+ void testTextToUpper();
+ void testTextCapitalize();
+ void testTextTrim();
+ void testAggregateSum();
+ void testAggregateAverage();
+ void testAggregateMin();
+ void testAggregateMax();
+ void testNumberRound();
+ void testNumberRoundUp();
+ void testNumberRoundDown();
+ void testNumberAbsolute();
+ void testNumberLogE();
+ void testNumberLog10();
+ void testNumberCube();
+ void testNumberSquare();
+ void testNumberSquareRoot();
+ void testNumberEven();
+ void testNumberOdd();
+ void testNumberSign();
+ void testReplaceNull();
+ void testGetDateString();
+ void testGetYear();
+ void testGetStartOfYear();
+ void testGetEndOfYear();
+ void testGetMonth();
+ void testGetMonthName();
+ void testGetStartOfMonth();
+ void testGetEndOfMonth();
+ void testGetDay();
+ void testGetDayOfWeek();
+ void testGetDayOfYear();
+ void testGetQuarter();
+ void testGetStartOfQuarter();
+ void testGetEndOfQuarter();
+ void testGetTime();
+ void testGetHour();
+ void testGetMinute();
+ void testGetSecond();
+
+ CPPUNIT_TEST_SUITE(ScDataTransformationTest);
+ CPPUNIT_TEST(testColumnRemove);
+ CPPUNIT_TEST(testColumnSplit);
+ CPPUNIT_TEST(testColumnMerge);
+ CPPUNIT_TEST(testTextToLower);
+ CPPUNIT_TEST(testTextToUpper);
+ CPPUNIT_TEST(testTextCapitalize);
+ CPPUNIT_TEST(testTextTrim);
+ CPPUNIT_TEST(testAggregateSum);
+ CPPUNIT_TEST(testAggregateAverage);
+ CPPUNIT_TEST(testAggregateMin);
+ CPPUNIT_TEST(testAggregateMax);
+ CPPUNIT_TEST(testNumberRound);
+ CPPUNIT_TEST(testNumberRoundUp);
+ CPPUNIT_TEST(testNumberRoundDown);
+ CPPUNIT_TEST(testNumberAbsolute);
+ CPPUNIT_TEST(testNumberLogE);
+ CPPUNIT_TEST(testNumberLog10);
+ CPPUNIT_TEST(testNumberCube);
+ CPPUNIT_TEST(testNumberSquare);
+ CPPUNIT_TEST(testNumberSquareRoot);
+ CPPUNIT_TEST(testNumberEven);
+ CPPUNIT_TEST(testNumberOdd);
+ CPPUNIT_TEST(testNumberSign);
+ CPPUNIT_TEST(testReplaceNull);
+ CPPUNIT_TEST(testGetDateString);
+ CPPUNIT_TEST(testGetYear);
+ CPPUNIT_TEST(testGetStartOfYear);
+ CPPUNIT_TEST(testGetEndOfYear);
+ CPPUNIT_TEST(testGetMonth);
+ CPPUNIT_TEST(testGetMonthName);
+ CPPUNIT_TEST(testGetStartOfMonth);
+ CPPUNIT_TEST(testGetEndOfMonth);
+ CPPUNIT_TEST(testGetDay);
+ CPPUNIT_TEST(testGetDayOfWeek);
+ CPPUNIT_TEST(testGetDayOfYear);
+ CPPUNIT_TEST(testGetQuarter);
+ CPPUNIT_TEST(testGetStartOfQuarter);
+ CPPUNIT_TEST(testGetEndOfQuarter);
+ CPPUNIT_TEST(testGetTime);
+ CPPUNIT_TEST(testGetHour);
+ CPPUNIT_TEST(testGetMinute);
+ CPPUNIT_TEST(testGetSecond);
+ CPPUNIT_TEST_SUITE_END();
+
+private:
+ ScDocShellRef m_xDocShell;
+ ScDocument *m_pDoc;
+};
+
+void ScDataTransformationTest::testColumnRemove()
+{
+ for (SCROW nRow = 0; nRow < 10; ++nRow)
+ {
+ for (SCCOL nCol = 0; nCol < 10; ++nCol)
+ {
+ m_pDoc->SetValue(nCol, nRow, 0, nRow*nCol);
+ }
+ }
+
+ sc::ColumnRemoveTransformation aTransformation({5});
+ aTransformation.Transform(*m_pDoc);
+
+ for (SCROW nRow = 0; nRow < 10; ++nRow)
+ {
+ for (SCCOL nCol = 0; nCol < 9; ++nCol)
+ {
+ double nVal = m_pDoc->GetValue(nCol, nRow, 0);
+ if (nCol < 5)
+ {
+ ASSERT_DOUBLES_EQUAL(static_cast<double>(nCol)*nRow, nVal);
+ }
+ else
+ {
+ ASSERT_DOUBLES_EQUAL(static_cast<double>(nCol+1)*nRow, nVal);
+ }
+ }
+ }
+}
+
+void ScDataTransformationTest::testColumnSplit()
+{
+ m_pDoc->SetString(2, 0, 0, "Test1,Test2");
+ m_pDoc->SetString(2, 1, 0, "Test1,");
+ m_pDoc->SetString(2, 2, 0, ",Test1");
+ m_pDoc->SetString(2, 3, 0, "Test1,Test2,Test3");
+ m_pDoc->SetString(3, 0, 0, "AnotherString");
+
+ sc::SplitColumnTransformation aTransform(2, ',');
+ aTransform.Transform(*m_pDoc);
+
+ CPPUNIT_ASSERT_EQUAL(OUString("AnotherString"), m_pDoc->GetString(4, 0, 0));
+
+ CPPUNIT_ASSERT_EQUAL(OUString("Test1"), m_pDoc->GetString(2, 0, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("Test1"), m_pDoc->GetString(2, 1, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString(""), m_pDoc->GetString(2, 2, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("Test1"), m_pDoc->GetString(2, 3, 0));
+
+ CPPUNIT_ASSERT_EQUAL(OUString("Test2"), m_pDoc->GetString(3, 0, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString(""), m_pDoc->GetString(3, 1, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("Test1"), m_pDoc->GetString(3, 2, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("Test2,Test3"), m_pDoc->GetString(3, 3, 0));
+}
+
+void ScDataTransformationTest::testColumnMerge()
+{
+ m_pDoc->SetString(2, 0, 0, "Berlin");
+ m_pDoc->SetString(2, 1, 0, "Brussels");
+ m_pDoc->SetString(2, 2, 0, "Paris");
+ m_pDoc->SetString(2, 3, 0, "Peking");
+
+ m_pDoc->SetString(4, 0, 0, "Germany");
+ m_pDoc->SetString(4, 1, 0, "Belgium");
+ m_pDoc->SetString(4, 2, 0, "France");
+ m_pDoc->SetString(4, 3, 0, "China");
+
+ sc::MergeColumnTransformation aTransform({2, 4}, ", ");
+ aTransform.Transform(*m_pDoc);
+
+ CPPUNIT_ASSERT_EQUAL(OUString("Berlin, Germany"), m_pDoc->GetString(2, 0, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("Brussels, Belgium"), m_pDoc->GetString(2, 1, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("Paris, France"), m_pDoc->GetString(2, 2, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("Peking, China"), m_pDoc->GetString(2, 3, 0));
+
+ for (SCROW nRow = 0; nRow <= 3; ++nRow)
+ {
+ CPPUNIT_ASSERT(m_pDoc->GetString(4, nRow, 0).isEmpty());
+ }
+}
+
+void ScDataTransformationTest::testTextToLower()
+{
+ m_pDoc->SetString(2, 0, 0, "Berlin");
+ m_pDoc->SetString(2, 1, 0, "Brussels");
+ m_pDoc->SetString(2, 2, 0, "Paris");
+ m_pDoc->SetString(2, 3, 0, "Peking");
+
+ sc::TextTransformation aTransform({2}, sc::TEXT_TRANSFORM_TYPE::TO_LOWER);
+ aTransform.Transform(*m_pDoc);
+
+ CPPUNIT_ASSERT_EQUAL(OUString("berlin"), m_pDoc->GetString(2, 0, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("brussels"), m_pDoc->GetString(2, 1, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("paris"), m_pDoc->GetString(2, 2, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("peking"), m_pDoc->GetString(2, 3, 0));
+}
+
+void ScDataTransformationTest::testTextToUpper()
+{
+ m_pDoc->SetString(2, 0, 0, "Berlin");
+ m_pDoc->SetString(2, 1, 0, "Brussels");
+ m_pDoc->SetString(2, 2, 0, "Paris");
+ m_pDoc->SetString(2, 3, 0, "Peking");
+
+ sc::TextTransformation aTransform({2}, sc::TEXT_TRANSFORM_TYPE::TO_UPPER);
+ aTransform.Transform(*m_pDoc);
+
+ CPPUNIT_ASSERT_EQUAL(OUString("BERLIN"), m_pDoc->GetString(2, 0, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("BRUSSELS"), m_pDoc->GetString(2, 1, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("PARIS"), m_pDoc->GetString(2, 2, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("PEKING"), m_pDoc->GetString(2, 3, 0));
+}
+
+void ScDataTransformationTest::testTextCapitalize()
+{
+ m_pDoc->SetString(2, 0, 0, "hello woRlD");
+ m_pDoc->SetString(2, 1, 0, "qUe vA");
+ m_pDoc->SetString(2, 2, 0, "si tu la ves");
+ m_pDoc->SetString(2, 3, 0, "cUaNdO mE EnAmOro");
+
+ sc::TextTransformation aTransform({2}, sc::TEXT_TRANSFORM_TYPE::CAPITALIZE);
+ aTransform.Transform(*m_pDoc);
+
+ CPPUNIT_ASSERT_EQUAL(OUString("Hello World"), m_pDoc->GetString(2, 0, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("Que Va"), m_pDoc->GetString(2, 1, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("Si Tu La Ves"), m_pDoc->GetString(2, 2, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("Cuando Me Enamoro"), m_pDoc->GetString(2, 3, 0));
+}
+
+void ScDataTransformationTest::testTextTrim()
+{
+ m_pDoc->SetString(2, 0, 0, " Berlin");
+ m_pDoc->SetString(2, 1, 0, "Brussels ");
+ m_pDoc->SetString(2, 2, 0, " Paris ");
+
+ sc::TextTransformation aTransform({2}, sc::TEXT_TRANSFORM_TYPE::TRIM);
+ aTransform.Transform(*m_pDoc);
+
+ CPPUNIT_ASSERT_EQUAL(OUString("Berlin"), m_pDoc->GetString(2, 0, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("Brussels"), m_pDoc->GetString(2, 1, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("Paris"), m_pDoc->GetString(2, 2, 0));
+}
+
+void ScDataTransformationTest::testAggregateSum()
+{
+ m_pDoc->SetValue(2, 0, 0, 2034);
+ m_pDoc->SetValue(2, 1, 0, 2342);
+ m_pDoc->SetValue(2, 2, 0, 57452);
+
+ m_pDoc->SetValue(4, 0, 0, 4829.98);
+ m_pDoc->SetValue(4, 1, 0, 53781.3);
+ m_pDoc->SetValue(4, 2, 0, 9876.4);
+ m_pDoc->SetValue(4, 3, 0, 0);
+
+ sc::AggregateFunction aTransform({2, 4}, sc::AGGREGATE_FUNCTION::SUM);
+ aTransform.Transform(*m_pDoc);
+
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(61828, m_pDoc->GetValue(2, 4, 0), 1e-10);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(68487.68, m_pDoc->GetValue(4, 4, 0), 1e-10);
+}
+
+void ScDataTransformationTest::testAggregateAverage()
+{
+ m_pDoc->SetValue(2, 0, 0, 2034);
+ m_pDoc->SetValue(2, 1, 0, 2342);
+ m_pDoc->SetValue(2, 2, 0, 57453);
+
+ m_pDoc->SetValue(3, 0, 0, 4);
+ m_pDoc->SetValue(3, 1, 0, 4);
+ m_pDoc->SetValue(3, 2, 0, 4);
+
+ sc::AggregateFunction aTransform({2, 3}, sc::AGGREGATE_FUNCTION::AVERAGE);
+ aTransform.Transform(*m_pDoc);
+
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(20609.6666666667, m_pDoc->GetValue(2, 3, 0), 1e-10);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(4, m_pDoc->GetValue(3, 3, 0), 1e-10);
+}
+
+void ScDataTransformationTest::testAggregateMin()
+{
+ m_pDoc->SetValue(2, 0, 0, 2034);
+ m_pDoc->SetValue(2, 1, 0, 2342);
+ m_pDoc->SetValue(2, 2, 0, 57453);
+
+ m_pDoc->SetValue(3, 0, 0, 2034);
+ m_pDoc->SetValue(3, 1, 0, -2342);
+ m_pDoc->SetValue(3, 2, 0, 57453);
+
+ sc::AggregateFunction aTransform({2, 3}, sc::AGGREGATE_FUNCTION::MIN);
+ aTransform.Transform(*m_pDoc);
+
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(2034, m_pDoc->GetValue(2, 3, 0), 1e-10);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(-2342, m_pDoc->GetValue(3, 3, 0), 1e-10);
+}
+
+void ScDataTransformationTest::testAggregateMax()
+{
+ m_pDoc->SetValue(2, 0, 0, 2034);
+ m_pDoc->SetValue(2, 1, 0, 2342);
+ m_pDoc->SetValue(2, 2, 0, 57453);
+ m_pDoc->SetValue(2, 3, 0, -453);
+
+ m_pDoc->SetValue(3, 0, 0, 2034);
+ m_pDoc->SetValue(3, 1, 0, -2342);
+ m_pDoc->SetValue(3, 2, 0, -57453);
+ m_pDoc->SetValue(3, 3, 0, -453);
+
+ sc::AggregateFunction aTransform({2, 3}, sc::AGGREGATE_FUNCTION::MAX);
+ aTransform.Transform(*m_pDoc);
+
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(57453, m_pDoc->GetValue(2, 4, 0), 1e-10);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(2034, m_pDoc->GetValue(3, 4, 0), 1e-10);
+}
+
+void ScDataTransformationTest::testNumberRound()
+{
+ m_pDoc->SetValue(2, 0, 0, 2034.342453456);
+ m_pDoc->SetValue(2, 1, 0, 2342.252678567542);
+ m_pDoc->SetValue(2, 2, 0, 57453.651345687654345676);
+ m_pDoc->SetValue(2, 3, 0, -453.22234567543);
+
+ sc::NumberTransformation aTransform({2}, sc::NUMBER_TRANSFORM_TYPE::ROUND, 4);
+ aTransform.Transform(*m_pDoc);
+
+ CPPUNIT_ASSERT_EQUAL(2034.3425, m_pDoc->GetValue(2, 0, 0));
+ CPPUNIT_ASSERT_EQUAL(2342.2527, m_pDoc->GetValue(2, 1, 0));
+ CPPUNIT_ASSERT_EQUAL(57453.6513, m_pDoc->GetValue(2, 2, 0));
+ CPPUNIT_ASSERT_EQUAL(-453.2223, m_pDoc->GetValue(2, 3, 0));
+}
+
+void ScDataTransformationTest::testNumberRoundUp()
+{
+ m_pDoc->SetValue(2, 0, 0, 2034.34);
+ m_pDoc->SetValue(2, 1, 0, 2342.22);
+ m_pDoc->SetValue(2, 2, 0, 57453.65);
+ m_pDoc->SetValue(2, 3, 0, -453.22);
+
+ sc::NumberTransformation aTransform({2}, sc::NUMBER_TRANSFORM_TYPE::ROUND_UP);
+ aTransform.Transform(*m_pDoc);
+
+ CPPUNIT_ASSERT_EQUAL(2035.0, m_pDoc->GetValue(2, 0, 0));
+ CPPUNIT_ASSERT_EQUAL(2343.0, m_pDoc->GetValue(2, 1, 0));
+ CPPUNIT_ASSERT_EQUAL(57454.0, m_pDoc->GetValue(2, 2, 0));
+ CPPUNIT_ASSERT_EQUAL(-453.0, m_pDoc->GetValue(2, 3, 0));
+}
+
+void ScDataTransformationTest::testNumberRoundDown()
+{
+ m_pDoc->SetValue(2, 0, 0, 2034.34);
+ m_pDoc->SetValue(2, 1, 0, 2342.22);
+ m_pDoc->SetValue(2, 2, 0, 57453.65);
+ m_pDoc->SetValue(2, 3, 0, -453.22);
+
+ sc::NumberTransformation aTransform({2}, sc::NUMBER_TRANSFORM_TYPE::ROUND_DOWN);
+ aTransform.Transform(*m_pDoc);
+
+ CPPUNIT_ASSERT_EQUAL(2034.0, m_pDoc->GetValue(2, 0, 0));
+ CPPUNIT_ASSERT_EQUAL(2342.0, m_pDoc->GetValue(2, 1, 0));
+ CPPUNIT_ASSERT_EQUAL(57453.0, m_pDoc->GetValue(2, 2, 0));
+ CPPUNIT_ASSERT_EQUAL(-454.0, m_pDoc->GetValue(2, 3, 0));
+}
+
+void ScDataTransformationTest::testNumberAbsolute()
+{
+ m_pDoc->SetValue(2, 0, 0, 2034.34);
+ m_pDoc->SetValue(2, 1, 0, -2342.22);
+ m_pDoc->SetValue(2, 2, 0, 57453.65);
+ m_pDoc->SetValue(2, 3, 0, -453.22);
+
+ sc::NumberTransformation aTransform({2}, sc::NUMBER_TRANSFORM_TYPE::ABSOLUTE);
+ aTransform.Transform(*m_pDoc);
+
+ CPPUNIT_ASSERT_EQUAL(2034.34, m_pDoc->GetValue(2, 0, 0));
+ CPPUNIT_ASSERT_EQUAL(2342.22, m_pDoc->GetValue(2, 1, 0));
+ CPPUNIT_ASSERT_EQUAL(57453.65, m_pDoc->GetValue(2, 2, 0));
+ CPPUNIT_ASSERT_EQUAL(453.22, m_pDoc->GetValue(2, 3, 0));
+}
+
+void ScDataTransformationTest::testNumberLogE()
+{
+ m_pDoc->SetValue(2, 0, 0, 1);
+ m_pDoc->SetValue(2, 1, 0, 5);
+ m_pDoc->SetValue(2, 2, 0, -9);
+ m_pDoc->SetValue(2, 3, 0, 500);
+
+ sc::NumberTransformation aTransform({2}, sc::NUMBER_TRANSFORM_TYPE::LOG_E);
+ aTransform.Transform(*m_pDoc);
+
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(0, m_pDoc->GetValue(2, 0, 0), 1e-10);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(1.60943791243, m_pDoc->GetValue(2, 1, 0), 1e-10);
+ CPPUNIT_ASSERT_EQUAL(OUString(""), m_pDoc->GetString(2, 2, 0));
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(6.21460809842, m_pDoc->GetValue(2, 3, 0), 1e-10);
+}
+
+void ScDataTransformationTest::testNumberLog10()
+{
+ m_pDoc->SetValue(2, 0, 0, 1);
+ m_pDoc->SetValue(2, 1, 0, 10);
+ m_pDoc->SetValue(2, 2, 0, -9);
+ m_pDoc->SetValue(2, 3, 0, 500);
+
+ sc::NumberTransformation aTransform({2}, sc::NUMBER_TRANSFORM_TYPE::LOG_10);
+ aTransform.Transform(*m_pDoc);
+
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(0, m_pDoc->GetValue(2, 0, 0), 1e-10);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, m_pDoc->GetValue(2, 1, 0), 1e-10);
+ CPPUNIT_ASSERT_EQUAL(OUString(), m_pDoc->GetString(2, 2, 0));
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(2.69897000434, m_pDoc->GetValue(2, 3, 0), 1e-10);
+}
+
+void ScDataTransformationTest::testNumberCube()
+{
+ m_pDoc->SetValue(2, 0, 0, 2);
+ m_pDoc->SetValue(2, 1, 0, -2);
+ m_pDoc->SetValue(2, 2, 0, 8);
+ m_pDoc->SetValue(2, 3, 0, -8);
+
+ sc::NumberTransformation aTransform({2}, sc::NUMBER_TRANSFORM_TYPE::CUBE);
+ aTransform.Transform(*m_pDoc);
+
+ CPPUNIT_ASSERT_EQUAL(8.0, m_pDoc->GetValue(2, 0, 0));
+ CPPUNIT_ASSERT_EQUAL(-8.0, m_pDoc->GetValue(2, 1, 0));
+ CPPUNIT_ASSERT_EQUAL(512.0, m_pDoc->GetValue(2, 2, 0));
+ CPPUNIT_ASSERT_EQUAL(-512.0, m_pDoc->GetValue(2, 3, 0));
+}
+
+void ScDataTransformationTest::testNumberSquare()
+{
+ m_pDoc->SetValue(2, 0, 0, 2);
+ m_pDoc->SetValue(2, 1, 0, -2);
+ m_pDoc->SetValue(2, 2, 0, 8);
+ m_pDoc->SetValue(2, 3, 0, -8);
+
+ sc::NumberTransformation aTransform({2}, sc::NUMBER_TRANSFORM_TYPE::SQUARE);
+ aTransform.Transform(*m_pDoc);
+
+ CPPUNIT_ASSERT_EQUAL(4.0, m_pDoc->GetValue(2, 0, 0));
+ CPPUNIT_ASSERT_EQUAL(4.0, m_pDoc->GetValue(2, 1, 0));
+ CPPUNIT_ASSERT_EQUAL(64.0, m_pDoc->GetValue(2, 2, 0));
+ CPPUNIT_ASSERT_EQUAL(64.0, m_pDoc->GetValue(2, 3, 0));
+}
+
+void ScDataTransformationTest::testNumberSquareRoot()
+{
+ m_pDoc->SetValue(2, 0, 0, 8);
+ m_pDoc->SetValue(2, 1, 0, 4);
+ m_pDoc->SetValue(2, 2, 0, 9);
+
+ sc::NumberTransformation aTransform({2}, sc::NUMBER_TRANSFORM_TYPE::SQUARE_ROOT);
+ aTransform.Transform(*m_pDoc);
+
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(2.82842712475, m_pDoc->GetValue(2, 0, 0), 1e-10);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(2.0, m_pDoc->GetValue(2, 1, 0), 1e-10);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(3.0, m_pDoc->GetValue(2, 2, 0), 1e-10);
+}
+
+void ScDataTransformationTest::testNumberEven()
+{
+ m_pDoc->SetValue(2, 0, 0, 2034);
+ m_pDoc->SetValue(2, 1, 0, 2343);
+ m_pDoc->SetValue(2, 2, 0, 57453.65);
+ m_pDoc->SetValue(2, 3, 0, -453);
+
+ sc::NumberTransformation aTransform({2}, sc::NUMBER_TRANSFORM_TYPE::IS_EVEN);
+ aTransform.Transform(*m_pDoc);
+
+ CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc->GetValue(2, 0, 0));
+ CPPUNIT_ASSERT_EQUAL(0.0, m_pDoc->GetValue(2, 1, 0));
+ CPPUNIT_ASSERT_EQUAL(0.0, m_pDoc->GetValue(2, 2, 0));
+ CPPUNIT_ASSERT_EQUAL(0.0, m_pDoc->GetValue(2, 3, 0));
+}
+
+void ScDataTransformationTest::testNumberOdd()
+{
+ m_pDoc->SetValue(2, 0, 0, 2034);
+ m_pDoc->SetValue(2, 1, 0, 2343);
+ m_pDoc->SetValue(2, 2, 0, 57453.65);
+ m_pDoc->SetValue(2, 3, 0, -453);
+
+ sc::NumberTransformation aTransform({2}, sc::NUMBER_TRANSFORM_TYPE::IS_ODD);
+ aTransform.Transform(*m_pDoc);
+
+ CPPUNIT_ASSERT_EQUAL(0.0, m_pDoc->GetValue(2, 0, 0));
+ CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc->GetValue(2, 1, 0));
+ CPPUNIT_ASSERT_EQUAL(0.0, m_pDoc->GetValue(2, 2, 0));
+ CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc->GetValue(2, 3, 0));
+}
+
+void ScDataTransformationTest::testNumberSign()
+{
+ m_pDoc->SetValue(2, 0, 0, 2034.34);
+ m_pDoc->SetValue(2, 1, 0, -2342.22);
+ m_pDoc->SetValue(2, 2, 0, 0);
+ m_pDoc->SetValue(2, 3, 0, -453.22);
+
+ sc::NumberTransformation aTransform({2}, sc::NUMBER_TRANSFORM_TYPE::SIGN);
+ aTransform.Transform(*m_pDoc);
+
+ CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc->GetValue(2, 0, 0));
+ CPPUNIT_ASSERT_EQUAL(-1.0, m_pDoc->GetValue(2, 1, 0));
+ CPPUNIT_ASSERT_EQUAL(0.0, m_pDoc->GetValue(2, 2, 0));
+ CPPUNIT_ASSERT_EQUAL(-1.0, m_pDoc->GetValue(2, 3, 0));
+}
+
+void ScDataTransformationTest::testReplaceNull()
+{
+ m_pDoc->SetString(2, 0, 0, "Berlin");
+ m_pDoc->SetString(2, 1, 0, "");
+ m_pDoc->SetString(2, 2, 0, "");
+ m_pDoc->SetString(2, 3, 0, "Peking");
+
+ sc::ReplaceNullTransformation aTransform({2}, "Empty");
+ aTransform.Transform(*m_pDoc);
+
+ CPPUNIT_ASSERT_EQUAL(OUString("Berlin"), m_pDoc->GetString(2, 0, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("Empty"), m_pDoc->GetString(2, 1, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("Empty"), m_pDoc->GetString(2, 2, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("Peking"), m_pDoc->GetString(2, 3, 0));
+
+}
+
+void ScDataTransformationTest::testGetDateString()
+{
+ SvNumberFormatter* pFormatter = m_pDoc->GetFormatTable();
+ css::util::Date aDate1(25,1,2011);
+ css::util::Date aDate2(12,10,1994);
+ css::util::Date aDate3(23,9,1996);
+ css::util::Date aDate4(15,8,1947);
+
+ double nDate1 = static_cast<double>(aDate1 - pFormatter->GetNullDate());
+ double nDate2 = static_cast<double>(aDate2 - pFormatter->GetNullDate());
+ double nDate3 = static_cast<double>(aDate3 - pFormatter->GetNullDate());
+ double nDate4 = static_cast<double>(aDate4 - pFormatter->GetNullDate());
+
+ m_pDoc->SetValue(2, 0, 0, nDate1);
+ m_pDoc->SetValue(2, 1, 0, nDate2);
+ m_pDoc->SetValue(2, 2, 0, nDate3);
+ m_pDoc->SetValue(2, 3, 0, nDate4);
+
+ sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::DATE_STRING );
+ aTransform.Transform(*m_pDoc);
+
+ CPPUNIT_ASSERT_EQUAL(OUString("01/25/11"), m_pDoc->GetString(2, 0, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("10/12/94"), m_pDoc->GetString(2, 1, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("09/23/96"), m_pDoc->GetString(2, 2, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("08/15/47"), m_pDoc->GetString(2, 3, 0));
+}
+
+void ScDataTransformationTest::testGetYear()
+{
+ SvNumberFormatter* pFormatter = m_pDoc->GetFormatTable();
+ css::util::Date aDate1(25,1,2011);
+ css::util::Date aDate2(12,10,1994);
+ css::util::Date aDate3(23,9,1996);
+ css::util::Date aDate4(15,8,1947);
+
+ double nDate1 = static_cast<double>(aDate1 - pFormatter->GetNullDate());
+ double nDate2 = static_cast<double>(aDate2 - pFormatter->GetNullDate());
+ double nDate3 = static_cast<double>(aDate3 - pFormatter->GetNullDate());
+ double nDate4 = static_cast<double>(aDate4 - pFormatter->GetNullDate());
+
+ m_pDoc->SetValue(2, 0, 0, nDate1);
+ m_pDoc->SetValue(2, 1, 0, nDate2);
+ m_pDoc->SetValue(2, 2, 0, nDate3);
+ m_pDoc->SetValue(2, 3, 0, nDate4);
+
+ sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::YEAR );
+ aTransform.Transform(*m_pDoc);
+
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(2011, m_pDoc->GetValue(2, 0, 0), 0);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(1994, m_pDoc->GetValue(2, 1, 0), 0);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(1996, m_pDoc->GetValue(2, 2, 0), 0);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(1947, m_pDoc->GetValue(2, 3, 0), 0);
+}
+
+void ScDataTransformationTest::testGetStartOfYear()
+{
+ SvNumberFormatter* pFormatter = m_pDoc->GetFormatTable();
+ css::util::Date aDate1(25,1,2011);
+ css::util::Date aDate2(12,10,1994);
+ css::util::Date aDate3(23,9,1996);
+ css::util::Date aDate4(15,8,1947);
+
+ double nDate1 = static_cast<double>(aDate1 - pFormatter->GetNullDate());
+ double nDate2 = static_cast<double>(aDate2 - pFormatter->GetNullDate());
+ double nDate3 = static_cast<double>(aDate3 - pFormatter->GetNullDate());
+ double nDate4 = static_cast<double>(aDate4 - pFormatter->GetNullDate());
+
+ m_pDoc->SetValue(2, 0, 0, nDate1);
+ m_pDoc->SetValue(2, 1, 0, nDate2);
+ m_pDoc->SetValue(2, 2, 0, nDate3);
+ m_pDoc->SetValue(2, 3, 0, nDate4);
+
+ sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::START_OF_YEAR );
+ aTransform.Transform(*m_pDoc);
+
+ CPPUNIT_ASSERT_EQUAL(OUString("01/01/11"), m_pDoc->GetString(2, 0, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("01/01/94"), m_pDoc->GetString(2, 1, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("01/01/96"), m_pDoc->GetString(2, 2, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("01/01/47"), m_pDoc->GetString(2, 3, 0));
+}
+
+void ScDataTransformationTest::testGetEndOfYear()
+{
+ SvNumberFormatter* pFormatter = m_pDoc->GetFormatTable();
+ css::util::Date aDate1(25,1,2011);
+ css::util::Date aDate2(12,10,1994);
+ css::util::Date aDate3(23,9,1996);
+ css::util::Date aDate4(15,8,1947);
+
+ double nDate1 = static_cast<double>(aDate1 - pFormatter->GetNullDate());
+ double nDate2 = static_cast<double>(aDate2 - pFormatter->GetNullDate());
+ double nDate3 = static_cast<double>(aDate3 - pFormatter->GetNullDate());
+ double nDate4 = static_cast<double>(aDate4 - pFormatter->GetNullDate());
+
+ m_pDoc->SetValue(2, 0, 0, nDate1);
+ m_pDoc->SetValue(2, 1, 0, nDate2);
+ m_pDoc->SetValue(2, 2, 0, nDate3);
+ m_pDoc->SetValue(2, 3, 0, nDate4);
+
+ sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::END_OF_YEAR );
+ aTransform.Transform(*m_pDoc);
+
+ CPPUNIT_ASSERT_EQUAL(OUString("12/31/11"), m_pDoc->GetString(2, 0, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("12/31/94"), m_pDoc->GetString(2, 1, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("12/31/96"), m_pDoc->GetString(2, 2, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("12/31/47"), m_pDoc->GetString(2, 3, 0));
+}
+
+void ScDataTransformationTest::testGetMonth()
+{
+ SvNumberFormatter* pFormatter = m_pDoc->GetFormatTable();
+ css::util::Date aDate1(25,1,2011);
+ css::util::Date aDate2(12,10,1994);
+ css::util::Date aDate3(23,9,1996);
+ css::util::Date aDate4(15,8,1947);
+
+ double nDate1 = static_cast<double>(aDate1 - pFormatter->GetNullDate());
+ double nDate2 = static_cast<double>(aDate2 - pFormatter->GetNullDate());
+ double nDate3 = static_cast<double>(aDate3 - pFormatter->GetNullDate());
+ double nDate4 = static_cast<double>(aDate4 - pFormatter->GetNullDate());
+
+ m_pDoc->SetValue(2, 0, 0, nDate1);
+ m_pDoc->SetValue(2, 1, 0, nDate2);
+ m_pDoc->SetValue(2, 2, 0, nDate3);
+ m_pDoc->SetValue(2, 3, 0, nDate4);
+
+ sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::MONTH );
+ aTransform.Transform(*m_pDoc);
+
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(1, m_pDoc->GetValue(2, 0, 0), 0);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(10, m_pDoc->GetValue(2, 1, 0), 0);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(9, m_pDoc->GetValue(2, 2, 0), 0);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(8, m_pDoc->GetValue(2, 3, 0), 0);
+}
+
+void ScDataTransformationTest::testGetMonthName()
+{
+ SvNumberFormatter* pFormatter = m_pDoc->GetFormatTable();
+ css::util::Date aDate1(25,1,2011);
+ css::util::Date aDate2(12,10,1994);
+ css::util::Date aDate3(23,9,1996);
+ css::util::Date aDate4(15,8,1947);
+
+ double nDate1 = static_cast<double>(aDate1 - pFormatter->GetNullDate());
+ double nDate2 = static_cast<double>(aDate2 - pFormatter->GetNullDate());
+ double nDate3 = static_cast<double>(aDate3 - pFormatter->GetNullDate());
+ double nDate4 = static_cast<double>(aDate4 - pFormatter->GetNullDate());
+
+ m_pDoc->SetValue(2, 0, 0, nDate1);
+ m_pDoc->SetValue(2, 1, 0, nDate2);
+ m_pDoc->SetValue(2, 2, 0, nDate3);
+ m_pDoc->SetValue(2, 3, 0, nDate4);
+
+ sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::MONTH_NAME);
+ aTransform.Transform(*m_pDoc);
+
+ CPPUNIT_ASSERT_EQUAL(OUString("January"), m_pDoc->GetString(2, 0, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("October"), m_pDoc->GetString(2, 1, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("September"), m_pDoc->GetString(2, 2, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("August"), m_pDoc->GetString(2, 3, 0));
+}
+
+void ScDataTransformationTest::testGetStartOfMonth()
+{
+ SvNumberFormatter* pFormatter = m_pDoc->GetFormatTable();
+ css::util::Date aDate1(25,1,2011);
+ css::util::Date aDate2(12,10,1994);
+ css::util::Date aDate3(23,9,1996);
+ css::util::Date aDate4(15,8,1947);
+
+ double nDate1 = static_cast<double>(aDate1 - pFormatter->GetNullDate());
+ double nDate2 = static_cast<double>(aDate2 - pFormatter->GetNullDate());
+ double nDate3 = static_cast<double>(aDate3 - pFormatter->GetNullDate());
+ double nDate4 = static_cast<double>(aDate4 - pFormatter->GetNullDate());
+
+ m_pDoc->SetValue(2, 0, 0, nDate1);
+ m_pDoc->SetValue(2, 1, 0, nDate2);
+ m_pDoc->SetValue(2, 2, 0, nDate3);
+ m_pDoc->SetValue(2, 3, 0, nDate4);
+
+ sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::START_OF_MONTH );
+ aTransform.Transform(*m_pDoc);
+
+ CPPUNIT_ASSERT_EQUAL(OUString("01/01/11"), m_pDoc->GetString(2, 0, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("10/01/94"), m_pDoc->GetString(2, 1, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("09/01/96"), m_pDoc->GetString(2, 2, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("08/01/47"), m_pDoc->GetString(2, 3, 0));
+}
+
+void ScDataTransformationTest::testGetEndOfMonth()
+{
+ SvNumberFormatter* pFormatter = m_pDoc->GetFormatTable();
+ css::util::Date aDate1(25,1,2011);
+ css::util::Date aDate2(12,10,1994);
+ css::util::Date aDate3(23,9,1996);
+ css::util::Date aDate4(15,8,1947);
+
+ double nDate1 = static_cast<double>(aDate1 - pFormatter->GetNullDate());
+ double nDate2 = static_cast<double>(aDate2 - pFormatter->GetNullDate());
+ double nDate3 = static_cast<double>(aDate3 - pFormatter->GetNullDate());
+ double nDate4 = static_cast<double>(aDate4 - pFormatter->GetNullDate());
+
+ m_pDoc->SetValue(2, 0, 0, nDate1);
+ m_pDoc->SetValue(2, 1, 0, nDate2);
+ m_pDoc->SetValue(2, 2, 0, nDate3);
+ m_pDoc->SetValue(2, 3, 0, nDate4);
+
+ sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::END_OF_MONTH );
+ aTransform.Transform(*m_pDoc);
+
+ CPPUNIT_ASSERT_EQUAL(OUString("01/31/11"), m_pDoc->GetString(2, 0, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("10/31/94"), m_pDoc->GetString(2, 1, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("09/30/96"), m_pDoc->GetString(2, 2, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("08/31/47"), m_pDoc->GetString(2, 3, 0));
+}
+
+void ScDataTransformationTest::testGetDay()
+{
+ SvNumberFormatter* pFormatter = m_pDoc->GetFormatTable();
+ css::util::Date aDate1(25,1,2011);
+ css::util::Date aDate2(12,10,1994);
+ css::util::Date aDate3(23,9,1996);
+ css::util::Date aDate4(15,8,1947);
+
+ double nDate1 = static_cast<double>(aDate1 - pFormatter->GetNullDate());
+ double nDate2 = static_cast<double>(aDate2 - pFormatter->GetNullDate());
+ double nDate3 = static_cast<double>(aDate3 - pFormatter->GetNullDate());
+ double nDate4 = static_cast<double>(aDate4 - pFormatter->GetNullDate());
+
+ m_pDoc->SetValue(2, 0, 0, nDate1);
+ m_pDoc->SetValue(2, 1, 0, nDate2);
+ m_pDoc->SetValue(2, 2, 0, nDate3);
+ m_pDoc->SetValue(2, 3, 0, nDate4);
+
+ sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::DAY );
+ aTransform.Transform(*m_pDoc);
+
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(25, m_pDoc->GetValue(2, 0, 0), 0);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(12, m_pDoc->GetValue(2, 1, 0), 0);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(23, m_pDoc->GetValue(2, 2, 0), 0);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(15, m_pDoc->GetValue(2, 3, 0), 0);
+}
+
+void ScDataTransformationTest::testGetDayOfWeek()
+{
+ SvNumberFormatter* pFormatter = m_pDoc->GetFormatTable();
+ css::util::Date aDate1(25,1,2011);
+ css::util::Date aDate2(12,10,1994);
+ css::util::Date aDate3(23,9,1996);
+ css::util::Date aDate4(15,8,1947);
+
+ double nDate1 = static_cast<double>(aDate1 - pFormatter->GetNullDate());
+ double nDate2 = static_cast<double>(aDate2 - pFormatter->GetNullDate());
+ double nDate3 = static_cast<double>(aDate3 - pFormatter->GetNullDate());
+ double nDate4 = static_cast<double>(aDate4 - pFormatter->GetNullDate());
+
+ m_pDoc->SetValue(2, 0, 0, nDate1);
+ m_pDoc->SetValue(2, 1, 0, nDate2);
+ m_pDoc->SetValue(2, 2, 0, nDate3);
+ m_pDoc->SetValue(2, 3, 0, nDate4);
+
+ sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::DAY_OF_WEEK );
+ aTransform.Transform(*m_pDoc);
+
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(1, m_pDoc->GetValue(2, 0, 0), 0);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(2, m_pDoc->GetValue(2, 1, 0), 0);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(0, m_pDoc->GetValue(2, 2, 0), 0);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(4, m_pDoc->GetValue(2, 3, 0), 0);
+}
+
+void ScDataTransformationTest::testGetDayOfYear()
+{
+ SvNumberFormatter* pFormatter = m_pDoc->GetFormatTable();
+ css::util::Date aDate1(25,1,2011);
+ css::util::Date aDate2(12,10,1994);
+ css::util::Date aDate3(23,9,1996);
+ css::util::Date aDate4(15,8,1947);
+
+ double nDate1 = static_cast<double>(aDate1 - pFormatter->GetNullDate());
+ double nDate2 = static_cast<double>(aDate2 - pFormatter->GetNullDate());
+ double nDate3 = static_cast<double>(aDate3 - pFormatter->GetNullDate());
+ double nDate4 = static_cast<double>(aDate4 - pFormatter->GetNullDate());
+
+ m_pDoc->SetValue(2, 0, 0, nDate1);
+ m_pDoc->SetValue(2, 1, 0, nDate2);
+ m_pDoc->SetValue(2, 2, 0, nDate3);
+ m_pDoc->SetValue(2, 3, 0, nDate4);
+
+ sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::DAY_OF_YEAR );
+ aTransform.Transform(*m_pDoc);
+
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(25, m_pDoc->GetValue(2, 0, 0), 0);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(285, m_pDoc->GetValue(2, 1, 0), 0);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(267, m_pDoc->GetValue(2, 2, 0), 0);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(227, m_pDoc->GetValue(2, 3, 0), 0);
+}
+
+void ScDataTransformationTest::testGetQuarter()
+{
+ SvNumberFormatter* pFormatter = m_pDoc->GetFormatTable();
+ css::util::Date aDate1(25,1,2011);
+ css::util::Date aDate2(12,10,1994);
+ css::util::Date aDate3(23,9,1996);
+ css::util::Date aDate4(15,8,1947);
+
+ double nDate1 = static_cast<double>(aDate1 - pFormatter->GetNullDate());
+ double nDate2 = static_cast<double>(aDate2 - pFormatter->GetNullDate());
+ double nDate3 = static_cast<double>(aDate3 - pFormatter->GetNullDate());
+ double nDate4 = static_cast<double>(aDate4 - pFormatter->GetNullDate());
+
+ m_pDoc->SetValue(2, 0, 0, nDate1);
+ m_pDoc->SetValue(2, 1, 0, nDate2);
+ m_pDoc->SetValue(2, 2, 0, nDate3);
+ m_pDoc->SetValue(2, 3, 0, nDate4);
+
+ sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::QUARTER );
+ aTransform.Transform(*m_pDoc);
+
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(1, m_pDoc->GetValue(2, 0, 0), 0);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(4, m_pDoc->GetValue(2, 1, 0), 0);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(3, m_pDoc->GetValue(2, 2, 0), 0);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(3, m_pDoc->GetValue(2, 3, 0), 0);
+}
+
+void ScDataTransformationTest::testGetStartOfQuarter()
+{
+ SvNumberFormatter* pFormatter = m_pDoc->GetFormatTable();
+ css::util::Date aDate1(25,1,2011);
+ css::util::Date aDate2(12,10,1994);
+ css::util::Date aDate3(23,9,1996);
+ css::util::Date aDate4(15,8,1947);
+
+ double nDate1 = static_cast<double>(aDate1 - pFormatter->GetNullDate());
+ double nDate2 = static_cast<double>(aDate2 - pFormatter->GetNullDate());
+ double nDate3 = static_cast<double>(aDate3 - pFormatter->GetNullDate());
+ double nDate4 = static_cast<double>(aDate4 - pFormatter->GetNullDate());
+
+ m_pDoc->SetValue(2, 0, 0, nDate1);
+ m_pDoc->SetValue(2, 1, 0, nDate2);
+ m_pDoc->SetValue(2, 2, 0, nDate3);
+ m_pDoc->SetValue(2, 3, 0, nDate4);
+
+ sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::START_OF_QUARTER );
+ aTransform.Transform(*m_pDoc);
+
+ CPPUNIT_ASSERT_EQUAL(OUString("01/01/11"), m_pDoc->GetString(2, 0, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("10/01/94"), m_pDoc->GetString(2, 1, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("07/01/96"), m_pDoc->GetString(2, 2, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("07/01/47"), m_pDoc->GetString(2, 3, 0));
+}
+
+void ScDataTransformationTest::testGetEndOfQuarter()
+{
+ SvNumberFormatter* pFormatter = m_pDoc->GetFormatTable();
+ css::util::Date aDate1(25,1,2011);
+ css::util::Date aDate2(12,10,1994);
+ css::util::Date aDate3(23,9,1996);
+ css::util::Date aDate4(15,8,1947);
+
+ double nDate1 = static_cast<double>(aDate1 - pFormatter->GetNullDate());
+ double nDate2 = static_cast<double>(aDate2 - pFormatter->GetNullDate());
+ double nDate3 = static_cast<double>(aDate3 - pFormatter->GetNullDate());
+ double nDate4 = static_cast<double>(aDate4 - pFormatter->GetNullDate());
+
+ m_pDoc->SetValue(2, 0, 0, nDate1);
+ m_pDoc->SetValue(2, 1, 0, nDate2);
+ m_pDoc->SetValue(2, 2, 0, nDate3);
+ m_pDoc->SetValue(2, 3, 0, nDate4);
+
+ sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::END_OF_QUARTER );
+ aTransform.Transform(*m_pDoc);
+
+ CPPUNIT_ASSERT_EQUAL(OUString("03/31/11"), m_pDoc->GetString(2, 0, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("12/31/94"), m_pDoc->GetString(2, 1, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("09/30/96"), m_pDoc->GetString(2, 2, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("09/30/47"), m_pDoc->GetString(2, 3, 0));
+}
+
+void ScDataTransformationTest::testGetTime()
+{
+ tools::Time aTime1(5,30,12);
+ tools::Time aTime2(7,23,9);
+ tools::Time aTime3(9,34,40);
+ tools::Time aTime4(22,9,49);
+
+ m_pDoc->SetValue(2, 0, 0, aTime1.GetTimeInDays());
+ m_pDoc->SetValue(2, 1, 0, aTime2.GetTimeInDays());
+ m_pDoc->SetValue(2, 2, 0, aTime3.GetTimeInDays());
+ m_pDoc->SetValue(2, 3, 0, aTime4.GetTimeInDays());
+
+ sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::TIME );
+ aTransform.Transform(*m_pDoc);
+
+ CPPUNIT_ASSERT_EQUAL(OUString("05:30:12 AM"), m_pDoc->GetString(2, 0, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("07:23:09 AM"), m_pDoc->GetString(2, 1, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("09:34:40 AM"), m_pDoc->GetString(2, 2, 0));
+ CPPUNIT_ASSERT_EQUAL(OUString("10:09:49 PM"), m_pDoc->GetString(2, 3, 0));
+}
+
+void ScDataTransformationTest::testGetHour()
+{
+ tools::Time aTime1(5,30,12);
+ tools::Time aTime2(7,23,9);
+ tools::Time aTime3(9,34,40);
+ tools::Time aTime4(22,9,49);
+
+ m_pDoc->SetValue(2, 0, 0, aTime1.GetTimeInDays());
+ m_pDoc->SetValue(2, 1, 0, aTime2.GetTimeInDays());
+ m_pDoc->SetValue(2, 2, 0, aTime3.GetTimeInDays());
+ m_pDoc->SetValue(2, 3, 0, aTime4.GetTimeInDays());
+
+ sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::HOUR );
+ aTransform.Transform(*m_pDoc);
+
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(5, m_pDoc->GetValue(2, 0, 0), 0);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(7, m_pDoc->GetValue(2, 1, 0), 0);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(9, m_pDoc->GetValue(2, 2, 0), 0);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(22, m_pDoc->GetValue(2, 3, 0), 0);
+}
+
+void ScDataTransformationTest::testGetMinute()
+{
+ tools::Time aTime1(5,30,12);
+ tools::Time aTime2(7,23,9);
+ tools::Time aTime3(9,34,40);
+ tools::Time aTime4(22,9,49);
+
+ m_pDoc->SetValue(2, 0, 0, aTime1.GetTimeInDays());
+ m_pDoc->SetValue(2, 1, 0, aTime2.GetTimeInDays());
+ m_pDoc->SetValue(2, 2, 0, aTime3.GetTimeInDays());
+ m_pDoc->SetValue(2, 3, 0, aTime4.GetTimeInDays());
+
+ sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::MINUTE );
+ aTransform.Transform(*m_pDoc);
+
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(30, m_pDoc->GetValue(2, 0, 0), 0);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(23, m_pDoc->GetValue(2, 1, 0), 0);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(34, m_pDoc->GetValue(2, 2, 0), 0);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(9, m_pDoc->GetValue(2, 3, 0), 0);
+}
+
+void ScDataTransformationTest::testGetSecond()
+{
+ tools::Time aTime1(5,30,53);
+ tools::Time aTime2(7,23,10);
+ tools::Time aTime3(9,34,40);
+ tools::Time aTime4(22,9,49);
+
+ m_pDoc->SetValue(2, 0, 0, aTime1.GetTimeInDays());
+ m_pDoc->SetValue(2, 1, 0, aTime2.GetTimeInDays());
+ m_pDoc->SetValue(2, 2, 0, aTime3.GetTimeInDays());
+ m_pDoc->SetValue(2, 3, 0, aTime4.GetTimeInDays());
+
+ sc:: DateTimeTransformation aTransform({2}, sc::DATETIME_TRANSFORMATION_TYPE::SECOND );
+ aTransform.Transform(*m_pDoc);
+
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(53, m_pDoc->GetValue(2, 0, 0), 0);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(10, m_pDoc->GetValue(2, 1, 0), 0);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(40, m_pDoc->GetValue(2, 2, 0), 0);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(49, m_pDoc->GetValue(2, 3, 0), 0);
+}
+
+ScDataTransformationTest::ScDataTransformationTest() :
+ ScBootstrapFixture( "sc/qa/unit/data/dataprovider" ),
+ m_pDoc(nullptr)
+{
+}
+
+void ScDataTransformationTest::setUp()
+{
+ ScBootstrapFixture::setUp();
+
+ ScDLL::Init();
+ m_xDocShell = new ScDocShell(
+ SfxModelFlags::EMBEDDED_OBJECT |
+ SfxModelFlags::DISABLE_EMBEDDED_SCRIPTS |
+ SfxModelFlags::DISABLE_DOCUMENT_RECOVERY);
+
+ m_xDocShell->SetIsInUcalc();
+ m_xDocShell->DoInitUnitTest();
+ m_pDoc = &m_xDocShell->GetDocument();
+ m_pDoc->InsertTab(0, "Tab");
+}
+
+void ScDataTransformationTest::tearDown()
+{
+ m_xDocShell->DoClose();
+ m_xDocShell.clear();
+ ScBootstrapFixture::tearDown();
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(ScDataTransformationTest);
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */