desktop/qa/desktop_lib/test_desktop_lib.cxx |  181 ++++++++++++++--------------
 1 file changed, 92 insertions(+), 89 deletions(-)

New commits:
commit ecda8127d8c3c3676a5af6e3d6b3dce243366898
Author:     Tor Lillqvist <t...@collabora.com>
AuthorDate: Thu Sep 3 21:51:16 2020 +0300
Commit:     Tor Lillqvist <t...@collabora.com>
CommitDate: Fri Sep 4 08:45:41 2020 +0200

    Test also that loading more documents after closing all open ones works
    
    Just run the code in DesktopLOKTest::testMultiDocuments() in a short
    loop.
    
    Sadly this did not find the actual problem that is present in the
    code, though. (A follow-up commit will fix that problem, and then I
    might also change this unit test so that it would have found that
    problem.)
    
    Change-Id: Ie847d04e77ea3d712820413fa0f00521207eb7de
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/102018
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Reviewed-by: Tor Lillqvist <t...@collabora.com>

diff --git a/desktop/qa/desktop_lib/test_desktop_lib.cxx 
b/desktop/qa/desktop_lib/test_desktop_lib.cxx
index f448965c02d7..6fc8affd77eb 100644
--- a/desktop/qa/desktop_lib/test_desktop_lib.cxx
+++ b/desktop/qa/desktop_lib/test_desktop_lib.cxx
@@ -2994,95 +2994,98 @@ void DesktopLOKTest::testSpellcheckerMultiView()
 
 void DesktopLOKTest::testMultiDocuments()
 {
-    // Load a document.
-    uno::Reference<lang::XComponent> xComponent1;
-    std::unique_ptr<LibLODocument_Impl> document1;
-    std::tie(document1, xComponent1) = loadDocImpl("blank_text.odt");
-    LibLODocument_Impl* pDocument1 = document1.get();
-    CPPUNIT_ASSERT_EQUAL(1, 
pDocument1->m_pDocumentClass->getViewsCount(pDocument1));
-    const int nDocId1 = pDocument1->mnDocumentId;
-
-    const int nDoc1View0 = pDocument1->m_pDocumentClass->getView(pDocument1);
-    CPPUNIT_ASSERT_EQUAL(nDocId1, 
SfxLokHelper::getDocumentIdOfView(nDoc1View0));
-    const int nDoc1View1 = 
pDocument1->m_pDocumentClass->createView(pDocument1);
-    CPPUNIT_ASSERT_EQUAL(nDoc1View1, 
pDocument1->m_pDocumentClass->getView(pDocument1));
-    CPPUNIT_ASSERT_EQUAL(nDocId1, 
SfxLokHelper::getDocumentIdOfView(nDoc1View1));
-    CPPUNIT_ASSERT_EQUAL(2, 
pDocument1->m_pDocumentClass->getViewsCount(pDocument1));
-
-    // Validate the views of document 1.
-    std::vector<int> aViewIdsDoc1(2);
-    CPPUNIT_ASSERT(pDocument1->m_pDocumentClass->getViewIds(pDocument1, 
aViewIdsDoc1.data(), aViewIdsDoc1.size()));
-    CPPUNIT_ASSERT_EQUAL(nDoc1View0, aViewIdsDoc1[0]);
-    CPPUNIT_ASSERT_EQUAL(nDoc1View1, aViewIdsDoc1[1]);
-
-    CPPUNIT_ASSERT_EQUAL(nDoc1View1, 
pDocument1->m_pDocumentClass->getView(pDocument1));
-    CPPUNIT_ASSERT_EQUAL(nDocId1, 
SfxLokHelper::getDocumentIdOfView(nDoc1View1));
-    pDocument1->m_pDocumentClass->setView(pDocument1, nDoc1View0);
-    CPPUNIT_ASSERT_EQUAL(nDoc1View0, 
pDocument1->m_pDocumentClass->getView(pDocument1));
-    CPPUNIT_ASSERT_EQUAL(nDocId1, 
SfxLokHelper::getDocumentIdOfView(nDoc1View0));
-    pDocument1->m_pDocumentClass->setView(pDocument1, nDoc1View1);
-    CPPUNIT_ASSERT_EQUAL(nDoc1View1, 
pDocument1->m_pDocumentClass->getView(pDocument1));
-    CPPUNIT_ASSERT_EQUAL(nDocId1, 
SfxLokHelper::getDocumentIdOfView(nDoc1View1));
-    CPPUNIT_ASSERT_EQUAL(2, 
pDocument1->m_pDocumentClass->getViewsCount(pDocument1));
-
-    // Load another document.
-    uno::Reference<lang::XComponent> xComponent2;
-    std::unique_ptr<LibLODocument_Impl> document2;
-    std::tie(document2, xComponent2) = loadDocImpl("blank_presentation.odp");
-    LibLODocument_Impl* pDocument2 = document2.get();
-    CPPUNIT_ASSERT_EQUAL(1, 
pDocument2->m_pDocumentClass->getViewsCount(pDocument2));
-    const int nDocId2 = pDocument2->mnDocumentId;
-
-    const int nDoc2View0 = pDocument2->m_pDocumentClass->getView(pDocument2);
-    CPPUNIT_ASSERT_EQUAL(nDocId2, 
SfxLokHelper::getDocumentIdOfView(nDoc2View0));
-    const int nDoc2View1 = 
pDocument2->m_pDocumentClass->createView(pDocument2);
-    CPPUNIT_ASSERT_EQUAL(nDoc2View1, 
pDocument2->m_pDocumentClass->getView(pDocument2));
-    CPPUNIT_ASSERT_EQUAL(nDocId2, 
SfxLokHelper::getDocumentIdOfView(nDoc2View1));
-    CPPUNIT_ASSERT_EQUAL(2, 
pDocument2->m_pDocumentClass->getViewsCount(pDocument2));
-
-    // Validate the views of document 2.
-    std::vector<int> aViewIdsDoc2(2);
-    CPPUNIT_ASSERT(pDocument2->m_pDocumentClass->getViewIds(pDocument2, 
aViewIdsDoc2.data(), aViewIdsDoc2.size()));
-    CPPUNIT_ASSERT_EQUAL(nDoc2View0, aViewIdsDoc2[0]);
-    CPPUNIT_ASSERT_EQUAL(nDoc2View1, aViewIdsDoc2[1]);
-
-    CPPUNIT_ASSERT_EQUAL(nDoc2View1, 
pDocument2->m_pDocumentClass->getView(pDocument2));
-    CPPUNIT_ASSERT_EQUAL(nDocId2, 
SfxLokHelper::getDocumentIdOfView(nDoc2View1));
-    pDocument2->m_pDocumentClass->setView(pDocument2, nDoc2View0);
-    CPPUNIT_ASSERT_EQUAL(nDoc2View0, 
pDocument2->m_pDocumentClass->getView(pDocument2));
-    CPPUNIT_ASSERT_EQUAL(nDocId2, 
SfxLokHelper::getDocumentIdOfView(nDoc2View0));
-    pDocument2->m_pDocumentClass->setView(pDocument2, nDoc2View1);
-    CPPUNIT_ASSERT_EQUAL(nDoc2View1, 
pDocument2->m_pDocumentClass->getView(pDocument2));
-    CPPUNIT_ASSERT_EQUAL(nDocId2, 
SfxLokHelper::getDocumentIdOfView(nDoc2View1));
-    CPPUNIT_ASSERT_EQUAL(2, 
pDocument2->m_pDocumentClass->getViewsCount(pDocument2));
-
-    // The views of document1 should be unchanged.
-    CPPUNIT_ASSERT(pDocument1->m_pDocumentClass->getViewIds(pDocument1, 
aViewIdsDoc1.data(), aViewIdsDoc1.size()));
-    CPPUNIT_ASSERT_EQUAL(nDoc1View0, aViewIdsDoc1[0]);
-    CPPUNIT_ASSERT_EQUAL(nDoc1View1, aViewIdsDoc1[1]);
-    // Switch views in the first doc.
-    CPPUNIT_ASSERT_EQUAL(nDocId1, 
SfxLokHelper::getDocumentIdOfView(nDoc1View0));
-    pDocument1->m_pDocumentClass->setView(pDocument1, nDoc1View0);
-    CPPUNIT_ASSERT_EQUAL(nDoc1View0, 
pDocument1->m_pDocumentClass->getView(pDocument1));
-    CPPUNIT_ASSERT_EQUAL(nDocId1, 
SfxLokHelper::getDocumentIdOfView(nDoc1View1));
-    pDocument1->m_pDocumentClass->destroyView(pDocument1, nDoc1View1);
-    CPPUNIT_ASSERT_EQUAL(1, 
pDocument1->m_pDocumentClass->getViewsCount(pDocument1));
-
-    // The views of document2 should be unchanged.
-    CPPUNIT_ASSERT(pDocument2->m_pDocumentClass->getViewIds(pDocument2, 
aViewIdsDoc2.data(), aViewIdsDoc2.size()));
-    CPPUNIT_ASSERT_EQUAL(nDoc2View0, aViewIdsDoc2[0]);
-    CPPUNIT_ASSERT_EQUAL(nDoc2View1, aViewIdsDoc2[1]);
-    // Switch views in the second doc.
-    CPPUNIT_ASSERT_EQUAL(nDocId2, 
SfxLokHelper::getDocumentIdOfView(nDoc2View0));
-    pDocument2->m_pDocumentClass->setView(pDocument2, nDoc2View0);
-    CPPUNIT_ASSERT_EQUAL(nDoc2View0, 
pDocument2->m_pDocumentClass->getView(pDocument2));
-    CPPUNIT_ASSERT_EQUAL(nDocId2, 
SfxLokHelper::getDocumentIdOfView(nDoc2View1));
-    pDocument2->m_pDocumentClass->destroyView(pDocument2, nDoc2View1);
-    CPPUNIT_ASSERT_EQUAL(1, 
pDocument2->m_pDocumentClass->getViewsCount(pDocument2));
-
-    closeDoc(document2, xComponent2);
-
-    closeDoc(document1, xComponent1);
+    for (int i = 0; i < 3; i++)
+    {
+        // Load a document.
+        uno::Reference<lang::XComponent> xComponent1;
+        std::unique_ptr<LibLODocument_Impl> document1;
+        std::tie(document1, xComponent1) = loadDocImpl("blank_text.odt");
+        LibLODocument_Impl* pDocument1 = document1.get();
+        CPPUNIT_ASSERT_EQUAL(1, 
pDocument1->m_pDocumentClass->getViewsCount(pDocument1));
+        const int nDocId1 = pDocument1->mnDocumentId;
+
+        const int nDoc1View0 = 
pDocument1->m_pDocumentClass->getView(pDocument1);
+        CPPUNIT_ASSERT_EQUAL(nDocId1, 
SfxLokHelper::getDocumentIdOfView(nDoc1View0));
+        const int nDoc1View1 = 
pDocument1->m_pDocumentClass->createView(pDocument1);
+        CPPUNIT_ASSERT_EQUAL(nDoc1View1, 
pDocument1->m_pDocumentClass->getView(pDocument1));
+        CPPUNIT_ASSERT_EQUAL(nDocId1, 
SfxLokHelper::getDocumentIdOfView(nDoc1View1));
+        CPPUNIT_ASSERT_EQUAL(2, 
pDocument1->m_pDocumentClass->getViewsCount(pDocument1));
+
+        // Validate the views of document 1.
+        std::vector<int> aViewIdsDoc1(2);
+        CPPUNIT_ASSERT(pDocument1->m_pDocumentClass->getViewIds(pDocument1, 
aViewIdsDoc1.data(), aViewIdsDoc1.size()));
+        CPPUNIT_ASSERT_EQUAL(nDoc1View0, aViewIdsDoc1[0]);
+        CPPUNIT_ASSERT_EQUAL(nDoc1View1, aViewIdsDoc1[1]);
+
+        CPPUNIT_ASSERT_EQUAL(nDoc1View1, 
pDocument1->m_pDocumentClass->getView(pDocument1));
+        CPPUNIT_ASSERT_EQUAL(nDocId1, 
SfxLokHelper::getDocumentIdOfView(nDoc1View1));
+        pDocument1->m_pDocumentClass->setView(pDocument1, nDoc1View0);
+        CPPUNIT_ASSERT_EQUAL(nDoc1View0, 
pDocument1->m_pDocumentClass->getView(pDocument1));
+        CPPUNIT_ASSERT_EQUAL(nDocId1, 
SfxLokHelper::getDocumentIdOfView(nDoc1View0));
+        pDocument1->m_pDocumentClass->setView(pDocument1, nDoc1View1);
+        CPPUNIT_ASSERT_EQUAL(nDoc1View1, 
pDocument1->m_pDocumentClass->getView(pDocument1));
+        CPPUNIT_ASSERT_EQUAL(nDocId1, 
SfxLokHelper::getDocumentIdOfView(nDoc1View1));
+        CPPUNIT_ASSERT_EQUAL(2, 
pDocument1->m_pDocumentClass->getViewsCount(pDocument1));
+
+        // Load another document.
+        uno::Reference<lang::XComponent> xComponent2;
+        std::unique_ptr<LibLODocument_Impl> document2;
+        std::tie(document2, xComponent2) = 
loadDocImpl("blank_presentation.odp");
+        LibLODocument_Impl* pDocument2 = document2.get();
+        CPPUNIT_ASSERT_EQUAL(1, 
pDocument2->m_pDocumentClass->getViewsCount(pDocument2));
+        const int nDocId2 = pDocument2->mnDocumentId;
+
+        const int nDoc2View0 = 
pDocument2->m_pDocumentClass->getView(pDocument2);
+        CPPUNIT_ASSERT_EQUAL(nDocId2, 
SfxLokHelper::getDocumentIdOfView(nDoc2View0));
+        const int nDoc2View1 = 
pDocument2->m_pDocumentClass->createView(pDocument2);
+        CPPUNIT_ASSERT_EQUAL(nDoc2View1, 
pDocument2->m_pDocumentClass->getView(pDocument2));
+        CPPUNIT_ASSERT_EQUAL(nDocId2, 
SfxLokHelper::getDocumentIdOfView(nDoc2View1));
+        CPPUNIT_ASSERT_EQUAL(2, 
pDocument2->m_pDocumentClass->getViewsCount(pDocument2));
+
+        // Validate the views of document 2.
+        std::vector<int> aViewIdsDoc2(2);
+        CPPUNIT_ASSERT(pDocument2->m_pDocumentClass->getViewIds(pDocument2, 
aViewIdsDoc2.data(), aViewIdsDoc2.size()));
+        CPPUNIT_ASSERT_EQUAL(nDoc2View0, aViewIdsDoc2[0]);
+        CPPUNIT_ASSERT_EQUAL(nDoc2View1, aViewIdsDoc2[1]);
+
+        CPPUNIT_ASSERT_EQUAL(nDoc2View1, 
pDocument2->m_pDocumentClass->getView(pDocument2));
+        CPPUNIT_ASSERT_EQUAL(nDocId2, 
SfxLokHelper::getDocumentIdOfView(nDoc2View1));
+        pDocument2->m_pDocumentClass->setView(pDocument2, nDoc2View0);
+        CPPUNIT_ASSERT_EQUAL(nDoc2View0, 
pDocument2->m_pDocumentClass->getView(pDocument2));
+        CPPUNIT_ASSERT_EQUAL(nDocId2, 
SfxLokHelper::getDocumentIdOfView(nDoc2View0));
+        pDocument2->m_pDocumentClass->setView(pDocument2, nDoc2View1);
+        CPPUNIT_ASSERT_EQUAL(nDoc2View1, 
pDocument2->m_pDocumentClass->getView(pDocument2));
+        CPPUNIT_ASSERT_EQUAL(nDocId2, 
SfxLokHelper::getDocumentIdOfView(nDoc2View1));
+        CPPUNIT_ASSERT_EQUAL(2, 
pDocument2->m_pDocumentClass->getViewsCount(pDocument2));
+
+        // The views of document1 should be unchanged.
+        CPPUNIT_ASSERT(pDocument1->m_pDocumentClass->getViewIds(pDocument1, 
aViewIdsDoc1.data(), aViewIdsDoc1.size()));
+        CPPUNIT_ASSERT_EQUAL(nDoc1View0, aViewIdsDoc1[0]);
+        CPPUNIT_ASSERT_EQUAL(nDoc1View1, aViewIdsDoc1[1]);
+        // Switch views in the first doc.
+        CPPUNIT_ASSERT_EQUAL(nDocId1, 
SfxLokHelper::getDocumentIdOfView(nDoc1View0));
+        pDocument1->m_pDocumentClass->setView(pDocument1, nDoc1View0);
+        CPPUNIT_ASSERT_EQUAL(nDoc1View0, 
pDocument1->m_pDocumentClass->getView(pDocument1));
+        CPPUNIT_ASSERT_EQUAL(nDocId1, 
SfxLokHelper::getDocumentIdOfView(nDoc1View1));
+        pDocument1->m_pDocumentClass->destroyView(pDocument1, nDoc1View1);
+        CPPUNIT_ASSERT_EQUAL(1, 
pDocument1->m_pDocumentClass->getViewsCount(pDocument1));
+
+        // The views of document2 should be unchanged.
+        CPPUNIT_ASSERT(pDocument2->m_pDocumentClass->getViewIds(pDocument2, 
aViewIdsDoc2.data(), aViewIdsDoc2.size()));
+        CPPUNIT_ASSERT_EQUAL(nDoc2View0, aViewIdsDoc2[0]);
+        CPPUNIT_ASSERT_EQUAL(nDoc2View1, aViewIdsDoc2[1]);
+        // Switch views in the second doc.
+        CPPUNIT_ASSERT_EQUAL(nDocId2, 
SfxLokHelper::getDocumentIdOfView(nDoc2View0));
+        pDocument2->m_pDocumentClass->setView(pDocument2, nDoc2View0);
+        CPPUNIT_ASSERT_EQUAL(nDoc2View0, 
pDocument2->m_pDocumentClass->getView(pDocument2));
+        CPPUNIT_ASSERT_EQUAL(nDocId2, 
SfxLokHelper::getDocumentIdOfView(nDoc2View1));
+        pDocument2->m_pDocumentClass->destroyView(pDocument2, nDoc2View1);
+        CPPUNIT_ASSERT_EQUAL(1, 
pDocument2->m_pDocumentClass->getViewsCount(pDocument2));
+
+        closeDoc(document2, xComponent2);
+
+        closeDoc(document1, xComponent1);
+    }
 }
 
 namespace {
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to