CppunitTest_sd_import_tests: split single test into different ones
so every document is loaded in different tests Change-Id: I2cae2b93a51b65919508cd8df7a26e55782c7bec Reviewed-on: https://gerrit.libreoffice.org/c/core/+/198698 Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org> Tested-by: Jenkins
This commit is contained in:
+127
-90
@@ -94,131 +94,168 @@ public:
|
||||
: SdModelTestBase(u"/sd/qa/unit/data/"_ustr)
|
||||
{
|
||||
}
|
||||
|
||||
void testDocumentLayout(std::u16string_view sInput, std::u16string_view sDump,
|
||||
TestFilter sExportType, bool bUpdateMe = false);
|
||||
};
|
||||
|
||||
/** Test document against a reference XML dump of shapes.
|
||||
|
||||
If you want to update one of these tests, or add a new one, set the nUpdateMe
|
||||
to the index of the test, and the dump XML's will be created (or rewritten)
|
||||
If you want to update one of these tests, or add a new one, set the bUpdateMe
|
||||
to true, and the dump XML's will be created (or rewritten)
|
||||
instead of checking. Use with care - when the test is failing, first find out
|
||||
why, instead of just updating .xml's blindly.
|
||||
|
||||
Example: Let's say you are adding a test called fdoABCD.pptx. You'll place it
|
||||
to the data/ subdirectory, and will add an entry to aFilesToCompare below,
|
||||
the 3rd parameter is for export test - can be -1 (don't export), "impress8", "MS PowerPoint 97" or "Impress Office Open XML"
|
||||
like:
|
||||
to the data/ subdirectory, and will add a new test below,
|
||||
When the 3rd parameter is set TestFilter::NONE, it doesn't export.
|
||||
Temporarily you'll set bUpdateMe to true, and run
|
||||
|
||||
{ "fdoABCD.pptx", "xml/fdoABCD_", "Impress Office Open XML" },
|
||||
|
||||
and will count the index in the aFilesToCompare structure (1st is 0, 2nd is 1,
|
||||
etc.) Temporarily you'll set nUpdateMe to this index (instead of -1), and run
|
||||
|
||||
make sd
|
||||
make CppunitTest_sd_import_tests
|
||||
|
||||
This will generate the sd/qa/unit/data/xml/fdoABCD_*.xml for you. Now you
|
||||
will change nUpdateMe back to -1, and commit your fdoABCD.pptx test, the
|
||||
xml/fdoABCD_*.xml dumps, and the aFilesToCompare addition in one commit.
|
||||
will change bUpdateMe back to false, and commit your fdoABCD.pptx test, the
|
||||
xml/fdoABCD_*.xml dumps, and the addition in this file in one commit.
|
||||
|
||||
As the last step, you will revert your fix and do 'make sd' again, to check
|
||||
As the last step, you will revert your fix and do 'make CppunitTest_sd_import_tests' again, to check
|
||||
that without your fix, the unit test breaks. Then clean up, and push :-)
|
||||
|
||||
NOTE: This approach is suitable only for tests of fixes that actually change
|
||||
the layout - best to check by reverting your fix locally after having added
|
||||
the test, and re-running; it should break.
|
||||
*/
|
||||
CPPUNIT_TEST_FIXTURE(SdImportTest, testDocumentLayout)
|
||||
void SdImportTest::testDocumentLayout(std::u16string_view sInput, std::u16string_view sDump,
|
||||
TestFilter sExportType, bool bUpdateMe)
|
||||
{
|
||||
// Use fallback document theme, which uses previous default
|
||||
// fill and line colors as accent colors.
|
||||
o3tl::setEnvironment(u"LO_FORCE_FALLBACK_DOCUMENT_THEME"_ustr, u"1"_ustr);
|
||||
|
||||
struct TestDumpInfo
|
||||
loadFromFile(sInput);
|
||||
if (sExportType != TestFilter::NONE)
|
||||
saveAndReload(sExportType);
|
||||
|
||||
uno::Reference<drawing::XDrawPagesSupplier> xDrawPagesSupplier(mxComponent,
|
||||
uno::UNO_QUERY_THROW);
|
||||
uno::Reference<drawing::XDrawPages> xDrawPages = xDrawPagesSupplier->getDrawPages();
|
||||
CPPUNIT_ASSERT(xDrawPages.is());
|
||||
|
||||
sal_Int32 nLength = xDrawPages->getCount();
|
||||
for (sal_Int32 j = 0; j < nLength; ++j)
|
||||
{
|
||||
std::u16string_view sInput;
|
||||
std::u16string_view sDump;
|
||||
TestFilter sExportType;
|
||||
};
|
||||
uno::Reference<drawing::XDrawPage> xDrawPage(xDrawPages->getByIndex(j), uno::UNO_QUERY);
|
||||
CPPUNIT_ASSERT(xDrawPage.is());
|
||||
uno::Reference<drawing::XShapes> xShapes(xDrawPage, uno::UNO_QUERY_THROW);
|
||||
OUString aString = XShapeDumper::dump(xShapes);
|
||||
|
||||
auto aFilesToCompare = std::to_array<TestDumpInfo>({
|
||||
{ u"odp/shapes-test.odp", u"xml/shapes-test_page", TestFilter::NONE },
|
||||
{ u"fdo47434.pptx", u"xml/fdo47434_", TestFilter::NONE },
|
||||
{ u"n758621.ppt", u"xml/n758621_", TestFilter::NONE },
|
||||
{ u"fdo64586.ppt", u"xml/fdo64586_", TestFilter::NONE },
|
||||
OString aFileName = OUStringToOString(createFileURL(sDump), RTL_TEXTENCODING_UTF8)
|
||||
+ OString::number(j) + ".xml";
|
||||
|
||||
// needed to adapt this, the border parameter is no longer
|
||||
// exported with MCGRs due to oox neither needing nor
|
||||
// supporting it with now freely definable gradients
|
||||
{ u"n819614.pptx", u"xml/n819614_", TestFilter::NONE },
|
||||
if (bUpdateMe)
|
||||
{
|
||||
// had to adapt this, std::ofstream annot write to a URL but needs a
|
||||
// filesystem path. Seems as if no one had to adapt any of the cases
|
||||
// for some years :-/
|
||||
OUString sTempFilePath;
|
||||
osl::FileBase::getSystemPathFromFileURL(OUString::fromUtf8(aFileName), sTempFilePath);
|
||||
std::ofstream aStream(sTempFilePath.toUtf8().getStr(),
|
||||
std::ofstream::out | std::ofstream::binary);
|
||||
aStream << aString;
|
||||
aStream.close();
|
||||
}
|
||||
else
|
||||
{
|
||||
doXMLDiff(
|
||||
aFileName.getStr(), OUStringToOString(aString, RTL_TEXTENCODING_UTF8).getStr(),
|
||||
static_cast<int>(aString.getLength()),
|
||||
OUStringToOString(createFileURL(u"tolerance.xml"), RTL_TEXTENCODING_UTF8).getStr());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
CPPUNIT_TEST_FIXTURE(SdImportTest, testShapesTest)
|
||||
{
|
||||
testDocumentLayout(u"odp/shapes-test.odp", u"xml/shapes-test_page", TestFilter::NONE);
|
||||
}
|
||||
|
||||
CPPUNIT_TEST_FIXTURE(SdImportTest, testFdo47434)
|
||||
{
|
||||
testDocumentLayout(u"fdo47434.pptx", u"xml/fdo47434_", TestFilter::NONE);
|
||||
}
|
||||
|
||||
CPPUNIT_TEST_FIXTURE(SdImportTest, testN758621)
|
||||
{
|
||||
testDocumentLayout(u"n758621.ppt", u"xml/n758621_", TestFilter::NONE);
|
||||
}
|
||||
|
||||
CPPUNIT_TEST_FIXTURE(SdImportTest, testFdo64586)
|
||||
{
|
||||
testDocumentLayout(u"fdo64586.ppt", u"xml/fdo64586_", TestFilter::NONE);
|
||||
}
|
||||
|
||||
CPPUNIT_TEST_FIXTURE(SdImportTest, testN819614)
|
||||
{
|
||||
// needed to adapt this, the border parameter is no longer
|
||||
// exported with MCGRs due to oox neither needing nor
|
||||
// supporting it with now freely definable gradients
|
||||
testDocumentLayout(u"n819614.pptx", u"xml/n819614_", TestFilter::NONE);
|
||||
}
|
||||
|
||||
CPPUNIT_TEST_FIXTURE(SdImportTest, testN820786)
|
||||
{
|
||||
testDocumentLayout(u"n820786.pptx", u"xml/n820786_", TestFilter::NONE);
|
||||
}
|
||||
|
||||
CPPUNIT_TEST_FIXTURE(SdImportTest, testN762695)
|
||||
{
|
||||
testDocumentLayout(u"n762695.pptx", u"xml/n762695_", TestFilter::NONE);
|
||||
}
|
||||
|
||||
CPPUNIT_TEST_FIXTURE(SdImportTest, testN593612)
|
||||
{
|
||||
testDocumentLayout(u"n593612.pptx", u"xml/n593612_", TestFilter::NONE);
|
||||
}
|
||||
|
||||
CPPUNIT_TEST_FIXTURE(SdImportTest, testFdo71434)
|
||||
{
|
||||
testDocumentLayout(u"fdo71434.pptx", u"xml/fdo71434_", TestFilter::NONE);
|
||||
}
|
||||
|
||||
CPPUNIT_TEST_FIXTURE(SdImportTest, testN902652)
|
||||
{
|
||||
testDocumentLayout(u"n902652.pptx", u"xml/n902652_", TestFilter::NONE);
|
||||
}
|
||||
|
||||
CPPUNIT_TEST_FIXTURE(SdImportTest, testTdf90403)
|
||||
{
|
||||
testDocumentLayout(u"tdf90403.pptx", u"xml/tdf90403_", TestFilter::NONE);
|
||||
}
|
||||
|
||||
CPPUNIT_TEST_FIXTURE(SdImportTest, testTdf90338)
|
||||
{
|
||||
testDocumentLayout(u"tdf90338.odp", u"xml/tdf90338_", TestFilter::PPTX);
|
||||
}
|
||||
|
||||
CPPUNIT_TEST_FIXTURE(SdImportTest, testTdf92001)
|
||||
{
|
||||
testDocumentLayout(u"tdf92001.odp", u"xml/tdf92001_", TestFilter::PPTX);
|
||||
}
|
||||
|
||||
{ u"n820786.pptx", u"xml/n820786_", TestFilter::NONE },
|
||||
{ u"n762695.pptx", u"xml/n762695_", TestFilter::NONE },
|
||||
{ u"n593612.pptx", u"xml/n593612_", TestFilter::NONE },
|
||||
{ u"fdo71434.pptx", u"xml/fdo71434_", TestFilter::NONE },
|
||||
{ u"n902652.pptx", u"xml/n902652_", TestFilter::NONE },
|
||||
{ u"tdf90403.pptx", u"xml/tdf90403_", TestFilter::NONE },
|
||||
{ u"tdf90338.odp", u"xml/tdf90338_", TestFilter::PPTX },
|
||||
{ u"tdf92001.odp", u"xml/tdf92001_", TestFilter::PPTX },
|
||||
// GCC -mfpmath=387 rounding issues in lclPushMarkerProperties
|
||||
// (oox/source/drawingml/lineproperties.cxx); see mail sub-thread starting at
|
||||
// <https://lists.freedesktop.org/archives/libreoffice/2016-September/
|
||||
// 075211.html> "Re: Test File: sc/qa/unit/data/functions/fods/chiinv.fods:
|
||||
// fails with Assertion" for how "-mfpmath=sse -msse2" would fix that:
|
||||
#if !(defined LINUX && defined X86)
|
||||
{ u"tdf100491.pptx", u"xml/tdf100491_", TestFilter::NONE },
|
||||
CPPUNIT_TEST_FIXTURE(SdImportTest, testTdf100491)
|
||||
{
|
||||
testDocumentLayout(u"tdf100491.pptx", u"xml/tdf100491_", TestFilter::NONE);
|
||||
}
|
||||
#endif
|
||||
{ u"tdf109317.pptx", u"xml/tdf109317_", TestFilter::ODP },
|
||||
// { u"pptx/n828390.pptx", u"pptx/xml/n828390_", TestFilter::PPTX }, // Example
|
||||
});
|
||||
|
||||
for (size_t i = 0; i < aFilesToCompare.size(); ++i)
|
||||
{
|
||||
size_t const nUpdateMe
|
||||
= SAL_MAX_UINT32; // index of test we want to update; supposedly only when the test is created
|
||||
|
||||
loadFromFile(aFilesToCompare[i].sInput);
|
||||
if (aFilesToCompare[i].sExportType != TestFilter::NONE)
|
||||
saveAndReload(aFilesToCompare[i].sExportType);
|
||||
|
||||
uno::Reference<drawing::XDrawPagesSupplier> xDrawPagesSupplier(mxComponent,
|
||||
uno::UNO_QUERY_THROW);
|
||||
uno::Reference<drawing::XDrawPages> xDrawPages = xDrawPagesSupplier->getDrawPages();
|
||||
CPPUNIT_ASSERT(xDrawPages.is());
|
||||
|
||||
sal_Int32 nLength = xDrawPages->getCount();
|
||||
for (sal_Int32 j = 0; j < nLength; ++j)
|
||||
{
|
||||
uno::Reference<drawing::XDrawPage> xDrawPage(xDrawPages->getByIndex(j), uno::UNO_QUERY);
|
||||
CPPUNIT_ASSERT(xDrawPage.is());
|
||||
uno::Reference<drawing::XShapes> xShapes(xDrawPage, uno::UNO_QUERY_THROW);
|
||||
OUString aString = XShapeDumper::dump(xShapes);
|
||||
|
||||
OString aFileName
|
||||
= OUStringToOString(createFileURL(aFilesToCompare[i].sDump), RTL_TEXTENCODING_UTF8)
|
||||
+ OString::number(j) + ".xml";
|
||||
|
||||
if (nUpdateMe == i) // index was wrong here
|
||||
{
|
||||
// had to adapt this, std::ofstream annot write to a URL but needs a
|
||||
// filesystem path. Seems as if no one had to adapt any of the cases
|
||||
// for some years :-/
|
||||
OUString sTempFilePath;
|
||||
osl::FileBase::getSystemPathFromFileURL(OUString::fromUtf8(aFileName),
|
||||
sTempFilePath);
|
||||
std::ofstream aStream(sTempFilePath.toUtf8().getStr(),
|
||||
std::ofstream::out | std::ofstream::binary);
|
||||
aStream << aString;
|
||||
aStream.close();
|
||||
}
|
||||
else
|
||||
{
|
||||
doXMLDiff(aFileName.getStr(),
|
||||
OUStringToOString(aString, RTL_TEXTENCODING_UTF8).getStr(),
|
||||
static_cast<int>(aString.getLength()),
|
||||
OUStringToOString(createFileURL(u"tolerance.xml"), RTL_TEXTENCODING_UTF8)
|
||||
.getStr());
|
||||
}
|
||||
}
|
||||
}
|
||||
CPPUNIT_TEST_FIXTURE(SdImportTest, testTdf109317)
|
||||
{
|
||||
testDocumentLayout(u"tdf109317.pptx", u"xml/tdf109317_", TestFilter::ODP);
|
||||
}
|
||||
|
||||
CPPUNIT_TEST_FIXTURE(SdImportTest, testTdf157216)
|
||||
|
||||
Reference in New Issue
Block a user