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 28static void 29test_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 68int 69main (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