glib/tsrc/glib_nonstif/src/iochannel_test.c
changeset 0 e4d67989cc36
equal deleted inserted replaced
-1:000000000000 0:e4d67989cc36
       
     1 /*
       
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description: 
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 
       
    20 #undef G_DISABLE_ASSERT
       
    21 #undef G_LOG_DOMAIN
       
    22 
       
    23 #include <stdio.h>
       
    24 #include <string.h>
       
    25 #include <errno.h>
       
    26 #include <stdlib.h>
       
    27 #include "glib.h"
       
    28 
       
    29 #define BUFFER_SIZE 1024
       
    30 
       
    31 #ifdef __SYMBIAN32__
       
    32 #include "mrt2_glib2_test.h"
       
    33 #endif /*__SYMBIAN32__*/
       
    34 
       
    35 int iochannel_test()
       
    36 {
       
    37 	GIOChannel *gio_r, *gio_w ;
       
    38     GError *gerr = NULL;
       
    39     GString *buffer;
       
    40     char *filename;
       
    41     char *srcdir = getenv ("srcdir");
       
    42     const gchar encoding[] = "ISO-8859-5";
       
    43     GIOStatus status;
       
    44     GIOFlags flags;
       
    45 	GIOChannelError gio_error;
       
    46 	GIOCondition gio_condition;
       
    47 	const gchar *line_term;
       
    48 	GIOChannel *temp;
       
    49 	char *buf;
       
    50 	gsize size_read,size_written;
       
    51 	GIOError io_error;
       
    52 	gunichar thechar;
       
    53 	
       
    54 	// This call should set gio_error to G_IO_CHANNEL_ERROR_INVAL
       
    55 	gio_error = g_io_channel_error_from_errno(EINVAL);
       
    56 	
       
    57 	g_assert(gio_error == G_IO_CHANNEL_ERROR_INVAL);
       
    58 	
       
    59 	if (!srcdir)
       
    60       srcdir = "c:";
       
    61     filename = g_strconcat (srcdir, G_DIR_SEPARATOR_S, "iochannel-test-infile", NULL);
       
    62     
       
    63     gio_r = g_io_channel_new_file (filename, "r", &gerr);
       
    64     if (gerr)
       
    65       {
       
    66         g_warning ("Unable to open file %s: %s", filename, gerr->message);
       
    67         g_error_free (gerr);
       
    68         return 1;
       
    69       }
       
    70     gio_w = g_io_channel_new_file ("c:\\iochannel-test-outfile", "w", &gerr);
       
    71     if (gerr)
       
    72       {
       
    73         g_warning ("Unable to open file %s: %s", "iochannel-test-outfile", gerr->message);
       
    74         g_error_free (gerr);
       
    75         return 1;
       
    76       }
       
    77 
       
    78 	g_io_channel_set_encoding (gio_r, NULL, &gerr);
       
    79 	
       
    80 	if (gerr)
       
    81       {
       
    82         g_warning (gerr->message);
       
    83         g_error_free (gerr);
       
    84         return 1;
       
    85       }
       
    86 	
       
    87 	g_io_channel_set_buffered(gio_r,TRUE);
       
    88 	
       
    89 	g_assert(gio_r->use_buffer == TRUE);
       
    90 	
       
    91     g_io_channel_set_encoding (gio_r, encoding, &gerr);
       
    92     if (gerr)
       
    93       {
       
    94         g_warning (gerr->message);
       
    95         g_error_free (gerr);
       
    96         return 1;
       
    97       }
       
    98     
       
    99     g_io_channel_set_buffer_size (gio_r, BUFFER_SIZE);
       
   100     
       
   101     // check g_io_channel_get_buffer_size
       
   102     g_assert(g_io_channel_get_buffer_size(gio_r) == BUFFER_SIZE);
       
   103     
       
   104     // check g_io_channel_get_buffered
       
   105     g_assert(g_io_channel_get_buffered(gio_r) == TRUE);
       
   106     
       
   107     //g_io_channel_get_close_on_unref
       
   108     g_assert(g_io_channel_get_close_on_unref(gio_r) == TRUE);
       
   109     
       
   110     //check g_io_channel_get_encoding
       
   111     g_assert(!strcmp(g_io_channel_get_encoding(gio_r),encoding));
       
   112     
       
   113     line_term = g_io_channel_get_line_term(gio_r,NULL);
       
   114     
       
   115     //check g_io_channel_get_line_term
       
   116     g_assert(line_term == NULL);
       
   117     
       
   118     temp = g_io_channel_ref(gio_r);
       
   119     
       
   120     //check g_io_channel_ref
       
   121     g_assert(temp == gio_r && temp->ref_count == 2);
       
   122     
       
   123     g_io_channel_unref(gio_r);
       
   124     
       
   125     temp = NULL;
       
   126     
       
   127     status = g_io_channel_set_flags (gio_r, G_IO_FLAG_NONBLOCK, &gerr);
       
   128     if (status == G_IO_STATUS_ERROR)
       
   129       {
       
   130         g_warning (gerr->message);
       
   131         g_error_free (gerr);
       
   132         gerr = NULL;
       
   133       }
       
   134     flags = g_io_channel_get_flags (gio_r);
       
   135     buffer = g_string_sized_new (BUFFER_SIZE);
       
   136     
       
   137     status = g_io_channel_read_to_end(gio_r,&buf,&size_read,&gerr);
       
   138     
       
   139     // checks g_io_channel_read_to_end
       
   140     g_assert(status == G_IO_STATUS_NORMAL && gerr == NULL);
       
   141     
       
   142     status = g_io_channel_write_chars(gio_w,buf,size_read,&size_written,&gerr);
       
   143     
       
   144     // checks g_io_channel_write_chars
       
   145     g_assert(status == G_IO_STATUS_NORMAL && size_read == size_written && gerr == NULL);
       
   146     
       
   147     switch (status)
       
   148       {
       
   149         case G_IO_STATUS_NORMAL:
       
   150           break;
       
   151         case G_IO_STATUS_ERROR:
       
   152           g_warning (gerr->message);
       
   153           g_error_free (gerr);
       
   154           gerr = NULL;
       
   155           break;
       
   156         default:
       
   157           g_warning ("Abnormal exit from write loop.");
       
   158           break;
       
   159       }
       
   160     
       
   161     gio_condition = g_io_channel_get_buffer_condition(gio_w);
       
   162     
       
   163     //checks g_io_channel_get_buffer_condition
       
   164     g_assert(gio_condition == G_IO_OUT);
       
   165     
       
   166     do
       
   167       status = g_io_channel_flush (gio_w, &gerr);
       
   168     while (status == G_IO_STATUS_AGAIN);
       
   169 
       
   170     if (status == G_IO_STATUS_ERROR)
       
   171       {
       
   172         g_warning (gerr->message);
       
   173         g_error_free (gerr);
       
   174         gerr = NULL;
       
   175       }
       
   176 
       
   177 	
       
   178 	io_error = g_io_channel_seek(gio_r,0,G_SEEK_SET);
       
   179 	
       
   180 	// check g_io_channel_seek
       
   181 	g_assert(io_error == G_IO_ERROR_NONE);
       
   182 	
       
   183 	status = g_io_channel_read_unichar(gio_r,&thechar,&gerr);
       
   184 	
       
   185 	//check g_io_channel_read_unichar
       
   186 	g_assert(status == G_IO_STATUS_NORMAL && gerr == NULL);
       
   187 	
       
   188 	status = g_io_channel_write_unichar(gio_w,thechar,&gerr);
       
   189 	
       
   190 	//check g_io_channel_write_unichar
       
   191 	g_assert(status == G_IO_STATUS_NORMAL && gerr == NULL);
       
   192 	
       
   193 	g_io_channel_set_line_term(gio_r,"L",-1);
       
   194 	
       
   195 	status = g_io_channel_read_line_string (gio_r, buffer, NULL, &gerr);
       
   196 	
       
   197 	//checks g_io_channel_set_line_term
       
   198 	g_assert(buffer->str[strlen(buffer->str)-1] == 'L');
       
   199 	
       
   200 	do
       
   201       status = g_io_channel_flush (gio_w, &gerr);
       
   202     while (status == G_IO_STATUS_AGAIN);
       
   203 
       
   204 	
       
   205 	g_io_channel_unref(gio_r);
       
   206     g_io_channel_unref(gio_w);
       
   207     
       
   208     return 0;
       
   209 
       
   210 }
       
   211 
       
   212 int main()
       
   213 {
       
   214 	int retval;
       
   215 	#ifdef __SYMBIAN32__
       
   216 
       
   217 
       
   218 	g_log_set_handler (NULL,  G_LOG_FLAG_FATAL| G_LOG_FLAG_RECURSION | G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_WARNING | G_LOG_LEVEL_MESSAGE | G_LOG_LEVEL_INFO | G_LOG_LEVEL_DEBUG, &mrtLogHandler, NULL);
       
   219 	#endif /*__SYMBIAN32__*/
       
   220 	
       
   221 	retval = iochannel_test();
       
   222 	
       
   223 	#ifdef __SYMBIAN32__
       
   224   	testResultXml("iochannel_test");
       
   225   	#endif /* EMULATOR */
       
   226   	
       
   227   	return retval;
       
   228 }