1 #if LV_BUILD_TEST
2 #include "../lvgl.h"
3 #include "../lv_test_indev.h"
4 #include "unity/unity.h"
5
setUp(void)6 void setUp(void)
7 {
8 /* Function run before every test */
9 }
10
tearDown(void)11 void tearDown(void)
12 {
13 /* Function run after every test */
14 lv_obj_clean(lv_screen_active());
15 }
16
17 struct click_counts {
18 uint32_t num_clicked;
19 uint32_t num_short_clicked;
20 uint32_t num_single_clicked;
21 uint32_t num_double_clicked;
22 uint32_t num_triple_clicked;
23 uint32_t num_long_pressed;
24 uint8_t short_click_streak;
25 };
26
click_event_cb(lv_event_t * e)27 static void click_event_cb(lv_event_t * e)
28 {
29 struct click_counts * counts = lv_event_get_user_data(e);
30
31 switch(lv_event_get_code(e)) {
32 case LV_EVENT_CLICKED:
33 counts->num_clicked++;
34 break;
35 case LV_EVENT_SHORT_CLICKED:
36 counts->num_short_clicked++;
37 break;
38 case LV_EVENT_SINGLE_CLICKED:
39 counts->num_single_clicked++;
40 break;
41 case LV_EVENT_DOUBLE_CLICKED:
42 counts->num_double_clicked++;
43 break;
44 case LV_EVENT_TRIPLE_CLICKED:
45 counts->num_triple_clicked++;
46 break;
47 case LV_EVENT_LONG_PRESSED:
48 counts->num_long_pressed++;
49 break;
50 default:
51 break;
52 }
53
54 lv_indev_t * indev = lv_event_get_param(e);
55 counts->short_click_streak = lv_indev_get_short_click_streak(indev);
56 }
57
test_click(void)58 void test_click(void)
59 {
60 /*Setup button that counts events.*/
61 struct click_counts counts;
62 lv_obj_t * btn = lv_button_create(lv_screen_active());
63 lv_obj_set_size(btn, 100, 100);
64 lv_obj_add_event_cb(btn, click_event_cb, LV_EVENT_CLICKED, &counts);
65 lv_obj_add_event_cb(btn, click_event_cb, LV_EVENT_SHORT_CLICKED, &counts);
66 lv_obj_add_event_cb(btn, click_event_cb, LV_EVENT_SINGLE_CLICKED, &counts);
67 lv_obj_add_event_cb(btn, click_event_cb, LV_EVENT_DOUBLE_CLICKED, &counts);
68 lv_obj_add_event_cb(btn, click_event_cb, LV_EVENT_TRIPLE_CLICKED, &counts);
69 lv_obj_add_event_cb(btn, click_event_cb, LV_EVENT_LONG_PRESSED, &counts);
70
71 /*Simple click.*/
72 lv_memzero(&counts, sizeof(counts));
73 lv_test_mouse_click_at(50, 50);
74 TEST_ASSERT_EQUAL_UINT32(1, counts.num_clicked);
75 TEST_ASSERT_EQUAL_UINT32(1, counts.num_short_clicked);
76 TEST_ASSERT_EQUAL_UINT32(1, counts.num_single_clicked);
77 TEST_ASSERT_EQUAL_UINT32(0, counts.num_double_clicked);
78 TEST_ASSERT_EQUAL_UINT32(0, counts.num_triple_clicked);
79 TEST_ASSERT_EQUAL_UINT32(0, counts.num_long_pressed);
80 TEST_ASSERT_EQUAL_UINT8(1, counts.short_click_streak);
81
82 /*Second click nearby.*/
83 lv_memzero(&counts, sizeof(counts));
84 lv_test_mouse_click_at(47, 52);
85 TEST_ASSERT_EQUAL_UINT32(1, counts.num_clicked);
86 TEST_ASSERT_EQUAL_UINT32(1, counts.num_short_clicked);
87 TEST_ASSERT_EQUAL_UINT32(0, counts.num_single_clicked);
88 TEST_ASSERT_EQUAL_UINT32(1, counts.num_double_clicked);
89 TEST_ASSERT_EQUAL_UINT32(0, counts.num_triple_clicked);
90 TEST_ASSERT_EQUAL_UINT32(0, counts.num_long_pressed);
91 TEST_ASSERT_EQUAL_UINT8(2, counts.short_click_streak);
92
93 /*Third click nearby.*/
94 lv_memzero(&counts, sizeof(counts));
95 lv_test_mouse_click_at(49, 55);
96 TEST_ASSERT_EQUAL_UINT32(1, counts.num_clicked);
97 TEST_ASSERT_EQUAL_UINT32(1, counts.num_short_clicked);
98 TEST_ASSERT_EQUAL_UINT32(0, counts.num_single_clicked);
99 TEST_ASSERT_EQUAL_UINT32(0, counts.num_double_clicked);
100 TEST_ASSERT_EQUAL_UINT32(1, counts.num_triple_clicked);
101 TEST_ASSERT_EQUAL_UINT32(0, counts.num_long_pressed);
102 TEST_ASSERT_EQUAL_UINT8(3, counts.short_click_streak);
103
104 /*Fourth click nearby.*/
105 lv_memzero(&counts, sizeof(counts));
106 lv_test_mouse_click_at(50, 50);
107 TEST_ASSERT_EQUAL_UINT32(1, counts.num_clicked);
108 TEST_ASSERT_EQUAL_UINT32(1, counts.num_short_clicked);
109 TEST_ASSERT_EQUAL_UINT32(1, counts.num_single_clicked);
110 TEST_ASSERT_EQUAL_UINT32(0, counts.num_double_clicked);
111 TEST_ASSERT_EQUAL_UINT32(0, counts.num_triple_clicked);
112 TEST_ASSERT_EQUAL_UINT32(0, counts.num_long_pressed);
113 TEST_ASSERT_EQUAL_UINT8(4, counts.short_click_streak);
114
115 /*Resetting the click streak due to distance.*/
116 lv_memzero(&counts, sizeof(counts));
117 lv_test_mouse_click_at(10, 10);
118 TEST_ASSERT_EQUAL_UINT32(1, counts.num_clicked);
119 TEST_ASSERT_EQUAL_UINT32(1, counts.num_short_clicked);
120 TEST_ASSERT_EQUAL_UINT32(1, counts.num_single_clicked);
121 TEST_ASSERT_EQUAL_UINT32(0, counts.num_double_clicked);
122 TEST_ASSERT_EQUAL_UINT32(0, counts.num_triple_clicked);
123 TEST_ASSERT_EQUAL_UINT32(0, counts.num_long_pressed);
124 TEST_ASSERT_EQUAL_UINT8(1, counts.short_click_streak);
125
126 /*Second click nearby.*/
127 lv_memzero(&counts, sizeof(counts));
128 lv_test_mouse_click_at(12, 14);
129 TEST_ASSERT_EQUAL_UINT32(1, counts.num_clicked);
130 TEST_ASSERT_EQUAL_UINT32(1, counts.num_short_clicked);
131 TEST_ASSERT_EQUAL_UINT32(0, counts.num_single_clicked);
132 TEST_ASSERT_EQUAL_UINT32(1, counts.num_double_clicked);
133 TEST_ASSERT_EQUAL_UINT32(0, counts.num_triple_clicked);
134 TEST_ASSERT_EQUAL_UINT32(0, counts.num_long_pressed);
135 TEST_ASSERT_EQUAL_UINT8(2, counts.short_click_streak);
136
137 /*Resetting the click streak due to time.*/
138 lv_memzero(&counts, sizeof(counts));
139 lv_test_indev_wait(1000);
140 lv_test_mouse_click_at(12, 14);
141 TEST_ASSERT_EQUAL_UINT32(1, counts.num_clicked);
142 TEST_ASSERT_EQUAL_UINT32(1, counts.num_short_clicked);
143 TEST_ASSERT_EQUAL_UINT32(1, counts.num_single_clicked);
144 TEST_ASSERT_EQUAL_UINT32(0, counts.num_double_clicked);
145 TEST_ASSERT_EQUAL_UINT32(0, counts.num_triple_clicked);
146 TEST_ASSERT_EQUAL_UINT32(0, counts.num_long_pressed);
147 TEST_ASSERT_EQUAL_UINT8(1, counts.short_click_streak);
148
149 /*Long press does not continue (or start) click streak.*/
150 lv_memzero(&counts, sizeof(counts));
151 lv_test_mouse_press();
152 lv_test_indev_wait(1000);
153 lv_test_mouse_release();
154 lv_test_indev_wait(50);
155 TEST_ASSERT_EQUAL_UINT32(1, counts.num_clicked);
156 TEST_ASSERT_EQUAL_UINT32(0, counts.num_short_clicked);
157 TEST_ASSERT_EQUAL_UINT32(0, counts.num_single_clicked);
158 TEST_ASSERT_EQUAL_UINT32(0, counts.num_double_clicked);
159 TEST_ASSERT_EQUAL_UINT32(0, counts.num_triple_clicked);
160 TEST_ASSERT_EQUAL_UINT32(1, counts.num_long_pressed);
161 TEST_ASSERT_EQUAL_UINT8(1, counts.short_click_streak);
162 }
163
164 #endif
165