1c0abf9e6Sopenharmony_ci// SPDX-License-Identifier: MIT 2c0abf9e6Sopenharmony_ci/* 3c0abf9e6Sopenharmony_ci * Copyright © 2019 Red Hat, Inc. 4c0abf9e6Sopenharmony_ci */ 5c0abf9e6Sopenharmony_ci 6c0abf9e6Sopenharmony_ci#include "config.h" 7c0abf9e6Sopenharmony_ci#include "test-common.h" 8c0abf9e6Sopenharmony_ci 9c0abf9e6Sopenharmony_ciSTART_TEST(test_info) 10c0abf9e6Sopenharmony_ci{ 11c0abf9e6Sopenharmony_ci struct libevdev *d = libevdev_new(); 12c0abf9e6Sopenharmony_ci 13c0abf9e6Sopenharmony_ci libevdev_set_name(d, "some name"); 14c0abf9e6Sopenharmony_ci ck_assert_str_eq(libevdev_get_name(d), "some name"); 15c0abf9e6Sopenharmony_ci libevdev_set_phys(d, "physical"); 16c0abf9e6Sopenharmony_ci ck_assert_str_eq(libevdev_get_phys(d), "physical"); 17c0abf9e6Sopenharmony_ci libevdev_set_uniq(d, "very unique"); 18c0abf9e6Sopenharmony_ci ck_assert_str_eq(libevdev_get_uniq(d), "very unique"); 19c0abf9e6Sopenharmony_ci 20c0abf9e6Sopenharmony_ci libevdev_set_id_bustype(d, 1); 21c0abf9e6Sopenharmony_ci libevdev_set_id_vendor(d, 2); 22c0abf9e6Sopenharmony_ci libevdev_set_id_product(d, 3); 23c0abf9e6Sopenharmony_ci libevdev_set_id_version(d, 4); 24c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_id_bustype(d), 1); 25c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_id_vendor(d), 2); 26c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_id_product(d), 3); 27c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_id_version(d), 4); 28c0abf9e6Sopenharmony_ci 29c0abf9e6Sopenharmony_ci libevdev_free(d); 30c0abf9e6Sopenharmony_ci} 31c0abf9e6Sopenharmony_ciEND_TEST 32c0abf9e6Sopenharmony_ci 33c0abf9e6Sopenharmony_ciSTART_TEST(test_properties) 34c0abf9e6Sopenharmony_ci{ 35c0abf9e6Sopenharmony_ci for (unsigned prop = 0; prop < INPUT_PROP_CNT; prop++) { 36c0abf9e6Sopenharmony_ci struct libevdev *d = libevdev_new(); 37c0abf9e6Sopenharmony_ci 38c0abf9e6Sopenharmony_ci ck_assert(!libevdev_has_property(d, prop)); 39c0abf9e6Sopenharmony_ci libevdev_enable_property(d, prop); 40c0abf9e6Sopenharmony_ci ck_assert(libevdev_has_property(d, prop)); 41c0abf9e6Sopenharmony_ci libevdev_free(d); 42c0abf9e6Sopenharmony_ci } 43c0abf9e6Sopenharmony_ci} 44c0abf9e6Sopenharmony_ciEND_TEST 45c0abf9e6Sopenharmony_ci 46c0abf9e6Sopenharmony_ciSTART_TEST(test_bits) 47c0abf9e6Sopenharmony_ci{ 48c0abf9e6Sopenharmony_ci for (unsigned type = 1; type < EV_CNT; type++) { 49c0abf9e6Sopenharmony_ci unsigned max = libevdev_event_type_get_max(type); 50c0abf9e6Sopenharmony_ci 51c0abf9e6Sopenharmony_ci if((int)max == -1) 52c0abf9e6Sopenharmony_ci continue; 53c0abf9e6Sopenharmony_ci 54c0abf9e6Sopenharmony_ci for (unsigned code = 0; code <= max; code++) { 55c0abf9e6Sopenharmony_ci struct libevdev *d = libevdev_new(); 56c0abf9e6Sopenharmony_ci const struct input_absinfo abs = { 57c0abf9e6Sopenharmony_ci .minimum = 10, 58c0abf9e6Sopenharmony_ci .maximum = 20, 59c0abf9e6Sopenharmony_ci .fuzz = 30, 60c0abf9e6Sopenharmony_ci .flat = 40, 61c0abf9e6Sopenharmony_ci .resolution = 50, 62c0abf9e6Sopenharmony_ci }; 63c0abf9e6Sopenharmony_ci const void *data = NULL; 64c0abf9e6Sopenharmony_ci 65c0abf9e6Sopenharmony_ci if (type == EV_ABS || type == EV_REP) 66c0abf9e6Sopenharmony_ci data = &abs; 67c0abf9e6Sopenharmony_ci 68c0abf9e6Sopenharmony_ci ck_assert(!libevdev_has_event_code(d, type, code)); 69c0abf9e6Sopenharmony_ci libevdev_enable_event_code(d, type, code, data); 70c0abf9e6Sopenharmony_ci ck_assert(libevdev_has_event_code(d, type, code)); 71c0abf9e6Sopenharmony_ci libevdev_free(d); 72c0abf9e6Sopenharmony_ci } 73c0abf9e6Sopenharmony_ci } 74c0abf9e6Sopenharmony_ci} 75c0abf9e6Sopenharmony_ciEND_TEST 76c0abf9e6Sopenharmony_ci 77c0abf9e6Sopenharmony_ciSTART_TEST(test_mt_slots_enable_disable) 78c0abf9e6Sopenharmony_ci{ 79c0abf9e6Sopenharmony_ci struct libevdev *d = libevdev_new(); 80c0abf9e6Sopenharmony_ci struct input_absinfo abs = {0}; 81c0abf9e6Sopenharmony_ci 82c0abf9e6Sopenharmony_ci abs.maximum = 5; 83c0abf9e6Sopenharmony_ci libevdev_enable_event_code(d, EV_ABS, ABS_MT_SLOT, &abs); 84c0abf9e6Sopenharmony_ci ck_assert(libevdev_has_event_code(d, EV_ABS, ABS_MT_SLOT)); 85c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_num_slots(d), 6); 86c0abf9e6Sopenharmony_ci 87c0abf9e6Sopenharmony_ci libevdev_disable_event_code(d, EV_ABS, ABS_MT_SLOT); 88c0abf9e6Sopenharmony_ci ck_assert(!libevdev_has_event_code(d, EV_ABS, ABS_MT_SLOT)); 89c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_num_slots(d), -1); 90c0abf9e6Sopenharmony_ci 91c0abf9e6Sopenharmony_ci abs.maximum = 2; 92c0abf9e6Sopenharmony_ci libevdev_enable_event_code(d, EV_ABS, ABS_MT_SLOT, &abs); 93c0abf9e6Sopenharmony_ci ck_assert(libevdev_has_event_code(d, EV_ABS, ABS_MT_SLOT)); 94c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_num_slots(d), 3); 95c0abf9e6Sopenharmony_ci 96c0abf9e6Sopenharmony_ci libevdev_free(d); 97c0abf9e6Sopenharmony_ci} 98c0abf9e6Sopenharmony_ciEND_TEST 99c0abf9e6Sopenharmony_ci 100c0abf9e6Sopenharmony_ciSTART_TEST(test_mt_slots_increase_decrease) 101c0abf9e6Sopenharmony_ci{ 102c0abf9e6Sopenharmony_ci struct libevdev *d = libevdev_new(); 103c0abf9e6Sopenharmony_ci struct input_absinfo abs = {0}; 104c0abf9e6Sopenharmony_ci 105c0abf9e6Sopenharmony_ci abs.maximum = 5; 106c0abf9e6Sopenharmony_ci libevdev_enable_event_code(d, EV_ABS, ABS_MT_SLOT, &abs); 107c0abf9e6Sopenharmony_ci ck_assert(libevdev_has_event_code(d, EV_ABS, ABS_MT_SLOT)); 108c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_num_slots(d), 6); 109c0abf9e6Sopenharmony_ci 110c0abf9e6Sopenharmony_ci abs.maximum = 2; 111c0abf9e6Sopenharmony_ci libevdev_enable_event_code(d, EV_ABS, ABS_MT_SLOT, &abs); 112c0abf9e6Sopenharmony_ci ck_assert(libevdev_has_event_code(d, EV_ABS, ABS_MT_SLOT)); 113c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_num_slots(d), 3); 114c0abf9e6Sopenharmony_ci 115c0abf9e6Sopenharmony_ci abs.maximum = 6; 116c0abf9e6Sopenharmony_ci libevdev_enable_event_code(d, EV_ABS, ABS_MT_SLOT, &abs); 117c0abf9e6Sopenharmony_ci ck_assert(libevdev_has_event_code(d, EV_ABS, ABS_MT_SLOT)); 118c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_num_slots(d), 7); 119c0abf9e6Sopenharmony_ci 120c0abf9e6Sopenharmony_ci abs.maximum = 10; 121c0abf9e6Sopenharmony_ci libevdev_enable_event_code(d, EV_ABS, ABS_MT_SLOT, &abs); 122c0abf9e6Sopenharmony_ci ck_assert(libevdev_has_event_code(d, EV_ABS, ABS_MT_SLOT)); 123c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_num_slots(d), 11); 124c0abf9e6Sopenharmony_ci 125c0abf9e6Sopenharmony_ci libevdev_free(d); 126c0abf9e6Sopenharmony_ci} 127c0abf9e6Sopenharmony_ciEND_TEST 128c0abf9e6Sopenharmony_ci 129c0abf9e6Sopenharmony_ciSTART_TEST(test_mt_tracking_id) 130c0abf9e6Sopenharmony_ci{ 131c0abf9e6Sopenharmony_ci struct libevdev *d = libevdev_new(); 132c0abf9e6Sopenharmony_ci struct input_absinfo abs = { .maximum = 5 }; 133c0abf9e6Sopenharmony_ci 134c0abf9e6Sopenharmony_ci libevdev_enable_event_code(d, EV_ABS, ABS_MT_SLOT, &abs); 135c0abf9e6Sopenharmony_ci 136c0abf9e6Sopenharmony_ci /* Not yet enabled, so 0. This is technically undefined */ 137c0abf9e6Sopenharmony_ci for (int slot = 0; slot < 5; slot++) 138c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_slot_value(d, 0, ABS_MT_TRACKING_ID), 0); 139c0abf9e6Sopenharmony_ci 140c0abf9e6Sopenharmony_ci libevdev_enable_event_code(d, EV_ABS, ABS_MT_TRACKING_ID, &abs); 141c0abf9e6Sopenharmony_ci 142c0abf9e6Sopenharmony_ci for (int slot = 0; slot < 5; slot++) 143c0abf9e6Sopenharmony_ci ck_assert_int_eq(libevdev_get_slot_value(d, 0, ABS_MT_TRACKING_ID), -1); 144c0abf9e6Sopenharmony_ci 145c0abf9e6Sopenharmony_ci libevdev_free(d); 146c0abf9e6Sopenharmony_ci} 147c0abf9e6Sopenharmony_ciEND_TEST 148c0abf9e6Sopenharmony_ci 149c0abf9e6Sopenharmony_ciTEST_SUITE(event_name_suite) 150c0abf9e6Sopenharmony_ci{ 151c0abf9e6Sopenharmony_ci Suite *s = suite_create("Context manipulation"); 152c0abf9e6Sopenharmony_ci 153c0abf9e6Sopenharmony_ci add_test(s, test_info); 154c0abf9e6Sopenharmony_ci add_test(s, test_properties); 155c0abf9e6Sopenharmony_ci add_test(s, test_bits); 156c0abf9e6Sopenharmony_ci add_test(s, test_mt_slots_enable_disable); 157c0abf9e6Sopenharmony_ci add_test(s, test_mt_slots_increase_decrease); 158c0abf9e6Sopenharmony_ci add_test(s, test_mt_tracking_id); 159c0abf9e6Sopenharmony_ci 160c0abf9e6Sopenharmony_ci return s; 161c0abf9e6Sopenharmony_ci} 162