]> gitweb.hhaalo.de Git - sane-kds-s2000w-net.git/commitdiff
add test for option descriptors and refactor
authorBastian Dehn <hhaalo@arcor.de>
Mon, 29 Jul 2024 14:05:02 +0000 (16:05 +0200)
committerBastian Dehn <hhaalo@arcor.de>
Tue, 30 Jul 2024 10:20:44 +0000 (12:20 +0200)
src/kds_s2000w_option_descriptors.c
tests/CMakeLists.txt
tests/kds_s2000w_option_descriptor_tests.c [new file with mode: 0644]
tests/kds_s2000w_option_descriptor_tests.h [new file with mode: 0644]
tests/kds_s2000w_option_descriptor_tests_run.c [new file with mode: 0644]

index a2bb6bd5e20b004cf2e1bc2685aabce9b6a27680..d2ce7b4c41a0ab83b33afe267e38da7f64566a32 100644 (file)
@@ -28,16 +28,17 @@ SANE_String_Const* constraint_scan_source = NULL;
 SANE_Option_Descriptor _kds_s2000w_option_descriptor_standard_group()
 {
        debug_printf(ALL, "kds_s2000w_option_descriptor_standard_group");
-       SANE_Option_Descriptor descriptor;
 
-       descriptor.name = SANE_NAME_STANDARD;
-       descriptor.title = SANE_TITLE_STANDARD;
-       descriptor.desc = SANE_DESC_STANDARD;
-       descriptor.unit = SANE_UNIT_NONE;
-       descriptor.cap = SANE_CAP_SOFT_DETECT;
-       descriptor.constraint_type = SANE_CONSTRAINT_NONE;
-       descriptor.type = SANE_TYPE_GROUP;
-       descriptor.size = 0;
+       SANE_Option_Descriptor descriptor = {
+               SANE_NAME_STANDARD,
+               SANE_TITLE_STANDARD,
+               SANE_DESC_STANDARD,
+               SANE_TYPE_GROUP,
+               SANE_UNIT_NONE,
+               0,
+               SANE_CAP_SOFT_DETECT,
+               SANE_CONSTRAINT_NONE
+       };
 
        return descriptor;
 }
@@ -45,16 +46,16 @@ SANE_Option_Descriptor _kds_s2000w_option_descriptor_standard_group()
 SANE_Option_Descriptor _kds_s2000w_option_descriptor_geometry_group()
 {
        debug_printf(ALL, "kds_s2000w_option_descriptor_scan_area_group");
-       SANE_Option_Descriptor descriptor;
-
-       descriptor.name = SANE_NAME_GEOMETRY;
-       descriptor.title = SANE_TITLE_GEOMETRY;
-       descriptor.desc = SANE_DESC_GEOMETRY;
-       descriptor.unit = SANE_UNIT_NONE;
-       descriptor.cap = SANE_CAP_SOFT_DETECT;
-       descriptor.constraint_type = SANE_CONSTRAINT_NONE;
-       descriptor.type = SANE_TYPE_GROUP;
-       descriptor.size = 0;
+       SANE_Option_Descriptor descriptor = {
+               SANE_NAME_GEOMETRY,
+               SANE_TITLE_GEOMETRY,
+               SANE_DESC_GEOMETRY,
+               SANE_TYPE_GROUP,
+               SANE_UNIT_NONE,
+               0,
+               SANE_CAP_SOFT_DETECT,
+               SANE_CONSTRAINT_NONE
+       };
 
        return descriptor;
 }
@@ -62,16 +63,17 @@ SANE_Option_Descriptor _kds_s2000w_option_descriptor_geometry_group()
 SANE_Option_Descriptor _kds_s2000w_option_descriptor_num_options()
 {
        debug_printf(ALL, "kds_s2000w_option_descriptor_num_options");
-       SANE_Option_Descriptor descriptor;
 
-       descriptor.name = SANE_NAME_NUM_OPTIONS;
-       descriptor.title = SANE_TITLE_NUM_OPTIONS;
-       descriptor.desc = SANE_DESC_NUM_OPTIONS;
-       descriptor.unit = SANE_UNIT_NONE;
-       descriptor.cap = SANE_CAP_SOFT_DETECT;
-       descriptor.constraint_type = SANE_CONSTRAINT_NONE;
-       descriptor.type = SANE_TYPE_INT;
-       descriptor.size = sizeof(SANE_Int);
+       SANE_Option_Descriptor descriptor = {
+               SANE_NAME_NUM_OPTIONS,
+               SANE_TITLE_NUM_OPTIONS,
+               SANE_DESC_NUM_OPTIONS,
+               SANE_TYPE_INT,
+               SANE_UNIT_NONE,
+               sizeof(SANE_Int),
+               SANE_CAP_SOFT_DETECT,
+               SANE_CONSTRAINT_NONE
+       };
 
        return descriptor;
 }
@@ -79,17 +81,18 @@ SANE_Option_Descriptor _kds_s2000w_option_descriptor_num_options()
 SANE_Option_Descriptor _kds_s2000w_option_descriptor_dpi()
 {
        debug_printf(ALL, "kds_s2000w_option_descriptor_dpi");
-       SANE_Option_Descriptor descriptor;
-
-       descriptor.name = SANE_NAME_SCAN_RESOLUTION;
-       descriptor.title = SANE_TITLE_SCAN_RESOLUTION;
-       descriptor.desc = SANE_DESC_SCAN_RESOLUTION;
-       descriptor.unit = SANE_UNIT_DPI;
-       descriptor.cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT;
-       descriptor.constraint_type = SANE_CONSTRAINT_WORD_LIST;
-       descriptor.constraint.word_list = constraint_dpi;
-       descriptor.type = SANE_TYPE_INT;
-       descriptor.size = sizeof(SANE_Int);
+
+       SANE_Option_Descriptor descriptor = {
+               SANE_NAME_SCAN_RESOLUTION,
+               SANE_TITLE_SCAN_RESOLUTION,
+               SANE_DESC_SCAN_RESOLUTION,
+               SANE_TYPE_INT,
+               SANE_UNIT_DPI,
+               sizeof(SANE_Int),
+               SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT,
+               SANE_CONSTRAINT_WORD_LIST,
+               {.word_list = constraint_dpi}
+       };
 
        return descriptor;
 }
@@ -97,21 +100,23 @@ SANE_Option_Descriptor _kds_s2000w_option_descriptor_dpi()
 SANE_Option_Descriptor _kds_s2000w_option_descriptor_scanside()
 {
        debug_printf(ALL, "kds_s2000w_option_descriptor_scanside");
-       SANE_Option_Descriptor descriptor;
-
-       descriptor.name = "scanside";
-       descriptor.title = "Duplex Mode";
-       descriptor.desc = "Duplex Mode";
-       descriptor.cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT;
-       descriptor.constraint_type = SANE_CONSTRAINT_STRING_LIST;
-       constraint_scanside = malloc(sizeof(char*) * 3);
+
+       constraint_scanside = malloc(sizeof(SANE_String_Const*) * 3);
        constraint_scanside[0] = "Simplex";
        constraint_scanside[1] = "Duplex";
        constraint_scanside[2] = NULL;
-       descriptor.constraint.string_list = constraint_scanside;
-       descriptor.type = SANE_TYPE_STRING;
-       descriptor.unit = SANE_UNIT_NONE;
-       descriptor.size = sizeof(SANE_String) * 50;
+
+       SANE_Option_Descriptor descriptor = {
+               "scanside",
+               "Duplex Mode",
+               "Duplex Mode",
+               SANE_TYPE_STRING,
+               SANE_UNIT_NONE,
+               sizeof(SANE_String_Const*) * 3,
+               SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT,
+               SANE_CONSTRAINT_STRING_LIST,
+               {.string_list = constraint_scanside}
+       };
 
        return descriptor;
 }
@@ -119,22 +124,24 @@ SANE_Option_Descriptor _kds_s2000w_option_descriptor_scanside()
 SANE_Option_Descriptor _kds_s2000w_option_descriptor_color_mode()
 {
        debug_printf(ALL, "kds_s2000w_option_descriptor_color_mode");
-       SANE_Option_Descriptor descriptor;
-
-       descriptor.name = SANE_NAME_SCAN_MODE;
-       descriptor.title = SANE_TITLE_SCAN_MODE;
-       descriptor.desc = SANE_DESC_SCAN_MODE;
-       descriptor.cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT;
-       descriptor.constraint_type = SANE_CONSTRAINT_STRING_LIST;
-       constraint_colormode = malloc(sizeof(char*) * 4);
+
+       constraint_colormode = malloc(sizeof(SANE_String_Const*) * 4);
        constraint_colormode[0] = "Color";
        constraint_colormode[1] = "Gray";
        constraint_colormode[2] = "BW";
        constraint_colormode[3] = NULL;
-       descriptor.constraint.string_list = constraint_colormode;
-       descriptor.type = SANE_TYPE_STRING;
-       descriptor.unit = SANE_UNIT_NONE;
-       descriptor.size = sizeof(SANE_String) * 50;
+
+       SANE_Option_Descriptor descriptor = {
+               SANE_NAME_SCAN_MODE,
+               SANE_TITLE_SCAN_MODE,
+               SANE_DESC_SCAN_MODE,
+               SANE_TYPE_STRING,
+               SANE_UNIT_NONE,
+               sizeof(SANE_String_Const*) * 4,
+               SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT,
+               SANE_CONSTRAINT_STRING_LIST,
+               {.string_list = constraint_colormode}
+       };
 
        return descriptor;
 }
@@ -142,16 +149,17 @@ SANE_Option_Descriptor _kds_s2000w_option_descriptor_color_mode()
 SANE_Option_Descriptor _kds_s2000w_option_descriptor_skip_blank_pages()
 {
        debug_printf(ALL, "kds_s2000w_option_descriptor_skip_blank_pages");
-       SANE_Option_Descriptor descriptor;
 
-       descriptor.name = "skip-blank-pages";
-       descriptor.title = "Blank Image Deletion Mode";
-       descriptor.desc = "Blank Image Deletion Mode";
-       descriptor.cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT;
-       descriptor.constraint_type = SANE_CONSTRAINT_NONE;
-       descriptor.type = SANE_TYPE_BOOL;
-       descriptor.unit = SANE_UNIT_NONE;
-       descriptor.size = sizeof(SANE_Bool);
+       SANE_Option_Descriptor descriptor = {
+               "skip-blank-pages",
+               "Blank Image Deletion Mode",
+               "Blank Image Deletion Mode",
+               SANE_TYPE_BOOL,
+               SANE_UNIT_NONE,
+               sizeof(SANE_Bool),
+               SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT,
+               SANE_CONSTRAINT_NONE
+       };
 
        return descriptor;
 }
@@ -159,14 +167,8 @@ SANE_Option_Descriptor _kds_s2000w_option_descriptor_skip_blank_pages()
 SANE_Option_Descriptor _kds_s2000w_option_descriptor_color_drop()
 {
        debug_printf(ALL, "kds_s2000w_option_descriptor_color_drop");
-       SANE_Option_Descriptor descriptor;
-
-       descriptor.name = "colordrop";
-       descriptor.title = "colordrop";
-       descriptor.desc = "colordrop";
-       descriptor.cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT;
-       descriptor.constraint_type = SANE_CONSTRAINT_STRING_LIST;
-       constraint_colordrop = malloc(sizeof(char*) * 9);
+
+       constraint_colordrop = malloc(sizeof(SANE_String_Const*) * 9);
        constraint_colordrop[0] = "None";
        constraint_colordrop[1] = "Red";
        constraint_colordrop[2] = "Green";
@@ -176,10 +178,18 @@ SANE_Option_Descriptor _kds_s2000w_option_descriptor_color_drop()
        constraint_colordrop[6] = "Predominant";
        constraint_colordrop[7] = "Multiple";
        constraint_colordrop[8] = NULL;
-       descriptor.constraint.string_list = constraint_colordrop;
-       descriptor.type = SANE_TYPE_STRING;
-       descriptor.unit = SANE_UNIT_NONE;
-       descriptor.size = sizeof(SANE_String) * 50;
+
+       SANE_Option_Descriptor descriptor = {
+               "colordrop",
+               "colordrop",
+               "colordrop",
+               SANE_TYPE_STRING,
+               SANE_UNIT_NONE,
+               sizeof(SANE_String_Const*) * 9,
+               SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT,
+               SANE_CONSTRAINT_STRING_LIST,
+               {.string_list = constraint_colordrop}
+       };
 
        return descriptor;
 }
@@ -187,17 +197,18 @@ SANE_Option_Descriptor _kds_s2000w_option_descriptor_color_drop()
 SANE_Option_Descriptor _kds_s2000w_option_descriptor_color_drop_out_aggressiveness()
 {
        debug_printf(ALL, "kds_s2000w_option_descriptor_color_drop_out_aggressiveness");
-       SANE_Option_Descriptor descriptor;
-
-       descriptor.name = "colordropoutaggressiveness";
-       descriptor.title = "colordropoutaggressiveness";
-       descriptor.desc = "colordropoutaggressiveness";
-       descriptor.cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT;
-       descriptor.constraint_type = SANE_CONSTRAINT_RANGE;
-       descriptor.constraint.range = &constraint_color_drop_out_aggressiveness_range;
-       descriptor.type = SANE_TYPE_INT;
-       descriptor.unit = SANE_UNIT_NONE;
-       descriptor.size = sizeof(SANE_Int);
+
+       SANE_Option_Descriptor descriptor = {
+               "colordropoutaggressiveness",
+               "colordropoutaggressiveness",
+               "colordropoutaggressiveness",
+               SANE_TYPE_INT,
+               SANE_UNIT_NONE,
+               sizeof(SANE_Int),
+               SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT,
+               SANE_CONSTRAINT_RANGE,
+               {.range = &constraint_color_drop_out_aggressiveness_range}
+       };
 
        return descriptor;
 }
@@ -205,21 +216,23 @@ SANE_Option_Descriptor _kds_s2000w_option_descriptor_color_drop_out_aggressivene
 SANE_Option_Descriptor _kds_s2000w_option_descriptor_color_auto_brightness_mode()
 {
        debug_printf(ALL, "kds_s2000w_option_descriptor_color_auto_brightness_mode");
-       SANE_Option_Descriptor descriptor;
-
-       descriptor.name = "colorautobrightnessmode";
-       descriptor.title = "colorautobrightnessmode";
-       descriptor.desc = "colorautobrightnessmode";
-       descriptor.cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT;
-       descriptor.constraint_type = SANE_CONSTRAINT_STRING_LIST;
-       constraint_color_auto_brightnessmode = malloc(sizeof(char*) * 3);
+
+       constraint_color_auto_brightnessmode = malloc(sizeof(SANE_String_Const*) * 3);
        constraint_color_auto_brightnessmode[0] = "None";
        constraint_color_auto_brightnessmode[1] = "Automatic";
        constraint_color_auto_brightnessmode[2] = NULL;
-       descriptor.constraint.string_list = constraint_color_auto_brightnessmode;
-       descriptor.type = SANE_TYPE_STRING;
-       descriptor.unit = SANE_UNIT_NONE;
-       descriptor.size = sizeof(SANE_String) * 50;
+
+       SANE_Option_Descriptor descriptor = {
+               "colorautobrightnessmode",
+               "colorautobrightnessmode",
+               "colorautobrightnessmode",
+               SANE_TYPE_STRING,
+               SANE_UNIT_NONE,
+               sizeof(SANE_String_Const*) * 3,
+               SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT,
+               SANE_CONSTRAINT_STRING_LIST,
+               {.string_list = constraint_color_auto_brightnessmode}
+       };
 
        return descriptor;
 }
@@ -227,23 +240,25 @@ SANE_Option_Descriptor _kds_s2000w_option_descriptor_color_auto_brightness_mode(
 SANE_Option_Descriptor _kds_s2000w_option_descriptor_color_balance_mode()
 {
        debug_printf(ALL, "kds_s2000w_option_descriptor_color_balance_mode");
-       SANE_Option_Descriptor descriptor;
-
-       descriptor.name = "colorbalancemode";
-       descriptor.title = "colorbalancemode";
-       descriptor.desc = "colorbalancemode";
-       descriptor.cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT;
-       descriptor.constraint_type = SANE_CONSTRAINT_STRING_LIST;
-       constraint_color_balance_mode = malloc(sizeof(char*) * 5);
+
+       constraint_color_balance_mode = malloc(sizeof(SANE_String_Const*) * 5);
        constraint_color_balance_mode[0] = "None";
        constraint_color_balance_mode[1] = "Manual";
        constraint_color_balance_mode[2] = "Automatic";
        constraint_color_balance_mode[3] = "AutomaticAdvanced";
        constraint_color_balance_mode[4] = NULL;
-       descriptor.constraint.string_list = constraint_color_balance_mode;
-       descriptor.type = SANE_TYPE_STRING;
-       descriptor.unit = SANE_UNIT_NONE;
-       descriptor.size = sizeof(SANE_String) * 50;
+
+       SANE_Option_Descriptor descriptor = {
+               "colorbalancemode",
+               "colorbalancemode",
+               "colorbalancemode",
+               SANE_TYPE_STRING,
+               SANE_UNIT_NONE,
+               sizeof(SANE_String_Const*) * 5,
+               SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT,
+               SANE_CONSTRAINT_STRING_LIST,
+               {.string_list = constraint_color_balance_mode}
+       };
 
        return descriptor;
 }
@@ -251,17 +266,18 @@ SANE_Option_Descriptor _kds_s2000w_option_descriptor_color_balance_mode()
 SANE_Option_Descriptor _kds_s2000w_option_descriptor_color_balancea_agressiveness()
 {
        debug_printf(ALL, "kds_s2000w_option_descriptor_color_balancea_agressiveness");
-       SANE_Option_Descriptor descriptor;
-
-       descriptor.name = "colorbalanceaggressiveness";
-       descriptor.title = "colorbalanceaggressiveness";
-       descriptor.desc = "colorbalanceaggressiveness";
-       descriptor.cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT;
-       descriptor.constraint_type = SANE_CONSTRAINT_RANGE;
-       descriptor.constraint.range = &constraint_color_balance_aggressiveness;
-       descriptor.type = SANE_TYPE_INT;
-       descriptor.unit = SANE_UNIT_NONE;
-       descriptor.size = sizeof(SANE_Int);
+
+       SANE_Option_Descriptor descriptor = {
+               "colorbalanceaggressiveness",
+               "colorbalanceaggressiveness",
+               "colorbalanceaggressiveness",
+               SANE_TYPE_INT,
+               SANE_UNIT_NONE,
+               sizeof(SANE_Int),
+               SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT,
+               SANE_CONSTRAINT_RANGE,
+               {.range = &constraint_color_balance_aggressiveness}
+       };
 
        return descriptor;
 }
@@ -269,17 +285,18 @@ SANE_Option_Descriptor _kds_s2000w_option_descriptor_color_balancea_agressivenes
 SANE_Option_Descriptor _kds_s2000w_option_descriptor_color_balance_red()
 {
        debug_printf(ALL, "kds_s2000w_option_descriptor_color_balance_red");
-       SANE_Option_Descriptor descriptor;
-
-       descriptor.name = "colorbalancered";
-       descriptor.title = "colorbalancered";
-       descriptor.desc = "colorbalancered";
-       descriptor.cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT;
-       descriptor.constraint_type = SANE_CONSTRAINT_RANGE;
-       descriptor.constraint.range = &constraint_color_balance_red;
-       descriptor.type = SANE_TYPE_INT;
-       descriptor.unit = SANE_UNIT_NONE;
-       descriptor.size = sizeof(SANE_Int);
+
+       SANE_Option_Descriptor descriptor = {
+               "colorbalancered",
+               "colorbalancered",
+               "colorbalancered",
+               SANE_TYPE_INT,
+               SANE_UNIT_NONE,
+               sizeof(SANE_Int),
+               SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT,
+               SANE_CONSTRAINT_RANGE,
+               {.range = &constraint_color_balance_red}
+       };
 
        return descriptor;
 }
@@ -287,17 +304,18 @@ SANE_Option_Descriptor _kds_s2000w_option_descriptor_color_balance_red()
 SANE_Option_Descriptor _kds_s2000w_option_descriptor_color_balance_green()
 {
        debug_printf(ALL, "kds_s2000w_option_descriptor_color_balance_green");
-       SANE_Option_Descriptor descriptor;
-
-       descriptor.name = "colorbalancegreen";
-       descriptor.title = "colorbalancegreen";
-       descriptor.desc = "colorbalancegreen";
-       descriptor.cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT;
-       descriptor.constraint_type = SANE_CONSTRAINT_RANGE;
-       descriptor.constraint.range = &constraint_color_balance_green;
-       descriptor.type = SANE_TYPE_INT;
-       descriptor.unit = SANE_UNIT_NONE;
-       descriptor.size = sizeof(SANE_Int);
+
+       SANE_Option_Descriptor descriptor = {
+               "colorbalancegreen",
+               "colorbalancegreen",
+               "colorbalancegreen",
+               SANE_TYPE_INT,
+               SANE_UNIT_NONE,
+               sizeof(SANE_Int),
+               SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT,
+               SANE_CONSTRAINT_RANGE,
+               {.range = &constraint_color_balance_green}
+       };
 
        return descriptor;
 }
@@ -305,17 +323,18 @@ SANE_Option_Descriptor _kds_s2000w_option_descriptor_color_balance_green()
 SANE_Option_Descriptor _kds_s2000w_option_descriptor_color_balance_blue()
 {
        debug_printf(ALL, "kds_s2000w_option_descriptor_color_balance_blue");
-       SANE_Option_Descriptor descriptor;
-
-       descriptor.name = "color-balance-blue";
-       descriptor.title = "colorbalanceblue";
-       descriptor.desc = "colorbalanceblue";
-       descriptor.cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT;
-       descriptor.constraint_type = SANE_CONSTRAINT_RANGE;
-       descriptor.constraint.range = &constraint_color_balance_blue;
-       descriptor.type = SANE_TYPE_INT;
-       descriptor.unit = SANE_UNIT_NONE;
-       descriptor.size = sizeof(SANE_Int);
+
+       SANE_Option_Descriptor descriptor = {
+               "colorbalanceblue",
+               "colorbalanceblue",
+               "colorbalanceblue",
+               SANE_TYPE_INT,
+               SANE_UNIT_NONE,
+               sizeof(SANE_Int),
+               SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT,
+               SANE_CONSTRAINT_RANGE,
+               {.range = &constraint_color_balance_blue}
+       };
 
        return descriptor;
 }
@@ -323,22 +342,24 @@ SANE_Option_Descriptor _kds_s2000w_option_descriptor_color_balance_blue()
 SANE_Option_Descriptor _kds_s2000w_option_descriptor_foreground_boldness_mode()
 {
        debug_printf(ALL, "kds_s2000w_option_descriptor_foreground_boldness_mode");
-       SANE_Option_Descriptor descriptor;
-
-       descriptor.name = "foreground-boldness-mode";
-       descriptor.title = "Foreground Boldness Mode";
-       descriptor.desc = "Foreground Boldness Mode";
-       descriptor.cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT;
-       descriptor.constraint_type = SANE_CONSTRAINT_STRING_LIST;
-       constraint_foreground_boldness_mode = malloc(sizeof(char*) * 4);
+
+       constraint_foreground_boldness_mode = malloc(sizeof(SANE_String_Const*) * 4);
        constraint_foreground_boldness_mode[0] = "None";
        constraint_foreground_boldness_mode[1] = "AutomaticAdvanced";
        constraint_foreground_boldness_mode[2] = "Automatic";
        constraint_foreground_boldness_mode[3] = NULL;
-       descriptor.constraint.string_list = constraint_foreground_boldness_mode;
-       descriptor.type = SANE_TYPE_STRING;
-       descriptor.unit = SANE_UNIT_NONE;
-       descriptor.size = sizeof(SANE_String) * 50;
+
+       SANE_Option_Descriptor descriptor = {
+               "foreground-boldness-mode",
+               "Foreground Boldness Mode",
+               "Foreground Boldness Mode",
+               SANE_TYPE_STRING,
+               SANE_UNIT_NONE,
+               sizeof(SANE_String_Const*) * 4,
+               SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT,
+               SANE_CONSTRAINT_STRING_LIST,
+               {.string_list = constraint_foreground_boldness_mode}
+       };
 
        return descriptor;
 }
@@ -346,17 +367,18 @@ SANE_Option_Descriptor _kds_s2000w_option_descriptor_foreground_boldness_mode()
 SANE_Option_Descriptor _kds_s2000w_option_descriptor_foreground_boldness_aggressiveness()
 {
        debug_printf(ALL, "kds_s2000w_option_descriptor_foreground_boldness_aggressiveness");
-       SANE_Option_Descriptor descriptor;
-
-       descriptor.name = "foreground-boldness-aggressiveness";
-       descriptor.title = "Foreground Boldness Mode";
-       descriptor.desc = "Foreground Boldness Mode";
-       descriptor.cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT;
-       descriptor.constraint_type = SANE_CONSTRAINT_RANGE;
-       descriptor.constraint.range = &constraint_foreground_boldness_aggressiveness;
-       descriptor.type = SANE_TYPE_INT;
-       descriptor.unit = SANE_UNIT_NONE;
-       descriptor.size = sizeof(SANE_Int);
+
+       SANE_Option_Descriptor descriptor = {
+               "foreground-boldness-aggressiveness",
+               "Foreground Boldness Aggressiveness",
+               "Foreground Boldness Aggressiveness",
+               SANE_TYPE_INT,
+               SANE_UNIT_NONE,
+               sizeof(SANE_Int),
+               SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT,
+               SANE_CONSTRAINT_RANGE,
+               {.range = &constraint_foreground_boldness_aggressiveness}
+       };
 
        return descriptor;
 }
@@ -364,22 +386,24 @@ SANE_Option_Descriptor _kds_s2000w_option_descriptor_foreground_boldness_aggress
 SANE_Option_Descriptor _kds_s2000w_option_descriptor_background_smoothing_mode()
 {
        debug_printf(ALL, "kds_s2000w_option_descriptor_background_smoothing_mode");
-       SANE_Option_Descriptor descriptor;
 
-       descriptor.name = "background-smoothing-mode";
-       descriptor.title = "Background Smoothing Mode";
-       descriptor.desc = "Background Smoothing Mode";
-       descriptor.cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT;
-       descriptor.constraint_type = SANE_CONSTRAINT_STRING_LIST;
        constraint_background_smoothing_mode = malloc(sizeof(char*) * 4);
        constraint_background_smoothing_mode[0] = "None";
        constraint_background_smoothing_mode[1] = "AutomaticAdvanced";
        constraint_background_smoothing_mode[2] = "Automatic";
        constraint_background_smoothing_mode[3] = NULL;
-       descriptor.constraint.string_list = constraint_background_smoothing_mode;
-       descriptor.type = SANE_TYPE_STRING;
-       descriptor.unit = SANE_UNIT_NONE;
-       descriptor.size = sizeof(SANE_String) * 50;
+
+       SANE_Option_Descriptor descriptor = {
+               "background-smoothing-mode",
+               "Background Smoothing Mode",
+               "Background Smoothing Mode",
+               SANE_TYPE_STRING,
+               SANE_UNIT_NONE,
+               sizeof(SANE_String_Const*) * 4,
+               SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT,
+               SANE_CONSTRAINT_STRING_LIST,
+               {.string_list = constraint_background_smoothing_mode}
+       };
 
        return descriptor;
 }
@@ -387,17 +411,18 @@ SANE_Option_Descriptor _kds_s2000w_option_descriptor_background_smoothing_mode()
 SANE_Option_Descriptor _kds_s2000w_option_descriptor_background_smoothing_aggressiveness()
 {
        debug_printf(ALL, "kds_s2000w_option_descriptor_background_smoothing_aggressiveness");
-       SANE_Option_Descriptor descriptor;
-
-       descriptor.name = "background-smoothing-aggressiveness";
-       descriptor.title = "Background Smoothing Aggressivenes";
-       descriptor.desc = "Background Smoothing Aggressivenes";
-       descriptor.cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT;
-       descriptor.constraint_type = SANE_CONSTRAINT_RANGE;
-       descriptor.constraint.range = &constraint_background_smoothing_aggressivness;
-       descriptor.type = SANE_TYPE_INT;
-       descriptor.unit = SANE_UNIT_NONE;
-       descriptor.size = sizeof(SANE_Int);
+
+       SANE_Option_Descriptor descriptor = {
+               "background-smoothing-aggressiveness",
+               "Background Smoothing Aggressivenes",
+               "Background Smoothing Aggressivenes",
+               SANE_TYPE_INT,
+               SANE_UNIT_NONE,
+               sizeof(SANE_Int),
+               SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT,
+               SANE_CONSTRAINT_RANGE,
+               {.range = &constraint_background_smoothing_aggressivness}
+       };
 
        return descriptor;
 }
@@ -405,17 +430,18 @@ SANE_Option_Descriptor _kds_s2000w_option_descriptor_background_smoothing_aggres
 SANE_Option_Descriptor _kds_s2000w_option_descriptor_binarization_contrast()
 {
        debug_printf(ALL, "kds_s2000w_option_descriptor_binarization_contrast");
-       SANE_Option_Descriptor descriptor;
-
-       descriptor.name = SANE_NAME_CONTRAST;
-       descriptor.title = SANE_TITLE_CONTRAST;
-       descriptor.desc = SANE_DESC_CONTRAST;
-       descriptor.cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT;
-       descriptor.constraint_type = SANE_CONSTRAINT_RANGE;
-       descriptor.constraint.range = &constraint_binarization_contrast;
-       descriptor.type = SANE_TYPE_INT;
-       descriptor.unit = SANE_UNIT_NONE;
-       descriptor.size = sizeof(SANE_Int);
+
+       SANE_Option_Descriptor descriptor = {
+               SANE_NAME_CONTRAST,
+               SANE_TITLE_CONTRAST,
+               SANE_DESC_CONTRAST,
+               SANE_TYPE_INT,
+               SANE_UNIT_NONE,
+               sizeof(SANE_Int),
+               SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT,
+               SANE_CONSTRAINT_RANGE,
+               {.range = &constraint_binarization_contrast}
+       };
 
        return descriptor;
 }
@@ -423,20 +449,22 @@ SANE_Option_Descriptor _kds_s2000w_option_descriptor_binarization_contrast()
 SANE_Option_Descriptor _kds_s2000w_option_descriptor_max_document_length()
 {
        debug_printf(ALL, "kds_s2000w_option_descriptor_max_document_length");
-       SANE_Option_Descriptor descriptor;
 
-       descriptor.name = "maxdocumentlength";
-       descriptor.title = "maxdocumentlength";
-       descriptor.desc = "maxdocumentlength";
-       descriptor.cap = SANE_CAP_SOFT_DETECT;
-       descriptor.constraint_type = SANE_CONSTRAINT_STRING_LIST;
        constraint_max_document_length = malloc(sizeof(char*) * 2);
        constraint_max_document_length[0] = "#NoPrimaryControl#";
        constraint_max_document_length[1] = NULL;
-       descriptor.constraint.string_list = constraint_max_document_length;
-       descriptor.type = SANE_TYPE_INT;
-       descriptor.unit = SANE_UNIT_NONE;
-       descriptor.size = sizeof(SANE_Int);
+
+       SANE_Option_Descriptor descriptor = {
+               "maxdocumentlength",
+               "maxdocumentlength",
+               "maxdocumentlength",
+               SANE_TYPE_INT,
+               SANE_UNIT_NONE,
+               sizeof(SANE_Int),
+               SANE_CAP_SOFT_DETECT,
+               SANE_CONSTRAINT_STRING_LIST,
+               {.string_list = constraint_max_document_length}
+       };
 
        return descriptor;
 }
@@ -444,22 +472,24 @@ SANE_Option_Descriptor _kds_s2000w_option_descriptor_max_document_length()
 SANE_Option_Descriptor _kds_s2000w_option_descriptor_scan_source()
 {
        debug_printf(ALL, "kds_s2000w_option_descriptor_scan_source");
-       SANE_Option_Descriptor descriptor;
-
-       descriptor.name = SANE_NAME_SCAN_SOURCE;
-       descriptor.title = SANE_TITLE_SCAN_SOURCE;
-       descriptor.desc = SANE_DESC_SCAN_SOURCE;
-       descriptor.cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT;
-       descriptor.constraint_type = SANE_CONSTRAINT_STRING_LIST;
-       constraint_scan_source = malloc(sizeof(char*) * 4);
+
+       constraint_scan_source = malloc(sizeof(SANE_String_Const*) * 4);
        constraint_scan_source[0] = "DocumentFeeder";
        constraint_scan_source[1] = "Automatic";
        constraint_scan_source[2] = "Flatbed";
        constraint_scan_source[3] = NULL;
-       descriptor.constraint.string_list = constraint_scan_source;
-       descriptor.type = SANE_TYPE_STRING;
-       descriptor.unit = SANE_UNIT_NONE;
-       descriptor.size = sizeof(SANE_String) * 50;
+
+       SANE_Option_Descriptor descriptor = {
+               SANE_NAME_SCAN_SOURCE,
+               SANE_TITLE_SCAN_SOURCE,
+               SANE_DESC_SCAN_SOURCE,
+               SANE_TYPE_STRING,
+               SANE_UNIT_NONE,
+               sizeof(SANE_String_Const*) * 4,
+               SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT,
+               SANE_CONSTRAINT_STRING_LIST,
+               {.string_list = constraint_scan_source}
+       };
 
        return descriptor;
 }
@@ -467,16 +497,17 @@ SANE_Option_Descriptor _kds_s2000w_option_descriptor_scan_source()
 SANE_Option_Descriptor _kds_s2000w_option_descriptor_config_reset()
 {
        debug_printf(ALL, "kds_s2000w_option_descriptor_config_reset");
-       SANE_Option_Descriptor descriptor;
-
-       descriptor.name = "config-reset";
-       descriptor.title = "Konfiguration zuruecksetzen";
-       descriptor.desc = "Laedt die default Konfiguration des Scanners";
-       descriptor.cap = SANE_CAP_SOFT_SELECT;
-       descriptor.constraint_type = SANE_CONSTRAINT_NONE;
-       descriptor.type = SANE_TYPE_BUTTON;
-       descriptor.unit = SANE_UNIT_NONE;
-       descriptor.size = 0;
+
+       SANE_Option_Descriptor descriptor = {
+               "config-reset",
+               "Konfiguration zuruecksetzen",
+               "Laedt die default Konfiguration des Scanners",
+               SANE_TYPE_BUTTON,
+               SANE_UNIT_NONE,
+               0,
+               SANE_CAP_SOFT_SELECT,
+               SANE_CONSTRAINT_NONE
+       };
 
        return descriptor;
 }
index 27576f66ce41bdd9018ad5147af03546df5d85dc..decaa85b90571905a87313a961074de15b5539f7 100644 (file)
@@ -49,6 +49,15 @@ TARGET_LINK_LIBRARIES("kds_s2000w_image_converter_tests_run"
        ${CMOCKA_LIBRARY}
        sane-kds_s2000w_net)
 
+ADD_EXECUTABLE("kds_s2000w_option_descriptor_tests_run"
+       "kds_s2000w_option_descriptor_tests_run.c"
+       "kds_s2000w_option_descriptor_tests.c"
+       "kds_s2000w_client_mock.c")
+ADD_DEPENDENCIES("kds_s2000w_option_descriptor_tests_run" sane-kds_s2000w_net)
+TARGET_LINK_LIBRARIES("kds_s2000w_option_descriptor_tests_run"
+       ${CMOCKA_LIBRARY}
+       sane-kds_s2000w_net)
+
 INCLUDE(CTest)
 ENABLE_TESTING()
 
@@ -62,6 +71,8 @@ ADD_TEST(NAME "kds_s2000w_read_config_tests_run"
        COMMAND "kds_s2000w_read_config_tests_run")
 ADD_TEST(NAME "kds_s2000w_converter_tests_run"
        COMMAND "kds_s2000w_image_converter_tests_run")
+ADD_TEST(NAME "kds_s2000w_option_descriptor_tests_run"
+       COMMAND "kds_s2000w_option_descriptor_tests_run")
 
 ADD_CUSTOM_TARGET("runningtests"
        ALL "ctest" "--verbose"
diff --git a/tests/kds_s2000w_option_descriptor_tests.c b/tests/kds_s2000w_option_descriptor_tests.c
new file mode 100644 (file)
index 0000000..40021b1
--- /dev/null
@@ -0,0 +1,420 @@
+#include <stdlib.h>
+#include <sane/saneopts.h>
+#include "kds_s2000w_option_descriptor_tests.h"
+#include "../src/kds_s2000w_option_descriptors.h"
+#include "../src/kds_s2000w_image_converter.h"
+#include "../src/kds_s2000w_config.h"
+
+void __wrap_load_config(program_config* config, const char* config_stream)
+{
+       config->scanner_url = malloc(sizeof(char) * 28);
+       config->username = malloc(sizeof(char) * 4);
+
+       config->scanner_url = "https://scanner.example.com\0";
+       config->username = "Max\0";
+}
+
+void __wrap_kds_s2000w_convert_tiff_to_pnm(blobdata* in, blobdata* out)
+{
+       return;
+}
+
+int setup(void** state)
+{
+       kds_s2000w_option_descriptor_init_option_descriptors();
+
+       return 0;
+}
+
+int teardown(void **state)
+{
+       kds_s2000w_option_descriptor_free_option_descriptors();
+       return 0;
+}
+
+void kds_s2000w_option_get_descriptor_zero()
+{
+       SANE_Option_Descriptor* option = kds_s2000w_option_get_descriptor(0);
+
+       assert_string_equal(SANE_NAME_NUM_OPTIONS, option->name);
+       assert_string_equal(SANE_TITLE_NUM_OPTIONS, option->title);
+       assert_string_equal(SANE_DESC_NUM_OPTIONS, option->desc);
+       assert_int_equal(SANE_TYPE_INT, option->type);
+       assert_int_equal(SANE_UNIT_NONE, option->unit);
+       assert_int_equal(sizeof(SANE_Int),  option->size);
+       assert_int_equal(SANE_CAP_SOFT_DETECT, option->cap);
+       assert_int_equal(SANE_CONSTRAINT_NONE, option->constraint_type);
+}
+
+void kds_s2000w_option_get_descriptor_one()
+{
+       SANE_Option_Descriptor* option = kds_s2000w_option_get_descriptor(1);
+
+       assert_string_equal(SANE_NAME_STANDARD, option->name);
+       assert_string_equal(SANE_TITLE_STANDARD, option->title);
+       assert_string_equal(SANE_DESC_STANDARD, option->desc);
+       assert_int_equal(SANE_TYPE_GROUP, option->type);
+       assert_int_equal(SANE_UNIT_NONE, option->unit);
+       assert_int_equal(0,  option->size);
+       assert_int_equal(SANE_CAP_SOFT_DETECT, option->cap);
+       assert_int_equal(SANE_CONSTRAINT_NONE, option->constraint_type);
+}
+
+void kds_s2000w_option_get_descriptor_two()
+{
+       SANE_Option_Descriptor* option = kds_s2000w_option_get_descriptor(2);
+
+       assert_string_equal(SANE_NAME_SCAN_SOURCE, option->name);
+       assert_string_equal(SANE_TITLE_SCAN_SOURCE, option->title);
+       assert_string_equal(SANE_DESC_SCAN_SOURCE, option->desc);
+       assert_int_equal(SANE_TYPE_STRING, option->type);
+       assert_int_equal(SANE_UNIT_NONE, option->unit);
+       assert_int_equal(sizeof(SANE_String_Const*) * 4,  option->size);
+       assert_int_equal(SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT, option->cap);
+       assert_int_equal(SANE_CONSTRAINT_STRING_LIST, option->constraint_type);
+       assert_string_equal("DocumentFeeder", option->constraint.string_list[0]);
+       assert_string_equal("Automatic", option->constraint.string_list[1]);
+       assert_string_equal("Flatbed", option->constraint.string_list[2]);
+       assert_null(option->constraint.string_list[3]);
+}
+
+void kds_s2000w_option_get_descriptor_three()
+{
+       SANE_Option_Descriptor* option = kds_s2000w_option_get_descriptor(3);
+
+       assert_string_equal(SANE_NAME_SCAN_MODE, option->name);
+       assert_string_equal(SANE_TITLE_SCAN_MODE, option->title);
+       assert_string_equal(SANE_DESC_SCAN_MODE, option->desc);
+       assert_int_equal(SANE_TYPE_STRING, option->type);
+       assert_int_equal(SANE_UNIT_NONE, option->unit);
+       assert_int_equal(sizeof(SANE_String_Const*) * 4,  option->size);
+       assert_int_equal(SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT, option->cap);
+       assert_int_equal(SANE_CONSTRAINT_STRING_LIST, option->constraint_type);
+       assert_string_equal("Color", option->constraint.string_list[0]);
+       assert_string_equal("Gray", option->constraint.string_list[1]);
+       assert_string_equal("BW", option->constraint.string_list[2]);
+       assert_null(option->constraint.string_list[3]);
+}
+
+void kds_s2000w_option_get_descriptor_four()
+{
+       SANE_Option_Descriptor* option = kds_s2000w_option_get_descriptor(4);
+
+       assert_string_equal(SANE_NAME_SCAN_RESOLUTION, option->name);
+       assert_string_equal(SANE_TITLE_SCAN_RESOLUTION, option->title);
+       assert_string_equal(SANE_DESC_SCAN_RESOLUTION, option->desc);
+       assert_int_equal(SANE_TYPE_INT, option->type);
+       assert_int_equal(SANE_UNIT_DPI, option->unit);
+       assert_int_equal(sizeof(SANE_Int),  option->size);
+       assert_int_equal(SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT, option->cap);
+       assert_int_equal(SANE_CONSTRAINT_WORD_LIST, option->constraint_type);
+       assert_int_equal(2, option->constraint.word_list[0]);
+       assert_int_equal(200, option->constraint.word_list[1]);
+       assert_int_equal(300, option->constraint.word_list[2]);
+}
+
+void kds_s2000w_option_get_descriptor_five()
+{
+       SANE_Option_Descriptor* option = kds_s2000w_option_get_descriptor(5);
+
+       assert_string_equal("scanside", option->name);
+       assert_string_equal("Duplex Mode", option->title);
+       assert_string_equal("Duplex Mode", option->desc);
+       assert_int_equal(SANE_TYPE_STRING, option->type);
+       assert_int_equal(SANE_UNIT_NONE, option->unit);
+       assert_int_equal(sizeof(SANE_String_Const*) * 3,  option->size);
+       assert_int_equal(SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT, option->cap);
+       assert_int_equal(SANE_CONSTRAINT_STRING_LIST, option->constraint_type);
+       assert_string_equal("Simplex", option->constraint.string_list[0]);
+       assert_string_equal("Duplex", option->constraint.string_list[1]);
+       assert_null(option->constraint.string_list[2]);
+}
+
+void kds_s2000w_option_get_descriptor_six()
+{
+       SANE_Option_Descriptor* option = kds_s2000w_option_get_descriptor(6);
+
+       assert_string_equal(SANE_NAME_GEOMETRY, option->name);
+       assert_string_equal(SANE_TITLE_GEOMETRY, option->title);
+       assert_string_equal(SANE_DESC_GEOMETRY, option->desc);
+       assert_int_equal(SANE_TYPE_GROUP, option->type);
+       assert_int_equal(SANE_UNIT_NONE, option->unit);
+       assert_int_equal(0,  option->size);
+       assert_int_equal(SANE_CAP_SOFT_DETECT, option->cap);
+       assert_int_equal(SANE_CONSTRAINT_NONE, option->constraint_type);
+}
+
+void kds_s2000w_option_get_descriptor_seven()
+{
+       SANE_Option_Descriptor* option = kds_s2000w_option_get_descriptor(7);
+
+       assert_string_equal("skip-blank-pages", option->name);
+       assert_string_equal("Blank Image Deletion Mode", option->title);
+       assert_string_equal("Blank Image Deletion Mode", option->desc);
+       assert_int_equal(SANE_TYPE_BOOL, option->type);
+       assert_int_equal(SANE_UNIT_NONE, option->unit);
+       assert_int_equal(sizeof(SANE_Bool),  option->size);
+       assert_int_equal(SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT, option->cap);
+       assert_int_equal(SANE_CONSTRAINT_NONE, option->constraint_type);
+}
+
+void kds_s2000w_option_get_descriptor_eight()
+{
+       SANE_Option_Descriptor* option = kds_s2000w_option_get_descriptor(8);
+
+       assert_string_equal("colordrop", option->name);
+       assert_string_equal("colordrop", option->title);
+       assert_string_equal("colordrop", option->desc);
+       assert_int_equal(SANE_TYPE_STRING, option->type);
+       assert_int_equal(SANE_UNIT_NONE, option->unit);
+       assert_int_equal(sizeof(SANE_String_Const*) * 9,  option->size);
+       assert_int_equal(SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT, option->cap);
+       assert_int_equal(SANE_CONSTRAINT_STRING_LIST, option->constraint_type);
+       assert_string_equal("None", option->constraint.string_list[0]);
+       assert_string_equal("Red", option->constraint.string_list[1]);
+       assert_string_equal("Green", option->constraint.string_list[2]);
+       assert_string_equal("Blue", option->constraint.string_list[3]);
+       assert_string_equal("Orange", option->constraint.string_list[4]);
+       assert_string_equal("OrangeAndRed", option->constraint.string_list[5]);
+       assert_string_equal("Predominant", option->constraint.string_list[6]);
+       assert_string_equal("Multiple", option->constraint.string_list[7]);
+       assert_null(option->constraint.string_list[8]);
+}
+
+void kds_s2000w_option_get_descriptor_nine()
+{
+       SANE_Option_Descriptor* option = kds_s2000w_option_get_descriptor(9);
+
+       assert_string_equal("colordropoutaggressiveness", option->name);
+       assert_string_equal("colordropoutaggressiveness", option->title);
+       assert_string_equal("colordropoutaggressiveness", option->desc);
+       assert_int_equal(SANE_TYPE_INT, option->type);
+       assert_int_equal(SANE_UNIT_NONE, option->unit);
+       assert_int_equal(sizeof(SANE_Int),  option->size);
+       assert_int_equal(SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT, option->cap);
+       assert_int_equal(SANE_CONSTRAINT_RANGE, option->constraint_type);
+       assert_int_equal(-10, option->constraint.range->min);
+       assert_int_equal(10, option->constraint.range->max);
+       assert_int_equal(1, option->constraint.range->quant);
+}
+
+void kds_s2000w_option_get_descriptor_ten()
+{
+       SANE_Option_Descriptor* option = kds_s2000w_option_get_descriptor(10);
+
+       assert_string_equal("colorautobrightnessmode", option->name);
+       assert_string_equal("colorautobrightnessmode", option->title);
+       assert_string_equal("colorautobrightnessmode", option->desc);
+       assert_int_equal(SANE_TYPE_STRING, option->type);
+       assert_int_equal(SANE_UNIT_NONE, option->unit);
+       assert_int_equal(sizeof(SANE_String_Const*) * 3,  option->size);
+       assert_int_equal(SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT, option->cap);
+       assert_int_equal(SANE_CONSTRAINT_STRING_LIST, option->constraint_type);
+       assert_string_equal("None", option->constraint.string_list[0]);
+       assert_string_equal("Automatic", option->constraint.string_list[1]);
+       assert_null(option->constraint.string_list[2]);
+}
+
+void kds_s2000w_option_get_descriptor_eleven()
+{
+       SANE_Option_Descriptor* option = kds_s2000w_option_get_descriptor(11);
+
+       assert_string_equal("colorbalancemode", option->name);
+       assert_string_equal("colorbalancemode", option->title);
+       assert_string_equal("colorbalancemode", option->desc);
+       assert_int_equal(SANE_TYPE_STRING, option->type);
+       assert_int_equal(SANE_UNIT_NONE, option->unit);
+       assert_int_equal(sizeof(SANE_String_Const*) * 5,  option->size);
+       assert_int_equal(SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT, option->cap);
+       assert_int_equal(SANE_CONSTRAINT_STRING_LIST, option->constraint_type);
+       assert_string_equal("None", option->constraint.string_list[0]);
+       assert_string_equal("Manual", option->constraint.string_list[1]);
+       assert_string_equal("Automatic", option->constraint.string_list[2]);
+       assert_string_equal("AutomaticAdvanced", option->constraint.string_list[3]);
+       assert_null(option->constraint.string_list[4]);
+}
+
+void kds_s2000w_option_get_descriptor_twelve()
+{
+       SANE_Option_Descriptor* option = kds_s2000w_option_get_descriptor(12);
+
+       assert_string_equal("colorbalanceaggressiveness", option->name);
+       assert_string_equal("colorbalanceaggressiveness", option->title);
+       assert_string_equal("colorbalanceaggressiveness", option->desc);
+       assert_int_equal(SANE_TYPE_INT, option->type);
+       assert_int_equal(SANE_UNIT_NONE, option->unit);
+       assert_int_equal(sizeof(SANE_Int),  option->size);
+       assert_int_equal(SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT, option->cap);
+       assert_int_equal(SANE_CONSTRAINT_RANGE, option->constraint_type);
+       assert_int_equal(-2, option->constraint.range->min);
+       assert_int_equal(2, option->constraint.range->max);
+       assert_int_equal(1, option->constraint.range->quant);
+}
+
+void kds_s2000w_option_get_descriptor_thirdteen()
+{
+       SANE_Option_Descriptor* option = kds_s2000w_option_get_descriptor(13);
+
+       assert_string_equal("colorbalancered", option->name);
+       assert_string_equal("colorbalancered", option->title);
+       assert_string_equal("colorbalancered", option->desc);
+       assert_int_equal(SANE_TYPE_INT, option->type);
+       assert_int_equal(SANE_UNIT_NONE, option->unit);
+       assert_int_equal(sizeof(SANE_Int),  option->size);
+       assert_int_equal(SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT, option->cap);
+       assert_int_equal(SANE_CONSTRAINT_RANGE, option->constraint_type);
+       assert_int_equal(-50, option->constraint.range->min);
+       assert_int_equal(50, option->constraint.range->max);
+       assert_int_equal(1, option->constraint.range->quant);
+}
+
+void kds_s2000w_option_get_descriptor_fourteen()
+{
+       SANE_Option_Descriptor* option = kds_s2000w_option_get_descriptor(14);
+
+       assert_string_equal("colorbalancegreen", option->name);
+       assert_string_equal("colorbalancegreen", option->title);
+       assert_string_equal("colorbalancegreen", option->desc);
+       assert_int_equal(SANE_TYPE_INT, option->type);
+       assert_int_equal(SANE_UNIT_NONE, option->unit);
+       assert_int_equal(sizeof(SANE_Int),  option->size);
+       assert_int_equal(SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT, option->cap);
+       assert_int_equal(SANE_CONSTRAINT_RANGE, option->constraint_type);
+       assert_int_equal(-50, option->constraint.range->min);
+       assert_int_equal(50, option->constraint.range->max);
+       assert_int_equal(1, option->constraint.range->quant);
+}
+
+void kds_s2000w_option_get_descriptor_fifteen()
+{
+       SANE_Option_Descriptor* option = kds_s2000w_option_get_descriptor(15);
+
+       assert_string_equal("colorbalanceblue", option->name);
+       assert_string_equal("colorbalanceblue", option->title);
+       assert_string_equal("colorbalanceblue", option->desc);
+       assert_int_equal(SANE_TYPE_INT, option->type);
+       assert_int_equal(SANE_UNIT_NONE, option->unit);
+       assert_int_equal(sizeof(SANE_Int),  option->size);
+       assert_int_equal(SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT, option->cap);
+       assert_int_equal(SANE_CONSTRAINT_RANGE, option->constraint_type);
+       assert_int_equal(-50, option->constraint.range->min);
+       assert_int_equal(50, option->constraint.range->max);
+       assert_int_equal(1, option->constraint.range->quant);
+}
+
+void kds_s2000w_option_get_descriptor_sixteen()
+{
+       SANE_Option_Descriptor* option = kds_s2000w_option_get_descriptor(16);
+
+       assert_string_equal("foreground-boldness-mode", option->name);
+       assert_string_equal("Foreground Boldness Mode", option->title);
+       assert_string_equal("Foreground Boldness Mode", option->desc);
+       assert_int_equal(SANE_TYPE_STRING, option->type);
+       assert_int_equal(SANE_UNIT_NONE, option->unit);
+       assert_int_equal(sizeof(SANE_String_Const*) * 4, option->size);
+       assert_int_equal(SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT, option->cap);
+       assert_int_equal(SANE_CONSTRAINT_STRING_LIST, option->constraint_type);
+       assert_string_equal("None", option->constraint.string_list[0]);
+       assert_string_equal("AutomaticAdvanced", option->constraint.string_list[1]);
+       assert_string_equal("Automatic", option->constraint.string_list[2]);
+       assert_null(option->constraint.string_list[3]);
+}
+
+void kds_s2000w_option_get_descriptor_seventeen()
+{
+       SANE_Option_Descriptor* option = kds_s2000w_option_get_descriptor(17);
+
+       assert_string_equal("foreground-boldness-aggressiveness", option->name);
+       assert_string_equal("Foreground Boldness Aggressiveness", option->title);
+       assert_string_equal("Foreground Boldness Aggressiveness", option->desc);
+       assert_int_equal(SANE_TYPE_INT, option->type);
+       assert_int_equal(SANE_UNIT_NONE, option->unit);
+       assert_int_equal(sizeof(SANE_Int), option->size);
+       assert_int_equal(SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT, option->cap);
+       assert_int_equal(SANE_CONSTRAINT_RANGE, option->constraint_type);
+       assert_int_equal(-10, option->constraint.range->min);
+       assert_int_equal(10, option->constraint.range->max);
+       assert_int_equal(1, option->constraint.range->quant);
+}
+
+void kds_s2000w_option_get_descriptor_eightteen()
+{
+       SANE_Option_Descriptor* option = kds_s2000w_option_get_descriptor(18);
+
+       assert_string_equal("background-smoothing-mode", option->name);
+       assert_string_equal("Background Smoothing Mode", option->title);
+       assert_string_equal("Background Smoothing Mode", option->desc);
+       assert_int_equal(SANE_TYPE_STRING, option->type);
+       assert_int_equal(SANE_UNIT_NONE, option->unit);
+       assert_int_equal(sizeof(SANE_String_Const*) * 4, option->size);
+       assert_int_equal(SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT, option->cap);
+       assert_int_equal(SANE_CONSTRAINT_STRING_LIST, option->constraint_type);
+       assert_string_equal("None", option->constraint.string_list[0]);
+       assert_string_equal("AutomaticAdvanced", option->constraint.string_list[1]);
+       assert_string_equal("Automatic", option->constraint.string_list[2]);
+       assert_null(option->constraint.string_list[3]);
+}
+
+void kds_s2000w_option_get_descriptor_nineteen()
+{
+       SANE_Option_Descriptor* option = kds_s2000w_option_get_descriptor(19);
+
+       assert_string_equal("background-smoothing-aggressiveness", option->name);
+       assert_string_equal("Background Smoothing Aggressivenes", option->title);
+       assert_string_equal("Background Smoothing Aggressivenes", option->desc);
+       assert_int_equal(SANE_TYPE_INT, option->type);
+       assert_int_equal(SANE_UNIT_NONE, option->unit);
+       assert_int_equal(sizeof(SANE_Int), option->size);
+       assert_int_equal(SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT, option->cap);
+       assert_int_equal(SANE_CONSTRAINT_RANGE, option->constraint_type);
+       assert_int_equal(-10, option->constraint.range->min);
+       assert_int_equal(10, option->constraint.range->max);
+       assert_int_equal(1, option->constraint.range->quant);
+}
+
+void kds_s2000w_option_get_descriptor_twenty()
+{
+       SANE_Option_Descriptor* option = kds_s2000w_option_get_descriptor(20);
+
+       assert_string_equal(SANE_NAME_CONTRAST, option->name);
+       assert_string_equal(SANE_TITLE_CONTRAST, option->title);
+       assert_string_equal(SANE_DESC_CONTRAST, option->desc);
+       assert_int_equal(SANE_TYPE_INT, option->type);
+       assert_int_equal(SANE_UNIT_NONE, option->unit);
+       assert_int_equal(sizeof(SANE_Int), option->size);
+       assert_int_equal(SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT, option->cap);
+       assert_int_equal(SANE_CONSTRAINT_RANGE, option->constraint_type);
+       assert_int_equal(-50, option->constraint.range->min);
+       assert_int_equal(50, option->constraint.range->max);
+       assert_int_equal(1, option->constraint.range->quant);
+}
+
+void kds_s2000w_option_get_descriptor_twentyone()
+{
+       SANE_Option_Descriptor* option = kds_s2000w_option_get_descriptor(21);
+
+       assert_string_equal("maxdocumentlength", option->name);
+       assert_string_equal("maxdocumentlength", option->title);
+       assert_string_equal("maxdocumentlength", option->desc);
+       assert_int_equal(SANE_TYPE_INT, option->type);
+       assert_int_equal(SANE_UNIT_NONE, option->unit);
+       assert_int_equal(sizeof(SANE_Int), option->size);
+       assert_int_equal(SANE_CAP_SOFT_DETECT, option->cap);
+       assert_int_equal(SANE_CONSTRAINT_STRING_LIST, option->constraint_type);
+       assert_string_equal("#NoPrimaryControl#", option->constraint.string_list[0]);
+       assert_null(option->constraint.string_list[1]);
+}
+
+void kds_s2000w_option_get_descriptor_twentytwo()
+{
+       SANE_Option_Descriptor* option = kds_s2000w_option_get_descriptor(22);
+
+       assert_string_equal("config-reset", option->name);
+       assert_string_equal("Konfiguration zuruecksetzen", option->title);
+       assert_string_equal("Laedt die default Konfiguration des Scanners", option->desc);
+       assert_int_equal(SANE_TYPE_BUTTON, option->type);
+       assert_int_equal(SANE_UNIT_NONE, option->unit);
+       assert_int_equal(0, option->size);
+       assert_int_equal(SANE_CAP_SOFT_SELECT, option->cap);
+       assert_int_equal(SANE_CONSTRAINT_NONE, option->constraint_type);
+}
\ No newline at end of file
diff --git a/tests/kds_s2000w_option_descriptor_tests.h b/tests/kds_s2000w_option_descriptor_tests.h
new file mode 100644 (file)
index 0000000..2cddea1
--- /dev/null
@@ -0,0 +1,34 @@
+#ifndef KDS_S2000W_OPTION_DESCRIPTOR_TESTS_H
+#define KDS_S2000W_OPTION_DESCRIPTOR_TESTS_H
+#include <stdarg.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <setjmp.h>
+#include <cmocka.h>
+
+int setup(void** state);
+int teardown(void** state);
+void kds_s2000w_option_get_descriptor_zero();
+void kds_s2000w_option_get_descriptor_one();
+void kds_s2000w_option_get_descriptor_two();
+void kds_s2000w_option_get_descriptor_three();
+void kds_s2000w_option_get_descriptor_four();
+void kds_s2000w_option_get_descriptor_five();
+void kds_s2000w_option_get_descriptor_six();
+void kds_s2000w_option_get_descriptor_seven();
+void kds_s2000w_option_get_descriptor_eight();
+void kds_s2000w_option_get_descriptor_nine();
+void kds_s2000w_option_get_descriptor_ten();
+void kds_s2000w_option_get_descriptor_eleven();
+void kds_s2000w_option_get_descriptor_twelve();
+void kds_s2000w_option_get_descriptor_thirdteen();
+void kds_s2000w_option_get_descriptor_fourteen();
+void kds_s2000w_option_get_descriptor_fifteen();
+void kds_s2000w_option_get_descriptor_sixteen();
+void kds_s2000w_option_get_descriptor_seventeen();
+void kds_s2000w_option_get_descriptor_eightteen();
+void kds_s2000w_option_get_descriptor_nineteen();
+void kds_s2000w_option_get_descriptor_twenty();
+void kds_s2000w_option_get_descriptor_twentyone();
+void kds_s2000w_option_get_descriptor_twentytwo();
+#endif
\ No newline at end of file
diff --git a/tests/kds_s2000w_option_descriptor_tests_run.c b/tests/kds_s2000w_option_descriptor_tests_run.c
new file mode 100644 (file)
index 0000000..aeb089d
--- /dev/null
@@ -0,0 +1,32 @@
+#include "kds_s2000w_option_descriptor_tests.h"
+
+int main()
+{
+       const struct CMUnitTest option_descriptor_tests[] = {
+               cmocka_unit_test_setup_teardown(kds_s2000w_option_get_descriptor_zero, setup, teardown),
+               cmocka_unit_test_setup_teardown(kds_s2000w_option_get_descriptor_one, setup, teardown),
+               cmocka_unit_test_setup_teardown(kds_s2000w_option_get_descriptor_two, setup, teardown),
+               cmocka_unit_test_setup_teardown(kds_s2000w_option_get_descriptor_three, setup, teardown),
+               cmocka_unit_test_setup_teardown(kds_s2000w_option_get_descriptor_four, setup, teardown),
+               cmocka_unit_test_setup_teardown(kds_s2000w_option_get_descriptor_five, setup, teardown),
+               cmocka_unit_test_setup_teardown(kds_s2000w_option_get_descriptor_six, setup, teardown),
+               cmocka_unit_test_setup_teardown(kds_s2000w_option_get_descriptor_seven, setup, teardown),
+               cmocka_unit_test_setup_teardown(kds_s2000w_option_get_descriptor_eight, setup, teardown),
+               cmocka_unit_test_setup_teardown(kds_s2000w_option_get_descriptor_nine, setup, teardown),
+               cmocka_unit_test_setup_teardown(kds_s2000w_option_get_descriptor_ten, setup, teardown),
+               cmocka_unit_test_setup_teardown(kds_s2000w_option_get_descriptor_eleven, setup, teardown),
+               cmocka_unit_test_setup_teardown(kds_s2000w_option_get_descriptor_twelve, setup, teardown),
+               cmocka_unit_test_setup_teardown(kds_s2000w_option_get_descriptor_thirdteen, setup, teardown),
+               cmocka_unit_test_setup_teardown(kds_s2000w_option_get_descriptor_fourteen, setup, teardown),
+               cmocka_unit_test_setup_teardown(kds_s2000w_option_get_descriptor_fifteen, setup, teardown),
+               cmocka_unit_test_setup_teardown(kds_s2000w_option_get_descriptor_sixteen, setup, teardown),
+               cmocka_unit_test_setup_teardown(kds_s2000w_option_get_descriptor_seventeen, setup, teardown),
+               cmocka_unit_test_setup_teardown(kds_s2000w_option_get_descriptor_eightteen, setup, teardown),
+               cmocka_unit_test_setup_teardown(kds_s2000w_option_get_descriptor_nineteen, setup, teardown),
+               cmocka_unit_test_setup_teardown(kds_s2000w_option_get_descriptor_twenty, setup, teardown),
+               cmocka_unit_test_setup_teardown(kds_s2000w_option_get_descriptor_twentyone, setup, teardown),
+               cmocka_unit_test_setup_teardown(kds_s2000w_option_get_descriptor_twentytwo, setup, teardown)
+       };
+
+       return cmocka_run_group_tests(option_descriptor_tests, NULL, NULL);
+}
\ No newline at end of file