#include "private/xlsxstyles_p.h" #include "xlsxformat.h" #include "private/xlsxformat_p.h" #include #include #include class StylesTest : public QObject { Q_OBJECT public: StylesTest(); private Q_SLOTS: void testEmptyStyle(); void testAddXfFormat(); void testAddXfFormat2(); void testSolidFillBackgroundColor(); void testWriteBorders(); void testReadNumFmts(); void testReadFonts(); void testReadFills(); void testReadBorders(); }; StylesTest::StylesTest() { } void StylesTest::testEmptyStyle() { QXlsx::Styles styles(QXlsx::Styles::F_NewFromScratch); QByteArray xmlData = styles.saveToXmlData(); QVERIFY2(xmlData.contains(""), "Must have one cell style"); QVERIFY2(xmlData.contains(""), "Excel don't simply generate , through it works"); } void StylesTest::testAddXfFormat() { QXlsx::Styles styles(QXlsx::Styles::F_NewFromScratch); for (int i=0; i<10; ++i) { QXlsx::Format format; format.setFontBold(true); styles.addXfFormat(format); } QByteArray xmlData = styles.saveToXmlData(); QVERIFY2(xmlData.contains(""), ""); //Note we have a default one } void StylesTest::testAddXfFormat2() { QXlsx::Styles styles(QXlsx::Styles::F_NewFromScratch); QXlsx::Format format; format.setNumberFormat("h:mm:ss AM/PM"); //builtin 19 styles.addXfFormat(format); QCOMPARE(format.numberFormatIndex(), 19); QXlsx::Format format2; format2.setNumberFormat("aaaaa h:mm:ss AM/PM"); //custom styles.addXfFormat(format2); QCOMPARE(format2.numberFormatIndex(), 176); } // For a solid fill, Excel reverses the role of foreground and background colours void StylesTest::testSolidFillBackgroundColor() { QXlsx::Styles styles(QXlsx::Styles::F_NewFromScratch); QXlsx::Format format; format.setPatternBackgroundColor(QColor(Qt::red)); styles.addXfFormat(format); QByteArray xmlData = styles.saveToXmlData(); QVERIFY(xmlData.contains("")); } void StylesTest::testWriteBorders() { QXlsx::Styles styles(QXlsx::Styles::F_NewFromScratch); QXlsx::Format format; format.setRightBorderStyle(QXlsx::Format::BorderThin); styles.addXfFormat(format); QByteArray xmlData = styles.saveToXmlData(); QVERIFY(xmlData.contains("")); } void StylesTest::testReadFonts() { QByteArray xmlData = "" "" "" "" "" ""; QXlsx::Styles styles(QXlsx::Styles::F_LoadFromExists); QXmlStreamReader reader(xmlData); reader.readNextStartElement();//So current node is fonts styles.readFonts(reader); QCOMPARE(styles.m_fontsList.size(), 3); QXlsx::Format font0 = styles.m_fontsList[0]; QCOMPARE(font0.fontSize(), 11); QCOMPARE(font0.fontName(), QString("Calibri")); } void StylesTest::testReadFills() { QByteArray xmlData = "" "" "" "" "" ""; QXlsx::Styles styles(QXlsx::Styles::F_LoadFromExists); QXmlStreamReader reader(xmlData); reader.readNextStartElement();//So current node is fills styles.readFills(reader); QCOMPARE(styles.m_fillsList.size(), 4); QCOMPARE(styles.m_fillsList[3].fillPattern(), QXlsx::Format::PatternSolid); QCOMPARE(styles.m_fillsList[3].patternBackgroundColor(), QColor(Qt::gray));//for solid pattern, bg vs. fg color! } void StylesTest::testReadBorders() { QByteArray xmlData ="" "" "" ""; QXlsx::Styles styles(QXlsx::Styles::F_LoadFromExists); QXmlStreamReader reader(xmlData); reader.readNextStartElement();//So current node is borders styles.readBorders(reader); QCOMPARE(styles.m_bordersList.size(), 2); } void StylesTest::testReadNumFmts() { QByteArray xmlData ="" "" "" ""; QXlsx::Styles styles(QXlsx::Styles::F_LoadFromExists); QXmlStreamReader reader(xmlData); reader.readNextStartElement();//So current node is numFmts styles.readNumFmts(reader); QCOMPARE(styles.m_customNumFmtIdMap.size(), 2); QVERIFY(styles.m_customNumFmtIdMap.contains(164)); QCOMPARE(styles.m_customNumFmtIdMap[164]->formatString, QStringLiteral("yyyy-mm-ddThh:mm:ss")); QVERIFY(styles.m_customNumFmtIdMap.contains(165)); QCOMPARE(styles.m_customNumFmtIdMap[165]->formatString, QStringLiteral("dd/mm/yyyy")); } QTEST_APPLESS_MAIN(StylesTest) #include "tst_stylestest.moc"