[Libreoffice-commits] core.git: 2 commits - sc/qa sc/source

Kohei Yoshida kohei.yoshida at collabora.com
Mon Feb 17 18:19:49 CET 2014


 sc/qa/unit/ucalc.cxx          |   64 ++++++++++++++++++++++++++++++++++--------
 sc/source/ui/undo/undoblk.cxx |    5 ++-
 2 files changed, 57 insertions(+), 12 deletions(-)

New commits:
commit 9e49b6abe7cedd2ac7137170f76ec5d7e14bd295
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date:   Mon Feb 17 12:20:57 2014 -0500

    fdo#75032: Skip notes when copying values from undo document.
    
    Notes undo redo are handled separately by the drawing layer.
    
    Change-Id: Iae37ac86889d7a25f25e6dd0b69f724107c6798a

diff --git a/sc/source/ui/undo/undoblk.cxx b/sc/source/ui/undo/undoblk.cxx
index 2b30fed..694e171 100644
--- a/sc/source/ui/undo/undoblk.cxx
+++ b/sc/source/ui/undo/undoblk.cxx
@@ -414,8 +414,11 @@ void ScUndoDeleteCells::DoChange( const sal_Bool bUndo )
     // if Undo, restore references
     for( i=0; i<nCount && bUndo; i++ )
     {
+        // Cell note objects are handled separately.  Ignore them here.
+        sal_uInt16 nFlags = IDF_ALL;
+        nFlags &= ~IDF_NOTE;
         pRefUndoDoc->CopyToDocument( aEffRange.aStart.Col(), aEffRange.aStart.Row(), pTabs[i], aEffRange.aEnd.Col(), aEffRange.aEnd.Row(), pTabs[i]+pScenarios[i],
-            IDF_ALL | IDF_NOCAPTIONS, false, pDoc );
+            nFlags, false, pDoc );
     }
 
     ScRange aWorkRange( aEffRange );
commit 6a5df6427913af1df99e770ea68daaeeeea02e7c
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date:   Mon Feb 17 11:38:35 2014 -0500

    fdo#75032: Add a test case to reproduce the crash.
    
    Change-Id: I1bb980e9872515a8684014a0e0be9fd4c717f9fd

diff --git a/sc/qa/unit/ucalc.cxx b/sc/qa/unit/ucalc.cxx
index a8ec5e2..67c6e8a 100644
--- a/sc/qa/unit/ucalc.cxx
+++ b/sc/qa/unit/ucalc.cxx
@@ -4885,30 +4885,72 @@ void Test::testNoteBasic()
 
 void Test::testNoteDeleteRow()
 {
-    ScDocument* pDoc = getDocShell().GetDocument();
     OUString aSheet1("Sheet1");
-    pDoc->InsertTab(0, aSheet1);
+    m_pDoc->InsertTab(0, aSheet1);
+
+    // We need a drawing layer in order to create caption objects.
+    m_pDoc->InitDrawLayer(&getDocShell());
 
     OUString aHello("Hello");
     OUString aJimBob("Jim Bob");
-    ScAddress rAddr(1, 1, 0);
-    ScPostIt* pNote = m_pDoc->GetOrCreateNote(rAddr);
-    pNote->SetText(rAddr, aHello);
+    ScAddress aPos(1, 1, 0);
+    ScPostIt* pNote = m_pDoc->GetOrCreateNote(aPos);
+    pNote->SetText(aPos, aHello);
     pNote->SetAuthor(aJimBob);
 
-    CPPUNIT_ASSERT_MESSAGE("there should be a note", pDoc->HasNote(1, 1, 0));
+    CPPUNIT_ASSERT_MESSAGE("there should be a note", m_pDoc->HasNote(1, 1, 0));
 
     // test with IsBlockEmpty
     bool bIgnoreNotes = true;
-    CPPUNIT_ASSERT_MESSAGE("The Block should be detected as empty (no Notes)", pDoc->IsBlockEmpty(0, 0, 0, 100, 100, bIgnoreNotes));
+    CPPUNIT_ASSERT_MESSAGE("The Block should be detected as empty (no Notes)", m_pDoc->IsBlockEmpty(0, 0, 0, 100, 100, bIgnoreNotes));
     bIgnoreNotes = false;
-    CPPUNIT_ASSERT_MESSAGE("The Block should NOT be detected as empty", !pDoc->IsBlockEmpty(0, 0, 0, 100, 100, bIgnoreNotes));
+    CPPUNIT_ASSERT_MESSAGE("The Block should NOT be detected as empty", !m_pDoc->IsBlockEmpty(0, 0, 0, 100, 100, bIgnoreNotes));
 
-    pDoc->DeleteRow(0, 0, MAXCOL, 0, 1, 1);
+    m_pDoc->DeleteRow(0, 0, MAXCOL, 0, 1, 1);
 
-    CPPUNIT_ASSERT_MESSAGE("there should be no more note", !pDoc->HasNote(1, 1, 0));
+    CPPUNIT_ASSERT_MESSAGE("there should be no more note", !m_pDoc->HasNote(1, 1, 0));
 
-    pDoc->DeleteTab(0);
+    // Set values and notes into B3:B4.
+    aPos = ScAddress(1,2,0); // B3
+    m_pDoc->SetString(aPos, "First");
+    ScNoteUtil::CreateNoteFromString(*m_pDoc, aPos, "First Note", false, false);
+
+    aPos = ScAddress(1,3,0); // B4
+    m_pDoc->SetString(aPos, "Second");
+    ScNoteUtil::CreateNoteFromString(*m_pDoc, aPos, "Second Note", false, false);
+
+    ScDocFunc& rDocFunc = getDocShell().GetDocFunc();
+    ScMarkData aMark;
+    aMark.SelectOneTable(0);
+    rDocFunc.DeleteCells(ScRange(0,1,0,MAXCOL,1,0), &aMark, DEL_CELLSUP, true, true);
+
+    // Check to make sure the notes have shifted upward.
+    pNote = m_pDoc->GetNote(ScAddress(1,1,0));
+    CPPUNIT_ASSERT_MESSAGE("B2 should have a note.", pNote);
+    CPPUNIT_ASSERT_EQUAL(OUString("First Note"), pNote->GetText());
+    pNote = m_pDoc->GetNote(ScAddress(1,2,0));
+    CPPUNIT_ASSERT_MESSAGE("B3 should have a note.", pNote);
+    CPPUNIT_ASSERT_EQUAL(OUString("Second Note"), pNote->GetText());
+    pNote = m_pDoc->GetNote(ScAddress(1,3,0));
+    CPPUNIT_ASSERT_MESSAGE("B4 should NOT have a note.", !pNote);
+
+    // Undo.
+
+    SfxUndoManager* pUndoMgr = m_pDoc->GetUndoManager();
+    CPPUNIT_ASSERT_MESSAGE("Failed to get undo manager.", pUndoMgr);
+    m_pDoc->CreateAllNoteCaptions(); // to make sure that all notes have their corresponding caption objects...
+
+    pUndoMgr->Undo();
+    pNote = m_pDoc->GetNote(ScAddress(1,1,0));
+    CPPUNIT_ASSERT_MESSAGE("B2 should NOT have a note.", !pNote);
+    pNote = m_pDoc->GetNote(ScAddress(1,2,0));
+    CPPUNIT_ASSERT_MESSAGE("B3 should have a note.", pNote);
+    CPPUNIT_ASSERT_EQUAL(OUString("First Note"), pNote->GetText());
+    pNote = m_pDoc->GetNote(ScAddress(1,3,0));
+    CPPUNIT_ASSERT_MESSAGE("B4 should have a note.", pNote);
+    CPPUNIT_ASSERT_EQUAL(OUString("Second Note"), pNote->GetText());
+
+    m_pDoc->DeleteTab(0);
 }
 
 void Test::testNoteDeleteCol()


More information about the Libreoffice-commits mailing list