Chris@1022: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ Chris@1022: Chris@1022: /* Chris@1022: Sonic Visualiser Chris@1022: An audio file viewer and annotation editor. Chris@1022: Centre for Digital Music, Queen Mary, University of London. Chris@1022: Chris@1022: This program is free software; you can redistribute it and/or Chris@1022: modify it under the terms of the GNU General Public License as Chris@1022: published by the Free Software Foundation; either version 2 of the Chris@1022: License, or (at your option) any later version. See the file Chris@1022: COPYING included with this distribution for more information. Chris@1022: */ Chris@1022: Chris@1022: #ifndef TEST_STRINGBITS_H Chris@1022: #define TEST_STRINGBITS_H Chris@1022: Chris@1022: #include "../StringBits.h" Chris@1022: Chris@1022: #include Chris@1022: #include Chris@1022: #include Chris@1022: Chris@1022: #include Chris@1022: Chris@1022: using namespace std; Chris@1022: Chris@1022: class TestStringBits : public QObject Chris@1022: { Chris@1022: Q_OBJECT Chris@1022: Chris@1022: private: Chris@1022: void testSplitQuoted(QString in, QStringList out) { Chris@1022: // Only suitable where the output strings do not have Chris@1022: // consecutive spaces in them Chris@1022: QCOMPARE(StringBits::splitQuoted(in, ' '), out); Chris@1022: QString in2(in); Chris@1022: in2.replace(' ', ','); Chris@1022: QStringList out2; Chris@1022: foreach (QString o, out) { Chris@1022: out2 << o.replace(' ', ','); Chris@1022: } Chris@1022: QCOMPARE(StringBits::splitQuoted(in2, ','), out2); Chris@1022: } Chris@1022: Chris@1022: private slots: Chris@1022: void simple() { Chris@1022: QString in = "a b c d"; Chris@1022: QStringList out; Chris@1022: out << "a" << "b" << "c" << "d"; Chris@1022: testSplitQuoted(in, out); Chris@1022: } Chris@1022: Chris@1022: void dquoted() { Chris@1022: QString in = "a \"b c\" d"; Chris@1022: QStringList out; Chris@1022: out << "a" << "b c" << "d"; Chris@1022: testSplitQuoted(in, out); Chris@1022: } Chris@1022: Chris@1022: void drunon() { Chris@1022: QString in = "a \"b c\"d e"; Chris@1022: QStringList out; Chris@1022: out << "a" << "b cd" << "e"; Chris@1022: testSplitQuoted(in, out); Chris@1022: } Chris@1022: Chris@1022: void squoted() { Chris@1022: QString in = "a 'b c' d"; Chris@1022: QStringList out; Chris@1022: out << "a" << "b c" << "d"; Chris@1022: testSplitQuoted(in, out); Chris@1022: } Chris@1022: Chris@1022: void srunon() { Chris@1022: QString in = "a 'b c'd e"; Chris@1022: QStringList out; Chris@1022: out << "a" << "b cd" << "e"; Chris@1022: testSplitQuoted(in, out); Chris@1022: } Chris@1022: Chris@1022: void dempty() { Chris@1022: QString in = "\"\" \"\" \"\""; Chris@1022: QStringList out; Chris@1022: out << "" << "" << ""; Chris@1022: testSplitQuoted(in, out); Chris@1022: } Chris@1022: Chris@1022: void sempty() { Chris@1022: QString in = "'' '' ''"; Chris@1022: QStringList out; Chris@1022: out << "" << "" << ""; Chris@1022: testSplitQuoted(in, out); Chris@1022: } Chris@1022: Chris@1022: void descaped() { Chris@1022: QString in = "a \"b c\\\" d\""; Chris@1022: QStringList out; Chris@1022: out << "a" << "b c\" d"; Chris@1022: testSplitQuoted(in, out); Chris@1022: } Chris@1022: Chris@1022: void sescaped() { Chris@1022: QString in = "a 'b c\\' d'"; Chris@1022: QStringList out; Chris@1022: out << "a" << "b c' d"; Chris@1022: testSplitQuoted(in, out); Chris@1022: } Chris@1022: Chris@1022: void dnested() { Chris@1022: QString in = "a \"b c' d\""; Chris@1022: QStringList out; Chris@1022: out << "a" << "b c' d"; Chris@1022: testSplitQuoted(in, out); Chris@1022: } Chris@1022: Chris@1022: void snested() { Chris@1022: QString in = "a 'b c\" d'"; Chris@1022: QStringList out; Chris@1022: out << "a" << "b c\" d"; Chris@1022: testSplitQuoted(in, out); Chris@1022: } Chris@1022: Chris@1022: void snested2() { Chris@1022: QString in = "aa 'bb cc\" dd'"; Chris@1022: QStringList out; Chris@1022: out << "aa" << "bb cc\" dd"; Chris@1022: testSplitQuoted(in, out); Chris@1022: } Chris@1022: Chris@1524: void snested3() { Chris@1524: QString in = "'aa bb cc\"' dd"; Chris@1524: QStringList out; Chris@1524: out << "aa bb cc\"" << "dd"; Chris@1524: testSplitQuoted(in, out); Chris@1524: } Chris@1524: Chris@1524: void snested3a() { Chris@1524: QString in = "\"aa bb cc'\" dd"; Chris@1524: QStringList out; Chris@1524: out << "aa bb cc'" << "dd"; Chris@1524: testSplitQuoted(in, out); Chris@1524: } Chris@1524: Chris@1524: void snested4() { Chris@1524: QString in = "'aa \"bb cc\" dd'"; Chris@1524: QStringList out; Chris@1524: out << "aa \"bb cc\" dd"; Chris@1524: testSplitQuoted(in, out); Chris@1524: } Chris@1524: Chris@1524: void snested4a() { Chris@1524: QString in = "\"aa 'bb cc' dd\""; Chris@1524: QStringList out; Chris@1524: out << "aa 'bb cc' dd"; Chris@1524: testSplitQuoted(in, out); Chris@1524: } Chris@1524: Chris@1022: void qquoted() { Chris@1022: QString in = "a'a 'bb' \\\"cc\" dd\\\""; Chris@1022: QStringList out; Chris@1022: out << "a'a" << "bb" << "\"cc\"" << "dd\""; Chris@1022: testSplitQuoted(in, out); Chris@1022: } Chris@1022: Chris@1524: void qspace() { Chris@1524: QString in = "\"a a\":\"b:b\":\"c d\""; Chris@1524: QStringList out1; Chris@1524: // Can't start a quote in the middle of a bare field - they Chris@1524: // are handled only if the first character in the field is a Chris@1524: // quote. Otherwise we'd have trouble with apostrophes etc Chris@1524: out1 << "a a:\"b:b\":\"c" << "d\""; Chris@1524: QCOMPARE(StringBits::splitQuoted(in, ' '), out1); Chris@1524: QStringList out2; Chris@1524: out2 << "a a" << "b:b" << "c d"; Chris@1524: QCOMPARE(StringBits::splitQuoted(in, ':'), out2); Chris@1524: } Chris@1524: Chris@1022: void multispace() { Chris@1022: QString in = " a'a \\' 'bb' ' \\\"cc\" ' dd\\\" '"; Chris@1022: QStringList out; Chris@1022: out << "a'a" << "'" << "bb" << " \"cc\" " << "dd\"" << "'"; Chris@1022: QCOMPARE(StringBits::splitQuoted(in, ' '), out); Chris@1022: Chris@1022: QString in2 = ",,a'a,\\',,,,,,,,,'bb',,,,',,,,,,\\\"cc\",',dd\\\",'"; Chris@1022: QStringList out2; Chris@1022: out2 << "" << "" << "a'a" << "'" << "" << "" << "" << "" << "" << "" Chris@1022: << "" << "" << "bb" << "" << "" << "" << ",,,,,,\"cc\"," Chris@1022: << "dd\"" << "'"; Chris@1022: QCOMPARE(StringBits::splitQuoted(in2, ','), out2); Chris@1022: } Chris@1022: }; Chris@1022: Chris@1022: #endif Chris@1022: Chris@1022: /* r928 Chris@1022: Config: Using QtTest library 5.3.2, Qt 5.3.2 Chris@1022: PASS : TestStringBits::initTestCase() Chris@1022: PASS : TestStringBits::simple() Chris@1022: PASS : TestStringBits::dquoted() Chris@1022: PASS : TestStringBits::squoted() Chris@1022: PASS : TestStringBits::descaped() Chris@1022: FAIL! : TestStringBits::sescaped() Compared lists have different sizes. Chris@1022: Actual (StringBits::splitQuoted(in, ' ')) size: 3 Chris@1022: Expected (out) size: 2 Chris@1022: Loc: [o/../TestStringBits.h(65)] Chris@1022: PASS : TestStringBits::dnested() Chris@1022: PASS : TestStringBits::snested() Chris@1022: PASS : TestStringBits::snested2() Chris@1022: PASS : TestStringBits::qquoted() Chris@1022: FAIL! : TestStringBits::multispace() Compared lists differ at index 1. Chris@1022: Actual (StringBits::splitQuoted(in, ' ')): " " Chris@1022: Expected (out): "'" Chris@1022: Loc: [o/../TestStringBits.h(100)] Chris@1022: FAIL! : TestStringBits::qcommas() Compared lists have different sizes. Chris@1022: Actual (StringBits::splitQuoted(in, ',')) size: 4 Chris@1022: Expected (out) size: 3 Chris@1022: Loc: [o/../TestStringBits.h(107)] Chris@1022: PASS : TestStringBits::cleanupTestCase() Chris@1022: Totals: 10 passed, 3 failed, 0 skipped Chris@1022: */ Chris@1022: Chris@1022: /*curr Chris@1022: PASS : TestStringBits::initTestCase() Chris@1022: PASS : TestStringBits::simple() Chris@1022: PASS : TestStringBits::dquoted() Chris@1022: PASS : TestStringBits::squoted() Chris@1022: PASS : TestStringBits::descaped() Chris@1022: FAIL! : TestStringBits::sescaped() Compared lists have different sizes. Chris@1022: Actual (StringBits::splitQuoted(in, ' ')) size: 3 Chris@1022: Expected (out) size: 2 Chris@1022: Loc: [o/../TestStringBits.h(65)] Chris@1022: PASS : TestStringBits::dnested() Chris@1022: PASS : TestStringBits::snested() Chris@1022: PASS : TestStringBits::snested2() Chris@1022: PASS : TestStringBits::qquoted() Chris@1022: FAIL! : TestStringBits::multispace() Compared lists have different sizes. Chris@1022: Actual (StringBits::splitQuoted(in, ' ')) size: 5 Chris@1022: Expected (out) size: 6 Chris@1022: Loc: [o/../TestStringBits.h(100)] Chris@1022: PASS : TestStringBits::qcommas() Chris@1022: PASS : TestStringBits::cleanupTestCase() Chris@1022: Totals: 11 passed, 2 failed, 0 skipped Chris@1022: */