From e74001da8b88de48884d802b79955cac3e9f4abb Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Sat, 25 Oct 2025 21:23:20 +0200 Subject: [PATCH] add width height set min --- src/kds_s2000w_handler_opts.c | 7 +++ tests/kds_s2000w_net_set_opt_tests.c | 80 ++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+) diff --git a/src/kds_s2000w_handler_opts.c b/src/kds_s2000w_handler_opts.c index a511e5b..ae45aae 100644 --- a/src/kds_s2000w_handler_opts.c +++ b/src/kds_s2000w_handler_opts.c @@ -547,6 +547,13 @@ int32_t kds_s2000w_handler_opts_set_option(handler_t* h, uint32_t option, void* option_descriptor_t* descriptor = kds_s2000w_option_descriptors_full_get_by_number(option); json_object* value_object = json_object_object_get(config, descriptor->config_name); + if (strcmp(descriptor->config_name, IMAGE_WIDTH) == 0 + || strcmp(descriptor->config_name, IMAGE_HEIGHT) == 0) { + int32_t* int_value = (int32_t*) value; + if (*int_value < descriptor->descriptor->constraint.range->min) + *int_value = descriptor->descriptor->constraint.range->min; + } + _kds_s2000w_handler_opts_set_offset_x(descriptor, h, value); _kds_s2000w_handler_opts_set_width(descriptor, h, value); _kds_s2000w_handler_opts_set_valid_coord_x(descriptor, h); diff --git a/tests/kds_s2000w_net_set_opt_tests.c b/tests/kds_s2000w_net_set_opt_tests.c index 5c807f8..ce18118 100644 --- a/tests/kds_s2000w_net_set_opt_tests.c +++ b/tests/kds_s2000w_net_set_opt_tests.c @@ -256,6 +256,84 @@ void kds_s2000w_net_set_option_int_br_x(void** state) set_value = NULL; } +void kds_s2000w_net_set_option_int_scanimage_default_br_x(void** state) +{ + int32_t* set_value = malloc(sizeof(int32_t)); + if (set_value == NULL) + return; + + *set_value = 0; + response_t* resp = (response_t*) *state; + handler_t* h = kds_s2000w_handler_init(); + response_t* set_opt_resp = kds_s2000w_client_response_init(); + set_opt_resp->code = 200; + + will_return(mock_response, resp); + will_return(__wrap_kds_s2000w_client_get_option, 0); + will_return(mock_response, set_opt_resp); + will_return(__wrap_kds_s2000w_client_set_option, 0); + will_return(mock_response, set_opt_resp); + will_return(__wrap_kds_s2000w_client_set_option, 0); + expect_function_call(__wrap_kds_s2000w_client_get_option); + expect_function_call(__wrap_kds_s2000w_client_set_option); + expect_function_call(__wrap_kds_s2000w_client_set_option); + + SANE_Status status = sane_kds_s2000w_net_control_option(h, 11, SANE_ACTION_SET_VALUE, set_value, NULL); + + json_object* config = json_object_object_get(h->scanner_config, "Configuration"); + json_object* value_object = json_object_object_get(config, IMAGE_WIDTH); + int32_t value = json_object_get_int(value_object); + + assert_int_equal(status, SANE_STATUS_GOOD); + assert_int_equal(value, 10); + + kds_s2000w_client_response_free(set_opt_resp); + set_opt_resp = NULL; + kds_s2000w_handler_free(h); + h = NULL; + free(set_value); + set_value = NULL; +} + +void kds_s2000w_net_set_option_int_scanimage_default_br_y(void** state) +{ + int32_t* set_value = malloc(sizeof(int32_t)); + if (set_value == NULL) + return; + + *set_value = 0; + response_t* resp = (response_t*) *state; + handler_t* h = kds_s2000w_handler_init(); + response_t* set_opt_resp = kds_s2000w_client_response_init(); + set_opt_resp->code = 200; + + will_return(mock_response, resp); + will_return(__wrap_kds_s2000w_client_get_option, 0); + will_return(mock_response, set_opt_resp); + will_return(__wrap_kds_s2000w_client_set_option, 0); + will_return(mock_response, set_opt_resp); + will_return(__wrap_kds_s2000w_client_set_option, 0); + expect_function_call(__wrap_kds_s2000w_client_get_option); + expect_function_call(__wrap_kds_s2000w_client_set_option); + expect_function_call(__wrap_kds_s2000w_client_set_option); + + SANE_Status status = sane_kds_s2000w_net_control_option(h, 12, SANE_ACTION_SET_VALUE, set_value, NULL); + + json_object* config = json_object_object_get(h->scanner_config, "Configuration"); + json_object* value_object = json_object_object_get(config, IMAGE_WIDTH); + int32_t value = json_object_get_int(value_object); + + assert_int_equal(status, SANE_STATUS_GOOD); + assert_int_equal(value, 10); + + kds_s2000w_client_response_free(set_opt_resp); + set_opt_resp = NULL; + kds_s2000w_handler_free(h); + h = NULL; + free(set_value); + set_value = NULL; +} + void kds_s2000w_net_set_option_int_word_list(void** state) { int32_t* set_value = malloc(sizeof(int32_t)); @@ -395,6 +473,8 @@ int main() cmocka_unit_test_setup_teardown(kds_s2000w_net_set_option_int, setup_default_option, teardown_default_option), cmocka_unit_test_setup_teardown(kds_s2000w_net_set_option_reset, setup_default_option, teardown_default_option), cmocka_unit_test_setup_teardown(kds_s2000w_net_set_option_int_br_x, setup_default_option, teardown_default_option), + cmocka_unit_test_setup_teardown(kds_s2000w_net_set_option_int_scanimage_default_br_x, setup_default_option, teardown_default_option), + cmocka_unit_test_setup_teardown(kds_s2000w_net_set_option_int_scanimage_default_br_y, setup_default_option, teardown_default_option), cmocka_unit_test_setup_teardown(kds_s2000w_net_set_option_int_word_list, setup_default_option, teardown_default_option), cmocka_unit_test_setup_teardown(kds_s2000w_net_set_invalid_option_string, setup_default_option, teardown_default_option), cmocka_unit_test_setup_teardown(kds_s2000w_net_set_invalid_option_int, setup_default_option, teardown_default_option), -- 2.47.3