mirror of
https://github.com/wf-group/wfview
synced 2026-08-13 17:32:59 -04:00
142 lines
4 KiB
C++
142 lines
4 KiB
C++
#include <QtTest>
|
|
|
|
#include "icomscopeframeassembler.h"
|
|
|
|
class IcomScopeFrameAssemblerTest : public QObject
|
|
{
|
|
Q_OBJECT
|
|
|
|
private slots:
|
|
void acceptsCompleteOrderedUsbFrame();
|
|
void rejectsMidFrameStart();
|
|
void rejectsOutOfOrderSection();
|
|
void rejectsIncompleteFinalFrame();
|
|
void keepsReceiversIndependent();
|
|
};
|
|
|
|
namespace
|
|
{
|
|
QByteArray bcdFrequency(quint64 hz)
|
|
{
|
|
QByteArray out;
|
|
for (int i = 0; i < 5; ++i) {
|
|
uchar value = hz % 10;
|
|
hz /= 10;
|
|
value |= (hz % 10) << 4;
|
|
hz /= 10;
|
|
out.append(char(value));
|
|
}
|
|
return out;
|
|
}
|
|
|
|
QByteArray waveInfo(quint8 sequenceMax = 3)
|
|
{
|
|
QByteArray payload;
|
|
payload.append(char(0x01));
|
|
payload.append(char(sequenceMax));
|
|
payload.append(char(0x01)); // fixed mode
|
|
payload.append(bcdFrequency(14000000));
|
|
payload.append(bcdFrequency(14350000));
|
|
payload.append(char(0x00)); // in range
|
|
return payload;
|
|
}
|
|
|
|
QByteArray waveSection(quint8 sequence, quint8 sequenceMax, const QByteArray &data)
|
|
{
|
|
QByteArray payload;
|
|
payload.append(char(sequence));
|
|
payload.append(char(sequenceMax));
|
|
payload.append(data);
|
|
return payload;
|
|
}
|
|
|
|
bool parse(scopeData &scope, const QByteArray &payload, quint8 &nextSequence, uchar receiver = 0)
|
|
{
|
|
static uchar oldMode = 0xff;
|
|
return IcomScopeFrameAssembler::parsePayload(scope, payload, receiver, 0x98, 6, oldMode, nextSequence);
|
|
}
|
|
}
|
|
|
|
void IcomScopeFrameAssemblerTest::acceptsCompleteOrderedUsbFrame()
|
|
{
|
|
scopeData scope;
|
|
quint8 nextSequence = 0;
|
|
|
|
QVERIFY(!parse(scope, waveInfo(), nextSequence));
|
|
QCOMPARE(nextSequence, quint8(2));
|
|
QVERIFY(!parse(scope, waveSection(2, 3, QByteArray("abc", 3)), nextSequence));
|
|
QCOMPARE(nextSequence, quint8(3));
|
|
QVERIFY(parse(scope, waveSection(3, 3, QByteArray("def", 3)), nextSequence));
|
|
|
|
QVERIFY(scope.valid);
|
|
QCOMPARE(scope.data, QByteArray("abcdef", 6));
|
|
QCOMPARE(nextSequence, quint8(0));
|
|
QCOMPARE(scope.startFreq, 14.0);
|
|
QCOMPARE(scope.endFreq, 14.35);
|
|
}
|
|
|
|
void IcomScopeFrameAssemblerTest::rejectsMidFrameStart()
|
|
{
|
|
scopeData scope;
|
|
quint8 nextSequence = 0;
|
|
|
|
QVERIFY(!parse(scope, waveSection(2, 3, QByteArray("abc", 3)), nextSequence));
|
|
QVERIFY(scope.data.isEmpty());
|
|
QCOMPARE(nextSequence, quint8(0));
|
|
QVERIFY(!scope.valid);
|
|
}
|
|
|
|
void IcomScopeFrameAssemblerTest::rejectsOutOfOrderSection()
|
|
{
|
|
scopeData scope;
|
|
quint8 nextSequence = 0;
|
|
|
|
QVERIFY(!parse(scope, waveInfo(), nextSequence));
|
|
QVERIFY(!parse(scope, waveSection(3, 3, QByteArray("def", 3)), nextSequence));
|
|
|
|
QVERIFY(scope.data.isEmpty());
|
|
QCOMPARE(nextSequence, quint8(0));
|
|
QVERIFY(!scope.valid);
|
|
}
|
|
|
|
void IcomScopeFrameAssemblerTest::rejectsIncompleteFinalFrame()
|
|
{
|
|
scopeData scope;
|
|
quint8 nextSequence = 0;
|
|
|
|
QVERIFY(!parse(scope, waveInfo(), nextSequence));
|
|
QVERIFY(!parse(scope, waveSection(2, 3, QByteArray("abc", 3)), nextSequence));
|
|
QVERIFY(!parse(scope, waveSection(3, 3, QByteArray("d", 1)), nextSequence));
|
|
|
|
QVERIFY(scope.data.isEmpty());
|
|
QCOMPARE(nextSequence, quint8(0));
|
|
QVERIFY(!scope.valid);
|
|
}
|
|
|
|
void IcomScopeFrameAssemblerTest::keepsReceiversIndependent()
|
|
{
|
|
scopeData mainScope;
|
|
scopeData subScope;
|
|
quint8 mainNext = 0;
|
|
quint8 subNext = 0;
|
|
|
|
QVERIFY(!parse(mainScope, waveInfo(), mainNext, 0));
|
|
QVERIFY(!parse(subScope, waveInfo(), subNext, 1));
|
|
QVERIFY(!parse(mainScope, waveSection(2, 3, QByteArray("abc", 3)), mainNext, 0));
|
|
QVERIFY(!parse(subScope, waveSection(2, 3, QByteArray("123", 3)), subNext, 1));
|
|
QVERIFY(parse(mainScope, waveSection(3, 3, QByteArray("def", 3)), mainNext, 0));
|
|
QVERIFY(parse(subScope, waveSection(3, 3, QByteArray("456", 3)), subNext, 1));
|
|
|
|
QCOMPARE(mainScope.data, QByteArray("abcdef", 6));
|
|
QCOMPARE(subScope.data, QByteArray("123456", 6));
|
|
QCOMPARE(mainScope.receiver, uchar(0));
|
|
QCOMPARE(subScope.receiver, uchar(1));
|
|
}
|
|
|
|
int runIcomScopeFrameAssemblerTests(int argc, char **argv)
|
|
{
|
|
IcomScopeFrameAssemblerTest test;
|
|
return QTest::qExec(&test, argc, argv);
|
|
}
|
|
|
|
#include "tst_icomscopeframeassembler.moc"
|