2003-04-28 Marcus Brinkmann <marcus@g10code.de>
[gpgme.git] / tests / t-data.c
index f7d6e4c..3135dbd 100644 (file)
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
  */
 
+#include <stddef.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <errno.h>
 
-#include "../gpgme/gpgme.h"
+#include <gpgme.h>
 
 #define fail_if_err(a) do { if(a) {                                       \
                                fprintf (stderr, "%s:%d: (%i) GpgmeError " \
@@ -71,13 +72,14 @@ typedef enum
   } round_t;
 
 const char *text = "Just GNU it!\n";
+const char *text2 = "Just GNU it!\nJust GNU it!\n";
 
 int
 read_cb (void *cb_value, char *buffer, size_t count, size_t *nread)
 {
   static int off = 0;
-  round_t round = *((round_t *) cb_value);
   int amount = strlen (text) - off;
+  /*  round_t round = *((round_t *) cb_value);  */
 
   if (!buffer && !count && !nread)
     {
@@ -104,12 +106,10 @@ read_cb (void *cb_value, char *buffer, size_t count, size_t *nread)
 void
 read_once_test (round_t round, GpgmeData data)
 {
-  GpgmeError err;
   char buffer[1024];
-  int read;
+  size_t read;
 
-  err = gpgme_data_read (data, buffer, sizeof (buffer), &read);
-  fail_if_err (err);
+  read = gpgme_data_read (data, buffer, sizeof (buffer));
 
   if (read != strlen (text) || strncmp (buffer, text, strlen (text)))
     {
@@ -118,8 +118,8 @@ read_once_test (round_t round, GpgmeData data)
       exit (1);
     }
 
-  err = gpgme_data_read (data, buffer, sizeof (buffer), &read);
-  if (err != GPGME_EOF)
+  read = gpgme_data_read (data, buffer, sizeof (buffer));
+  if (read)
     {
       fprintf (stderr, "%s:%d: (%i) gpgme_data_read did not signal EOF\n",
               __FILE__, __LINE__, round);
@@ -132,12 +132,12 @@ read_test (round_t round, GpgmeData data)
 {
   GpgmeError err;
   char buffer[1024];
-  int read;
+  size_t read;
 
   if (round == TEST_INOUT_NONE)
     {
-      err = gpgme_data_read (data, buffer, sizeof (buffer), &read);
-      if (!err)
+      read = gpgme_data_read (data, buffer, sizeof (buffer));
+      if (read > 0)
        {
          fprintf (stderr, "%s:%d: (%i) gpgme_data_read succeded unexpectedly\n",
                   __FILE__, __LINE__, round);
@@ -152,8 +152,45 @@ read_test (round_t round, GpgmeData data)
   read_once_test (round, data);
 }
 
+void
+write_test (round_t round, GpgmeData data)
+{
+  GpgmeError err;
+  char buffer[1024];
+  size_t amt;
+
+  amt = gpgme_data_write (data, text, strlen (text));
+  if (amt != strlen (text))
+    fail_if_err (GPGME_File_Error);
+
+  err = gpgme_data_rewind (data);
+  fail_if_err (err);
+
+  if (round == TEST_INOUT_NONE)
+    read_once_test (round, data);
+  else
+    {
+      amt = gpgme_data_read (data, buffer, sizeof (buffer));
+
+      if (amt != strlen (text2) || strncmp (buffer, text2, strlen (text2)))
+       {
+         fprintf (stderr, "%s:%d: (%i) gpgme_data_read returned wrong data\n",
+                  __FILE__, __LINE__, round);
+         exit (1);
+       }
+
+      amt = gpgme_data_read (data, buffer, sizeof (buffer));
+      if (amt)
+       {
+         fprintf (stderr, "%s:%d: (%i) gpgme_data_read did not signal EOF\n",
+                  __FILE__, __LINE__, round);
+         exit (1);
+       }
+    }
+}
+
 int 
-main (int argc, char **argv )
+main (int argc, char **argv)
 {
   round_t round = TEST_INITIALIZER;
   const char *text_filename = make_filename ("t-data-1.txt");
@@ -174,12 +211,6 @@ main (int argc, char **argv )
                       "unexpectedly\n", __FILE__, __LINE__);
              exit (1);
            }
-         if (gpgme_data_get_type (NULL) != GPGME_DATA_TYPE_NONE)
-           {
-             fprintf (stderr, "%s:%d: gpgme_data_get_type on NULL incorrect\n",
-                      __FILE__, __LINE__);
-             exit (1);
-           }
          continue;
        case TEST_INOUT_NONE:
          err = gpgme_data_new (&data);
@@ -205,7 +236,7 @@ main (int argc, char **argv )
        case TEST_INOUT_MEM_FROM_FILE_NO_COPY:
          err = gpgme_data_new_from_file (&data, text_filename, 0);
          /* This is not implemented yet.  */
-         if (err == GPGME_Not_Implemented)
+         if (err == GPGME_Not_Implemented || err == GPGME_Invalid_Value)
            continue;
          break;
        case TEST_INOUT_MEM_FROM_FILE_PART_BY_NAME:
@@ -247,36 +278,9 @@ main (int argc, char **argv )
        }
       fail_if_err (err);
 
-      switch (round)
-       {
-       case TEST_INOUT_NONE:
-         if (gpgme_data_get_type (data) != GPGME_DATA_TYPE_NONE)
-           err = GPGME_Invalid_Type;
-         break;
-       case TEST_INOUT_MEM_NO_COPY:
-       case TEST_INOUT_MEM_COPY:
-       case TEST_INOUT_MEM_FROM_FILE_COPY:
-       case TEST_INOUT_MEM_FROM_FILE_NO_COPY:
-       case TEST_INOUT_MEM_FROM_FILE_PART_BY_NAME:
-       case TEST_INOUT_MEM_FROM_FILE_PART_BY_FP:
-         if (gpgme_data_get_type (data) != GPGME_DATA_TYPE_MEM)
-           err = GPGME_Invalid_Type;
-         break;
-       case TEST_OUT_CB:
-         if (gpgme_data_get_type (data) != GPGME_DATA_TYPE_CB)
-           err = GPGME_Invalid_Type;
-         break;
-       case TEST_INITIALIZER:
-       case TEST_INVALID_ARGUMENT:
-       case TEST_INOUT_MEM_FROM_INEXISTANT_FILE:
-       case TEST_INOUT_MEM_FROM_INEXISTANT_FILE_PART:
-       case TEST_END:
-         /* Shouldn't happen.  */
-         fprintf (stderr, "%s:%d: impossible condition\n", __FILE__, __LINE__);
-         exit (1);
-       }
       read_test (round, data);
-
+      if (round != TEST_OUT_CB)
+       write_test (round, data);
       gpgme_data_release (data);
     }
   return 0;