|
1 | 1 |
|
2 | 2 | #include "Catch2.h"
|
3 |
| -#include "dbcppp/Network.h" |
| 3 | +#include <dbcppp/CApi.h> |
| 4 | +#include <dbcppp/Network.h> |
4 | 5 |
|
5 |
| -TEST_CASE("APITest ", "[]") |
| 6 | +using namespace dbcppp; |
| 7 | + |
| 8 | +TEST_CASE("API Test: AttributeDefinition", "[]") |
| 9 | +{ |
| 10 | + constexpr char* test_dbc = |
| 11 | + "VERSION \"\"\n" |
| 12 | + "NS_ :\n" |
| 13 | + "BS_:\n" |
| 14 | + "BU_:\n" |
| 15 | + "BA_DEF_ BO_ \"AD_Name\" INT 1 3000;"; |
| 16 | + |
| 17 | + SECTION("CPP API") |
| 18 | + { |
| 19 | + std::istringstream iss(test_dbc); |
| 20 | + auto net = INetwork::LoadDBCFromIs(iss); |
| 21 | + REQUIRE(net); |
| 22 | + |
| 23 | + REQUIRE(net->AttributeDefinitions_Size() == 1); |
| 24 | + REQUIRE(net->AttributeDefinitions_Get(0).ObjectType() == IAttributeDefinition::EObjectType::Message); |
| 25 | + REQUIRE(net->AttributeDefinitions_Get(0).Name() == "AD_Name"); |
| 26 | + auto value_type = std::get_if<IAttributeDefinition::ValueTypeInt>(&net->AttributeDefinitions_Get(0).ValueType()); |
| 27 | + REQUIRE(value_type); |
| 28 | + REQUIRE(value_type->minimum == 1); |
| 29 | + REQUIRE(value_type->maximum == 3000); |
| 30 | + } |
| 31 | + SECTION("C API") |
| 32 | + { |
| 33 | + auto net = dbcppp_NetworkLoadDBCFromMemory(test_dbc); |
| 34 | + REQUIRE(net); |
| 35 | + |
| 36 | + REQUIRE(dbcppp_NetworkAttributeDefinitions_Size(net) == 1); |
| 37 | + auto attr_def = dbcppp_NetworkAttributeDefinitions_Get(net, 0); |
| 38 | + REQUIRE(dbcppp_AttributeDefinitionObjectType(attr_def) == dbcppp_ObjectType_Message); |
| 39 | + REQUIRE(dbcppp_AttributeDefinitionName(attr_def) == std::string("AD_Name")); |
| 40 | + REQUIRE(dbcppp_AttributeDefinitionValueType(attr_def) == dbcppp_AttributeDefinitionValueTypeInt); |
| 41 | + REQUIRE(dbcppp_AttributeDefinitionValueTypeAsInt_Minimum(attr_def) == 1); |
| 42 | + REQUIRE(dbcppp_AttributeDefinitionValueTypeAsInt_Maximum(attr_def) == 3000); |
| 43 | + } |
| 44 | +} |
| 45 | +TEST_CASE("API Test: BitTiming", "[]") |
6 | 46 | {
|
| 47 | + constexpr char* test_dbc = |
| 48 | + "VERSION \"\"\n" |
| 49 | + "NS_ :\n" |
| 50 | + "BS_: 1 : 2, 3\n" |
| 51 | + "BU_:\n"; |
| 52 | + |
| 53 | + SECTION("CPP API") |
| 54 | + { |
| 55 | + std::istringstream iss(test_dbc); |
| 56 | + auto net = INetwork::LoadDBCFromIs(iss); |
| 57 | + REQUIRE(net); |
| 58 | + |
| 59 | + REQUIRE(net->BitTiming().Baudrate() == 1); |
| 60 | + REQUIRE(net->BitTiming().BTR1() == 2); |
| 61 | + REQUIRE(net->BitTiming().BTR2() == 3); |
| 62 | + } |
| 63 | + SECTION("C API") |
| 64 | + { |
| 65 | + auto net = dbcppp_NetworkLoadDBCFromMemory(test_dbc); |
| 66 | + REQUIRE(net); |
| 67 | + |
| 68 | + auto bt = dbcppp_NetworkBitTiming(net); |
| 69 | + REQUIRE(bt); |
| 70 | + REQUIRE(dbcppp_BitTimingBaudrate(bt) == 1); |
| 71 | + REQUIRE(dbcppp_BitTimingBTR1(bt) == 2); |
| 72 | + REQUIRE(dbcppp_BitTimingBTR2(bt) == 3); |
| 73 | + } |
| 74 | +} |
| 75 | +TEST_CASE("API Test: EnvironmentVariable", "[]") |
| 76 | +{ |
| 77 | + constexpr char* test_dbc = |
| 78 | + "VERSION \"\"\n" |
| 79 | + "NS_ :\n" |
| 80 | + "BS_:\n" |
| 81 | + "BU_:\n" |
| 82 | + "EV_ EnvVarName : 0 [1|2] \"Unit\" 5.5 1 DUMMY_NODE_VECTOR0 Node0;\n" |
| 83 | + "CM_ EV_ EnvVarName \"Comment\";\n"; |
| 84 | + |
| 85 | + SECTION("CPP API") |
| 86 | + { |
| 87 | + std::istringstream iss(test_dbc); |
| 88 | + auto net = INetwork::LoadDBCFromIs(iss); |
| 89 | + REQUIRE(net); |
| 90 | + |
| 91 | + REQUIRE(net->EnvironmentVariables_Size() == 1); |
| 92 | + REQUIRE(net->EnvironmentVariables_Get(0).Name() == "EnvVarName"); |
| 93 | + REQUIRE(net->EnvironmentVariables_Get(0).VarType() == IEnvironmentVariable::EVarType::Integer); |
| 94 | + REQUIRE(net->EnvironmentVariables_Get(0).Minimum() == 1); |
| 95 | + REQUIRE(net->EnvironmentVariables_Get(0).Maximum() == 2); |
| 96 | + REQUIRE(net->EnvironmentVariables_Get(0).Unit() == "Unit"); |
| 97 | + REQUIRE(net->EnvironmentVariables_Get(0).InitialValue() == 5.5); |
| 98 | + REQUIRE(net->EnvironmentVariables_Get(0).EvId() == 1); |
| 99 | + REQUIRE(net->EnvironmentVariables_Get(0).AccessType() == IEnvironmentVariable::EAccessType::Unrestricted); |
| 100 | + REQUIRE(net->EnvironmentVariables_Get(0).AccessNodes_Size() == 1); |
| 101 | + REQUIRE(net->EnvironmentVariables_Get(0).AccessNodes_Get(0) == "Node0"); |
| 102 | + } |
| 103 | + SECTION("C API") |
| 104 | + { |
| 105 | + auto net = dbcppp_NetworkLoadDBCFromMemory(test_dbc); |
| 106 | + REQUIRE(net); |
| 107 | + |
| 108 | + REQUIRE(dbcppp_NetworkEnvironmentVariables_Size(net) == 1); |
| 109 | + auto ev = dbcppp_NetworkEnvironmentVariables_Get(net, 0); |
| 110 | + REQUIRE(ev); |
| 111 | + REQUIRE(dbcppp_EnvironmentVariableName(ev) == std::string("EnvVarName")); |
| 112 | + REQUIRE(dbcppp_EnvironmentVariableVarType(ev) == dbcppp_EnvironmentVariableVarTypeInteger); |
| 113 | + REQUIRE(dbcppp_EnvironmentVariableMinimum(ev) == 1); |
| 114 | + REQUIRE(dbcppp_EnvironmentVariableMaximum(ev) == 2); |
| 115 | + REQUIRE(dbcppp_EnvironmentVariableUnit(ev) == std::string("Unit")); |
| 116 | + REQUIRE(dbcppp_EnvironmentVariableInitialValue(ev) == 5.5); |
| 117 | + REQUIRE(dbcppp_EnvironmentVariableEvId(ev) == 1); |
| 118 | + REQUIRE(dbcppp_EnvironmentVariableAccessType(ev) == dbcppp_EnvironmentVariableAccessTypeUnrestricted); |
| 119 | + REQUIRE(dbcppp_EnvironmentVariableAccessNodes_Size(ev) == 1); |
| 120 | + REQUIRE(dbcppp_EnvironmentVariableAccessNodes_Get(ev, 0) == std::string("Node0")); |
| 121 | + } |
| 122 | +} |
| 123 | +TEST_CASE("API Test: Signal", "[]") |
| 124 | +{ |
| 125 | + constexpr char* test_dbc = |
| 126 | + "VERSION \"\"\n" |
| 127 | + "NS_ :\n" |
| 128 | + "BS_: 1 : 2, 3\n" |
| 129 | + "BU_:\n" |
| 130 | + "BO_ 1 Msg0: 8 Sender0\n" |
| 131 | + " SG_ Sig0: 0|1@1+ (1,0) [1|12] \"Unit0\" Vector__XXX\n" |
| 132 | + " SG_ Sig1 m0 : 1|1@0- (1,0) [1|12] \"Unit1\" Recv0, Recv1\n" |
| 133 | + " SG_ Sig2 M : 2|1@0- (1,0) [1|12] \"Unit2\" Recv0, Recv1\n"; |
| 134 | + |
| 135 | + SECTION("CPP API") |
| 136 | + { |
| 137 | + std::istringstream iss(test_dbc); |
| 138 | + auto net = INetwork::LoadDBCFromIs(iss); |
| 139 | + REQUIRE(net); |
| 140 | + |
| 141 | + REQUIRE(net->Messages_Size() == 1); |
| 142 | + REQUIRE(net->Messages_Get(0).Signals_Size() == 3); |
| 143 | + REQUIRE(net->Messages_Get(0).Signals_Get(0).Name() == "Sig0"); |
| 144 | + REQUIRE(net->Messages_Get(0).Signals_Get(0).MultiplexerIndicator() == ISignal::EMultiplexer::NoMux); |
| 145 | + REQUIRE(net->Messages_Get(0).Signals_Get(0).StartBit() == 0); |
| 146 | + REQUIRE(net->Messages_Get(0).Signals_Get(0).BitSize() == 1); |
| 147 | + REQUIRE(net->Messages_Get(0).Signals_Get(0).ByteOrder() == ISignal::EByteOrder::LittleEndian); |
| 148 | + REQUIRE(net->Messages_Get(0).Signals_Get(0).ValueType() == ISignal::EValueType::Unsigned); |
| 149 | + REQUIRE(net->Messages_Get(0).Signals_Get(0).Factor() == 1); |
| 150 | + REQUIRE(net->Messages_Get(0).Signals_Get(0).Offset() == 0); |
| 151 | + REQUIRE(net->Messages_Get(0).Signals_Get(0).Minimum() == 1); |
| 152 | + REQUIRE(net->Messages_Get(0).Signals_Get(0).Maximum() == 12); |
| 153 | + REQUIRE(net->Messages_Get(0).Signals_Get(0).Unit() == "Unit0"); |
| 154 | + REQUIRE(net->Messages_Get(0).Signals_Get(0).Receivers_Size() == 1); |
| 155 | + REQUIRE(net->Messages_Get(0).Signals_Get(0).Receivers_Get(0) == "Vector__XXX"); |
| 156 | + |
| 157 | + REQUIRE(net->Messages_Get(0).Signals_Get(1).Name() == "Sig1"); |
| 158 | + REQUIRE(net->Messages_Get(0).Signals_Get(1).MultiplexerIndicator() == ISignal::EMultiplexer::MuxValue); |
| 159 | + REQUIRE(net->Messages_Get(0).Signals_Get(1).StartBit() == 1); |
| 160 | + REQUIRE(net->Messages_Get(0).Signals_Get(1).BitSize() == 1); |
| 161 | + REQUIRE(net->Messages_Get(0).Signals_Get(1).ByteOrder() == ISignal::EByteOrder::BigEndian); |
| 162 | + REQUIRE(net->Messages_Get(0).Signals_Get(1).ValueType() == ISignal::EValueType::Signed); |
| 163 | + REQUIRE(net->Messages_Get(0).Signals_Get(1).Factor() == 1); |
| 164 | + REQUIRE(net->Messages_Get(0).Signals_Get(1).Offset() == 0); |
| 165 | + REQUIRE(net->Messages_Get(0).Signals_Get(1).Minimum() == 1); |
| 166 | + REQUIRE(net->Messages_Get(0).Signals_Get(1).Maximum() == 12); |
| 167 | + REQUIRE(net->Messages_Get(0).Signals_Get(1).Unit() == "Unit1"); |
| 168 | + REQUIRE(net->Messages_Get(0).Signals_Get(1).Receivers_Size() == 2); |
| 169 | + REQUIRE(net->Messages_Get(0).Signals_Get(1).Receivers_Get(0) == "Recv0"); |
| 170 | + REQUIRE(net->Messages_Get(0).Signals_Get(1).Receivers_Get(1) == "Recv1"); |
| 171 | + |
| 172 | + REQUIRE(net->Messages_Get(0).Signals_Get(2).Name() == "Sig2"); |
| 173 | + REQUIRE(net->Messages_Get(0).Signals_Get(2).MultiplexerIndicator() == ISignal::EMultiplexer::MuxSwitch); |
| 174 | + REQUIRE(net->Messages_Get(0).Signals_Get(2).StartBit() == 2); |
| 175 | + REQUIRE(net->Messages_Get(0).Signals_Get(2).BitSize() == 1); |
| 176 | + REQUIRE(net->Messages_Get(0).Signals_Get(2).ByteOrder() == ISignal::EByteOrder::BigEndian); |
| 177 | + REQUIRE(net->Messages_Get(0).Signals_Get(2).ValueType() == ISignal::EValueType::Signed); |
| 178 | + REQUIRE(net->Messages_Get(0).Signals_Get(2).Factor() == 1); |
| 179 | + REQUIRE(net->Messages_Get(0).Signals_Get(2).Offset() == 0); |
| 180 | + REQUIRE(net->Messages_Get(0).Signals_Get(2).Minimum() == 1); |
| 181 | + REQUIRE(net->Messages_Get(0).Signals_Get(2).Maximum() == 12); |
| 182 | + REQUIRE(net->Messages_Get(0).Signals_Get(2).Unit() == "Unit2"); |
| 183 | + REQUIRE(net->Messages_Get(0).Signals_Get(2).Receivers_Size() == 2); |
| 184 | + REQUIRE(net->Messages_Get(0).Signals_Get(2).Receivers_Get(0) == "Recv0"); |
| 185 | + REQUIRE(net->Messages_Get(0).Signals_Get(2).Receivers_Get(1) == "Recv1"); |
| 186 | + } |
| 187 | + SECTION("C API") |
| 188 | + { |
| 189 | + auto net = dbcppp_NetworkLoadDBCFromMemory(test_dbc); |
| 190 | + REQUIRE(net); |
| 191 | + |
| 192 | + REQUIRE(dbcppp_NetworkMessages_Size(net) == 1); |
| 193 | + auto msg = dbcppp_NetworkMessages_Get(net, 0); |
| 194 | + REQUIRE(msg); |
| 195 | + REQUIRE(dbcppp_MessageSignals_Size(msg) == 3); |
| 196 | + auto sig = dbcppp_MessageSignals_Get(msg, 0); |
| 197 | + REQUIRE(sig); |
| 198 | + REQUIRE(dbcppp_SignalName(sig) == std::string("Sig0")); |
| 199 | + REQUIRE(dbcppp_SignalMultiplexerIndicator(sig) == dbcppp_SignalMultiplexerNoMux); |
| 200 | + REQUIRE(dbcppp_SignalStartBit(sig) == 0); |
| 201 | + REQUIRE(dbcppp_SignalBitSize(sig) == 1); |
| 202 | + REQUIRE(dbcppp_SignalByteOrder(sig) == dbcppp_SignalByteOrderLittleEndian); |
| 203 | + REQUIRE(dbcppp_SignalValueType(sig) == dbcppp_SignalValueTypeUnsigned); |
| 204 | + REQUIRE(dbcppp_SignalFactor(sig) == 1); |
| 205 | + REQUIRE(dbcppp_SignalOffset(sig) == 0); |
| 206 | + REQUIRE(dbcppp_SignalMinimum(sig) == 1); |
| 207 | + REQUIRE(dbcppp_SignalMaximum(sig) == 12); |
| 208 | + REQUIRE(dbcppp_SignalReceivers_Size(sig) == 1); |
| 209 | + REQUIRE(dbcppp_SignalReceivers_Get(sig, 0) == std::string("Vector__XXX")); |
| 210 | + } |
| 211 | +} |
| 212 | +TEST_CASE("API Test: Message", "[]") |
| 213 | +{ |
| 214 | + constexpr char* test_dbc = |
| 215 | + "VERSION \"\"\n" |
| 216 | + "NS_ :\n" |
| 217 | + "BS_: 1 : 2, 3\n" |
| 218 | + "BU_:\n" |
| 219 | + "BO_ 1 Msg0: 8 Sender0\n" |
| 220 | + " SG_ Sig0: 0|1@1+ (1,0) [1|12] \"Unit0\" Vector__XXX\n" |
| 221 | + " SG_ Sig1 m0 : 1|1@0- (1,0) [1|12] \"Unit1\" Recv0, Recv1\n" |
| 222 | + " SG_ Sig2 M : 2|1@0- (1,0) [1|12] \"Unit2\" Recv0, Recv1\n"; |
| 223 | + |
| 224 | + SECTION("CPP API") |
| 225 | + { |
| 226 | + std::istringstream iss(test_dbc); |
| 227 | + auto net = INetwork::LoadDBCFromIs(iss); |
| 228 | + REQUIRE(net); |
| 229 | + |
| 230 | + REQUIRE(net->Messages_Size() == 1); |
| 231 | + REQUIRE(net->Messages_Get(0).Id() == 1); |
| 232 | + REQUIRE(net->Messages_Get(0).MessageSize() == 8); |
| 233 | + REQUIRE(net->Messages_Get(0).Transmitter() == "Sender0"); |
| 234 | + REQUIRE(net->Messages_Get(0).Signals_Size() == 3); |
| 235 | + } |
| 236 | + SECTION("C API") |
| 237 | + { |
| 238 | + auto net = dbcppp_NetworkLoadDBCFromMemory(test_dbc); |
| 239 | + REQUIRE(net); |
7 | 240 |
|
| 241 | + REQUIRE(dbcppp_NetworkMessages_Size(net) == 1); |
| 242 | + auto msg = dbcppp_NetworkMessages_Get(net, 0); |
| 243 | + REQUIRE(msg); |
| 244 | + REQUIRE(dbcppp_MessageSignals_Size(msg) == 3); |
| 245 | + } |
8 | 246 | }
|
0 commit comments