| 36 | } // namespace |
| 37 | |
| 38 | int main(int argc, char** argv) |
| 39 | { |
| 40 | QCoreApplication app(argc, argv); |
| 41 | |
| 42 | // ── installed_list — two entries with DEL separator ──────────────────── |
| 43 | { |
| 44 | FlexWaveformModel m; |
| 45 | QSignalSpy spy(&m, &FlexWaveformModel::waveformsChanged); |
| 46 | |
| 47 | // Entry format: name<DEL>version (DEL = 0x7F, ASCII 127) |
| 48 | const QString list = QString("FREEDV") + QChar(0x7F) + "v1" |
| 49 | + "," |
| 50 | + QString("RTTY") + QChar(0x7F) + "v2"; |
| 51 | m.handleInstalledList(makeKvs({{"installed_list", list}})); |
| 52 | |
| 53 | report("installedList: waveformsChanged emitted", spy.size() == 1); |
| 54 | report("installedList: two entries", m.waveforms().size() == 2); |
| 55 | report("installedList: first name = FREEDV", m.waveforms()[0].name == "FREEDV"); |
| 56 | report("installedList: first version = v1", m.waveforms()[0].version == "v1"); |
| 57 | report("installedList: first isContainer = false", !m.waveforms()[0].isContainer); |
| 58 | report("installedList: second name = RTTY", m.waveforms()[1].name == "RTTY"); |
| 59 | report("installedList: displayName = 'RTTY v2'", m.waveforms()[1].displayName() == "RTTY v2"); |
| 60 | } |
| 61 | |
| 62 | // ── installed_list — empty entry is skipped without crash ────────────── |
| 63 | { |
| 64 | FlexWaveformModel m; |
| 65 | |
| 66 | const QString list = QString("FREEDV") + QChar(0x7F) + "v1" |
| 67 | + ",," // empty middle entry |
| 68 | + QString("RTTY") + QChar(0x7F) + "v2"; |
| 69 | m.handleInstalledList(makeKvs({{"installed_list", list}})); |
| 70 | |
| 71 | report("installedList: empty entry skipped", m.waveforms().size() == 2); |
| 72 | } |
| 73 | |
| 74 | // ── container add ────────────────────────────────────────────────────── |
| 75 | { |
| 76 | FlexWaveformModel m; |
| 77 | QSignalSpy spy(&m, &FlexWaveformModel::waveformsChanged); |
| 78 | |
| 79 | m.handleContainerStatus(makeKvs({{"name", "MyWaveform"}, {"version", "2.1"}})); |
| 80 | |
| 81 | report("containerAdd: waveformsChanged emitted", spy.size() == 1); |
| 82 | report("containerAdd: one entry", m.waveforms().size() == 1); |
| 83 | report("containerAdd: name = MyWaveform", m.waveforms()[0].name == "MyWaveform"); |
| 84 | report("containerAdd: version = 2.1", m.waveforms()[0].version == "2.1"); |
| 85 | report("containerAdd: isContainer = true", m.waveforms()[0].isContainer); |
| 86 | } |
| 87 | |
| 88 | // ── container remove (bare-word 'removed' key) ───────────────────────── |
| 89 | { |
| 90 | FlexWaveformModel m; |
| 91 | QSignalSpy spy(&m, &FlexWaveformModel::waveformsChanged); |
| 92 | |
| 93 | m.handleContainerStatus(makeKvs({{"name", "MyWaveform"}, {"version", "2.1"}})); |
| 94 | spy.clear(); |
| 95 |
nothing calls this directly
no test coverage detected