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