From: Bastian Dehn Date: Sun, 11 Feb 2024 12:37:43 +0000 (+0100) Subject: add test for write byte length X-Git-Tag: v1.0.0^2~303 X-Git-Url: https://gitweb.hhaalo.de/?a=commitdiff_plain;h=9192b4cc15db0a03eeaab238752459361113ba42;p=sane-kds-s2000w-net.git add test for write byte length --- diff --git a/src/kds_s2000w_net.c b/src/kds_s2000w_net.c index ff62855..0832908 100644 --- a/src/kds_s2000w_net.c +++ b/src/kds_s2000w_net.c @@ -1,10 +1,5 @@ -#include -#include -#include -#include -#include -#include "kds_s2000w_option_descriptors.h" -#include "kds_s2000w_handler.h" + +#include "kds_s2000w_net.h" SANE_Option_Descriptor* option_descriptors = NULL; SANE_Device* device_info = NULL; @@ -15,6 +10,11 @@ int scan_started = 0; int readed_bytes_per_line = 0; int readed_lines = 0; +metadata* get_current_metadata() +{ + return ¤t_metadata; +} + int _sane_kds_s2000w_net_find_first_data_byte(const char* data) { const int header_spaces = 3; @@ -243,9 +243,8 @@ SANE_Status _sane_kds_s2000w_net_read(SANE_Handle handle, SANE_Byte* data, SANE_Int max_length, SANE_Int* length) { printf("is all scanned: %i\n", current_metadata.scanned_all_complete); - int skip_header_bytes = _sane_kds_s2000w_net_find_first_data_byte(current_metadata.image); - + if (read_size <= 0) { read_size += skip_header_bytes; } @@ -269,7 +268,6 @@ SANE_Status _sane_kds_s2000w_net_read(SANE_Handle handle, SANE_Byte* data, return SANE_STATUS_CANCELLED; } - int maxlen = 0; if (current_metadata.bytes_per_line < max_length) { maxlen = current_metadata.bytes_per_line - readed_bytes_per_line; diff --git a/src/kds_s2000w_net.h b/src/kds_s2000w_net.h new file mode 100644 index 0000000..a344bbc --- /dev/null +++ b/src/kds_s2000w_net.h @@ -0,0 +1,35 @@ +#ifndef KDS_S2000W_NET_H +#include +#include +#include +#include +#include +#include "kds_s2000w_option_descriptors.h" +#include "kds_s2000w_handler.h" + +// test helper method +metadata* get_current_metadata(); + +int _sane_kds_s2000w_net_find_first_data_byte(const char* data); +SANE_Status _sane_kds_s2000w_net_init(SANE_Int* version_code, SANE_Auth_Callback authorize); +void _sane_kds_s2000w_net_exit(void); +SANE_Status _sane_kds_s2000w_net_get_devices(SANE_Device*** device_list, + SANE_Bool local_only); +SANE_Status _sane_kds_s2000w_net_open(SANE_String_Const devicename, + SANE_Handle handle); +void _sane_kds_s2000w_net_close(SANE_Handle handle); +const SANE_Option_Descriptor* _sane_kds_s2000w_net_get_option_descriptor( + SANE_Handle handle, SANE_Int option); +SANE_Status _sane_kds_s2000w_net_control_option(SANE_Handle handle, + SANE_Int option, SANE_Action action, void* value, SANE_Int* info); +void _sane_kds_s2000w_net_cancel(SANE_Handle handle); +SANE_Status _sane_kds_s2000w_net_get_parameters(SANE_Handle handle, + SANE_Parameters* params); +SANE_Status _sane_kds_s2000w_net_start(SANE_Handle handle); +SANE_Status _sane_kds_s2000w_net_read(SANE_Handle handle, SANE_Byte* data, + SANE_Int max_length, SANE_Int* length); +SANE_Status _sane_kds_s2000w_net_set_io_mode(SANE_Handle handle, + SANE_Bool non_blocking); +SANE_Status _sane_kds_s2000w_net_get_select_fd(SANE_Handle handle, SANE_Int* fd); +SANE_String_Const _sane_kds_s2000w_net_strstatus(SANE_Status status); +#endif \ No newline at end of file diff --git a/tests/kds_s2000w_net_tests.c b/tests/kds_s2000w_net_tests.c index a76de1f..69ac675 100644 --- a/tests/kds_s2000w_net_tests.c +++ b/tests/kds_s2000w_net_tests.c @@ -1,5 +1,9 @@ #include -int _sane_kds_s2000w_net_find_first_data_byte(const char* data); +#include +#include +#include "../src/kds_s2000w_net.h" + + START_TEST(sane_kds_s2000w_net_find_first_data_byte_test) { @@ -14,4 +18,33 @@ START_TEST(sane_kds_s2000w_net_find_first_data_byte_test) ck_assert_int_eq(header_bytes, 16); } +END_TEST + +START_TEST(_sane_kds_s2000w_net_read_test) +{ + metadata* current_metadata_ptr = get_current_metadata(); + current_metadata_ptr->scanned_all_complete = 1; + current_metadata_ptr->lines = 1; + current_metadata_ptr->bytes_per_line = 65536; + char* image = malloc(sizeof(char) * 65536); + for (int i = 0; i < 65536; i++) { + image[i] = 0x0a; + } + current_metadata_ptr->image = image; + + SANE_Int maxlen = 65536; + char* dataptr = malloc(sizeof(char) * maxlen); + SANE_Int* length = malloc(sizeof(SANE_Int)); + + _sane_kds_s2000w_net_read(NULL, (void*) dataptr, maxlen, length); + + ck_assert_int_eq(*length, 65536); + + free(dataptr); + dataptr = NULL; + free(length); + length = NULL; + free(image); + image = NULL; +} END_TEST \ No newline at end of file diff --git a/tests/runtests.c b/tests/runtests.c index 72bf4de..696908e 100644 --- a/tests/runtests.c +++ b/tests/runtests.c @@ -10,6 +10,7 @@ Suite* first_tests() tc_core = tcase_create("core"); tcase_add_test(tc_core, sane_kds_s2000w_net_find_first_data_byte_test); + tcase_add_test(tc_core, _sane_kds_s2000w_net_read_test); suite_add_tcase(suite, tc_core);