]> gitweb.hhaalo.de Git - sane-kds-s2000w-net.git/commitdiff
add test for one and two page scan
authorBastian Dehn <hhaalo@arcor.de>
Mon, 25 Mar 2024 18:53:41 +0000 (19:53 +0100)
committerBastian Dehn <hhaalo@arcor.de>
Mon, 25 Mar 2024 18:53:41 +0000 (19:53 +0100)
src/kds_s2000w_net.c
tests/kds_s2000w_net_tests.c
tests/kds_s2000w_net_tests.h
tests/kds_s2000w_net_tests_run.c

index 21d00f467f62a76facb0f748272d95e1a0d51a88..1cc71cbc6edf24f760dfa522e0a832d13ce6432e 100644 (file)
@@ -182,6 +182,12 @@ SANE_Status _sane_kds_s2000w_net_start(SANE_Handle handle)
                return SANE_STATUS_NO_DOCS;
        }
 
+       if (h->current_scan_status->complete_scanned
+               && h->current_scan_status->available_images <= 0) {
+               kds_s2000w_handler_recreate_session(h);
+               return SANE_STATUS_GOOD;
+       }
+
        if (h->current_scan_status->complete_scanned) {
                kds_s2000w_handler_stop_scan(h);
                return SANE_STATUS_GOOD;
index e026b327356bd347ba1e8737feeacf440dbd6863..d33b25bca81677de41c794f76f799ff1f184494a 100644 (file)
@@ -579,6 +579,7 @@ void sane_kds_s2000w_net_start(void** state)
        int result = _sane_kds_s2000w_net_start(h);
 
        assert_int_equal(result, SANE_STATUS_GOOD);
+       assert_int_equal(h->current_scan_status->complete_scanned, 0);
        assert_int_equal(h->current_metadata->depth, 8);
        assert_int_equal(h->current_metadata->channels, 3);
        assert_int_equal(h->current_metadata->format, 1);
@@ -650,6 +651,7 @@ void sane_kds_s2000w_net_start_one_page_per_flatscan(void** state)
        int result = _sane_kds_s2000w_net_start(h);
 
        assert_int_equal(result, SANE_STATUS_GOOD);
+       assert_int_equal(h->current_scan_status->complete_scanned, 0);
        assert_int_equal(h->current_metadata->depth, 8);
        assert_int_equal(h->current_metadata->channels, 3);
        assert_int_equal(h->current_metadata->format, 1);
@@ -670,6 +672,193 @@ void sane_kds_s2000w_net_start_one_page_per_flatscan(void** state)
        h = NULL;
 }
 
+void sane_kds_s2000w_net_start_one_page_per_feeder(void** state)
+{
+       response** response_list = (response**) *state;
+       will_return(mock_response, response_list[0]);
+       will_return(__wrap_kds_s2000w_client_start_scan, 0);
+       response* resp_status = kds_s2000w_client_response_init();
+       resp_status->data = realloc(resp_status->data, 210);
+       const char* status = "{ \
+               \"Status\": { \
+                       \"NumImagesScanned\": 1, \
+                       \"NumImagesStored\": 1, \
+                       \"State\": \"Done Scanning\", \
+                       \"ErrorNum\": 0, \
+                       \"LastError\": \"Status: 200 Success\", \
+                       \"PaperDetected\": \"0\", \
+                       \"PercentAvailable\": 99 \
+               }}\0";
+       memcpy(resp_status->data, status, 210);
+       resp_status->code = 200;
+       resp_status->size = 210;
+       will_return(mock_response, resp_status);
+       will_return(__wrap_kds_s2000w_client_status_session, 0);
+       will_return(mock_response, response_list[0]);
+       will_return(__wrap_kds_s2000w_client_get_image, 0);
+       will_return(mock_response, response_list[1]);
+       will_return(__wrap_kds_s2000w_client_get_metadata, 0);
+       will_return(mock_response, response_list[0]);
+       will_return(__wrap_kds_s2000w_client_delete_image, 0);
+       response* resp_open_session = kds_s2000w_client_response_init();
+       resp_open_session->data = realloc(resp_open_session->data, 25);
+       const char* session_data = "{\"SessionId\":\"8154711\"}\0";
+       memcpy(resp_open_session->data, session_data, 25);
+       resp_open_session->code = 200;
+       resp_open_session->size = 25;
+       will_return(mock_response, resp_open_session);
+       will_return(__wrap_kds_s2000w_client_open_session, 0);
+       response* resp_set_option = kds_s2000w_client_response_init();
+       resp_set_option->code = 200;
+       will_return(mock_response, resp_set_option);
+       will_return(__wrap_kds_s2000w_client_set_option, 0);
+       expect_function_call(__wrap_kds_s2000w_client_start_scan);
+       expect_function_call(__wrap_kds_s2000w_client_status_session);
+       expect_function_call(__wrap_kds_s2000w_client_get_image);
+       expect_function_call(__wrap_kds_s2000w_client_get_metadata);
+       expect_function_call(__wrap_kds_s2000w_client_delete_image);
+       expect_function_call(__wrap_kds_s2000w_client_close_session);
+       expect_function_call(__wrap_kds_s2000w_client_open_session);
+       expect_function_call(__wrap_kds_s2000w_client_set_option);
+       handler* h = init_handler();
+       const char* test_config = "{\"Configuration\": { \"ColorMode\": \"Color\" } }";
+       h->current_scanner_config = json_tokener_parse(test_config);
+
+       int result = _sane_kds_s2000w_net_start(h);
+
+       assert_int_equal(result, SANE_STATUS_GOOD);
+       assert_int_equal(h->current_scan_status->complete_scanned, 1);
+       assert_int_equal(h->current_metadata->depth, 8);
+       assert_int_equal(h->current_metadata->channels, 3);
+       assert_int_equal(h->current_metadata->format, 1);
+       assert_int_equal(h->current_metadata->pixels_per_line, 1000);
+       assert_int_equal(h->current_metadata->lines, 1000);
+       assert_int_equal(h->current_metadata->valid, 1);
+       assert_int_equal(h->current_metadata->is_last, 1);
+
+       json_object_put(h->current_scanner_config);
+       h->current_scanner_config = NULL;
+       kds_s2000w_client_response_free(resp_status);
+       resp_status = NULL;
+       kds_s2000w_client_response_free(resp_open_session);
+       resp_open_session = NULL;
+       kds_s2000w_client_response_free(resp_set_option);
+       resp_set_option = NULL;
+       free_handler(h);
+       h = NULL;
+}
+
+void sane_kds_s2000w_net_start_two_pages_per_feeder(void** state)
+{
+       response** response_list = (response**) *state;
+       will_return(mock_response, response_list[0]);
+       will_return(__wrap_kds_s2000w_client_start_scan, 0);
+       response* resp_status = kds_s2000w_client_response_init();
+       resp_status->data = realloc(resp_status->data, 210);
+       const char* status = "{ \
+               \"Status\": { \
+                       \"NumImagesScanned\": 2, \
+                       \"NumImagesStored\": 2, \
+                       \"State\": \"Done Scanning\", \
+                       \"ErrorNum\": 0, \
+                       \"LastError\": \"Status: 200 Success\", \
+                       \"PaperDetected\": \"0\", \
+                       \"PercentAvailable\": 99 \
+               }}\0";
+       memcpy(resp_status->data, status, 210);
+       resp_status->code = 200;
+       resp_status->size = 210;
+       will_return(mock_response, resp_status);
+       will_return(__wrap_kds_s2000w_client_status_session, 0);
+       will_return(mock_response, response_list[0]);
+       will_return(__wrap_kds_s2000w_client_get_image, 0);
+       will_return(mock_response, response_list[1]);
+       will_return(__wrap_kds_s2000w_client_get_metadata, 0);
+       will_return(mock_response, response_list[0]);
+       will_return(__wrap_kds_s2000w_client_delete_image, 0);
+       response* resp_stop_scan = kds_s2000w_client_response_init();
+       resp_stop_scan->code = 200;
+       will_return(mock_response, resp_stop_scan);
+       will_return(__wrap_kds_s2000w_client_stop_scan, 0);
+       expect_function_call(__wrap_kds_s2000w_client_start_scan);
+       expect_function_call(__wrap_kds_s2000w_client_status_session);
+       expect_function_call(__wrap_kds_s2000w_client_get_image);
+       expect_function_call(__wrap_kds_s2000w_client_get_metadata);
+       expect_function_call(__wrap_kds_s2000w_client_delete_image);
+       expect_function_call(__wrap_kds_s2000w_client_stop_scan);
+
+       handler* h = init_handler();
+       const char* test_config = "{\"Configuration\": { \"ColorMode\": \"Color\" } }";
+       h->current_scanner_config = json_tokener_parse(test_config);
+
+       int result = _sane_kds_s2000w_net_start(h);
+
+       const char* status2 = "{ \
+               \"Status\": { \
+                       \"NumImagesScanned\": 2, \
+                       \"NumImagesStored\": 1, \
+                       \"State\": \"Done Scanning\", \
+                       \"ErrorNum\": 0, \
+                       \"LastError\": \"Status: 200 Success\", \
+                       \"PaperDetected\": \"0\", \
+                       \"PercentAvailable\": 99 \
+               }}\0";
+       memcpy(resp_status->data, status2, 210);
+       resp_status->code = 200;
+       resp_status->size = 210;
+       will_return(mock_response, resp_status);
+       will_return(__wrap_kds_s2000w_client_status_session, 0);
+       will_return(mock_response, response_list[0]);
+       will_return(__wrap_kds_s2000w_client_get_image, 0);
+       will_return(mock_response, response_list[1]);
+       will_return(__wrap_kds_s2000w_client_get_metadata, 0);
+       will_return(mock_response, response_list[0]);
+       will_return(__wrap_kds_s2000w_client_delete_image, 0);
+       response* resp_open_session = kds_s2000w_client_response_init();
+       resp_open_session->data = realloc(resp_open_session->data, 25);
+       const char* session_data = "{\"SessionId\":\"8154711\"}\0";
+       memcpy(resp_open_session->data, session_data, 25);
+       resp_open_session->code = 200;
+       resp_open_session->size = 25;
+       will_return(mock_response, resp_open_session);
+       will_return(__wrap_kds_s2000w_client_open_session, 0);
+       response* resp_set_option = kds_s2000w_client_response_init();
+       resp_set_option->code = 200;
+       will_return(mock_response, resp_set_option);
+       will_return(__wrap_kds_s2000w_client_set_option, 0);
+       expect_function_call(__wrap_kds_s2000w_client_status_session);
+       expect_function_call(__wrap_kds_s2000w_client_get_image);
+       expect_function_call(__wrap_kds_s2000w_client_get_metadata);
+       expect_function_call(__wrap_kds_s2000w_client_delete_image);
+       expect_function_call(__wrap_kds_s2000w_client_close_session);
+       expect_function_call(__wrap_kds_s2000w_client_open_session);
+       expect_function_call(__wrap_kds_s2000w_client_set_option);
+       result = _sane_kds_s2000w_net_start(h);
+
+       assert_int_equal(result, SANE_STATUS_GOOD);
+       assert_int_equal(h->current_scan_status->complete_scanned, 1);
+       assert_int_equal(h->current_metadata->depth, 8);
+       assert_int_equal(h->current_metadata->channels, 3);
+       assert_int_equal(h->current_metadata->format, 1);
+       assert_int_equal(h->current_metadata->pixels_per_line, 1000);
+       assert_int_equal(h->current_metadata->lines, 1000);
+       assert_int_equal(h->current_metadata->valid, 1);
+       assert_int_equal(h->current_metadata->is_last, 1);
+
+       json_object_put(h->current_scanner_config);
+       h->current_scanner_config = NULL;
+       kds_s2000w_client_response_free(resp_status);
+       resp_status = NULL;
+       kds_s2000w_client_response_free(resp_open_session);
+       resp_open_session = NULL;
+       kds_s2000w_client_response_free(resp_set_option);
+       resp_set_option = NULL;
+       kds_s2000w_client_response_free(resp_stop_scan);
+       resp_stop_scan = NULL;
+       free_handler(h);
+       h = NULL;
+}
+
 void sane_kds_s2000w_net_get_parameter_cancel()
 {
        handler* h = init_handler();
index f0167e74bb378fd2bf356eb3d45cde2306580eec..61b997c0ee0e44a54a44c8af28cfb4ea1aec9c44 100644 (file)
@@ -36,6 +36,8 @@ void sane_kds_s2000w_net_control_get_option_twentytwo(void** state);
 void sane_kds_s2000w_net_start_cancel();
 void sane_kds_s2000w_net_start(void** state);
 void sane_kds_s2000w_net_start_one_page_per_flatscan(void** state);
+void sane_kds_s2000w_net_start_one_page_per_feeder(void** state);
+void sane_kds_s2000w_net_start_two_pages_per_feeder(void** state);
 void sane_kds_s2000w_net_get_parameter_cancel();
 void sane_kds_s2000w_net_cancel();
 void sane_kds_s2000w_net_open();
index 2f3cc820f2db36fdc9aa1e90cb35af1e3fb086df..f3a7959f067c84df9d6ed8c1ba619ba5f0944000 100644 (file)
@@ -128,6 +128,8 @@ int main()
                cmocka_unit_test(sane_kds_s2000w_net_start_cancel),
                cmocka_unit_test_setup_teardown(sane_kds_s2000w_net_start, setup_net_start, teardown_net_start),
                cmocka_unit_test_setup_teardown(sane_kds_s2000w_net_start_one_page_per_flatscan, setup_net_start, teardown_net_start),
+               cmocka_unit_test_setup_teardown(sane_kds_s2000w_net_start_one_page_per_feeder, setup_net_start, teardown_net_start),
+               cmocka_unit_test_setup_teardown(sane_kds_s2000w_net_start_two_pages_per_feeder, setup_net_start, teardown_net_start),
                cmocka_unit_test(sane_kds_s2000w_net_get_parameter_cancel),
                cmocka_unit_test(sane_kds_s2000w_net_cancel),
                cmocka_unit_test(sane_kds_s2000w_net_open)