diff options
author | Christian Ehrlicher <ch.ehrlicher@gmx.de> | 2019-11-15 21:46:32 +0100 |
---|---|---|
committer | Christian Ehrlicher <ch.ehrlicher@gmx.de> | 2019-11-19 17:33:33 +0100 |
commit | d7cb21ac085117f879a8aa1d7727b2ca52d3353d (patch) | |
tree | c03c3e62de3011d7743459078a7978206674190f /tests/auto/xml | |
parent | ede867f581c0894e13d669f5364610df7ade0eb5 (diff) |
QDom: use QLocale::C when converting a double to a xml attribute
QDomElement::setAttribute(QString, double) did not use QString::setNum()
but qsnprintf(). This is wrong because qsnprintf() is using the current
locale instead QLocale::C. It was also inconsistent to
QDomElement::setAttributeNS() which was already using QString::setNum().
Also fix the documentation which stated that all
QDomElement::setAttribute() format the values according the current
locale.
Fixes: QTBUG-80068
Change-Id: Iabb0b39c0d0723060527542c283a5435f26f31ca
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'tests/auto/xml')
-rw-r--r-- | tests/auto/xml/dom/qdom/tst_qdom.cpp | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/tests/auto/xml/dom/qdom/tst_qdom.cpp b/tests/auto/xml/dom/qdom/tst_qdom.cpp index b09a3447e3..99639df5b0 100644 --- a/tests/auto/xml/dom/qdom/tst_qdom.cpp +++ b/tests/auto/xml/dom/qdom/tst_qdom.cpp @@ -57,6 +57,7 @@ private slots: void toString_02(); void hasAttributes_data(); void hasAttributes(); + void setGetAttributes(); void save_data(); void save(); void saveWithSerialization() const; @@ -392,6 +393,74 @@ void tst_QDom::hasAttributes() QTEST( visitedNodes, "visitedNodes" ); } +void tst_QDom::setGetAttributes() +{ + QDomDocument doc; + QDomElement rootNode = doc.createElement("Root"); + doc.appendChild(rootNode); + + const QLocale oldLocale = QLocale(); + QLocale::setDefault(QLocale::German); // decimal separator != '.' + + const QString qstringVal("QString"); + const qlonglong qlonglongVal = std::numeric_limits<qlonglong>::min(); + const qulonglong qulonglongVal = std::numeric_limits<qulonglong>::max(); + const int intVal = std::numeric_limits<int>::min(); + const uint uintVal = std::numeric_limits<uint>::max(); + const float floatVal = 0.1234f; + const double doubleVal = 0.1234; + + rootNode.setAttribute("qstringVal", qstringVal); + rootNode.setAttribute("qlonglongVal", qlonglongVal); + rootNode.setAttribute("qulonglongVal", qulonglongVal); + rootNode.setAttribute("intVal", intVal); + rootNode.setAttribute("uintVal", uintVal); + rootNode.setAttribute("floatVal", floatVal); + rootNode.setAttribute("doubleVal", doubleVal); + + QDomElement nsNode = doc.createElement("NS"); + rootNode.appendChild(nsNode); + nsNode.setAttributeNS("namespace", "qstringVal", qstringVal); + nsNode.setAttributeNS("namespace", "qlonglongVal", qlonglongVal); + nsNode.setAttributeNS("namespace", "qulonglongVal", qulonglongVal); + nsNode.setAttributeNS("namespace", "intVal", intVal); + nsNode.setAttributeNS("namespace", "uintVal", uintVal); + nsNode.setAttributeNS("namespace", "floatVal", floatVal); // not available atm + nsNode.setAttributeNS("namespace", "doubleVal", doubleVal); + + bool bOk; + QCOMPARE(rootNode.attribute("qstringVal"), qstringVal); + QCOMPARE(rootNode.attribute("qlonglongVal").toLongLong(&bOk), qlonglongVal); + QVERIFY(bOk); + QCOMPARE(rootNode.attribute("qulonglongVal").toULongLong(&bOk), qulonglongVal); + QVERIFY(bOk); + QCOMPARE(rootNode.attribute("intVal").toInt(&bOk), intVal); + QVERIFY(bOk); + QCOMPARE(rootNode.attribute("uintVal").toUInt(&bOk), uintVal); + QVERIFY(bOk); + QCOMPARE(rootNode.attribute("floatVal").toFloat(&bOk), floatVal); + QVERIFY(bOk); + QCOMPARE(rootNode.attribute("doubleVal").toDouble(&bOk), doubleVal); + QVERIFY(bOk); + + QCOMPARE(nsNode.attributeNS("namespace", "qstringVal"), qstringVal); + QCOMPARE(nsNode.attributeNS("namespace", "qlonglongVal").toLongLong(&bOk), qlonglongVal); + QVERIFY(bOk); + QCOMPARE(nsNode.attributeNS("namespace", "qulonglongVal").toULongLong(&bOk), qulonglongVal); + QVERIFY(bOk); + QCOMPARE(nsNode.attributeNS("namespace", "intVal").toInt(&bOk), intVal); + QVERIFY(bOk); + QCOMPARE(nsNode.attributeNS("namespace", "uintVal").toUInt(&bOk), uintVal); + QVERIFY(bOk); + QCOMPARE(nsNode.attributeNS("namespace", "floatVal").toFloat(&bOk), floatVal); + QVERIFY(bOk); + QCOMPARE(nsNode.attributeNS("namespace", "doubleVal").toDouble(&bOk), doubleVal); + QVERIFY(bOk); + + QLocale::setDefault(oldLocale); +} + + int tst_QDom::hasAttributesHelper( const QDomNode& node ) { int visitedNodes = 1; |