summaryrefslogtreecommitdiff
path: root/testsuite/sanei/sanei_check_test.c
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite/sanei/sanei_check_test.c')
-rw-r--r--testsuite/sanei/sanei_check_test.c478
1 files changed, 478 insertions, 0 deletions
diff --git a/testsuite/sanei/sanei_check_test.c b/testsuite/sanei/sanei_check_test.c
new file mode 100644
index 0000000..a149b7e
--- /dev/null
+++ b/testsuite/sanei/sanei_check_test.c
@@ -0,0 +1,478 @@
+#include "../../include/sane/config.h"
+
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <string.h>
+#include <assert.h>
+
+/* sane includes for the sanei functions called */
+#include "../../include/sane/sane.h"
+#include "../../include/sane/saneopts.h"
+#include "../../include/sane/sanei.h"
+
+/* range for constraint */
+static const SANE_Range int_range = {
+ 3, /* minimum */
+ 18, /* maximum */
+ 3 /* quantization */
+};
+
+static SANE_Option_Descriptor int_opt = {
+ SANE_NAME_SCAN_TL_X,
+ SANE_TITLE_SCAN_TL_X,
+ SANE_DESC_SCAN_TL_X,
+ SANE_TYPE_FIXED,
+ SANE_UNIT_MM,
+ sizeof (SANE_Word),
+ 0,
+ SANE_CONSTRAINT_RANGE,
+ {NULL}
+};
+
+#define ARRAY_SIZE 7
+
+static SANE_Option_Descriptor array_opt = {
+ SANE_NAME_SCAN_TL_X,
+ SANE_TITLE_SCAN_TL_X,
+ SANE_DESC_SCAN_TL_X,
+ SANE_TYPE_FIXED,
+ SANE_UNIT_MM,
+ sizeof (SANE_Word) * ARRAY_SIZE,
+ 0,
+ SANE_CONSTRAINT_RANGE,
+ {NULL}
+};
+
+static SANE_Option_Descriptor bool_opt = {
+ SANE_NAME_SCAN_TL_X,
+ SANE_TITLE_SCAN_TL_X,
+ SANE_DESC_SCAN_TL_X,
+ SANE_TYPE_BOOL,
+ SANE_UNIT_MM,
+ sizeof (SANE_Bool),
+ 0,
+ SANE_CONSTRAINT_NONE,
+ {NULL}
+};
+
+static SANE_Option_Descriptor bool_array_opt = {
+ SANE_NAME_SCAN_TL_X,
+ SANE_TITLE_SCAN_TL_X,
+ SANE_DESC_SCAN_TL_X,
+ SANE_TYPE_BOOL,
+ SANE_UNIT_MM,
+ sizeof (SANE_Bool) * ARRAY_SIZE,
+ 0,
+ SANE_CONSTRAINT_NONE,
+ {NULL}
+};
+
+
+#define WORD_SIZE 9
+static const SANE_Int dpi_list[] =
+ { WORD_SIZE - 1, 100, 200, 300, 400, 500, 600, 700, 800 };
+
+static SANE_Option_Descriptor word_array_opt = {
+ SANE_NAME_SCAN_RESOLUTION,
+ SANE_TITLE_SCAN_RESOLUTION,
+ SANE_DESC_SCAN_RESOLUTION,
+ SANE_TYPE_INT,
+ SANE_UNIT_DPI,
+ sizeof (SANE_Word) * WORD_SIZE,
+ 100,
+ SANE_CONSTRAINT_WORD_LIST,
+ {NULL}
+};
+
+/******************************/
+/* start of tests definitions */
+/******************************/
+
+/*
+ * constrained int
+ */
+static void
+min_int_value (void)
+{
+ SANE_Int value = int_range.min;
+ SANE_Status status;
+
+ status = sanei_check_value (&int_opt, &value);
+
+ /* check results */
+ assert (status == SANE_STATUS_GOOD);
+ assert (value == int_range.min);
+}
+
+
+static void
+max_int_value (void)
+{
+ SANE_Int value = int_range.max;
+ SANE_Status status;
+
+ status = sanei_check_value (&int_opt, &value);
+
+ /* check results */
+ assert (status == SANE_STATUS_GOOD);
+ assert (value == int_range.max);
+}
+
+
+static void
+below_min_int_value (void)
+{
+ SANE_Int value = int_range.min - 1;
+ SANE_Status status;
+
+ status = sanei_check_value (&int_opt, &value);
+
+ /* check results */
+ assert (status == SANE_STATUS_INVAL);
+}
+
+
+/* rounded to lower value */
+static void
+quant1_int_value (void)
+{
+ SANE_Int value = int_range.min + 1;
+ SANE_Status status;
+
+ status = sanei_check_value (&int_opt, &value);
+
+ /* check results */
+ assert (status == SANE_STATUS_INVAL);
+}
+
+
+/* close to higher value */
+static void
+quant2_int_value (void)
+{
+ SANE_Int value = int_range.min + int_range.quant - 1;
+ SANE_Status status;
+
+ status = sanei_check_value (&int_opt, &value);
+
+ /* check results */
+ assert (status == SANE_STATUS_INVAL);
+}
+
+
+static void
+in_range_int_value (void)
+{
+ SANE_Int value = int_range.min + int_range.quant;
+ SANE_Status status;
+
+ status = sanei_check_value (&int_opt, &value);
+
+ /* check results */
+ assert (status == SANE_STATUS_GOOD);
+ assert (value == int_range.min + int_range.quant);
+}
+
+
+static void
+above_max_int_value (void)
+{
+ SANE_Int value = int_range.max + 1;
+ SANE_Status status;
+
+ status = sanei_check_value (&int_opt, &value);
+
+ /* check results */
+ assert (status == SANE_STATUS_INVAL);
+}
+
+
+/*
+ * constrained int array
+ */
+static void
+min_int_array (void)
+{
+ SANE_Int value[ARRAY_SIZE];
+ SANE_Status status;
+ int i;
+
+ for (i = 0; i < ARRAY_SIZE; i++)
+ {
+ value[i] = int_range.min;
+ }
+ status = sanei_check_value (&array_opt, value);
+
+ /* check results */
+ assert (status == SANE_STATUS_GOOD);
+ for (i = 0; i < ARRAY_SIZE; i++)
+ {
+ assert (value[i] == int_range.min);
+ }
+}
+
+
+static void
+max_int_array (void)
+{
+ SANE_Int value[ARRAY_SIZE];
+ SANE_Status status;
+ int i;
+
+ for (i = 0; i < ARRAY_SIZE; i++)
+ {
+ value[i] = int_range.max;
+ }
+
+ status = sanei_check_value (&array_opt, value);
+
+ /* check results */
+ assert (status == SANE_STATUS_GOOD);
+ for (i = 0; i < ARRAY_SIZE; i++)
+ {
+ assert (value[i] == int_range.max);
+ }
+}
+
+
+static void
+below_min_int_array (void)
+{
+ SANE_Int value[ARRAY_SIZE];
+ SANE_Status status;
+ int i;
+
+ for (i = 0; i < ARRAY_SIZE; i++)
+ {
+ value[i] = int_range.min - 1;
+ }
+
+ status = sanei_check_value (&array_opt, &value);
+
+ /* check results */
+ assert (status == SANE_STATUS_INVAL);
+}
+
+
+/* rounded to lower value */
+static void
+quant1_int_array (void)
+{
+ SANE_Int value[ARRAY_SIZE];
+ SANE_Status status;
+ int i;
+
+ for (i = 0; i < ARRAY_SIZE; i++)
+ {
+ value[i] = int_range.min + 1;
+ }
+ status = sanei_check_value (&array_opt, &value);
+
+ /* check results */
+ assert (status == SANE_STATUS_INVAL);
+}
+
+
+/* rounded to higher value */
+static void
+quant2_int_array (void)
+{
+ SANE_Int value[ARRAY_SIZE];
+ SANE_Status status;
+ int i;
+
+ for (i = 0; i < ARRAY_SIZE; i++)
+ {
+ value[i] = int_range.min + int_range.quant - 1;
+ }
+ status = sanei_check_value (&array_opt, &value);
+
+ /* check results */
+ assert (status == SANE_STATUS_INVAL);
+}
+
+
+static void
+in_range_int_array (void)
+{
+ SANE_Int value[ARRAY_SIZE];
+ SANE_Status status;
+ int i;
+
+ for (i = 0; i < ARRAY_SIZE; i++)
+ {
+ value[i] = int_range.min + int_range.quant;
+ }
+
+ status = sanei_check_value (&array_opt, &value);
+
+ /* check results */
+ assert (status == SANE_STATUS_GOOD);
+ for (i = 0; i < ARRAY_SIZE; i++)
+ {
+ assert (value[i] == int_range.min + int_range.quant);
+ }
+}
+
+
+static void
+above_max_int_array (void)
+{
+ SANE_Int value[ARRAY_SIZE];
+ SANE_Status status;
+ int i;
+
+ for (i = 0; i < ARRAY_SIZE; i++)
+ {
+ value[i] = int_range.max + 1;
+ }
+ status = sanei_check_value (&array_opt, &value);
+
+ /* check results */
+ assert (status == SANE_STATUS_INVAL);
+}
+
+
+static void
+bool_true (void)
+{
+ SANE_Bool value = SANE_TRUE;
+ SANE_Status status;
+ status = sanei_check_value (&bool_opt, &value);
+
+ /* check results */
+ assert (status == SANE_STATUS_GOOD);
+}
+
+
+static void
+bool_false (void)
+{
+ SANE_Bool value = SANE_FALSE;
+ SANE_Status status;
+ status = sanei_check_value (&bool_opt, &value);
+
+ /* check results */
+ assert (status == SANE_STATUS_GOOD);
+}
+
+
+static void
+wrong_bool (void)
+{
+ SANE_Bool value = 2;
+ SANE_Status status;
+ status = sanei_check_value (&bool_opt, &value);
+
+ /* check results */
+ assert (status == SANE_STATUS_INVAL);
+}
+
+
+static void
+bool_array (void)
+{
+ SANE_Bool value[ARRAY_SIZE];
+ SANE_Status status;
+ int i;
+ for (i = 0; i < ARRAY_SIZE; i++)
+ value[i] = i % 2;
+ status = sanei_check_value (&bool_array_opt, &value);
+
+ /* check results */
+ assert (status == SANE_STATUS_GOOD);
+}
+
+
+static void
+word_array_ok (void)
+{
+ SANE_Word value = 400;
+ SANE_Status status;
+ status = sanei_check_value (&word_array_opt, &value);
+
+ /* check results */
+ assert (status == SANE_STATUS_GOOD);
+}
+
+
+static void
+word_array_nok (void)
+{
+ SANE_Word value = 444;
+ SANE_Status status;
+ status = sanei_check_value (&word_array_opt, &value);
+
+ /* check results */
+ assert (status == SANE_STATUS_INVAL);
+}
+
+static void
+wrong_bool_array (void)
+{
+ SANE_Bool value[ARRAY_SIZE];
+ SANE_Status status;
+ int i;
+ for (i = 0; i < ARRAY_SIZE; i++)
+ value[i] = i % 2;
+ value[3] = 4;
+ status = sanei_check_value (&bool_array_opt, &value);
+
+ /* check results */
+ assert (status == SANE_STATUS_INVAL);
+}
+
+
+/**
+ * run the test suite for sanei_check_value related tests
+ */
+static void
+sanei_check_suite (void)
+{
+ /* to be compatible with pre-C99 compilers */
+ int_opt.constraint.range = &int_range;
+ array_opt.constraint.range = &int_range;
+ word_array_opt.constraint.word_list = dpi_list;
+
+ /* tests for constrained int value */
+ min_int_value ();
+ max_int_value ();
+ below_min_int_value ();
+ above_max_int_value ();
+ quant1_int_value ();
+ quant2_int_value ();
+ in_range_int_value ();
+
+ /* tests for constrained int array */
+ min_int_array ();
+ max_int_array ();
+ below_min_int_array ();
+ above_max_int_array ();
+ quant1_int_array ();
+ quant2_int_array ();
+ in_range_int_array ();
+
+ /* tests for boolean value */
+ bool_true ();
+ bool_false ();
+ wrong_bool ();
+ bool_array ();
+ wrong_bool_array ();
+
+ /* word array test */
+ word_array_ok ();
+ word_array_nok ();
+}
+
+
+int
+main (void)
+{
+ sanei_check_suite ();
+ return 0;
+}
+
+/* vim: set sw=2 cino=>2se-1sn-1s{s^-1st0(0u0 smarttab expandtab: */