Home | History | Annotate | Download | only in tests
      1 /* GLib testing framework examples and tests
      2  * Copyright (C) 2007 Imendio AB
      3  * Authors: Tim Janik
      4  *
      5  * This work is provided "as is"; redistribution and modification
      6  * in whole or in part, in any medium, physical or electronic is
      7  * permitted without restriction.
      8  *
      9  * This work is distributed in the hope that it will be useful,
     10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
     12  *
     13  * In no event shall the authors or contributors be liable for any
     14  * direct, indirect, incidental, special, exemplary, or consequential
     15  * damages (including, but not limited to, procurement of substitute
     16  * goods or services; loss of use, data, or profits; or business
     17  * interruption) however caused and on any theory of liability, whether
     18  * in contract, strict liability, or tort (including negligence or
     19  * otherwise) arising in any way out of the use of this software, even
     20  * if advised of the possibility of such damage.
     21  */
     22 
     23 #include <glib/glib.h>
     24 #include <gio/gio.h>
     25 #include <stdlib.h>
     26 #include <string.h>
     27 
     28 static void
     29 test_read_chunks (void)
     30 {
     31   const char *data1 = "abcdefghijklmnopqrstuvwxyz";
     32   const char *data2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
     33   const char *result = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
     34   char buffer[128];
     35   gsize bytes_read, pos, len, chunk_size;
     36   GError *error = NULL;
     37   GInputStream *stream;
     38   gboolean res;
     39 
     40   stream = g_memory_input_stream_new ();
     41 
     42   g_memory_input_stream_add_data (G_MEMORY_INPUT_STREAM (stream),
     43                                   data1, -1, NULL);
     44   g_memory_input_stream_add_data (G_MEMORY_INPUT_STREAM (stream),
     45                                   data2, -1, NULL);
     46   len = strlen (data1) + strlen (data2);
     47 
     48   for (chunk_size = 1; chunk_size < len - 1; chunk_size++)
     49     {
     50       pos = 0;
     51       while (pos < len)
     52         {
     53           bytes_read = g_input_stream_read (stream, buffer, chunk_size, NULL, &error);
     54           g_assert_no_error (error);
     55           g_assert_cmpint (bytes_read, ==, MIN (chunk_size, len - pos));
     56           g_assert (strncmp (buffer, result + pos, bytes_read) == 0);
     57 
     58           pos += bytes_read;
     59         }
     60 
     61       g_assert_cmpint (pos, ==, len);
     62       res = g_seekable_seek (G_SEEKABLE (stream), 0, G_SEEK_SET, NULL, &error);
     63       g_assert_cmpint (res, ==, TRUE);
     64       g_assert_no_error (error);
     65     }
     66 }
     67 
     68 int
     69 main (int   argc,
     70       char *argv[])
     71 {
     72   g_type_init ();
     73   g_test_init (&argc, &argv, NULL);
     74 
     75   g_test_add_func ("/memory-input-stream/read-chunks", test_read_chunks);
     76 
     77   return g_test_run();
     78 }
     79