OpenTREP Logo  0.07.4
C++ Open Travel Request Parsing Library
UnicodeTestSuite.cpp
Go to the documentation of this file.
1 // /////////////////////////////////////////////////////////////////////////
2 //
3 // Unicode-based transformations
4 //
5 // Author: Denis Arnaud
6 // Date: September 2012
7 //
8 // /////////////////////////////////////////////////////////////////////////
9 // STL
10 #include <sstream>
11 #include <fstream>
12 #include <string>
13 #include <list>
14 // Boost Unit Test Framework (UTF)
15 #define BOOST_TEST_DYN_LINK
16 #define BOOST_TEST_MAIN
17 #define BOOST_TEST_MODULE UnicodeTestSuite
18 #include <boost/test/unit_test.hpp>
19 // OpenTrep
21 
22 namespace boost_utf = boost::unit_test;
23 
24 // (Boost) Unit Test XML Report
25 std::ofstream utfReportStream ("UnicodeTestSuite_utfresults.xml");
26 
30 struct UnitTestConfig {
33  boost_utf::unit_test_log.set_stream (utfReportStream);
34 #if defined(BOOST_VERSION) && BOOST_VERSION >= 105900
35  boost_utf::unit_test_log.set_format (boost_utf::OF_XML);
36 #else // BOOST_VERSION
37  boost_utf::unit_test_log.set_format (boost_utf::XML);
38 #endif // BOOST_VERSION
39  boost_utf::unit_test_log.set_threshold_level (boost_utf::log_test_units);
40  //boost_utf::unit_test_log.set_threshold_level (boost_utf::log_successful_tests);
41  }
42 
45  }
46 };
47 
48 
49 // /////////////// Main: Unit Test Suite //////////////
50 
51 // Set the UTF configuration (re-direct the output to a specific file)
53 
54 // Start the test suite
55 BOOST_AUTO_TEST_SUITE (master_test_suite)
56 
57 
60 BOOST_AUTO_TEST_CASE (unicode_strings) {
61 
62  // Output log File
63  std::string lLogFilename ("UnicodeTestSuite.log");
64 
65  // Set the log parameters
66  std::ofstream logOutputFile;
67  // Open and clean the log outputfile
68  logOutputFile.open (lLogFilename.c_str());
69  logOutputFile.clear();
70 
71  // Unicode transliterator
72  OPENTREP::OTransliterator lTransliterator;
73 
74  // European
75  const std::string lFRStr = "À côté de Nice Côte d'Azur";
76  const std::string lFRTranslitStr = lTransliterator.normalise (lFRStr);
77  const std::string lFRTargetStr = "a cote de nice cote d azur";
78  const std::string lHUStr = "San Franciscó-i nemzetközi repülőtér";
79  const std::string lHUTranslitStr = lTransliterator.normalise (lHUStr);
80  const std::string lHUTargetStr = "san francisco i nemzetkozi repuloter";
81  const std::string lGRStr = "Αλφαβητικός Κατάλογος";
82  const std::string lGRTranslitStr = lTransliterator.normalise (lGRStr);
83  const std::string lGRTargetStr = "alphabetikos katalogos";
84  const std::string lRUStr = "Аэропорт «Аннаба», Биологическом";
85  const std::string lRUTranslitStr = lTransliterator.normalise (lRUStr);
86  const std::string lRUTargetStr = "aeroport annaba biologiceskom";
87  const std::string lUKStr = "Биологїческом";
88  const std::string lUKTranslitStr = lTransliterator.normalise (lUKStr);
89  const std::string lUKTargetStr = "biologiceskom";
90  const std::string lTRStr = "San Francisco Uluslararası Havalimanı";
91  const std::string lTRTranslitStr = lTransliterator.normalise (lTRStr);
92  const std::string lTRTargetStr = "san francisco uluslararası havalimanı";
93 
94  // Africa - Middle-East
95  const std::string lARStr = "مطار سان فرانسيسكو الدولي";
96  const std::string lARTranslitStr = lTransliterator.normalise (lARStr);
97  const std::string lARTargetStr = "mtar san fransyskw aldwly";
98  const std::string lFAStr = "فرودگاه بین المللی سانفرانسیسکو";
99  const std::string lFATranslitStr = lTransliterator.normalise (lFAStr);
100  const std::string lFATargetStr = "frwdgah byn almlly sanfransyskw";
101 
102  // Asia
103  const std::string lZHStr = "舊金山國際機場";
104  const std::string lZHTranslitStr = lTransliterator.normalise (lZHStr);
105  const std::string lZHTargetStr = "jiu jin shan guo ji ji chang";
106  const std::string lJPStr = "サンフランシスコ国際空港";
107  const std::string lJPTranslitStr = lTransliterator.normalise (lJPStr);
108  const std::string lJPTargetStr = "sanfuranshisuko guo ji kong gang";
109  const std::string lKOStr = "샌프란시스코 국제공항";
110  const std::string lKOTranslitStr = lTransliterator.normalise (lKOStr);
111  const std::string lKOTargetStr = "saenpeulansiseuko gugjegonghang";
112  const std::string lTHStr = "ท่าอากาศยานนานาชาติซานฟรานซิสโก";
113  const std::string lTHTranslitStr = lTransliterator.normalise (lTHStr);
114  const std::string lTHTargetStr = "tha xakasyan nana chat san f ran ss ko";
115  const std::string lVIStr = "Sân bay quốc tế San Francisco";
116  const std::string lVITranslitStr = lTransliterator.normalise (lVIStr);
117  const std::string lVITargetStr = "san bay quoc te san francisco";
118 
119  // French (accentuated Latin)
120  logOutputFile << "[FR] " << lFRStr << " -> " << lFRTranslitStr << std::endl;
121  BOOST_CHECK_MESSAGE (lFRTranslitStr == lFRTargetStr,
122  "The French transliterated string for '" << lFRStr
123  << "' should be '" << lFRTargetStr << "'. "
124  << "However, it is '" << lFRTranslitStr << "'.");
125 
126  // Hungarian (accentuated Latin)
127  logOutputFile << "[HU] " << lHUStr << " -> " << lHUTranslitStr << std::endl;
128  BOOST_CHECK_MESSAGE (lHUTranslitStr == lHUTargetStr,
129  "The Hungarian transliterated string for '" << lHUStr
130  << "' should be '" << lHUTargetStr << "'. "
131  << "However, it is '" << lHUTranslitStr << "'.");
132 
133  // Greek
134  logOutputFile << "[GR] " << lGRStr << " -> " << lGRTranslitStr << std::endl;
135  BOOST_CHECK_MESSAGE (lGRTranslitStr == lGRTargetStr,
136  "The Greek transliterated string for '" << lGRStr
137  << "' should be '" << lGRTargetStr << "'. "
138  << "However, it is '" << lGRTranslitStr << "'.");
139 
140  // Russian (Cyrillic)
141  logOutputFile << "[RU] " << lRUStr << " -> " << lRUTranslitStr << std::endl;
142  BOOST_CHECK_MESSAGE (lRUTranslitStr == lRUTargetStr,
143  "The Russian transliterated string for '" << lRUStr
144  << "' should be '" << lRUTargetStr << "'. "
145  << "However, it is '" << lRUTranslitStr << "'.");
146 
147  // Ukrainian (Cyrillic)
148  logOutputFile << "[UK] " << lUKStr << " -> " << lUKTranslitStr << std::endl;
149  BOOST_CHECK_MESSAGE (lUKTranslitStr == lUKTargetStr,
150  "The Ukrainian transliterated string for '" << lUKStr
151  << "' should be '" << lUKTargetStr << "'. "
152  << "However, it is '" << lUKTranslitStr << "'.");
153 
154  // Turkish
155  logOutputFile << "[TR] " << lTRStr << " -> " << lTRTranslitStr << std::endl;
156  BOOST_CHECK_MESSAGE (lTRTranslitStr == lTRTargetStr,
157  "The Turkish transliterated string for '" << lTRStr
158  << "' should be '" << lTRTargetStr << "'. "
159  << "However, it is '" << lTRTranslitStr << "'.");
160 
161  // Arabic
162  logOutputFile << "[AR] " << lARStr << " -> " << lARTranslitStr << std::endl;
163  BOOST_CHECK_MESSAGE (lARTranslitStr == lARTargetStr,
164  "The Arabic transliterated string for '" << lARStr
165  << "' should be '" << lARTargetStr << "'. "
166  << "However, it is '" << lARTranslitStr << "'.");
167 
168  // Iranian (Farsi)
169  logOutputFile << "[FA] " << lFAStr << " -> " << lFATranslitStr << std::endl;
170  BOOST_CHECK_MESSAGE (lFATranslitStr == lFATargetStr,
171  "The Arabic transliterated string for '" << lFAStr
172  << "' should be '" << lFATargetStr << "'. "
173  << "However, it is '" << lFATranslitStr << "'.");
174 
175  // Chinese (Han)
176  logOutputFile << "[ZH] " << lZHStr << " -> " << lZHTranslitStr << std::endl;
177  BOOST_CHECK_MESSAGE (lZHTranslitStr == lZHTargetStr,
178  "The Chinese transliterated string for '" << lZHStr
179  << "' should be '" << lZHTargetStr << "'. "
180  << "However, it is '" << lZHTranslitStr << "'.");
181 
182  // Japanese (Katakana)
183  logOutputFile << "[JP] " << lJPStr << " -> " << lJPTranslitStr << std::endl;
184  BOOST_CHECK_MESSAGE (lJPTranslitStr == lJPTargetStr,
185  "The Japanese transliterated string for '" << lJPStr
186  << "' should be '" << lJPTargetStr << "'. "
187  << "However, it is '" << lJPTranslitStr << "'.");
188 
189  // Korean (Hangul)
190  logOutputFile << "[KO] " << lKOStr << " -> " << lKOTranslitStr << std::endl;
191  BOOST_CHECK_MESSAGE (lKOTranslitStr == lKOTargetStr,
192  "The Korean transliterated string for '" << lKOStr
193  << "' should be '" << lKOTargetStr << "'. "
194  << "However, it is '" << lKOTranslitStr << "'.");
195 
196  // Thai
197  logOutputFile << "[TH] " << lTHStr << " -> " << lTHTranslitStr << std::endl;
198  BOOST_CHECK_MESSAGE (lTHTranslitStr == lTHTargetStr,
199  "The Korean transliterated string for '" << lTHStr
200  << "' should be '" << lTHTargetStr << "'. "
201  << "However, it is '" << lTHTranslitStr << "'.");
202 
203  // Vietnamese
204  logOutputFile << "[VI] " << lVIStr << " -> " << lVITranslitStr << std::endl;
205  BOOST_CHECK_MESSAGE (lVITranslitStr == lVITargetStr,
206  "The Korean transliterated string for '" << lVIStr
207  << "' should be '" << lVITargetStr << "'. "
208  << "However, it is '" << lVITranslitStr << "'.");
209 
210 
211  // Close the Log outputFile
212  logOutputFile.close();
213 }
214 
215 // End the test suite
216 BOOST_AUTO_TEST_SUITE_END()
217 
std::string normalise(const std::string &iString) const
std::ofstream utfReportStream("UnicodeTestSuite_utfresults.xml")
BOOST_AUTO_TEST_CASE(unicode_strings)
BOOST_GLOBAL_FIXTURE(UnitTestConfig)