diff options
| -rw-r--r-- | autotests/kconfigtest.cpp | 27 | ||||
| -rw-r--r-- | autotests/kconfigtest.h | 1 | ||||
| -rw-r--r-- | autotests/kdesktopfiletest.cpp | 18 | ||||
| -rw-r--r-- | src/core/kconfigini.cpp | 6 | 
4 files changed, 50 insertions, 2 deletions
| diff --git a/autotests/kconfigtest.cpp b/autotests/kconfigtest.cpp index 5f2c7989..7cb3f903 100644 --- a/autotests/kconfigtest.cpp +++ b/autotests/kconfigtest.cpp @@ -1672,6 +1672,33 @@ void KConfigTest::testNewlines()  } +void KConfigTest::testXdgListEntry() +{ +    QTemporaryFile file; +    QVERIFY(file.open()); +    QTextStream out(&file); +    out <<  "[General]" << endl +        << "Key1=" << endl // empty list +        // emtpty entries +        << "Key2=;" << endl +        << "Key3=;;" << endl +        << "Key4=;;;" << endl +        << "Key5=\\;" << endl +        << "Key6=1;2\\;3;;" << endl; +    out.flush(); +    file.close(); +    KConfig anonConfig(file.fileName(), KConfig::SimpleConfig); +    KConfigGroup grp = anonConfig.group("General"); +    QStringList invalidList; // use this as a default when an empty list is expected +    invalidList << "Error! Default value read!"; +    QCOMPARE(grp.readXdgListEntry("Key1", invalidList), QStringList()); +    QCOMPARE(grp.readXdgListEntry("Key2", invalidList), QStringList() << QString()); +    QCOMPARE(grp.readXdgListEntry("Key3", invalidList), QStringList() << QString() << QString()); +    QCOMPARE(grp.readXdgListEntry("Key4", invalidList), QStringList()<< QString() << QString() << QString()); +    QCOMPARE(grp.readXdgListEntry("Key5", invalidList), QStringList() << ";"); +    QCOMPARE(grp.readXdgListEntry("Key6", invalidList), QStringList() << "1" << "2;3" << QString()); +} +  #include <QThreadPool>  #include <qtconcurrentrun.h> diff --git a/autotests/kconfigtest.h b/autotests/kconfigtest.h index f2897a8f..be0a17ea 100644 --- a/autotests/kconfigtest.h +++ b/autotests/kconfigtest.h @@ -76,6 +76,7 @@ private Q_SLOTS:      void testDirtyAfterRevert();      void testKdeGlobals();      void testNewlines(); +    void testXdgListEntry();      void testThreads(); diff --git a/autotests/kdesktopfiletest.cpp b/autotests/kdesktopfiletest.cpp index b1938b80..3ee291f4 100644 --- a/autotests/kdesktopfiletest.cpp +++ b/autotests/kdesktopfiletest.cpp @@ -142,21 +142,35 @@ void KDesktopFileTest::testActionGroup()      QTextStream ts(&file);      ts <<         "[Desktop Entry]\n" -       "Actions=encrypt;\n" +       // make sure escaping of ';' using "\;" works +       "Actions=encrypt;semi\\;colon;decrypt;\n"         "[Desktop Action encrypt]\n"         "Name=Encrypt file\n" +       "[Desktop Action decrypt]\n" +       "Name=Decrypt file\n" +       // no escaping needed in group header +       "[Desktop Action semi;colon]\n" +       "Name=With semicolon\n"         "\n";      file.close();      QVERIFY(QFile::exists(fileName));      KDesktopFile df(fileName);      QCOMPARE(df.readType(), QString());      QCOMPARE(df.fileName(), fileName); -    QCOMPARE(df.readActions(), QStringList() << "encrypt"); +    QCOMPARE(df.readActions(), QStringList() << "encrypt" << "semi;colon" << "decrypt");      QCOMPARE(df.hasActionGroup("encrypt"), true); +    QCOMPARE(df.hasActionGroup("semi;colon"), true); +    QCOMPARE(df.hasActionGroup("decrypt"), true);      QCOMPARE(df.hasActionGroup("doesnotexist"), false);      KConfigGroup cg = df.actionGroup("encrypt");      QVERIFY(cg.hasKey("Name"));      QCOMPARE(cg.readEntry("Name"), QString("Encrypt file")); +    cg = df.actionGroup("decrypt"); +    QVERIFY(cg.hasKey("Name")); +    QCOMPARE(cg.readEntry("Name"), QString("Decrypt file")); +    cg = df.actionGroup("semi;colon"); +    QVERIFY(cg.hasKey("Name")); +    QCOMPARE(cg.readEntry("Name"), QString("With semicolon"));  }  void KDesktopFileTest::testIsAuthorizedDesktopFile() diff --git a/src/core/kconfigini.cpp b/src/core/kconfigini.cpp index 1a8bb771..856b7b76 100644 --- a/src/core/kconfigini.cpp +++ b/src/core/kconfigini.cpp @@ -792,6 +792,12 @@ void KConfigIniBackend::printableToString(BufferFragment *aString, const QFile &              case '\\':                  *r = '\\';                  break; +            case ';': +                // not really an escape sequence, but allowed in .desktop files, don't strip '\;' from the string +                *r = '\\'; +                r++; +                *r = ';'; +                break;              case 'x':                  if (i + 2 < l) {                      *r = charFromHex(str + i + 1, file, line); | 
