libamxp  1.4.0
Patterns C Implementation
test_signal_slots_recursive.c File Reference
#include <stdlib.h>
#include <stdio.h>
#include <stdarg.h>
#include <stddef.h>
#include <setjmp.h>
#include <fcntl.h>
#include <unistd.h>
#include <cmocka.h>
#include <amxc/amxc_macros.h>
#include <amxc/amxc_variant.h>
#include <amxc/amxc_lqueue.h>
#include <amxp/amxp_signal.h>
#include <amxp/amxp_slot.h>
#include <amxp_signal_priv.h>
#include "test_signal_slots_recursive.h"

Go to the source code of this file.

Functions

static void test_slot_delete_sigmngr (UNUSED const char *const sig_name, UNUSED const amxc_var_t *const data, UNUSED void *const priv)
 
static void test_slot_delete_signal (UNUSED const char *const sig_name, UNUSED const amxc_var_t *const data, UNUSED void *const priv)
 
static void test_slot1 (UNUSED const char *const sig_name, UNUSED const amxc_var_t *const data, UNUSED void *const priv)
 
static void test_slot_disconnect (UNUSED const char *const sig_name, UNUSED const amxc_var_t *const data, UNUSED void *const priv)
 
static void test_slot2 (UNUSED const char *const sig_name, UNUSED const amxc_var_t *const data, UNUSED void *const priv)
 
void test_signal_recursive_delete_global_sigmngr (UNUSED void **state)
 
void test_signal_recursive_delete_sigmngr (UNUSED void **state)
 
void test_signal_recursive_delete_signal (UNUSED void **state)
 
void test_signal_slot_disconnect (UNUSED void **state)
 

Variables

static amxp_signal_tsig1 = NULL
 
static amxp_signal_tsig2 = NULL
 
static amxp_signal_mngr_tsigmngr = NULL
 

Function Documentation

◆ test_signal_recursive_delete_global_sigmngr()

void test_signal_recursive_delete_global_sigmngr ( UNUSED void **  state)

Definition at line 112 of file test_signal_slots_recursive.c.

112  {
113  assert_int_equal(amxp_signal_new(NULL, &sig1, "test:signal1"), 0);
114  assert_int_equal(amxp_signal_new(NULL, &sig2, "test:signal2"), 0);
115 
116  assert_int_equal(amxp_slot_connect(NULL, "test:signal1", NULL, test_slot1, NULL), 0);
117  assert_int_equal(amxp_slot_connect(NULL, "test:signal2", NULL, test_slot_delete_sigmngr, NULL), 0);
118 
119  amxp_sigmngr_trigger_signal(NULL, "test:signal1", NULL);
120 
121  amxp_sigmngr_trigger_signal(NULL, "test:signal1", NULL);
122  amxp_sigmngr_trigger_signal(NULL, "test:signal2", NULL);
123 
124  // sig1 and sig2 will be deleted due to clean-up of global sigmngr
125  // caused by deleting the global sigmngr
126  sig1 = NULL;
127  sig2 = NULL;
128 }
void amxp_sigmngr_trigger_signal(amxp_signal_mngr_t *const sig_mngr, const char *name, const amxc_var_t *const data)
Triggers a signal.
Definition: amxp_signal.c:492
int amxp_signal_new(amxp_signal_mngr_t *sig_mngr, amxp_signal_t **signal, const char *name)
Constructor function, creates a new signal.
Definition: amxp_signal.c:620
int amxp_slot_connect(amxp_signal_mngr_t *const sig_mngr, const char *const sig_name, const char *const expression, amxp_slot_fn_t fn, void *const priv)
Connects a slot (function) to a named signal of a signal manager.
Definition: amxp_slot.c:300
static void test_slot1(UNUSED const char *const sig_name, UNUSED const amxc_var_t *const data, UNUSED void *const priv)
static amxp_signal_t * sig2
static amxp_signal_t * sig1
static void test_slot_delete_sigmngr(UNUSED const char *const sig_name, UNUSED const amxc_var_t *const data, UNUSED void *const priv)

◆ test_signal_recursive_delete_sigmngr()

void test_signal_recursive_delete_sigmngr ( UNUSED void **  state)

Definition at line 130 of file test_signal_slots_recursive.c.

130  {
131  assert_int_equal(amxp_sigmngr_new(&sigmngr), 0);
132  assert_int_equal(amxp_signal_new(sigmngr, &sig1, "test:signal1"), 0);
133  assert_int_equal(amxp_signal_new(NULL, &sig2, "test:signal2"), 0);
134 
135  assert_int_equal(amxp_slot_connect(sigmngr, "test:signal1", NULL, test_slot1, NULL), 0);
136  assert_int_equal(amxp_slot_connect(NULL, "test:signal2", NULL, test_slot_delete_sigmngr, NULL), 0);
137 
138  amxp_sigmngr_trigger_signal(sigmngr, "test:signal1", NULL);
139  sigmngr = NULL; // deleted due to trigger of slot 2 which deletes sigmngr of sig1
140  sig1 = NULL; // deleted due to trigger of slot 2 which deletes sigmngr of sig1
141 
142  amxp_sigmngr_trigger_signal(NULL, "test:signal2", NULL);
143 
145 }
int amxp_sigmngr_new(amxp_signal_mngr_t **sig_mngr)
Constructor function, creates a new signal manager instance.
Definition: amxp_signal.c:330
int amxp_signal_delete(amxp_signal_t **signal)
Destructor function, deletes a signal.
Definition: amxp_signal.c:669
static amxp_signal_mngr_t * sigmngr

◆ test_signal_recursive_delete_signal()

void test_signal_recursive_delete_signal ( UNUSED void **  state)

Definition at line 147 of file test_signal_slots_recursive.c.

147  {
148  assert_int_equal(amxp_sigmngr_new(&sigmngr), 0);
149  assert_int_equal(amxp_signal_new(sigmngr, &sig1, "test:signal1"), 0);
150  assert_int_equal(amxp_signal_new(NULL, &sig2, "test:signal2"), 0);
151 
152  assert_int_equal(amxp_slot_connect(sigmngr, "test:signal1", NULL, test_slot1, NULL), 0);
153  assert_int_equal(amxp_slot_connect(sigmngr, "test:signal1", NULL, test_slot2, NULL), 0);
154  assert_int_equal(amxp_slot_connect(NULL, "test:signal2", NULL, test_slot_delete_signal, NULL), 0);
155 
156  amxp_sigmngr_trigger_signal(sigmngr, "test:signal1", NULL);
157 
160 }
int amxp_sigmngr_delete(amxp_signal_mngr_t **sig_mngr)
Destructor function, deletes a signal manager instance.
Definition: amxp_signal.c:349
static void test_slot_delete_signal(UNUSED const char *const sig_name, UNUSED const amxc_var_t *const data, UNUSED void *const priv)
static void test_slot2(UNUSED const char *const sig_name, UNUSED const amxc_var_t *const data, UNUSED void *const priv)

◆ test_signal_slot_disconnect()

void test_signal_slot_disconnect ( UNUSED void **  state)

Definition at line 162 of file test_signal_slots_recursive.c.

162  {
163  assert_int_equal(amxp_sigmngr_new(&sigmngr), 0);
164  assert_int_equal(amxp_signal_new(sigmngr, &sig1, "test:signal1"), 0);
165  assert_int_equal(amxp_signal_new(NULL, &sig2, "test:signal2"), 0);
166 
167  assert_int_equal(amxp_slot_connect(sigmngr, "test:signal1", NULL, test_slot_disconnect, NULL), 0);
168  assert_int_equal(amxp_slot_connect(sigmngr, "test:signal1", NULL, test_slot1, NULL), 0);
169  assert_int_equal(amxp_slot_connect(NULL, "test:signal2", NULL, test_slot_delete_signal, NULL), 0);
170 
171  amxp_sigmngr_trigger_signal(sigmngr, "test:signal1", NULL);
172 
175 }
static void test_slot_disconnect(UNUSED const char *const sig_name, UNUSED const amxc_var_t *const data, UNUSED void *const priv)

◆ test_slot1()

static void test_slot1 ( UNUSED const char *const  sig_name,
UNUSED const amxc_var_t *const  data,
UNUSED void *const  priv 
)
static

Definition at line 92 of file test_signal_slots_recursive.c.

94  {
95  printf("Test slot 1\n");
96  amxp_sigmngr_trigger_signal(NULL, "test:signal2", NULL);
97 }

◆ test_slot2()

static void test_slot2 ( UNUSED const char *const  sig_name,
UNUSED const amxc_var_t *const  data,
UNUSED void *const  priv 
)
static

Definition at line 106 of file test_signal_slots_recursive.c.

108  {
109  printf("Test slot 2\n");
110 }

◆ test_slot_delete_sigmngr()

static void test_slot_delete_sigmngr ( UNUSED const char *const  sig_name,
UNUSED const amxc_var_t *const  data,
UNUSED void *const  priv 
)
static

Definition at line 78 of file test_signal_slots_recursive.c.

80  {
81  if(sig1 != NULL) {
83  }
84 }
amxp_signal_mngr_t * mngr
Definition: amxp_signal.h:123

◆ test_slot_delete_signal()

static void test_slot_delete_signal ( UNUSED const char *const  sig_name,
UNUSED const amxc_var_t *const  data,
UNUSED void *const  priv 
)
static

Definition at line 86 of file test_signal_slots_recursive.c.

88  {
90 }

◆ test_slot_disconnect()

static void test_slot_disconnect ( UNUSED const char *const  sig_name,
UNUSED const amxc_var_t *const  data,
UNUSED void *const  priv 
)
static

Definition at line 99 of file test_signal_slots_recursive.c.

101  {
102  printf("Test slot disconnect\n");
104 }
void amxp_slot_disconnect_all(amxp_slot_fn_t fn)
Disconnects a slot from all signals it was connected to.
Definition: amxp_slot.c:459

Variable Documentation

◆ sig1

amxp_signal_t* sig1 = NULL
static

Definition at line 74 of file test_signal_slots_recursive.c.

◆ sig2

amxp_signal_t* sig2 = NULL
static

Definition at line 75 of file test_signal_slots_recursive.c.

◆ sigmngr

amxp_signal_mngr_t* sigmngr = NULL
static

Definition at line 76 of file test_signal_slots_recursive.c.