126 lines
3.2 KiB
C
126 lines
3.2 KiB
C
#include "test.h"
|
|
#include "widget.h"
|
|
|
|
extern int _mgos_timers;
|
|
|
|
static void test_widget_default_ev(int ev, struct widget_t *w, void *ev_data) {
|
|
char evname[15];
|
|
|
|
if (!w)
|
|
return;
|
|
|
|
widget_ev_to_str(ev, evname, sizeof(evname)-1);
|
|
|
|
LOG(LL_INFO, ("Event %s received for widget '%s'", evname, w->name));
|
|
|
|
switch(ev) {
|
|
case EV_WIDGET_CREATE:
|
|
case EV_WIDGET_DRAW:
|
|
case EV_WIDGET_REDRAW:
|
|
case EV_WIDGET_TIMER:
|
|
case EV_WIDGET_TOUCH_UP:
|
|
case EV_WIDGET_TOUCH_DOWN:
|
|
case EV_WIDGET_DESTROY:
|
|
default: // EV_WIDGET_NONE
|
|
break;
|
|
}
|
|
(void) ev_data;
|
|
}
|
|
|
|
static int test_widget_create_from_file(void) {
|
|
struct widget_t *w;
|
|
int ret;
|
|
|
|
char *fn = "data/TestWidget.json";
|
|
LOG(LL_INFO, ("widget_create_from_file(%s)", fn));
|
|
w = widget_create_from_file(fn);
|
|
ASSERT(w, "widget_create_from_file()");
|
|
ASSERT(w->x == 16, "'x' field is invalid");
|
|
ASSERT(w->y == 16, "'x' field is invalid");
|
|
ASSERT(w->w == 48, "'x' field is invalid");
|
|
ASSERT(w->h == 48, "'x' field is invalid");
|
|
ret = strncmp("/some/file.ext", w->img, strlen("/some/file.ext"));
|
|
ASSERT(ret == 0, "'img' field is invalid");
|
|
ret = strncmp("One", w->label, strlen("One"));
|
|
ASSERT(ret == 0, "'label' field is invalid");
|
|
|
|
LOG(LL_INFO, ("widget_set_timer()"));
|
|
widget_set_timer(w, 1000);
|
|
ASSERT(_mgos_timers==1, "timer not found");
|
|
|
|
LOG(LL_INFO, ("widget_set_handler()"));
|
|
widget_set_handler(w, test_widget_default_ev);
|
|
|
|
|
|
LOG(LL_INFO, ("widget_delete_timer()"));
|
|
widget_delete_timer(w);
|
|
ASSERT(_mgos_timers==0, "timers found");
|
|
|
|
fn = "data/TestWidget-invalid.json";
|
|
LOG(LL_INFO, ("widget_create_from_file(%s)", fn));
|
|
w = widget_create_from_file(fn);
|
|
ASSERT(!w, "invalid widget created");
|
|
return 0;
|
|
}
|
|
|
|
int test_widget() {
|
|
test_widget_create_from_file();
|
|
|
|
LOG(LL_INFO, ("ensure we have no timers"));
|
|
ASSERT(_mgos_timers==0, "timers found");
|
|
|
|
return 0;
|
|
}
|
|
|
|
static void widget_default_mqtt_send(struct widget_t *w, void *ev_data) {
|
|
struct json_token val;
|
|
int idx=0;
|
|
|
|
if (!w)
|
|
return;
|
|
if (!w->user_data)
|
|
return;
|
|
LOG(LL_INFO, ("MQTT string: '%s'", (char *)w->user_data));
|
|
// Traverse Array
|
|
for (idx = 0; json_scanf_array_elem(w->user_data, strlen(w->user_data), "", idx, &val) > 0; idx++) {
|
|
char *t=NULL, *m=NULL;
|
|
uint16_t t_len=0, m_len=0;
|
|
char *topic;
|
|
|
|
LOG(LL_DEBUG, ("Index %d, token [%.*s]", idx, val.len, val.ptr));
|
|
t=(char*)val.ptr;
|
|
m=strstr(val.ptr, " ");
|
|
if (m-val.ptr <= val.len) {
|
|
LOG(LL_INFO, ("Space found"));
|
|
t_len=m-t;
|
|
m++;
|
|
m_len=val.len-t_len-1;
|
|
} else {
|
|
t_len=val.len;
|
|
m_len=0;
|
|
m=NULL;
|
|
}
|
|
if ((topic=malloc(t_len+1))) {
|
|
memcpy(topic, t, t_len);
|
|
topic[t_len]=0;
|
|
LOG(LL_INFO, ("Sending topic='%s', message='%.*s'", topic, m_len, m));
|
|
free(topic);
|
|
}
|
|
}
|
|
(void) ev_data;
|
|
}
|
|
|
|
|
|
int test_widget_mqtt() {
|
|
struct widget_t *w;
|
|
|
|
char *fn = "data/TestWidget-MQTT.json";
|
|
LOG(LL_INFO, ("widget_create_from_file(%s)", fn));
|
|
w = widget_create_from_file(fn);
|
|
ASSERT(w, "widget_create_from_file()");
|
|
ASSERT(w->x == 240, "'x' field is invalid");
|
|
ASSERT(w->type == WIDGET_TYPE_MQTT_BUTTON, "'type' field is not WIDGET_TYPE_MQTT_BUTTON");
|
|
widget_default_mqtt_send(w, NULL);
|
|
return 0;
|
|
}
|