summaryrefslogtreecommitdiff
path: root/sc/qa/unit/ucalc.cxx
diff options
context:
space:
mode:
authorKohei Yoshida <kohei.yoshida@suse.com>2012-01-06 23:59:40 -0500
committerKohei Yoshida <kohei.yoshida@suse.com>2012-01-07 00:01:08 -0500
commitf0c9362d9dca4bda4f3d87e181a2b59fcc08d7d2 (patch)
tree3c4c257acd1ec2315a57e6c845be135642c35601 /sc/qa/unit/ucalc.cxx
parent60c968e9a2ef14aa289e677bd7f40d2c4724fd12 (diff)
New unit test code for drawing objects.
Diffstat (limited to 'sc/qa/unit/ucalc.cxx')
-rw-r--r--sc/qa/unit/ucalc.cxx117
1 files changed, 97 insertions, 20 deletions
diff --git a/sc/qa/unit/ucalc.cxx b/sc/qa/unit/ucalc.cxx
index 5471c47bfb16..1adc2bf0eb27 100644
--- a/sc/qa/unit/ucalc.cxx
+++ b/sc/qa/unit/ucalc.cxx
@@ -65,6 +65,7 @@
#include <svx/svdograf.hxx>
#include <svx/svdpage.hxx>
+#include <svx/svdocirc.hxx>
#include <sfx2/docfile.hxx>
@@ -151,6 +152,7 @@ public:
void testFunctionLists();
void testGraphicsInGroup();
+ void testGraphicsOnSheetMove();
void testPostIts();
@@ -186,6 +188,7 @@ public:
CPPUNIT_TEST(testExternalRefFunctions);
CPPUNIT_TEST(testDataArea);
CPPUNIT_TEST(testGraphicsInGroup);
+ CPPUNIT_TEST(testGraphicsOnSheetMove);
CPPUNIT_TEST(testPostIts);
CPPUNIT_TEST(testStreamValid);
CPPUNIT_TEST(testFunctionLists);
@@ -2447,32 +2450,106 @@ void Test::testGraphicsInGroup()
SdrPage* pPage = pDrawLayer->GetPage(0);
CPPUNIT_ASSERT_MESSAGE("must have a draw page", pPage != NULL);
- //Add a square
- Rectangle aOrigRect(2,2,100,100);
- SdrRectObj *pObj = new SdrRectObj(aOrigRect);
- pPage->InsertObject(pObj);
- const Rectangle &rNewRect = pObj->GetLogicRect();
- CPPUNIT_ASSERT_MESSAGE("must have equal position and size", aOrigRect == rNewRect);
+ {
+ //Add a square
+ Rectangle aOrigRect(2,2,100,100);
+ SdrRectObj *pObj = new SdrRectObj(aOrigRect);
+ pPage->InsertObject(pObj);
+ const Rectangle &rNewRect = pObj->GetLogicRect();
+ CPPUNIT_ASSERT_MESSAGE("must have equal position and size", aOrigRect == rNewRect);
+
+ ScDrawLayer::SetPageAnchored(*pObj);
+
+ //Use a range of rows guaranteed to include all of the square
+ m_pDoc->ShowRows(0, 100, 0, false);
+ CPPUNIT_ASSERT_MESSAGE("Should not change when page anchored", aOrigRect == rNewRect);
+ m_pDoc->ShowRows(0, 100, 0, true);
+ CPPUNIT_ASSERT_MESSAGE("Should not change when page anchored", aOrigRect == rNewRect);
+
+ ScDrawLayer::SetCellAnchoredFromPosition(*pObj, *m_pDoc, 0);
+ CPPUNIT_ASSERT_MESSAGE("That shouldn't change size or positioning", aOrigRect == rNewRect);
+
+ m_pDoc->ShowRows(0, 100, 0, false);
+ CPPUNIT_ASSERT_MESSAGE("Left and Right should be unchanged",
+ aOrigRect.nLeft == rNewRect.nLeft && aOrigRect.nRight == rNewRect.nRight);
+ CPPUNIT_ASSERT_MESSAGE("Height should be minimum allowed height",
+ (rNewRect.nBottom - rNewRect.nTop) <= 1);
+ m_pDoc->ShowRows(0, 100, 0, true);
+ CPPUNIT_ASSERT_MESSAGE("Should not change when page anchored", aOrigRect == rNewRect);
+ }
- ScDrawLayer::SetPageAnchored(*pObj);
+ {
+ // Add a circle.
+ Rectangle aOrigRect = Rectangle(10,10,210,210); // 200 x 200
+ SdrCircObj* pObj = new SdrCircObj(OBJ_CIRC, aOrigRect);
+ pPage->InsertObject(pObj);
+ const Rectangle& rNewRect = pObj->GetLogicRect();
+ CPPUNIT_ASSERT_MESSAGE("Position and size of the circle shouldn't change when inserted into the page.",
+ aOrigRect == rNewRect);
+
+ ScDrawLayer::SetCellAnchoredFromPosition(*pObj, *m_pDoc, 0);
+ CPPUNIT_ASSERT_MESSAGE("Size changed when cell anchored. Not good.",
+ aOrigRect == rNewRect);
+
+ // Insert 2 rows at the top. This should push the circle object down.
+ m_pDoc->InsertRow(0, 0, MAXCOL, 0, 0, 2);
+
+ // Make sure the size of the circle is still identical.
+ CPPUNIT_ASSERT_MESSAGE("Size of the circle has changed, but shouldn't!",
+ aOrigRect.GetSize() == rNewRect.GetSize());
+
+ // Delete 2 rows at the top. This should bring the circle object to its original position.
+ m_pDoc->DeleteRow(0, 0, MAXCOL, 0, 0, 2);
+ CPPUNIT_ASSERT_MESSAGE("Failed to move back to its original position.", aOrigRect == rNewRect);
+ }
- //Use a range of rows guaranteed to include all of the square
- m_pDoc->ShowRows(0, 100, 0, false);
- CPPUNIT_ASSERT_MESSAGE("Should not change when page anchored", aOrigRect == rNewRect);
- m_pDoc->ShowRows(0, 100, 0, true);
- CPPUNIT_ASSERT_MESSAGE("Should not change when page anchored", aOrigRect == rNewRect);
+ m_pDoc->DeleteTab(0);
+}
+void Test::testGraphicsOnSheetMove()
+{
+ m_pDoc->InsertTab(0, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Tab1")));
+ m_pDoc->InsertTab(1, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Tab2")));
+ CPPUNIT_ASSERT_MESSAGE("There should be only 2 sheets to begin with", m_pDoc->GetTableCount() == 2);
+
+ m_pDoc->InitDrawLayer();
+ ScDrawLayer* pDrawLayer = m_pDoc->GetDrawLayer();
+ CPPUNIT_ASSERT_MESSAGE("No drawing layer.", pDrawLayer);
+ SdrPage* pPage = pDrawLayer->GetPage(0);
+ CPPUNIT_ASSERT_MESSAGE("No page instance for the 1st sheet.", pPage);
+
+ // Insert an object.
+ Rectangle aObjRect(2,2,100,100);
+ SdrRectObj* pObj = new SdrRectObj(aObjRect);
+ pPage->InsertObject(pObj);
ScDrawLayer::SetCellAnchoredFromPosition(*pObj, *m_pDoc, 0);
- CPPUNIT_ASSERT_MESSAGE("That shouldn't change size or positioning", aOrigRect == rNewRect);
- m_pDoc->ShowRows(0, 100, 0, false);
- CPPUNIT_ASSERT_MESSAGE("Left and Right should be unchanged",
- aOrigRect.nLeft == rNewRect.nLeft && aOrigRect.nRight == rNewRect.nRight);
- CPPUNIT_ASSERT_MESSAGE("Height should be minimum allowed height",
- (rNewRect.nBottom - rNewRect.nTop) <= 1);
- m_pDoc->ShowRows(0, 100, 0, true);
- CPPUNIT_ASSERT_MESSAGE("Should not change when page anchored", aOrigRect == rNewRect);
+ CPPUNIT_ASSERT_MESSAGE("There should be one object on the 1st sheet.", pPage->GetObjCount() == 1);
+
+ pPage = pDrawLayer->GetPage(1);
+ CPPUNIT_ASSERT_MESSAGE("No page instance for the 2nd sheet.", pPage);
+ CPPUNIT_ASSERT_MESSAGE("2nd sheet shouldn't have any object.", pPage->GetObjCount() == 0);
+
+ // Insert a new sheet at left-end, and make sure the object has moved to
+ // the 2nd page.
+ m_pDoc->InsertTab(0, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("NewTab")));
+ CPPUNIT_ASSERT_MESSAGE("There should be 3 sheets.", m_pDoc->GetTableCount() == 3);
+ pPage = pDrawLayer->GetPage(0);
+ CPPUNIT_ASSERT_MESSAGE("1st sheet should have no object.", pPage && pPage->GetObjCount() == 0);
+ pPage = pDrawLayer->GetPage(1);
+ CPPUNIT_ASSERT_MESSAGE("2nd sheet should have one object.", pPage && pPage->GetObjCount() == 1);
+ pPage = pDrawLayer->GetPage(2);
+ CPPUNIT_ASSERT_MESSAGE("3rd sheet should have no object.", pPage && pPage->GetObjCount() == 0);
+
+ // Now, delete the sheet that just got inserted. The object should be back
+ // on the 1st sheet.
+ m_pDoc->DeleteTab(0);
+ pPage = pDrawLayer->GetPage(0);
+ CPPUNIT_ASSERT_MESSAGE("1st sheet should have one object.", pPage && pPage->GetObjCount() == 1);
+ CPPUNIT_ASSERT_MESSAGE("Size and position of the object shouldn't change.",
+ pObj->GetLogicRect() == aObjRect);
+ m_pDoc->DeleteTab(1);
m_pDoc->DeleteTab(0);
}