Closes #33
This commit is contained in:
1 parent
f60faea2e7
commit
f03882d3f4
86 files changed
+3539
-2688
No files matched your search
@@ -199,6 +199,8 @@ private Q_SLOTS:
|
||||
void emptyDatabase_data();
|
||||
void emptyDatabase();
|
||||
void databaseReplacement();
|
||||
void unsupportedSignalTypes_data();
|
||||
void unsupportedSignalTypes();
|
||||
};
|
||||
|
||||
void PipelineTest::metadataLookupDecodeAndTree() {
|
||||
@@ -277,6 +279,54 @@ void PipelineTest::metadataLookupDecodeAndTree() {
|
||||
QVERIFY(j1939.signals.empty());
|
||||
}
|
||||
|
||||
void PipelineTest::unsupportedSignalTypes_data() {
|
||||
QTest::addColumn<unsigned>("bits");
|
||||
QTest::addColumn<unsigned>("type");
|
||||
QTest::addColumn<std::vector<std::uint8_t>>("payload");
|
||||
QTest::addColumn<std::uint64_t>("integerValue");
|
||||
QTest::newRow("float32-one") << 32U << 1U << std::vector<std::uint8_t>{0U, 0U, 128U, 63U}
|
||||
<< std::uint64_t(0x3F800000U);
|
||||
QTest::newRow("float64-one") << 64U << 2U << std::vector<std::uint8_t>{0U, 0U, 0U, 0U, 0U, 0U, 240U, 63U}
|
||||
<< std::uint64_t(0x3FF0000000000000ULL);
|
||||
}
|
||||
|
||||
void PipelineTest::unsupportedSignalTypes() {
|
||||
QFETCH(unsigned, bits);
|
||||
QFETCH(unsigned, type);
|
||||
QFETCH(std::vector<std::uint8_t>, payload);
|
||||
QFETCH(std::uint64_t, integerValue);
|
||||
const std::string definitions = "BO_ 1 Frame: " + std::to_string(bits / 8U) + " ECU\n"
|
||||
"SG_ Value : 0|" + std::to_string(bits) + "@1+ (1,0) [0|100] \"\" ECU\n";
|
||||
RawCanFrame raw;
|
||||
raw.canId = 1U;
|
||||
raw.data = payload;
|
||||
const DbcDecodeBuilder builder;
|
||||
const DbcDecoder decoder;
|
||||
|
||||
// Without a type override, the same bits are a supported integer signal.
|
||||
const DbcParseResult integers = ParseFixture(definitions);
|
||||
QVERIFY(!integers.HasErrors());
|
||||
const DecodedFrameValue integerFrame = decoder.Decode(builder.Build(integers.database), raw);
|
||||
QCOMPARE(integerFrame.status, FrameDecodeStatus::Valid);
|
||||
QCOMPARE(integerFrame.signals.size(), std::size_t(1));
|
||||
QVERIFY(integerFrame.signals[0].valid);
|
||||
QCOMPARE(std::get<std::uint64_t>(integerFrame.signals[0].rawValue), integerValue);
|
||||
|
||||
const DbcParseResult floatingPoint = ParseFixture(definitions +
|
||||
"SIG_VALTYPE_ 1 Value : " + std::to_string(type) + ";\n");
|
||||
QVERIFY(floatingPoint.HasErrors());
|
||||
QCOMPARE(floatingPoint.diagnostics.size(), std::size_t(1));
|
||||
QCOMPARE(floatingPoint.diagnostics[0].code, DbcDiagnosticCode::UnsupportedSignalType);
|
||||
QCOMPARE(floatingPoint.diagnostics[0].lineNumber, std::size_t(3));
|
||||
QVERIFY(floatingPoint.database.frames.empty());
|
||||
// Even if a caller overlooks the error, no integer definition is published.
|
||||
const DecodedFrameValue rejected = decoder.Decode(builder.Build(floatingPoint.database), raw);
|
||||
QCOMPARE(rejected.status, FrameDecodeStatus::UnknownFrame);
|
||||
QVERIFY(!rejected.valid);
|
||||
QVERIFY(!rejected.definition);
|
||||
QVERIFY(rejected.signals.empty());
|
||||
}
|
||||
|
||||
void PipelineTest::emptyDatabase_data() {
|
||||
QTest::addColumn<QString>("text");
|
||||
QTest::newRow("empty-file") << QString();
|
||||
|
||||
Reference in new issue
Block a user