Kaydet (Commit) e3c6f249 authored tarafından Miklos Vajna's avatar Miklos Vajna

oox smartart, cycle matrix: fix counting presentation children

The markup is:

<dgm:if name="Name6" axis="ch ch" ptType="node node" st="1 1" cnt="1 0" func="cnt" op="gte" val="1">

Where PowerPoint evaluated the condition to true, but Impress evaluated
to false. This means that the undocumented relation between the child
lists is "OR" (not "AND").

Also, our code assumed that "node" has to be a data node (not
presentation node), but it seems the only way this condition can be true
if presentation children is also counted. (The presentation node in
question is not a presentation of anything.)

Change-Id: I094b44351aeb8058cd50753f46fcdac7a88b35cd
Reviewed-on: https://gerrit.libreoffice.org/67510Reviewed-by: 's avatarMiklos Vajna <vmiklos@collabora.com>
Tested-by: Jenkins
üst 85fc36b9
......@@ -370,6 +370,14 @@ sal_Int32 ConditionAtom::getNodeCount() const
if (aCxn.mnType == XML_parOf && aCxn.msSourceId == sNodeId)
nCount++;
}
else
{
// No presentation child is a presentation of a model node: just
// count presentation children.
for (const auto& aCxn : mrLayoutNode.getDiagram().getData()->getConnections())
if (aCxn.mnType == XML_presParOf && aCxn.msSourceId == pPoint->msModelId)
nCount++;
}
}
return nCount;
}
......
......@@ -66,6 +66,7 @@ public:
void testAccentProcess();
void testContinuousBlockProcess();
void testOrgChart();
void testCycleMatrix();
CPPUNIT_TEST_SUITE(SdImportTestSmartArt);
......@@ -97,6 +98,7 @@ public:
CPPUNIT_TEST(testAccentProcess);
CPPUNIT_TEST(testContinuousBlockProcess);
CPPUNIT_TEST(testOrgChart);
CPPUNIT_TEST(testCycleMatrix);
CPPUNIT_TEST_SUITE_END();
};
......@@ -812,6 +814,27 @@ void SdImportTestSmartArt::testOrgChart()
xDocShRef->DoClose();
}
void SdImportTestSmartArt::testCycleMatrix()
{
sd::DrawDocShellRef xDocShRef = loadURL(
m_directories.getURLFromSrc("/sd/qa/unit/data/pptx/smartart-cycle-matrix.pptx"), PPTX);
uno::Reference<drawing::XShape> xGroup(getShapeFromPage(0, 0, xDocShRef), uno::UNO_QUERY);
CPPUNIT_ASSERT(xGroup.is());
uno::Reference<text::XText> xA1(getChildShape(getChildShape(xGroup, 1), 0), uno::UNO_QUERY);
CPPUNIT_ASSERT(xA1.is());
CPPUNIT_ASSERT_EQUAL(OUString("A1"), xA1->getString());
// Without the accompanying fix in place, this test would have failed: the
// content of the "A2" shape was lost.
uno::Reference<text::XText> xA2(getChildShape(getChildShape(getChildShape(xGroup, 0), 0), 1),
uno::UNO_QUERY);
CPPUNIT_ASSERT(xA2.is());
CPPUNIT_ASSERT_EQUAL(OUString("A2"), xA2->getString());
xDocShRef->DoClose();
}
CPPUNIT_TEST_SUITE_REGISTRATION(SdImportTestSmartArt);
CPPUNIT_PLUGIN_IMPLEMENT();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment