Revision control
Copy as Markdown
// Copyright (C) 2025 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtTest/QTest>
#include <QtSvg/private/qsvgcsshandler_p.h>
#include <QtCore/QXmlStreamAttributes>
#include <QtGui/private/qcssparser_p.h>
using namespace Qt::Literals::StringLiterals;
class tst_QSvgCss : public QObject
{
Q_OBJECT
public:
tst_QSvgCss();
virtual ~tst_QSvgCss();
private slots:
void testParsedDeclarations_data();
void testParsedDeclarations();
};
tst_QSvgCss::tst_QSvgCss()
{
}
tst_QSvgCss::~tst_QSvgCss()
{
}
void tst_QSvgCss::testParsedDeclarations_data()
{
QTest::addColumn<QString>("css");
QTest::addColumn<QString>("expectedProperty");
QTest::addColumn<QString>("expectedValue");
QTest::newRow("value") << u"fill: red;"_s << u"fill"_s << u"red"_s;
QTest::newRow("url") << u"fill: url(#id1);"_s << u"fill"_s << u"url(#id1)"_s;
QTest::newRow("function") << u"transform: translate(50px, 50px)"_s << u"transform"_s << u"translate(50px, 50px)"_s;
QTest::newRow("list of numbers") << u"stroke-dasharray: 2, 5, 10, 3;"_s << u"stroke-dasharray"_s << u"2 ; 5 ; 10 ; 3"_s;
QTest::newRow("known identifier auto") << u"offset-rotate: auto"_s << u"offset-rotate"_s << u"auto"_s;
QTest::newRow("known identifier none") << u"display: none"_s << u"display"_s << u"none"_s;
QTest::newRow("multiple values 1") << u"animation: transformAnim 2000ms infinite"_s << u"animation"_s << u"transformAnim 2000ms infinite"_s;
QTest::newRow("multiple values percentage") << u"transform-origin: 50% 25%"_s << u"transform-origin"_s << u"50% 25%"_s;
QTest::newRow("multiple values 2") << u"offset-rotate: auto 90deg"_s << u"offset-rotate"_s << u"auto 90deg"_s;
QTest::newRow("multiple values 3") << u"offset-rotate: reverse auto"_s << u"offset-rotate"_s << u"reverse auto"_s;
QTest::newRow("multiple urls") << u"fill: url(#id1) url(#id2)"_s << u"fill"_s << u"url(#id1) url(#id2)"_s;
}
void tst_QSvgCss::testParsedDeclarations()
{
QFETCH(QString, css);
QFETCH(QString, expectedProperty);
QFETCH(QString, expectedValue);
css.prepend("dummy {");
css.append("}");
QCss::Parser parser(css);
QCss::StyleSheet sheet;
parser.parse(&sheet);
QCss::StyleRule rule = (!sheet.styleRules.isEmpty()) ?
sheet.styleRules.at(0) : *sheet.nameIndex.begin();
QCOMPARE(rule.declarations.size(), 1);
QList<QCss::Declaration> decls = rule.declarations;
QSvgCssHandler handler;
QXmlStreamAttributes attributes;
handler.parseCSStoXMLAttrs(decls, attributes);
QCOMPARE(attributes.size(), 1);
QCOMPARE(attributes.first().name(), expectedProperty);
QCOMPARE(attributes.first().value(), expectedValue);
}
QTEST_MAIN(tst_QSvgCss)
#include "tst_qsvgcss.moc"