annotate base/test/TestStringBits.h @ 1524:64ef24ebb19c

Some CSV format tests and minor fixes
author Chris Cannam
date Fri, 14 Sep 2018 09:25:17 +0100
parents eecf544bed92
children bde22957545e
rev   line source
Chris@1022 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@1022 2
Chris@1022 3 /*
Chris@1022 4 Sonic Visualiser
Chris@1022 5 An audio file viewer and annotation editor.
Chris@1022 6 Centre for Digital Music, Queen Mary, University of London.
Chris@1022 7
Chris@1022 8 This program is free software; you can redistribute it and/or
Chris@1022 9 modify it under the terms of the GNU General Public License as
Chris@1022 10 published by the Free Software Foundation; either version 2 of the
Chris@1022 11 License, or (at your option) any later version. See the file
Chris@1022 12 COPYING included with this distribution for more information.
Chris@1022 13 */
Chris@1022 14
Chris@1022 15 #ifndef TEST_STRINGBITS_H
Chris@1022 16 #define TEST_STRINGBITS_H
Chris@1022 17
Chris@1022 18 #include "../StringBits.h"
Chris@1022 19
Chris@1022 20 #include <QObject>
Chris@1022 21 #include <QStringList>
Chris@1022 22 #include <QtTest>
Chris@1022 23
Chris@1022 24 #include <iostream>
Chris@1022 25
Chris@1022 26 using namespace std;
Chris@1022 27
Chris@1022 28 class TestStringBits : public QObject
Chris@1022 29 {
Chris@1022 30 Q_OBJECT
Chris@1022 31
Chris@1022 32 private:
Chris@1022 33 void testSplitQuoted(QString in, QStringList out) {
Chris@1022 34 // Only suitable where the output strings do not have
Chris@1022 35 // consecutive spaces in them
Chris@1022 36 QCOMPARE(StringBits::splitQuoted(in, ' '), out);
Chris@1022 37 QString in2(in);
Chris@1022 38 in2.replace(' ', ',');
Chris@1022 39 QStringList out2;
Chris@1022 40 foreach (QString o, out) {
Chris@1022 41 out2 << o.replace(' ', ',');
Chris@1022 42 }
Chris@1022 43 QCOMPARE(StringBits::splitQuoted(in2, ','), out2);
Chris@1022 44 }
Chris@1022 45
Chris@1022 46 private slots:
Chris@1022 47 void simple() {
Chris@1022 48 QString in = "a b c d";
Chris@1022 49 QStringList out;
Chris@1022 50 out << "a" << "b" << "c" << "d";
Chris@1022 51 testSplitQuoted(in, out);
Chris@1022 52 }
Chris@1022 53
Chris@1022 54 void dquoted() {
Chris@1022 55 QString in = "a \"b c\" d";
Chris@1022 56 QStringList out;
Chris@1022 57 out << "a" << "b c" << "d";
Chris@1022 58 testSplitQuoted(in, out);
Chris@1022 59 }
Chris@1022 60
Chris@1022 61 void drunon() {
Chris@1022 62 QString in = "a \"b c\"d e";
Chris@1022 63 QStringList out;
Chris@1022 64 out << "a" << "b cd" << "e";
Chris@1022 65 testSplitQuoted(in, out);
Chris@1022 66 }
Chris@1022 67
Chris@1022 68 void squoted() {
Chris@1022 69 QString in = "a 'b c' d";
Chris@1022 70 QStringList out;
Chris@1022 71 out << "a" << "b c" << "d";
Chris@1022 72 testSplitQuoted(in, out);
Chris@1022 73 }
Chris@1022 74
Chris@1022 75 void srunon() {
Chris@1022 76 QString in = "a 'b c'd e";
Chris@1022 77 QStringList out;
Chris@1022 78 out << "a" << "b cd" << "e";
Chris@1022 79 testSplitQuoted(in, out);
Chris@1022 80 }
Chris@1022 81
Chris@1022 82 void dempty() {
Chris@1022 83 QString in = "\"\" \"\" \"\"";
Chris@1022 84 QStringList out;
Chris@1022 85 out << "" << "" << "";
Chris@1022 86 testSplitQuoted(in, out);
Chris@1022 87 }
Chris@1022 88
Chris@1022 89 void sempty() {
Chris@1022 90 QString in = "'' '' ''";
Chris@1022 91 QStringList out;
Chris@1022 92 out << "" << "" << "";
Chris@1022 93 testSplitQuoted(in, out);
Chris@1022 94 }
Chris@1022 95
Chris@1022 96 void descaped() {
Chris@1022 97 QString in = "a \"b c\\\" d\"";
Chris@1022 98 QStringList out;
Chris@1022 99 out << "a" << "b c\" d";
Chris@1022 100 testSplitQuoted(in, out);
Chris@1022 101 }
Chris@1022 102
Chris@1022 103 void sescaped() {
Chris@1022 104 QString in = "a 'b c\\' d'";
Chris@1022 105 QStringList out;
Chris@1022 106 out << "a" << "b c' d";
Chris@1022 107 testSplitQuoted(in, out);
Chris@1022 108 }
Chris@1022 109
Chris@1022 110 void dnested() {
Chris@1022 111 QString in = "a \"b c' d\"";
Chris@1022 112 QStringList out;
Chris@1022 113 out << "a" << "b c' d";
Chris@1022 114 testSplitQuoted(in, out);
Chris@1022 115 }
Chris@1022 116
Chris@1022 117 void snested() {
Chris@1022 118 QString in = "a 'b c\" d'";
Chris@1022 119 QStringList out;
Chris@1022 120 out << "a" << "b c\" d";
Chris@1022 121 testSplitQuoted(in, out);
Chris@1022 122 }
Chris@1022 123
Chris@1022 124 void snested2() {
Chris@1022 125 QString in = "aa 'bb cc\" dd'";
Chris@1022 126 QStringList out;
Chris@1022 127 out << "aa" << "bb cc\" dd";
Chris@1022 128 testSplitQuoted(in, out);
Chris@1022 129 }
Chris@1022 130
Chris@1524 131 void snested3() {
Chris@1524 132 QString in = "'aa bb cc\"' dd";
Chris@1524 133 QStringList out;
Chris@1524 134 out << "aa bb cc\"" << "dd";
Chris@1524 135 testSplitQuoted(in, out);
Chris@1524 136 }
Chris@1524 137
Chris@1524 138 void snested3a() {
Chris@1524 139 QString in = "\"aa bb cc'\" dd";
Chris@1524 140 QStringList out;
Chris@1524 141 out << "aa bb cc'" << "dd";
Chris@1524 142 testSplitQuoted(in, out);
Chris@1524 143 }
Chris@1524 144
Chris@1524 145 void snested4() {
Chris@1524 146 QString in = "'aa \"bb cc\" dd'";
Chris@1524 147 QStringList out;
Chris@1524 148 out << "aa \"bb cc\" dd";
Chris@1524 149 testSplitQuoted(in, out);
Chris@1524 150 }
Chris@1524 151
Chris@1524 152 void snested4a() {
Chris@1524 153 QString in = "\"aa 'bb cc' dd\"";
Chris@1524 154 QStringList out;
Chris@1524 155 out << "aa 'bb cc' dd";
Chris@1524 156 testSplitQuoted(in, out);
Chris@1524 157 }
Chris@1524 158
Chris@1022 159 void qquoted() {
Chris@1022 160 QString in = "a'a 'bb' \\\"cc\" dd\\\"";
Chris@1022 161 QStringList out;
Chris@1022 162 out << "a'a" << "bb" << "\"cc\"" << "dd\"";
Chris@1022 163 testSplitQuoted(in, out);
Chris@1022 164 }
Chris@1022 165
Chris@1524 166 void qspace() {
Chris@1524 167 QString in = "\"a a\":\"b:b\":\"c d\"";
Chris@1524 168 QStringList out1;
Chris@1524 169 // Can't start a quote in the middle of a bare field - they
Chris@1524 170 // are handled only if the first character in the field is a
Chris@1524 171 // quote. Otherwise we'd have trouble with apostrophes etc
Chris@1524 172 out1 << "a a:\"b:b\":\"c" << "d\"";
Chris@1524 173 QCOMPARE(StringBits::splitQuoted(in, ' '), out1);
Chris@1524 174 QStringList out2;
Chris@1524 175 out2 << "a a" << "b:b" << "c d";
Chris@1524 176 QCOMPARE(StringBits::splitQuoted(in, ':'), out2);
Chris@1524 177 }
Chris@1524 178
Chris@1022 179 void multispace() {
Chris@1022 180 QString in = " a'a \\' 'bb' ' \\\"cc\" ' dd\\\" '";
Chris@1022 181 QStringList out;
Chris@1022 182 out << "a'a" << "'" << "bb" << " \"cc\" " << "dd\"" << "'";
Chris@1022 183 QCOMPARE(StringBits::splitQuoted(in, ' '), out);
Chris@1022 184
Chris@1022 185 QString in2 = ",,a'a,\\',,,,,,,,,'bb',,,,',,,,,,\\\"cc\",',dd\\\",'";
Chris@1022 186 QStringList out2;
Chris@1022 187 out2 << "" << "" << "a'a" << "'" << "" << "" << "" << "" << "" << ""
Chris@1022 188 << "" << "" << "bb" << "" << "" << "" << ",,,,,,\"cc\","
Chris@1022 189 << "dd\"" << "'";
Chris@1022 190 QCOMPARE(StringBits::splitQuoted(in2, ','), out2);
Chris@1022 191 }
Chris@1022 192 };
Chris@1022 193
Chris@1022 194 #endif
Chris@1022 195
Chris@1022 196 /* r928
Chris@1022 197 Config: Using QtTest library 5.3.2, Qt 5.3.2
Chris@1022 198 PASS : TestStringBits::initTestCase()
Chris@1022 199 PASS : TestStringBits::simple()
Chris@1022 200 PASS : TestStringBits::dquoted()
Chris@1022 201 PASS : TestStringBits::squoted()
Chris@1022 202 PASS : TestStringBits::descaped()
Chris@1022 203 FAIL! : TestStringBits::sescaped() Compared lists have different sizes.
Chris@1022 204 Actual (StringBits::splitQuoted(in, ' ')) size: 3
Chris@1022 205 Expected (out) size: 2
Chris@1022 206 Loc: [o/../TestStringBits.h(65)]
Chris@1022 207 PASS : TestStringBits::dnested()
Chris@1022 208 PASS : TestStringBits::snested()
Chris@1022 209 PASS : TestStringBits::snested2()
Chris@1022 210 PASS : TestStringBits::qquoted()
Chris@1022 211 FAIL! : TestStringBits::multispace() Compared lists differ at index 1.
Chris@1022 212 Actual (StringBits::splitQuoted(in, ' ')): " "
Chris@1022 213 Expected (out): "'"
Chris@1022 214 Loc: [o/../TestStringBits.h(100)]
Chris@1022 215 FAIL! : TestStringBits::qcommas() Compared lists have different sizes.
Chris@1022 216 Actual (StringBits::splitQuoted(in, ',')) size: 4
Chris@1022 217 Expected (out) size: 3
Chris@1022 218 Loc: [o/../TestStringBits.h(107)]
Chris@1022 219 PASS : TestStringBits::cleanupTestCase()
Chris@1022 220 Totals: 10 passed, 3 failed, 0 skipped
Chris@1022 221 */
Chris@1022 222
Chris@1022 223 /*curr
Chris@1022 224 PASS : TestStringBits::initTestCase()
Chris@1022 225 PASS : TestStringBits::simple()
Chris@1022 226 PASS : TestStringBits::dquoted()
Chris@1022 227 PASS : TestStringBits::squoted()
Chris@1022 228 PASS : TestStringBits::descaped()
Chris@1022 229 FAIL! : TestStringBits::sescaped() Compared lists have different sizes.
Chris@1022 230 Actual (StringBits::splitQuoted(in, ' ')) size: 3
Chris@1022 231 Expected (out) size: 2
Chris@1022 232 Loc: [o/../TestStringBits.h(65)]
Chris@1022 233 PASS : TestStringBits::dnested()
Chris@1022 234 PASS : TestStringBits::snested()
Chris@1022 235 PASS : TestStringBits::snested2()
Chris@1022 236 PASS : TestStringBits::qquoted()
Chris@1022 237 FAIL! : TestStringBits::multispace() Compared lists have different sizes.
Chris@1022 238 Actual (StringBits::splitQuoted(in, ' ')) size: 5
Chris@1022 239 Expected (out) size: 6
Chris@1022 240 Loc: [o/../TestStringBits.h(100)]
Chris@1022 241 PASS : TestStringBits::qcommas()
Chris@1022 242 PASS : TestStringBits::cleanupTestCase()
Chris@1022 243 Totals: 11 passed, 2 failed, 0 skipped
Chris@1022 244 */