From f9f74566a79f4a554b29baf1e8423b6f5e79c17c Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Fri, 20 Jan 2017 10:36:43 +0100 Subject: [PATCH] QmlDesigner: Do not escape "\" for unicode chars Task-number: QTCREATORBUG-12616 Change-Id: If8cac8d35cb97f59e12d1609f808dd639f93f315 Reviewed-by: Tim Jenssen --- .../designercore/model/qmltextgenerator.cpp | 3 ++ .../qmldesigner/coretests/tst_testcore.cpp | 31 +++++++++++++++++++ .../qml/qmldesigner/coretests/tst_testcore.h | 1 + 3 files changed, 35 insertions(+) diff --git a/src/plugins/qmldesigner/designercore/model/qmltextgenerator.cpp b/src/plugins/qmldesigner/designercore/model/qmltextgenerator.cpp index 3fe89aea5e7..02ce823e311 100644 --- a/src/plugins/qmldesigner/designercore/model/qmltextgenerator.cpp +++ b/src/plugins/qmldesigner/designercore/model/qmltextgenerator.cpp @@ -273,6 +273,9 @@ QString QmlTextGenerator::escape(const QString &value) { QString result = value; + if (value.count() == 6 && value.startsWith("\\u")) //Do not dobule escape unicode chars + return result; + result.replace(QStringLiteral("\\"), QStringLiteral("\\\\")); result.replace(QStringLiteral("\""), QStringLiteral("\\\"")); diff --git a/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp b/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp index 49171320ad3..177df3a4f3d 100644 --- a/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp +++ b/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp @@ -993,6 +993,37 @@ void tst_TestCore::testRewriterChangeImports() QCOMPARE(model->imports().first(), Import::createLibraryImport("QtQuick", "1.1")); } +void tst_TestCore::testRewriterUnicodeChars() +{ + const QLatin1String qmlString("\n" + "import QtQuick 2.1\n" + "\n" + "Text {\n" + " text: \"test\"" + "}\n"); + + QPlainTextEdit textEdit; + textEdit.setPlainText(qmlString); + NotIndentingTextEditModifier modifier(&textEdit); + + QScopedPointer model(Model::create("QtQuick.Rectangle")); + + QScopedPointer testRewriterView(new TestRewriterView(0, RewriterView::Amend)); + testRewriterView->setTextModifier(&modifier); + model->attachView(testRewriterView.data()); + + QVERIFY(testRewriterView->errors().isEmpty()); + + ModelNode rootModelNode = testRewriterView->rootModelNode(); + QVERIFY(rootModelNode.isValid()); + + rootModelNode.variantProperty("text").setValue("\\u2795"); + + const QLatin1String unicodeChar("\nimport QtQuick 2.1\n\nText {\n text: \"\\u2795\"}\n"); + + QCOMPARE(textEdit.toPlainText(), unicodeChar); +} + void tst_TestCore::testRewriterForGradientMagic() { const QLatin1String qmlString("\n" diff --git a/tests/auto/qml/qmldesigner/coretests/tst_testcore.h b/tests/auto/qml/qmldesigner/coretests/tst_testcore.h index 7693b588308..b3d47fbb72e 100644 --- a/tests/auto/qml/qmldesigner/coretests/tst_testcore.h +++ b/tests/auto/qml/qmldesigner/coretests/tst_testcore.h @@ -139,6 +139,7 @@ private slots: void testRewriterActionCompression(); void testRewriterImports(); void testRewriterChangeImports(); + void testRewriterUnicodeChars(); // // unit tests QmlModelNodeFacade/QmlModelState