00001 #include <eh_utils.h>
00002 #include <check.h>
00003
00004 START_TEST ( test_getline_one_line )
00005 {
00006 gchar* name = NULL;
00007 FILE* fp = eh_open_temp_file( NULL , &name );
00008 gchar* line_str = NULL;
00009 gsize len = 0;
00010 gchar* line_1 = "one line\n";
00011 gint n;
00012
00013 fprintf( fp , "%s" , line_1 );
00014 fclose(fp);
00015
00016 fp = fopen( name , "r" );
00017 n = getline( &line_str , &len , fp );
00018 fclose(fp);
00019
00020 fail_unless( line_str!=NULL );
00021 fail_unless( n==strlen(line_1) );
00022 fail_unless( strlen(line_str)==9 );
00023
00024 fclose(fp);
00025 }
00026 END_TEST
00027
00028 START_TEST ( test_getline_no_new_line )
00029 {
00030 gchar* name = NULL;
00031 FILE* fp = eh_open_temp_file( NULL , &name );
00032 gchar* line_str = NULL;
00033 gsize len = 0;
00034 gchar* line_1 = "no new line char";
00035 gint n;
00036
00037 fprintf( fp , "%s" , line_1 );
00038 fclose(fp);
00039
00040 fp = fopen( name , "r" );
00041 n = getline( &line_str , &len , fp );
00042 fclose(fp);
00043
00044 fail_unless( line_str!=NULL );
00045 fail_unless( n==-1 );
00046 fail_unless( strlen(line_str)==strlen(line_1) );
00047 fail_unless( strcmp(line_str,line_1)==0 );
00048 }
00049 END_TEST
00050
00051 START_TEST ( test_getline_empty_file )
00052 {
00053 gchar* name = NULL;
00054 FILE* fp = eh_open_temp_file( NULL , &name );
00055 gchar* line_str = NULL;
00056 gsize len = 0;
00057 gint n;
00058
00059 fprintf( fp , "" );
00060 fclose(fp);
00061
00062 fp = fopen( name , "r" );
00063 n = getline( &line_str , &len , fp );
00064 fclose(fp);
00065
00066 fail_unless( line_str!=NULL );
00067 fail_unless( n==-1 );
00068 fail_unless( strlen(line_str)==0 );
00069 }
00070 END_TEST
00071
00072 START_TEST ( test_getline_empty_line )
00073 {
00074 gchar* name = NULL;
00075 FILE* fp = eh_open_temp_file( NULL , &name );
00076 gchar* line_str = NULL;
00077 gsize len = 0;
00078 gsize n;
00079
00080 fprintf( fp , "\n" );
00081 fclose(fp);
00082
00083 fp = fopen( name , "r" );
00084 n = getline( &line_str , &len , fp );
00085 fclose(fp);
00086
00087 fail_unless( line_str!=NULL );
00088 fail_unless( n==1 );
00089 fail_unless( strlen(line_str)==1 );
00090 fail_unless( line_str[0] == '\n' );
00091 }
00092 END_TEST
00093
00094 START_TEST ( test_getline_multi_line )
00095 {
00096 gchar* name = NULL;
00097 FILE* fp = eh_open_temp_file( NULL , &name );
00098 gchar* line_str = NULL;
00099 gsize len = 0;
00100 gchar* line_1 = "The first line\n";
00101 gchar* line_2 = "The second line without a new line char";
00102 gint n;
00103
00104 fprintf( fp , "%s" , line_1 );
00105 fprintf( fp , "%s" , line_2 );
00106 fclose(fp);
00107
00108 fp = fopen( name , "r" );
00109 getline( &line_str , &len , fp );
00110 n = getline( &line_str , &len , fp );
00111 fclose(fp);
00112
00113 fail_unless( line_str!=NULL );
00114 fail_unless( n==-1 );
00115 fail_unless( strlen(line_str)==strlen(line_2) );
00116 fail_unless( strcmp( line_str , line_2 ) == 0 );
00117 }
00118 END_TEST
00119
00120 Suite *eh_io_suite( void )
00121 {
00122 Suite *s = suite_create( "Input/output functions" );
00123 TCase *test_case_core = tcase_create( "Core" );
00124
00125 suite_add_tcase( s , test_case_core );
00126
00127 tcase_add_test( test_case_core , test_getline_one_line );
00128 tcase_add_test( test_case_core , test_getline_no_new_line );
00129 tcase_add_test( test_case_core , test_getline_empty_file );
00130 tcase_add_test( test_case_core , test_getline_empty_line );
00131 tcase_add_test( test_case_core , test_getline_multi_line );
00132
00133 return s;
00134 }
00135
00136 int test_io( void )
00137 {
00138 int n;
00139
00140 {
00141 Suite *s = eh_io_suite();
00142 SRunner *sr = srunner_create( s );
00143
00144 srunner_run_all( sr , CK_NORMAL );
00145 n = srunner_ntests_failed( sr );
00146 srunner_free( sr );
00147 }
00148
00149 return n;
00150 }
00151