update tizen source
[framework/messaging/msg-service.git] / test_app / MsgTestConvert.cpp
1 /*
2 *
3 * Copyright (c) 2000-2012 Samsung Electronics Co., Ltd. All Rights Reserved.
4 *
5 * This file is part of msg-service.
6 *
7 * Contact: Jaeyun Jeong <jyjeong@samsung.com>
8 *          Sangkoo Kim <sangkoo.kim@samsung.com>
9 *          Seunghwan Lee <sh.cat.lee@samsung.com>
10 *          SoonMin Jung <sm0415.jung@samsung.com>
11 *          Jae-Young Lee <jy4710.lee@samsung.com>
12 *          KeeBum Kim <keebum.kim@samsung.com>
13 *
14 * PROPRIETARY/CONFIDENTIAL
15 *
16 * This software is the confidential and proprietary information of
17 * SAMSUNG ELECTRONICS ("Confidential Information"). You shall not
18 * disclose such Confidential Information and shall use it only in
19 * accordance with the terms of the license agreement you entered
20 * into with SAMSUNG ELECTRONICS.
21 *
22 * SAMSUNG make no representations or warranties about the suitability
23 * of the software, either express or implied, including but not limited
24 * to the implied warranties of merchantability, fitness for a particular
25 * purpose, or non-infringement. SAMSUNG shall not be liable for any
26 * damages suffered by licensee as a result of using, modifying or
27 * distributing this software or its derivatives.
28 *
29 */
30
31
32 /*==================================================================================================
33                                          INCLUDE FILES
34 ==================================================================================================*/
35 //#include <time.h>
36 #include <iostream>
37 #include <stdio.h>
38 #include <string>
39 #include <stdlib.h>
40 using namespace std;
41
42 #include "MsgConvertText.h"
43 #include "MsgTestConvert.h"
44 #include "main.h"
45
46 /*==================================================================================================
47                                      FUNCTION IMPLEMENTATION
48 ==================================================================================================*/
49
50 #define MAX_DUMP_COLUMN 16
51 void MsgDumpTextToHex(const unsigned char *pText, int length)
52 {
53         printf("\n\n=======================================\n");
54         printf("   Dump Text To Hex - Length :%d\n", length);
55         printf("=======================================");
56
57         for (int i = 0; i < length; i++ )
58         {
59                 if ( i % MAX_DUMP_COLUMN == 0 )
60                 {
61                         printf("\n\t");
62                 }
63
64                 printf("%02x ", pText[i]);
65         }
66
67         printf("\n=======================================\n\n");
68 }
69
70
71 const int MAX_TEST_BUFFER = 1000;
72
73 void MsgTestConvertLocaleToUTF8()
74 {
75         int localeStrLen = 0;
76         unsigned char localeString[MAX_TEST_BUFFER];
77         int utf8StrLen;
78         unsigned char utf8String[MAX_TEST_BUFFER];
79
80         printf("Input :\n");
81         cin.getline((char*)localeString, MAX_TEST_BUFFER);
82
83         localeStrLen = strlen((char*)localeString);
84         utf8StrLen = MsgConvertLocaleToUTF8(utf8String, MAX_TEST_BUFFER, localeString, localeStrLen);
85         if ( utf8StrLen <= 0 )
86         {
87                 printf("MsgConvertLocaleToUTF8() failed. src string [%s]\n", localeString);
88                 return;
89         }
90
91         printf("=== STRING DUMP ===\n");
92         printf("src : [%s]\n", localeString);
93         printf("dst : [%s]\n", utf8String);
94         MsgDumpTextToHex(localeString, localeStrLen);
95         MsgDumpTextToHex(utf8String, utf8StrLen);
96 }
97
98
99 /*
100 File Format Example
101 ------
102 (total bytes)
103 (hexadecimal integer for 1 byte)s
104 ------
105 4
106 4D 61 69 6E
107 ------
108
109 */
110 /**
111 return:
112         byte length
113 */
114 int MsgTestConvertReadTextFromFile(unsigned char *pStr)
115 {
116         FILE *fp;
117         char filename[100];
118         int byteLength;
119         int i;
120         int c;
121
122         printf("Input file name: \n");
123         scanf("%s", filename);
124         if ( (fp = fopen(filename, "r")) == NULL )
125         {
126                 printf("File Open failed. file name [%s]\n", filename);
127                 return -1;
128         }
129
130         // read byte length of input text
131         fscanf(fp, "%d", &byteLength);
132
133         printf("read text from file[%s] - size:%d\n", filename, byteLength);
134         // read text
135         for ( i = 0; i < byteLength; i++ )
136         {
137                 if ( fscanf(fp, "%x", &c) == EOF )
138                         break;
139                 if ( c > 0xFF )
140                 {
141                         printf("Wrong Input : index[%d] value [%x]\n", i, c);
142                         byteLength = -1;
143                         break;
144                 }
145                 pStr[i] = (char)(c & 0xFF);
146                 //printf("%x\n", pStr[i]);
147         }
148
149         fclose(fp);
150
151         return byteLength;
152 }
153
154 void MsgTestConvertUTF8ToUCS2()
155 {
156         int utf8StrLen = 0;
157         unsigned char utf8String[MAX_TEST_BUFFER];
158         int ucs2StrLen = 0;
159         WCHAR ucs2String[MAX_TEST_BUFFER];
160
161         utf8StrLen = MsgTestConvertReadTextFromFile(utf8String);
162         if ( utf8StrLen < 0 )
163         {
164                 printf("Error - Read Text from File\n");
165                 return;
166         }
167
168         //ucs2StrLen = MsgConvertUTF8toUCS2(ucs2String, MAX_TEST_BUFFER, utf8String);   // for null terminated utf8 string
169         ucs2StrLen = MsgConvertUTF8toUCS2((unsigned char *)ucs2String, MAX_TEST_BUFFER, utf8String, utf8StrLen);
170
171         printf("=== STRING DUMP ===\n");
172         printf("src: [%s]", utf8String);
173         MsgDumpTextToHex(utf8String, utf8StrLen);
174         MsgDumpTextToHex((unsigned char*)ucs2String, ucs2StrLen);
175
176 }
177
178 void MsgTestConvertUCS2ToUTF8()
179 {
180         int utf8StrLen = 0;
181         unsigned char utf8String[MAX_TEST_BUFFER];
182         int ucs2StrLen = 0;
183         WCHAR ucs2String[MAX_TEST_BUFFER];
184
185         ucs2StrLen = MsgTestConvertReadTextFromFile((unsigned char*)ucs2String);
186         if ( ucs2StrLen < 0 )
187         {
188                 printf("Error - Read Text from File\n");
189                 return;
190         }
191
192         utf8StrLen = MsgConvertUCS2toUTF8(utf8String, MAX_TEST_BUFFER, (unsigned char *)ucs2String, ucs2StrLen);
193
194         printf("=== STRING DUMP ===\n");
195         printf("dst: [%s]", utf8String);
196         MsgDumpTextToHex((unsigned char*)ucs2String, ucs2StrLen);
197         MsgDumpTextToHex(utf8String, utf8StrLen);
198 }
199
200 void MsgTestConvertGSM7bitToUCS2()
201 {
202         int gsm7bitStrLen = 0;
203         unsigned char gsm7bitString[MAX_TEST_BUFFER];
204         int ucs2StrLen = 0;
205         WCHAR ucs2String[MAX_TEST_BUFFER];
206
207         gsm7bitStrLen = MsgTestConvertReadTextFromFile(gsm7bitString);
208         if ( gsm7bitStrLen < 0 )
209         {
210                 printf("Error - Read Text from File\n");
211                 return;
212         }
213
214         ucs2StrLen = MsgConvertGSM7bitToUCS2((unsigned char *)ucs2String, MAX_TEST_BUFFER, gsm7bitString, gsm7bitStrLen);
215
216         printf("=== STRING DUMP ===\n");
217         MsgDumpTextToHex(gsm7bitString, gsm7bitStrLen);
218         MsgDumpTextToHex((unsigned char*)ucs2String, ucs2StrLen);
219 }
220
221 void MsgTestConvertUCS2ToGSM7bit()
222 {
223         int ucs2StrLen = 0;
224         WCHAR ucs2String[MAX_TEST_BUFFER];
225         int gsm7bitStrLen = 0;
226         unsigned char gsm7bitString[MAX_TEST_BUFFER];
227
228         ucs2StrLen = MsgTestConvertReadTextFromFile((unsigned char*)ucs2String);
229         if ( ucs2StrLen < 0 )
230         {
231                 printf("Error - Read Text from File\n");
232                 return;
233         }
234
235         bool bUnknown = false;
236         MSG_LANGUAGE_ID_T langId = MSG_LANG_ID_RESERVED;
237         gsm7bitStrLen = MsgConvertUCS2toGSM7bit(gsm7bitString, MAX_TEST_BUFFER, (unsigned char *)ucs2String, ucs2StrLen, &bUnknown, &langId);
238
239         printf("=== STRING DUMP ===");
240         MsgDumpTextToHex((unsigned char*)ucs2String, ucs2StrLen);
241         MsgDumpTextToHex(gsm7bitString, gsm7bitStrLen);
242 }
243
244 void MsgTestConvertGSM7BitToUTF8()
245 {
246         int gsm7bitStrLen = 0;
247         unsigned char gsm7bitString[MAX_TEST_BUFFER];
248         int utf8StrLen = 0;
249         unsigned char utf8String[MAX_TEST_BUFFER];
250
251         gsm7bitStrLen = MsgTestConvertReadTextFromFile(gsm7bitString);
252         if ( gsm7bitStrLen < 0 )
253         {
254                 printf("Error - Read Text from File\n");
255                 return;
256         }
257
258         memset(utf8String, 0x00, sizeof(utf8String));
259         utf8StrLen = MsgConvertGSM7bitToUTF8(utf8String, MAX_TEST_BUFFER, gsm7bitString, gsm7bitStrLen);
260
261         printf("=== STRING DUMP ===\n");
262         printf("dest(UTF8) : [%s]\n", utf8String);
263         MsgDumpTextToHex(gsm7bitString, gsm7bitStrLen);
264         MsgDumpTextToHex(utf8String, utf8StrLen);
265 }
266
267 void MsgTestConvertUTF8ToGSM7bit()
268 {
269         int utf8StrLen = 0;
270         unsigned char utf8String[MAX_TEST_BUFFER];
271         int gsm7bitStrLen = 0;
272         unsigned char gsm7bitString[MAX_TEST_BUFFER];
273
274         utf8StrLen = MsgTestConvertReadTextFromFile(utf8String);
275         if ( utf8StrLen < 0 )
276         {
277                 printf("Error - Read Text from File\n");
278                 return;
279         }
280
281         MSG_LANGUAGE_ID_T langId = MSG_LANG_ID_RESERVED;
282         gsm7bitStrLen = MsgConvertUTF8ToGSM7bit(gsm7bitString, MAX_TEST_BUFFER, utf8String, utf8StrLen, &langId);
283
284         printf("=== STRING DUMP ===\n");
285         MsgDumpTextToHex(utf8String, utf8StrLen);
286         MsgDumpTextToHex(gsm7bitString, gsm7bitStrLen);
287 }
288
289 void MsgTestConvertUTF8ToUCS2Key()
290 {
291         int utf8StrLen = 0;
292         unsigned char utf8String[MAX_TEST_BUFFER];
293         int ucs2StrLen = 0;
294         WCHAR ucs2String[MAX_TEST_BUFFER];
295
296         printf("Input :\n");
297         cin.getline((char *)utf8String, MAX_TEST_BUFFER);
298
299         utf8StrLen = strlen((char *)utf8String);
300
301         ucs2StrLen = MsgConvertUTF8toUCS2((unsigned char *)ucs2String, MAX_TEST_BUFFER, utf8String);    // for null terminated utf8 string
302         //ucs2StrLen = MsgConvertUTF8toUCS2(ucs2String, MAX_TEST_BUFFER, utf8String, utf8StrLen);
303
304         printf("=== STRING DUMP ===\n");
305         printf("src: [%s]", utf8String);
306         MsgDumpTextToHex(utf8String, utf8StrLen);
307         MsgDumpTextToHex((unsigned char*)ucs2String, ucs2StrLen);
308
309 }
310
311 void MsgTestConvertUTF8ToGSM7bitKey()
312 {
313         int utf8StrLen = 0;
314         unsigned char utf8String[MAX_TEST_BUFFER];
315         int gsm7bitStrLen = 0;
316         unsigned char gsm7bitString[MAX_TEST_BUFFER];
317
318         printf("Input :\n");
319         cin.getline((char *)utf8String, MAX_TEST_BUFFER);
320
321         utf8StrLen = strlen((char *)utf8String);
322
323         MSG_LANGUAGE_ID_T langId = MSG_LANG_ID_RESERVED;
324         gsm7bitStrLen = MsgConvertUTF8ToGSM7bit(gsm7bitString, MAX_TEST_BUFFER, utf8String, utf8StrLen, &langId);       // for null terminated utf8 string
325
326         printf("=== STRING DUMP ===\n");
327         MsgDumpTextToHex(utf8String, utf8StrLen);
328         MsgDumpTextToHex(gsm7bitString, gsm7bitStrLen);
329 }
330
331
332 void MsgTestConvertSelectMenu( char *pMenu)
333 {
334         int menuNum = atoi(pMenu);
335
336         switch ( menuNum )
337         {
338                 case 0: // quit
339                         return;
340                 case 1: // Locale -> UTF8
341                         MsgTestConvertLocaleToUTF8();
342                         break;
343                 case 2: // UTF-8 -> UCS2
344                         MsgTestConvertUTF8ToUCS2();
345                         break;
346                 case 3: // UCS2 -> UTF-8
347                         MsgTestConvertUCS2ToUTF8();
348                         break;
349                 case 4: // GSM 7bit -> UCS2
350                         MsgTestConvertGSM7bitToUCS2();
351                         break;
352                 case 5: // UCS2 -> GSM 7bit
353                         MsgTestConvertUCS2ToGSM7bit();
354                         break;
355                 case 6: // GSM 7bit -> UTF-8
356                         MsgTestConvertGSM7BitToUTF8();
357                         break;
358                 case 7: // UTF-8 -> GSM 7bit
359                         MsgTestConvertUTF8ToGSM7bit();
360                         break;
361                 case 8:
362                         MsgTestConvertUTF8ToUCS2Key();
363                         break;
364                 case 9:
365                         MsgTestConvertUTF8ToGSM7bitKey();
366                         break;
367                 default:
368                         printf("Invalid Menu. Select Again\n");
369                         break;
370         }
371 }
372
373 // main function for testing converting
374 MSG_ERROR_T MsgTestConvertMain()
375 {
376         char menu[3];
377
378         do
379         {
380 //              system("clear");
381
382                 printf("=======================\n");
383                 printf("    Convert Test                     \n");
384                 printf("=======================\n");
385                 printf("[1] locale -> UTF8 - (Keyboard input)\n");
386                 printf("[2] UTF8 -> UCS2 - (File)\n");
387                 printf("[3] UCS2 -> UTF8 - (File)\n");
388                 printf("[4] GSM 7bit -> UCS2 - (File)\n");
389                 printf("[5] UCS2 -> GSM 7bit - (File)\n");
390                 printf("[6] GSM 7bit -> UTF8 - (File)\n");
391                 printf("[7] UTF8 -> GSM 7bit - (File)\n");
392                 printf("[8] UTF8 -> UCS2 - (Keyboard)\n");
393                 printf("[9] UTF8 -> GSM 7bit - (Keyboard)\n");
394                 printf("[0] Return to Main Menu\n");
395                 printf("=======================\n");
396
397                 printf("Select Test Menu : ");
398
399                 memset(menu, 0x00, sizeof(menu));
400                 cin.getline(menu, 3);
401
402                 MsgTestConvertSelectMenu(menu);
403         }
404         while ( strcmp(menu, "0") != 0 );
405
406         return 0;
407 }
408
409