|
GnuCash 2.4.99
|
00001 #include "config.h" 00002 #include <glib.h> 00003 #include <glib/gstdio.h> 00004 #include <unistd.h> 00005 #include <sys/types.h> 00006 #include <sys/stat.h> 00007 #include <dirent.h> 00008 #include <errno.h> 00009 #include <stdlib.h> 00010 #include <string.h> 00011 00012 #include "test-stuff.h" 00013 #include "test-engine-stuff.h" 00014 #include "test-file-stuff.h" 00015 00016 #include "gnc-engine.h" 00017 #include "TransLog.h" 00018 00019 #include "io-gncxml-v2.h" 00020 00021 const char *possible_envs[] = 00022 { 00023 "C", "af", "ar", "az", "be", "bg", "bg_BG.cp1251", "br", "ca", "cs", 00024 "cy", "cz", "da", "de", "de_AT", "el", "en", "en_AU", "en_CA", "en_GB", 00025 "eo", "es", "es_DO", "es_ES", "es_GT", "es_HN", "es_MX", "es_PA", 00026 "es_PE", "es_SV", "et", "et_EE", "eu", "fi", "fi_FI", "fr", "ga", 00027 "gd", "gl", "gr", "gv", "he", "hr", "hu", "id", "is", "it", "ja", 00028 "ja_JP", "ja_JP.SJIS", "ko", "ko_KR", "ko_KR.eucKR", "kw", "l10n", 00029 "locale.alias", "lt", "nl", "nn", "no", "no@nynorsk", "no_NO", "no_NY", 00030 "pl", "pl_PL", "pt", "pt_BR", "pt_PT", "ro", "ru", "ru_RU", "rudos", 00031 "rukoi8", "ruwin", "sk", "sl", "sl_SI", "sp", "sr", "sr_YU", "sv", "ta", 00032 "tr", "uk", "vi", "vi_VN.VISCII", "wa", "zh", "zh_CN", "zh_CN.EUC", 00033 "zh_CN.GB2312", "zh_TW", "zh_TW.Big5", 00034 NULL 00035 }; 00036 00037 const char *possible_vars[] = 00038 { 00039 "LANG", "LC_CTYPE", "LC_COLLATE", "LC_TIME", "LC_NUMERIC", 00040 "LC_MONETARY", "LC_MESSAGES", 00041 NULL 00042 }; 00043 00044 const char *diff_command = "cmp %s %s"; 00045 const char *test_dir = "test-files/xml2"; 00046 const char *base_env = "C"; 00047 00048 static char* 00049 gen_new_file_name(const char *filename, const char *env) 00050 { 00051 char *ret; 00052 00053 ret = g_new(char, strlen(filename) + strlen(env) + 2); 00054 strcpy(ret, filename); 00055 strcat(ret, "-"); 00056 strcat(ret, env); 00057 00058 return ret; 00059 } 00060 00061 static int 00062 run_command_get_return(const char *command) 00063 { 00064 return system(command); 00065 } 00066 00067 static char * 00068 test_file(const char *filename) 00069 { 00070 int i; 00071 00072 for (i = 0; possible_envs[i] != NULL; i++) 00073 { 00074 QofBackendError err; 00075 QofSession *session; 00076 char *cmd; 00077 char *new_file = gen_new_file_name(filename, possible_envs[i]); 00078 QofSession *new_session; 00079 00080 session = qof_session_new(); 00081 00082 qof_session_begin(session, filename, TRUE, FALSE, FALSE); 00083 err = qof_session_pop_error (session); 00084 if (err) 00085 { 00086 qof_session_destroy(session); 00087 return g_strdup_printf("qof_session_begin errorid %d", err); 00088 } 00089 00090 qof_session_load(session, NULL); 00091 err = qof_session_pop_error (session); 00092 if (err) 00093 { 00094 qof_session_destroy(session); 00095 return g_strdup_printf("qof_session_load errorid %d", err); 00096 } 00097 00098 if (!g_setenv("LANG", possible_envs[i], TRUE)) 00099 return g_strdup("setenv for LANG"); 00100 00101 new_session = qof_session_new(); 00102 00103 qof_session_begin(new_session, new_file, FALSE, FALSE, FALSE); 00104 err = qof_session_pop_error (new_session); 00105 if (err) 00106 { 00107 g_free(new_file); 00108 qof_session_destroy(session); 00109 qof_session_destroy(new_session); 00110 return g_strdup_printf("qof_session_begin 2 with LANG=%s", 00111 possible_envs[i]); 00112 } 00113 00114 qof_session_save(new_session, NULL); 00115 00116 cmd = g_strdup_printf(diff_command, filename, new_file); 00117 00118 if (run_command_get_return(cmd) != 0) 00119 { 00120 g_free(cmd); 00121 g_free(new_file); 00122 qof_session_destroy(session); 00123 qof_session_destroy(new_session); 00124 return g_strdup_printf("run_command_get_return with LANG=%s", 00125 possible_envs[i]); 00126 } 00127 00128 g_free(new_file); 00129 g_free(cmd); 00130 qof_session_destroy(session); 00131 qof_session_destroy(new_session); 00132 } 00133 00134 return NULL; 00135 } 00136 00137 int 00138 main(int argc, char **argv) 00139 { 00140 GDir *adir; 00141 00142 gnc_engine_init(argc, argv); 00143 xaccLogDisable(); 00144 00145 if ((adir = g_dir_open(test_dir, 0, NULL)) == NULL) 00146 { 00147 failure_args("g_dir_open", __FILE__, __LINE__, 00148 "couldn't open dir %s", test_dir); 00149 } 00150 else 00151 { 00152 const gchar *next_file; 00153 00154 while ((next_file = g_dir_read_name(adir)) != NULL) 00155 { 00156 struct stat file_info; 00157 char* filename; 00158 00159 filename = g_build_filename(test_dir, next_file, (gchar*) NULL); 00160 00161 if (g_stat(filename, &file_info) != 0) 00162 { 00163 failure_args("stat", __FILE__, __LINE__, 00164 "couldn't stat file %s: %s", filename, 00165 strerror(errno)); 00166 g_free(filename); 00167 break; 00168 } 00169 00170 if (!g_setenv("LANG", base_env, TRUE)) 00171 { 00172 failure_args("setenv", __FILE__, __LINE__, 00173 "setenv of LANG failed"); 00174 g_free(filename); 00175 break; 00176 } 00177 00178 if (!S_ISDIR(file_info.st_mode)) 00179 { 00180 char *msg = test_file(filename); 00181 00182 if (msg != NULL) 00183 { 00184 failure_args("test_file", __FILE__, __LINE__, 00185 "failure testing file %s with msg %s", 00186 filename, msg); 00187 } 00188 g_free(msg); 00189 } 00190 00191 g_free(filename); 00192 } 00193 g_dir_close(adir); 00194 } 00195 00196 print_test_results(); 00197 exit(get_rv()); 00198 }
1.7.4