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