]> gitweb.hhaalo.de Git - sane-kds-s2000w-net.git/commitdiff
add valid button action
authorBastian Dehn <hhaalo@arcor.de>
Sat, 25 Oct 2025 18:43:22 +0000 (20:43 +0200)
committerBastian Dehn <hhaalo@arcor.de>
Sat, 25 Oct 2025 18:55:31 +0000 (20:55 +0200)
CMakeLists.txt
src/kds_s2000w_handler_opts.c
tests/kds_s2000w_client_mock.c
tests/kds_s2000w_client_mock.h
tests/kds_s2000w_net_set_opt_tests.c

index bbdc72f323fa9e2f373baaf87a271026e96fb2af..09d684a2b9e52543e717e367d098412e37dcd7c4 100644 (file)
@@ -36,6 +36,7 @@ IF (RUN_TESTS)
 --wrap,kds_s2000w_client_delete_image,\
 --wrap,kds_s2000w_client_get_option,\
 --wrap,kds_s2000w_client_set_option,\
+--wrap,kds_s2000w_client_get_capabilities,\
 --wrap,kds_s2000w_image_converter_to_pnm,\
 --wrap,sanei_config_get_paths"
 CACHE STRING "test coverage compiler flags" FORCE)
index 475d31876f0bfb9e115e49853bf091add1966545..a511e5b382d9abcc9d503c13a634d20aabe6eafd 100644 (file)
@@ -82,14 +82,19 @@ void _kds_s2000w_handler_opts_set_option_to_default(handler_t* h)
        kds_s2000w_client_get_capabilities(resp);
        json_object* capabilities = json_tokener_parse(resp->data);
        json_object* default_values = json_object_object_get(capabilities, "Defaults");
+
        json_object* default_config = json_object_new_object();
-       json_object_object_add(default_config, CONFIGURATION, default_values);
+       json_object* copy_default_values = NULL;
+       json_object_deep_copy(default_values, &copy_default_values, json_c_shallow_copy_default);
+       json_object_object_add(default_config, CONFIGURATION, copy_default_values);
 
        json_object_put(h->scanner_config);
        h->scanner_config = NULL;
 
        h->scanner_config = default_config;
 
+       json_object_put(capabilities);
+       capabilities = NULL;
        kds_s2000w_client_response_free(resp);
        resp = NULL;
 }
@@ -137,6 +142,9 @@ json_object* _kds_s2000w_handler_opts_load_config(handler_t* h)
 
 bool _kds_s2000w_opts_validate(SANE_Option_Descriptor* descriptor, const void* value)
 {
+       if (descriptor->constraint_type == SANE_CONSTRAINT_NONE)
+               return true;
+
        if (descriptor->constraint_type == SANE_CONSTRAINT_WORD_LIST) {
                const int32_t* int_value = (const int32_t*) value;
                for (int32_t i = 1; i < descriptor->constraint.word_list[0]; i++) {
index 8836f7e42aed2c1243bf3c8d5d9156a4d2091824..73a8074a844c3bfeff21142e562c68f8926faa6f 100644 (file)
@@ -87,6 +87,13 @@ uint8_t __wrap_kds_s2000w_client_set_option(int64_t sessionid, response_t* respo
        return mock_type(int);
 }
 
+uint8_t __wrap_kds_s2000w_client_get_capabilities(response_t* response)
+{
+       function_called();
+       mock_response(response);
+       return mock_type(int);
+}
+
 void __wrap_kds_s2000w_image_converter_to_pnm(blobdata_t* in, blobdata_t* out)
 {
        if (in->data == NULL)
index 1f7f131926a84584cd0f3ec4126afd2ac9a4adff..f1eeceb8de431bf4020179ef337d4fa2052c5dc5 100644 (file)
@@ -26,6 +26,8 @@ uint8_t __wrap_kds_s2000w_client_delete_image(int64_t sessionid, uint8_t img_num
 uint8_t __wrap_kds_s2000w_client_get_option(int64_t sessionid, response_t* response);
 uint8_t __wrap_kds_s2000w_client_set_option(int64_t sessionid, response_t* response);
 
+uint8_t __wrap_kds_s2000w_client_get_capabilities(response_t* response);
+
 void __wrap_kds_s2000w_convert_jpg_to_pnm_with_depth(blobdata_t* in, blobdata_t* out);
 void __wrap_kds_s2000w_convert_tiff_to_pnm(blobdata_t* in, blobdata_t* out);
 #endif
\ No newline at end of file
index 5e1d6bf33d0cc2938f1f33194079712cd5d4ef21..5c807f899f98840a7c01a8fe1c2ea30f43c5cf68 100644 (file)
@@ -166,6 +166,57 @@ void kds_s2000w_net_set_option_int(void** state)
        set_value = NULL;
 }
 
+void kds_s2000w_net_set_option_reset(void** state)
+{
+       int32_t* set_value = malloc(sizeof(int32_t));
+       if (set_value == NULL)
+               return;
+
+       const char* json = "{\"Defaults\": {\"DPI\": 200}}";
+       response_t* defauls_resp = kds_s2000w_client_response_init();
+       defauls_resp->data = malloc(sizeof(char) * 27);
+       memcpy(defauls_resp->data, json, 27);
+       defauls_resp->size = 27;
+       defauls_resp->code = 200;
+
+       *set_value = 1;
+       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, defauls_resp);
+       will_return(__wrap_kds_s2000w_client_get_capabilities, 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_get_capabilities);
+       expect_function_call(__wrap_kds_s2000w_client_set_option);
+
+       SANE_Status status = sane_kds_s2000w_net_control_option(h, 31, 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, DPI);
+       int32_t value = json_object_get_int(value_object);
+
+       assert_int_equal(status, SANE_STATUS_GOOD);
+       assert_int_equal(value, 200);
+
+       kds_s2000w_client_response_free(defauls_resp);
+       defauls_resp = NULL;
+       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_br_x(void** state)
 {
        int32_t* set_value = malloc(sizeof(int32_t));
@@ -342,6 +393,7 @@ int main()
        const struct CMUnitTest net_tests[] = {
                cmocka_unit_test_setup_teardown(kds_s2000w_net_set_option_string, setup_default_option, teardown_default_option),
                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_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),