mirror of
https://github.com/openshwprojects/OpenBK7231T_App.git
synced 2025-10-29 11:33:20 +00:00
better self test for enums
This commit is contained in:
parent
42976ee561
commit
d264e92500
@ -3,8 +3,68 @@
|
||||
#include "selftest_local.h"
|
||||
#include "../cmnds/cmd_enums.h"
|
||||
|
||||
void Test_Enum_3opts() {
|
||||
// reset whole device
|
||||
const char *shortName = "myShortName";
|
||||
SIM_ClearOBK(shortName);
|
||||
const char *fullName = "Windows Enum";
|
||||
const char *mqttName = "obkEnumDemo";
|
||||
|
||||
SIM_ClearAndPrepareForMQTTTesting(mqttName, "bekens");
|
||||
|
||||
//SELFTEST_ASSERT(g_enums == 0);
|
||||
|
||||
CMD_ExecuteCommand("SetChannelEnum 14 \"1:One Switch\" 0:Zero 3:Three", 0);
|
||||
SELFTEST_ASSERT(g_enums);
|
||||
SELFTEST_ASSERT(g_enums[14]);
|
||||
SELFTEST_ASSERT(!g_enums[13]);
|
||||
SELFTEST_ASSERT(!g_enums[15]);
|
||||
SELFTEST_ASSERT(g_cfg.pins.channelTypes[14] != ChType_Enum);
|
||||
CMD_ExecuteCommand("SetChannelType 14 Enum", 0);
|
||||
SELFTEST_ASSERT(g_cfg.pins.channelTypes[14] == ChType_Enum);
|
||||
|
||||
SELFTEST_ASSERT(g_enums[14]->numOptions == 3);
|
||||
SELFTEST_ASSERT(g_enums[14]->options[0].value == 1);
|
||||
SELFTEST_ASSERT(!strcmp(g_enums[14]->options[0].label, "One Switch"));
|
||||
SELFTEST_ASSERT(g_enums[14]->options[1].value == 0);
|
||||
SELFTEST_ASSERT(!strcmp(g_enums[14]->options[1].label, "Zero"));
|
||||
SELFTEST_ASSERT(g_enums[14]->options[2].value == 3);
|
||||
SELFTEST_ASSERT(!strcmp(g_enums[14]->options[2].label, "Three"));
|
||||
|
||||
SELFTEST_ASSERT(!strcmp(CMD_FindChannelEnumLabel(g_enums[14], 1), "One Switch"));
|
||||
SELFTEST_ASSERT(!strcmp(CMD_FindChannelEnumLabel(g_enums[14], 0), "Zero"));
|
||||
SELFTEST_ASSERT(!strcmp(CMD_FindChannelEnumLabel(g_enums[14], 3), "Three"));
|
||||
|
||||
|
||||
CFG_SetShortDeviceName(shortName);
|
||||
CFG_SetDeviceName(fullName);
|
||||
SIM_ClearMQTTHistory();
|
||||
|
||||
CMD_ExecuteCommand("scheduleHADiscovery 1", 0);
|
||||
Sim_RunSeconds(10, false);
|
||||
|
||||
|
||||
SELFTEST_ASSERT_HAS_MQTT_JSON_SENT_ANY_4KEY("homeassistant", true, 0, 0,
|
||||
"state_topic", "~/14/get",
|
||||
"unique_id", "14",
|
||||
"unique_id", "14",
|
||||
"uniq_id", "Windows_Enum_select_14");
|
||||
|
||||
SELFTEST_ASSERT_HAS_MQTT_JSON_SENT_ANY_4KEY("homeassistant", true, 0, 0,
|
||||
"availability_topic", "~/connected",
|
||||
"payload_available", "online",
|
||||
"payload_not_available", "offline",
|
||||
"uniq_id", "Windows_Enum_select_14");
|
||||
|
||||
SELFTEST_ASSERT_HAS_MQTT_JSON_SENT_ANY_4KEY("homeassistant", true, 0, 0,
|
||||
"command_topic", "~/14/set",
|
||||
"options", "[\"One Switch\",\"Zero\",\"Three\"]",
|
||||
"value_template", "{{ {1:'One Switch', 0:'Zero', 3:'Three', 99999:'Undefined'}[(value | int(99999))] | default(\"Undefined Enum [\"~value~\"]\") }}",
|
||||
"command_template", "{{ {'One Switch':'1', 'Zero':'0', 'Three':'3', 'Undefined':'99999'}[value] | default(99999) }}");
|
||||
|
||||
}
|
||||
void Test_Enum_BadOk() {
|
||||
|
||||
void Test_Enums() {
|
||||
char tmp[1024];
|
||||
|
||||
// reset whole device
|
||||
@ -23,10 +83,10 @@ void Test_Enums() {
|
||||
|
||||
// null checks
|
||||
SELFTEST_ASSERT(g_enums);
|
||||
SELFTEST_ASSERT(!strcmp(CMD_FindChannelEnumLabel(g_enums[14],1), "1"));
|
||||
SELFTEST_ASSERT(!strcmp(CMD_FindChannelEnumLabel(g_enums[14], 1), "1"));
|
||||
CMD_GenEnumValueTemplate(g_enums[14], tmp, sizeof(tmp));
|
||||
// actual discovery template content assertions are in selftst_hass_discovery_ext.c
|
||||
SELFTEST_ASSERT(!strcmp(tmp,"{{ {99999:'Undefined'}[(value | int(99999))] | default(\"Undefined Enum [\"~value~\"]\") }}"));
|
||||
SELFTEST_ASSERT(!strcmp(tmp, "{{ {99999:'Undefined'}[(value | int(99999))] | default(\"Undefined Enum [\"~value~\"]\") }}"));
|
||||
|
||||
for (int i = 0; i < CHANNEL_MAX; i++) {
|
||||
if (i != 4) {
|
||||
@ -37,30 +97,13 @@ void Test_Enums() {
|
||||
|
||||
SELFTEST_ASSERT(g_enums[4]->numOptions == 2);
|
||||
SELFTEST_ASSERT(g_enums[4]->options[0].value == 1);
|
||||
SELFTEST_ASSERT(!strcmp(g_enums[4]->options[0].label,"Ok"));
|
||||
SELFTEST_ASSERT(!strcmp(g_enums[4]->options[0].label, "Ok"));
|
||||
SELFTEST_ASSERT(g_enums[4]->options[1].value == 0);
|
||||
SELFTEST_ASSERT(!strcmp(g_enums[4]->options[1].label, "Bad"));
|
||||
|
||||
CMD_FormatEnumTemplate(g_enums[4], tmp, sizeof(tmp),false);
|
||||
CMD_FormatEnumTemplate(g_enums[4], tmp, sizeof(tmp),true);
|
||||
CMD_FormatEnumTemplate(g_enums[4], tmp, sizeof(tmp), false);
|
||||
CMD_FormatEnumTemplate(g_enums[4], tmp, sizeof(tmp), true);
|
||||
|
||||
CMD_ExecuteCommand("SetChannelEnum 14 \"1:One Switch\" 0:Zero 3:Three", 0);
|
||||
SELFTEST_ASSERT(g_enums);
|
||||
SELFTEST_ASSERT(g_enums[14]);
|
||||
SELFTEST_ASSERT(!g_enums[13]);
|
||||
SELFTEST_ASSERT(!g_enums[15]);
|
||||
|
||||
SELFTEST_ASSERT(g_enums[14]->numOptions == 3);
|
||||
SELFTEST_ASSERT(g_enums[14]->options[0].value == 1);
|
||||
SELFTEST_ASSERT(!strcmp(g_enums[14]->options[0].label, "One Switch"));
|
||||
SELFTEST_ASSERT(g_enums[14]->options[1].value == 0);
|
||||
SELFTEST_ASSERT(!strcmp(g_enums[14]->options[1].label, "Zero"));
|
||||
SELFTEST_ASSERT(g_enums[14]->options[2].value == 3);
|
||||
SELFTEST_ASSERT(!strcmp(g_enums[14]->options[2].label, "Three"));
|
||||
|
||||
SELFTEST_ASSERT(!strcmp(CMD_FindChannelEnumLabel(g_enums[14],1), "One Switch"));
|
||||
SELFTEST_ASSERT(!strcmp(CMD_FindChannelEnumLabel(g_enums[14],0), "Zero"));
|
||||
SELFTEST_ASSERT(!strcmp(CMD_FindChannelEnumLabel(g_enums[14],3), "Three"));
|
||||
|
||||
|
||||
|
||||
@ -71,7 +114,34 @@ void Test_Enums() {
|
||||
|
||||
CMD_ExecuteCommand("scheduleHADiscovery 1", 0);
|
||||
Sim_RunSeconds(10, false);
|
||||
|
||||
|
||||
SELFTEST_ASSERT_HAS_MQTT_JSON_SENT_ANY_4KEY("homeassistant", true, 0, 0,
|
||||
"state_topic", "~/4/get",
|
||||
"unique_id", "4",
|
||||
"unique_id", "4",
|
||||
"uniq_id", "Windows_Enum_select_4");
|
||||
|
||||
SELFTEST_ASSERT_HAS_MQTT_JSON_SENT_ANY_4KEY("homeassistant", true, 0, 0,
|
||||
"availability_topic", "~/connected",
|
||||
"payload_available", "online",
|
||||
"payload_not_available", "offline",
|
||||
"uniq_id", "Windows_Enum_select_4");
|
||||
|
||||
SELFTEST_ASSERT_HAS_MQTT_JSON_SENT_ANY_4KEY("homeassistant", true, 0, 0,
|
||||
"command_topic", "~/4/set",
|
||||
"options", "[\"Ok\",\"Bad\"]",
|
||||
"value_template", "{{ {1:'Ok', 0:'Bad', 99999:'Undefined'}[(value | int(99999))] | default(\"Undefined Enum [\"~value~\"]\") }}",
|
||||
"command_template", "{{ {'Ok':'1', 'Bad':'0', 'Undefined':'99999'}[value] | default(99999) }}");
|
||||
|
||||
|
||||
}
|
||||
void Test_Enums() {
|
||||
|
||||
Test_Enum_BadOk();
|
||||
Test_Enum_3opts();
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
@ -95,7 +95,15 @@ bool CheckForKeyVal(cJSON *tmp, const char *key, const char *value) {
|
||||
}
|
||||
}
|
||||
else {
|
||||
printf("TODO: float compare selftest");
|
||||
char *json_str = cJSON_PrintUnformatted(tmp);
|
||||
bool bOk = false;
|
||||
if (json_str) {
|
||||
if (!strcmp(json_str, value)) {
|
||||
bOk = true;
|
||||
}
|
||||
free(json_str); // or cJSON_free(json_str) depending on your build
|
||||
}
|
||||
return bOk;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user