Warning, /sdk/clazy/tests/qstring-allocations/main.cpp.fixed.expected is written in an unsupported language. File is not indexed.
0001 #include <QtCore/QString>
0002 #include <QtCore/QStringList>
0003 #include <QtCore/QDebug>
0004
0005 const char * some_char_pointer_indirection(const char *)
0006 {
0007 return nullptr;
0008 }
0009
0010 const char * some_char_pointer()
0011 {
0012 return nullptr;
0013 }
0014
0015 void test()
0016 {
0017 QString s1;
0018 const char *cstring = "foo";
0019 s1.contains(QLatin1String("string")); // Warning
0020 s1.contains(some_char_pointer()); // OK
0021
0022 QString s2 = QStringLiteral("string"); // Warning
0023 QString s3 = QStringLiteral("string"); // OK
0024 QString s4(some_char_pointer()); // OK
0025
0026 s1 += QLatin1String("foo"); // Warning
0027 s1 += QStringLiteral("foo"); // OK
0028 s1 += QLatin1String("foo"); // OK
0029
0030 QString s5 = QStringLiteral("BAR"); // Warning
0031 QString s6 = QStringLiteral("BAR"); // Warning
0032 QString s7 = QString::fromLatin1(some_char_pointer()); // OK
0033 QString s8 = QString::fromUtf8(some_char_pointer()); // OK
0034 QString s81 = QString::fromUtf8(some_char_pointer_indirection("foo")); // OK
0035 QString s123 = QString::fromLatin1(some_char_pointer_indirection("foo")); // OK
0036
0037 QString s9 = QStringLiteral("string"); // Warning
0038 s9 = QStringLiteral("string"); // Warning
0039 s9 = QLatin1String(some_char_pointer_indirection("foo")); // OK
0040 QString s10 = true ? QStringLiteral("string1") : QStringLiteral("string2"); // Warning
0041 s10 = true ? QStringLiteral("string1") : QStringLiteral("string2"); // Warning
0042
0043 QString s11 = QStringLiteral("foo"); // Warning
0044 QStringList stringList;
0045 stringList << QString::fromLatin1("foo", 1); // OK
0046 QString s12 = QLatin1String(""); // OK, QString is optimized for the empty case
0047 QString s = QLatin1String(cstring + sizeof("foo")); // OK
0048 s = QStringLiteral("bar %1").arg(1); // Warning
0049 s = QString::fromLatin1(true ? "foo" : "foo2").arg(1); // Warning
0050 s += QLatin1String( // Warning: Multi-line, to test FIXIT
0051 "foo" );
0052 QString::fromLatin1(true ? cstring : "cstring"); // OK
0053 QString escaped = QStringLiteral("\\\\"); // Warning
0054 QString s13 = QStringLiteral("foo"); // Warning
0055 QString s14 = QLatin1String(""); // Warning
0056 QString s15 = QLatin1String(""); // Warning
0057 s15.startsWith(QLatin1String("ff")); // OK
0058 s15.startsWith(QLatin1String("ff")); // Warning, should be QLatin1String
0059 s15.contains(QLatin1String("ff")); // Warning, should be QStringLiteral
0060 s15.indexOf(QLatin1String("ff")); // Warning, should be QStringLiteral
0061 }
0062
0063
0064
0065
0066
0067
0068
0069
0070 struct A
0071 {
0072 A() : member(QStringLiteral("foo")) {} // Warning
0073 QString member;
0074 };
0075
0076 struct A2
0077 {
0078 A2() : member(QStringLiteral("foo")) // OK
0079 , member2(QStringLiteral("foo")) {} // Warning
0080 void test(const QString &calendarType = QStringLiteral("gregorian") ); // Warning
0081 QString member;
0082 QString member2;
0083 };
0084
0085 void test3()
0086 {
0087 QString s;
0088 if (s == QLatin1String("foo")) // Warning
0089 return;
0090 if (s == QStringLiteral("foo %1").arg(1)) // Warning
0091 return;
0092 }
0093
0094 void test4(const QString &) {}
0095
0096 void test5()
0097 {
0098 test4(QStringLiteral("foo")); // Warning
0099 QString s;
0100 s.contains(QLatin1String("a")); // Warning
0101 s.compare(QStringLiteral("a"), QLatin1String("a")); // Warning
0102 }
0103
0104 #include <exception>
0105 void exceptionTest() // Just to test a crash
0106 {
0107 try {
0108
0109 } catch (std::exception e) {
0110
0111 }
0112 }
0113
0114 QStringList returns_stringlist(QString) { return {}; }
0115
0116 void test_foreach()
0117 {
0118 foreach (const QString &s, returns_stringlist(QLatin1String("bar"))) // Warning
0119 {
0120 }
0121 }
0122
0123 void testCharsets()
0124 {
0125 QString s = QStringLiteral("é");
0126 s += QStringLiteral("é");
0127 s += QLatin1String("e");
0128 s.compare(QStringLiteral("é"), QStringLiteral("e"));
0129 s.startsWith(QStringLiteral("é"));
0130 s.startsWith(QLatin1String("e"));
0131 foreach (const QString &s, returns_stringlist(QLatin1String("éÈ"))) { }
0132 QString s11 = QLatin1String("é");
0133
0134 if (s == QLatin1String("foó"))
0135 return;
0136 if (s == QString::fromLatin1("foó %1").arg(1))
0137 return;
0138 s.contains(QLatin1String("é"));
0139 s += QLatin1String(
0140 "fóó" );
0141 QString s123 = QString::fromLatin1(some_char_pointer_indirection("fóó"));
0142 QString s9 = QLatin1String("stringéééé");
0143 }
0144
0145 struct TestCharsets
0146 {
0147 TestCharsets() : member(QStringLiteral("é"))
0148 , member2(QLatin1String("é")) {} // Warning
0149 void test(const QString &calendarType = QLatin1String("éééé´e") );
0150 void test2();
0151 QString member;
0152 QString member2;
0153 };
0154
0155
0156
0157
0158
0159
0160
0161
0162
0163
0164
0165 void moreShouldBeQLatin1String()
0166 {
0167 QString s;
0168 bool b = (s == QLatin1String("="));
0169 if (s.startsWith(QLatin1String("Version=5"))) {}
0170 if (s.startsWith(QLatin1String("Version=5"))) {} // OK
0171 QString result = QLatin1String("Enum") + s;
0172 }
0173
0174 void TestCharsets::test2()
0175 {
0176 QString s = QString::fromLatin1("é"); // Can't fix this weird one
0177 QString s2 = QStringLiteral("é");
0178 s2 += QLatin1String("é");
0179 s2 += QStringLiteral("é");
0180 s = QStringLiteral("á");
0181 s += QStringLiteral("á");
0182 QStringLiteral("á");
0183 QStringList slist;
0184 slist << QStringLiteral("á") << QStringLiteral("a");
0185 }
0186
0187
0188
0189 #if QT_MAJOR_VERSION == 5
0190 #include <QtCore/QRegExp>
0191 void testBlacklistedQRegExp()
0192 {
0193 QRegExp exp1("literal");
0194 QRegExp exp2(QLatin1String("literal"));
0195 }
0196 #endif
0197
0198
0199 void charsetEdgeCase()
0200 {
0201 test4(QLatin1String("ááá"));
0202 }
0203
0204 void testQDebug()
0205 {
0206 qDebug() << "test"; // OK
0207 }
0208
0209 void testEmpty()
0210 {
0211 QStringList list = QStringList() << QStringLiteral("foo") << QLatin1String("");
0212 }
0213
0214
0215 void test_bug358732()
0216 {
0217 QStringLiteral("foo").asprintf("0x%02X", 0x1E); // Warn and use QSL
0218 QStringLiteral("").asprintf("0x%02X", 0x1E); // Warn and use QSL
0219 }
0220
0221
0222 struct QTestData {};
0223
0224 template<typename T>
0225 QTestData &operator<<(QTestData &data, const T &value);
0226
0227 void test_QTestData()
0228 {
0229 QTestData t;
0230 t << QStringLiteral("foo");
0231 }
0232
0233 void test_QStringList_streamOp()
0234 {
0235 QStringList list;
0236 list << QStringLiteral("foo") << QStringLiteral("foo") << QStringLiteral("foo") << QStringLiteral("foo");
0237 list += QStringLiteral("foo");
0238 list += QStringLiteral("foo");
0239 list += QStringLiteral("foo");
0240 list += QStringLiteral("foo");
0241 }
0242
0243 void testQLatin1String2Args()
0244 {
0245 QString s2 = QLatin1String("foo", 3);
0246 }
0247
0248 QString s = QStringLiteral("ö");
0249 QString s2 = QString::fromUtf8("\xc3\xb6");
0250 QString s3 = true ? "ö" : "\xc3\xb6";
0251
0252
0253 // bug #391807
0254 Q_GLOBAL_STATIC_WITH_ARGS(const QString, strUnit, (QLatin1String("unit"))) // OK, since QStringLiteral doesn't work inside Q_GLOBAL_STATIC_WITH_ARGS
0255
0256 void testEmptyString()
0257 {
0258 QString s1, s2, s3;
0259 if (s1.isEmpty() && !s2.isEmpty() && s3 == QLatin1String("foo"))
0260 s1 = s3;
0261 }