• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
test_read_chunks(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
main(int argc,char * argv[])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