| 154 | |
| 155 | |
| 156 | void TestMIParser::testParseLine() |
| 157 | { |
| 158 | QFETCH(QByteArray, line); |
| 159 | QFETCH(int, recordKind); |
| 160 | QFETCH(QVariant, recordData); |
| 161 | |
| 162 | KDevMI::MI::MIParser m_parser; |
| 163 | |
| 164 | KDevMI::MI::FileSymbol file; |
| 165 | file.contents = line; |
| 166 | |
| 167 | std::unique_ptr<KDevMI::MI::Record> record(m_parser.parse(&file)); |
| 168 | QVERIFY(record != nullptr); |
| 169 | QCOMPARE((int)record->kind, recordKind); |
| 170 | |
| 171 | switch(recordKind) { |
| 172 | case KDevMI::MI::Record::Result: { |
| 173 | const auto& resultRecord = static_cast<KDevMI::MI::ResultRecord&>(*record); |
| 174 | const auto resultData = recordData.value<ResultRecordData>(); |
| 175 | |
| 176 | QCOMPARE(resultRecord.token, resultData.token); |
| 177 | QCOMPARE(resultRecord.reason, resultData.reason); |
| 178 | |
| 179 | for (const auto& result : resultData.results) { |
| 180 | QVERIFY(resultRecord.hasField(result.name)); |
| 181 | doTestResult(resultRecord[result.name], result.value); |
| 182 | } |
| 183 | break; |
| 184 | } |
| 185 | case KDevMI::MI::Record::Async: { |
| 186 | const auto& asyncRecord = static_cast<KDevMI::MI::AsyncRecord&>(*record); |
| 187 | const auto asyncData = recordData.value<AsyncRecordData>(); |
| 188 | |
| 189 | QCOMPARE((int)asyncRecord.subkind, asyncData.subkind); |
| 190 | QCOMPARE(asyncRecord.reason, asyncData.reason); |
| 191 | |
| 192 | for (const auto& result : asyncData.results) { |
| 193 | QVERIFY(asyncRecord.hasField(result.name)); |
| 194 | doTestResult(asyncRecord[result.name], result.value); |
| 195 | } |
| 196 | break; |
| 197 | } |
| 198 | case KDevMI::MI::Record::Stream: { |
| 199 | const auto& streamRecord = static_cast<KDevMI::MI::StreamRecord&>(*record); |
| 200 | const auto streamData = recordData.value<StreamRecordData>(); |
| 201 | |
| 202 | QCOMPARE((int)streamRecord.subkind, streamData.subkind); |
| 203 | QCOMPARE(streamRecord.message, streamData.message); |
| 204 | break; |
| 205 | } |
| 206 | case KDevMI::MI::Record::Prompt: |
| 207 | break; |
| 208 | } |
| 209 | |
| 210 | } |
| 211 | |
| 212 | QTEST_GUILESS_MAIN(TestMIParser) |
| 213 | |