You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

441 lines
20 KiB

  1. /* /////////////////////////////////////////////////////////////////////////
  2. * File: test/unit/test.unit.util.getcurrenttime/test.unit.util.getcurrenttime.cpp
  3. *
  4. * Purpose: Implementation file for the test.unit.util.getcurrenttime project.
  5. *
  6. * Created: 10th November 2007
  7. * Updated: 4th January 2011
  8. *
  9. * Status: Wizard-generated
  10. *
  11. * License: (Licensed under the Synesis Software Open License)
  12. *
  13. * Copyright (c) 2007-2011, Synesis Software Pty Ltd.
  14. * All rights reserved.
  15. *
  16. * www: http://www.synesis.com.au/software
  17. *
  18. * ////////////////////////////////////////////////////////////////////// */
  19. #ifdef __BORLANDC__
  20. /* Borland 6.1 is so unbelievably stupid that even when
  21. * given '#pragma warn -8026' multiple places within the code
  22. * and '-winl' on the command it _still_ insists on reporting
  23. * that "Functions with exception specifications are not expanded
  24. * inline in function test_time(const char *,int,unsigned int,int,unsigned int,const char *)",
  25. * so I am forced to such extreme measures! What a peice of crap.
  26. *
  27. * Bring back Turbo C++ 3.1!
  28. */
  29. # define throw()
  30. # include <shwild/shwild.h>
  31. # undef throw
  32. #endif /* compiler */
  33. #include <pantheios/util/test/compiler_warnings_suppression.first_include.h>
  34. /* Pantheios Header Files */
  35. #include <pantheios/util/time/currenttime.h>
  36. /* xTests Header Files */
  37. #include <xtests/xtests.h>
  38. /* shwild Header Files */
  39. #include <shwild/shwild.h>
  40. #if SHWILD_VER < 0x00090900
  41. # error Requires shwild 0.9.9 or later; earlier versions have a defect that cause these tests to report false errors
  42. #endif /* SHWILD_VER */
  43. /* STLSoft Header Files */
  44. #include <stlsoft/conversion/integer_to_string.hpp>
  45. #include <stlsoft/conversion/char_conversions.hpp>
  46. #include <pantheios/util/memory/auto_buffer_selector.hpp>
  47. #include <stlsoft/shims/access/string/std/c_string.h>
  48. #include <stlsoft/string/container_slice_functions.hpp>
  49. #include <platformstl/platformstl.hpp>
  50. /* Standard C++ Header Files */
  51. #include <exception>
  52. #include <string>
  53. /* Standard C Header Files */
  54. #include <stdio.h>
  55. #include <stdlib.h>
  56. #include <pantheios/util/test/compiler_warnings_suppression.last_include.h>
  57. /* /////////////////////////////////////////////////////////////////////////
  58. * Typedefs
  59. */
  60. typedef std::basic_string<PAN_CHAR_T> string_t;
  61. /* /////////////////////////////////////////////////////////////////////////
  62. * Macros and definitions
  63. */
  64. #define PANTHEIOS_TEST_TIME(buffSize, flags, result, pattern) test_time(__FILE__, __LINE__, buffSize, flags, result, pattern)
  65. /* /////////////////////////////////////////////////////////////////////////
  66. * Globals
  67. */
  68. PANTHEIOS_EXTERN_C const PAN_CHAR_T PANTHEIOS_FE_PROCESS_IDENTITY[] = PANTHEIOS_LITERAL_STRING("test.unit.util.getcurrenttime");
  69. /* /////////////////////////////////////////////////////////////////////////
  70. * Forward declarations
  71. */
  72. static int test_time(char const* file, int line, size_t cchBuff, int flags, size_t expectedResult, PAN_CHAR_T const* pattern);
  73. static string_t translate_pattern(PAN_CHAR_T const* pattern);
  74. static void test_unix_0();
  75. static void test_unix_F_USE_SYSTEM_TIME();
  76. static void test_unix_F_HIDE_DATE();
  77. static void test_unix_F_HIDE_TIME();
  78. #if defined(PLATFORMSTL_OS_IS_WINDOWS)
  79. static void test_win_0();
  80. static void test_win_F_USE_SYSTEM_TIME();
  81. static void test_win_F_HIDE_DATE();
  82. static void test_win_F_HIDE_TIME();
  83. #endif /* PLATFORMSTL_OS_IS_WINDOWS */
  84. /* ////////////////////////////////////////////////////////////////////// */
  85. int main(int argc, char** argv)
  86. {
  87. int retCode = EXIT_SUCCESS;
  88. int verbosity = 2;
  89. XTESTS_COMMANDLINE_PARSEVERBOSITY(argc, argv, &verbosity);
  90. if(XTESTS_START_RUNNER("test.unit.util.getcurrenttime", verbosity))
  91. {
  92. XTESTS_RUN_CASE_WITH_DESC(test_unix_0, "testing UNIX format; flags=0");
  93. XTESTS_RUN_CASE_WITH_DESC(test_unix_F_USE_SYSTEM_TIME, "testing UNIX format; flags=F_USE_SYSTEM_TIME");
  94. XTESTS_RUN_CASE_WITH_DESC(test_unix_F_HIDE_DATE, "testing UNIX format; flags=F_HIDE_DATE");
  95. XTESTS_RUN_CASE_WITH_DESC(test_unix_F_HIDE_TIME, "testing UNIX format; flags=F_HIDE_TIME");
  96. #if defined(PLATFORMSTL_OS_IS_WINDOWS)
  97. XTESTS_RUN_CASE_WITH_DESC(test_win_0, "testing Windows format; flags=0");
  98. XTESTS_RUN_CASE_WITH_DESC(test_win_F_USE_SYSTEM_TIME, "testing Windows format; flags=F_USE_SYSTEM_TIME");
  99. XTESTS_RUN_CASE_WITH_DESC(test_win_F_HIDE_DATE, "testing Windows format; flags=F_HIDE_DATE");
  100. XTESTS_RUN_CASE_WITH_DESC(test_win_F_HIDE_TIME, "testing Windows format; flags=0");
  101. #endif /* PLATFORMSTL_OS_IS_WINDOWS */
  102. XTESTS_PRINT_RESULTS();
  103. XTESTS_END_RUNNER_UPDATE_EXITCODE(&retCode);
  104. }
  105. return retCode;
  106. }
  107. static void test_unix_0()
  108. {
  109. const int timeFlags = PANTHEIOS_GETCURRENTTIME_F_USE_UNIX_FORMAT
  110. | 0
  111. | 0
  112. | 0;
  113. PANTHEIOS_TEST_TIME( 0, timeFlags, 15, PANTHEIOS_LITERAL_STRING(""));
  114. PANTHEIOS_TEST_TIME( 1, timeFlags, 1, PANTHEIOS_LITERAL_STRING("[ADFJMNOS]"));
  115. PANTHEIOS_TEST_TIME( 2, timeFlags, 2, PANTHEIOS_LITERAL_STRING("[ADFJMNOS][abceglnoprtuvy]"));
  116. PANTHEIOS_TEST_TIME( 3, timeFlags, 3, PANTHEIOS_LITERAL_STRING("?<Mon>"));
  117. PANTHEIOS_TEST_TIME( 4, timeFlags, 4, PANTHEIOS_LITERAL_STRING("?<Mon> "));
  118. PANTHEIOS_TEST_TIME( 5, timeFlags, 5, PANTHEIOS_LITERAL_STRING("?<Mon> <D>"));
  119. PANTHEIOS_TEST_TIME( 6, timeFlags, 6, PANTHEIOS_LITERAL_STRING("?<Mon> <DD>"));
  120. PANTHEIOS_TEST_TIME( 7, timeFlags, 7, PANTHEIOS_LITERAL_STRING("?<Mon> <DD> "));
  121. PANTHEIOS_TEST_TIME( 8, timeFlags, 8, PANTHEIOS_LITERAL_STRING("?<Mon> <DD> <D>"));
  122. PANTHEIOS_TEST_TIME( 9, timeFlags, 9, PANTHEIOS_LITERAL_STRING("?<Mon> <DD> <DD>"));
  123. PANTHEIOS_TEST_TIME(10, timeFlags, 10, PANTHEIOS_LITERAL_STRING("?<Mon> <DD> <DD>:"));
  124. PANTHEIOS_TEST_TIME(11, timeFlags, 11, PANTHEIOS_LITERAL_STRING("?<Mon> <DD> <DD>:<D>"));
  125. PANTHEIOS_TEST_TIME(12, timeFlags, 12, PANTHEIOS_LITERAL_STRING("?<Mon> <DD> <DD>:<DD>"));
  126. PANTHEIOS_TEST_TIME(13, timeFlags, 13, PANTHEIOS_LITERAL_STRING("?<Mon> <DD> <DD>:<DD>:"));
  127. PANTHEIOS_TEST_TIME(14, timeFlags, 14, PANTHEIOS_LITERAL_STRING("?<Mon> <DD> <DD>:<DD>:<D>"));
  128. PANTHEIOS_TEST_TIME(15, timeFlags, 15, PANTHEIOS_LITERAL_STRING("?<Mon> <DD> <DD>:<DD>:<DD>"));
  129. PANTHEIOS_TEST_TIME(16, timeFlags, 15, PANTHEIOS_LITERAL_STRING("?<Mon> <DD> <DD>:<DD>:<DD>"));
  130. PANTHEIOS_TEST_TIME(16, timeFlags, 15, PANTHEIOS_LITERAL_STRING("?<Mon> <DD> <DD>:<DD>:<DD>"));
  131. PANTHEIOS_TEST_TIME(17, timeFlags, 15, PANTHEIOS_LITERAL_STRING("?<Mon> <DD> <DD>:<DD>:<DD>"));
  132. PANTHEIOS_TEST_TIME(18, timeFlags, 15, PANTHEIOS_LITERAL_STRING("?<Mon> <DD> <DD>:<DD>:<DD>"));
  133. PANTHEIOS_TEST_TIME(19, timeFlags, 15, PANTHEIOS_LITERAL_STRING("?<Mon> <DD> <DD>:<DD>:<DD>"));
  134. PANTHEIOS_TEST_TIME(20, timeFlags, 15, PANTHEIOS_LITERAL_STRING("?<Mon> <DD> <DD>:<DD>:<DD>"));
  135. PANTHEIOS_TEST_TIME(100, timeFlags, 15, PANTHEIOS_LITERAL_STRING("?<Mon> <DD> <DD>:<DD>:<DD>"));
  136. PANTHEIOS_TEST_TIME(1000, timeFlags, 15, PANTHEIOS_LITERAL_STRING("?<Mon> <DD> <DD>:<DD>:<DD>"));
  137. }
  138. static void test_unix_F_USE_SYSTEM_TIME()
  139. {
  140. const int timeFlags = PANTHEIOS_GETCURRENTTIME_F_USE_UNIX_FORMAT
  141. | 0
  142. | PANTHEIOS_GETCURRENTTIME_F_USE_SYSTEM_TIME
  143. | 0;
  144. PANTHEIOS_TEST_TIME( 0, timeFlags, 15, PANTHEIOS_LITERAL_STRING(""));
  145. PANTHEIOS_TEST_TIME( 1, timeFlags, 1, PANTHEIOS_LITERAL_STRING("[ADFJMNOS]"));
  146. PANTHEIOS_TEST_TIME( 2, timeFlags, 2, PANTHEIOS_LITERAL_STRING("[ADFJMNOS][abceglnoprtuvy]"));
  147. PANTHEIOS_TEST_TIME( 3, timeFlags, 3, PANTHEIOS_LITERAL_STRING("?<Mon>"));
  148. PANTHEIOS_TEST_TIME( 4, timeFlags, 4, PANTHEIOS_LITERAL_STRING("?<Mon> "));
  149. PANTHEIOS_TEST_TIME( 5, timeFlags, 5, PANTHEIOS_LITERAL_STRING("?<Mon> <D>"));
  150. PANTHEIOS_TEST_TIME( 6, timeFlags, 6, PANTHEIOS_LITERAL_STRING("?<Mon> <DD>"));
  151. PANTHEIOS_TEST_TIME( 7, timeFlags, 7, PANTHEIOS_LITERAL_STRING("?<Mon> <DD> "));
  152. PANTHEIOS_TEST_TIME( 8, timeFlags, 8, PANTHEIOS_LITERAL_STRING("?<Mon> <DD> <D>"));
  153. PANTHEIOS_TEST_TIME( 9, timeFlags, 9, PANTHEIOS_LITERAL_STRING("?<Mon> <DD> <DD>"));
  154. PANTHEIOS_TEST_TIME(10, timeFlags, 10, PANTHEIOS_LITERAL_STRING("?<Mon> <DD> <DD>:"));
  155. PANTHEIOS_TEST_TIME(11, timeFlags, 11, PANTHEIOS_LITERAL_STRING("?<Mon> <DD> <DD>:<D>"));
  156. PANTHEIOS_TEST_TIME(12, timeFlags, 12, PANTHEIOS_LITERAL_STRING("?<Mon> <DD> <DD>:<DD>"));
  157. PANTHEIOS_TEST_TIME(13, timeFlags, 13, PANTHEIOS_LITERAL_STRING("?<Mon> <DD> <DD>:<DD>:"));
  158. PANTHEIOS_TEST_TIME(14, timeFlags, 14, PANTHEIOS_LITERAL_STRING("?<Mon> <DD> <DD>:<DD>:<D>"));
  159. PANTHEIOS_TEST_TIME(15, timeFlags, 15, PANTHEIOS_LITERAL_STRING("?<Mon> <DD> <DD>:<DD>:<DD>"));
  160. PANTHEIOS_TEST_TIME(16, timeFlags, 15, PANTHEIOS_LITERAL_STRING("?<Mon> <DD> <DD>:<DD>:<DD>"));
  161. PANTHEIOS_TEST_TIME(16, timeFlags, 15, PANTHEIOS_LITERAL_STRING("?<Mon> <DD> <DD>:<DD>:<DD>"));
  162. PANTHEIOS_TEST_TIME(17, timeFlags, 15, PANTHEIOS_LITERAL_STRING("?<Mon> <DD> <DD>:<DD>:<DD>"));
  163. PANTHEIOS_TEST_TIME(18, timeFlags, 15, PANTHEIOS_LITERAL_STRING("?<Mon> <DD> <DD>:<DD>:<DD>"));
  164. PANTHEIOS_TEST_TIME(19, timeFlags, 15, PANTHEIOS_LITERAL_STRING("?<Mon> <DD> <DD>:<DD>:<DD>"));
  165. PANTHEIOS_TEST_TIME(20, timeFlags, 15, PANTHEIOS_LITERAL_STRING("?<Mon> <DD> <DD>:<DD>:<DD>"));
  166. PANTHEIOS_TEST_TIME(100, timeFlags, 15, PANTHEIOS_LITERAL_STRING("?<Mon> <DD> <DD>:<DD>:<DD>"));
  167. PANTHEIOS_TEST_TIME(1000, timeFlags, 15, PANTHEIOS_LITERAL_STRING("?<Mon> <DD> <DD>:<DD>:<DD>"));
  168. }
  169. static void test_unix_F_HIDE_DATE()
  170. {
  171. const int timeFlags = PANTHEIOS_GETCURRENTTIME_F_USE_UNIX_FORMAT
  172. | 0
  173. | PANTHEIOS_GETCURRENTTIME_F_HIDE_DATE
  174. | 0;
  175. PANTHEIOS_TEST_TIME( 0, timeFlags, 8, PANTHEIOS_LITERAL_STRING(""));
  176. PANTHEIOS_TEST_TIME( 1, timeFlags, 1, PANTHEIOS_LITERAL_STRING("?<D>"));
  177. PANTHEIOS_TEST_TIME( 2, timeFlags, 2, PANTHEIOS_LITERAL_STRING("?<DD>"));
  178. PANTHEIOS_TEST_TIME( 3, timeFlags, 3, PANTHEIOS_LITERAL_STRING("?<DD>:"));
  179. PANTHEIOS_TEST_TIME( 4, timeFlags, 4, PANTHEIOS_LITERAL_STRING("?<DD>:<D>"));
  180. PANTHEIOS_TEST_TIME( 5, timeFlags, 5, PANTHEIOS_LITERAL_STRING("?<DD>:<DD>"));
  181. PANTHEIOS_TEST_TIME( 6, timeFlags, 6, PANTHEIOS_LITERAL_STRING("?<DD>:<DD>:"));
  182. PANTHEIOS_TEST_TIME( 7, timeFlags, 7, PANTHEIOS_LITERAL_STRING("?<DD>:<DD>:<D>"));
  183. PANTHEIOS_TEST_TIME( 8, timeFlags, 8, PANTHEIOS_LITERAL_STRING("?<DD>:<DD>:<DD>"));
  184. PANTHEIOS_TEST_TIME( 9, timeFlags, 8, PANTHEIOS_LITERAL_STRING("?<DD>:<DD>:<DD>"));
  185. PANTHEIOS_TEST_TIME(10, timeFlags, 8, PANTHEIOS_LITERAL_STRING("?<DD>:<DD>:<DD>"));
  186. PANTHEIOS_TEST_TIME(11, timeFlags, 8, PANTHEIOS_LITERAL_STRING("?<DD>:<DD>:<DD>"));
  187. PANTHEIOS_TEST_TIME(12, timeFlags, 8, PANTHEIOS_LITERAL_STRING("?<DD>:<DD>:<DD>"));
  188. PANTHEIOS_TEST_TIME(13, timeFlags, 8, PANTHEIOS_LITERAL_STRING("?<DD>:<DD>:<DD>"));
  189. PANTHEIOS_TEST_TIME(14, timeFlags, 8, PANTHEIOS_LITERAL_STRING("?<DD>:<DD>:<DD>"));
  190. PANTHEIOS_TEST_TIME(15, timeFlags, 8, PANTHEIOS_LITERAL_STRING("?<DD>:<DD>:<DD>"));
  191. PANTHEIOS_TEST_TIME(16, timeFlags, 8, PANTHEIOS_LITERAL_STRING("?<DD>:<DD>:<DD>"));
  192. PANTHEIOS_TEST_TIME(16, timeFlags, 8, PANTHEIOS_LITERAL_STRING("?<DD>:<DD>:<DD>"));
  193. PANTHEIOS_TEST_TIME(17, timeFlags, 8, PANTHEIOS_LITERAL_STRING("?<DD>:<DD>:<DD>"));
  194. PANTHEIOS_TEST_TIME(18, timeFlags, 8, PANTHEIOS_LITERAL_STRING("?<DD>:<DD>:<DD>"));
  195. PANTHEIOS_TEST_TIME(19, timeFlags, 8, PANTHEIOS_LITERAL_STRING("?<DD>:<DD>:<DD>"));
  196. PANTHEIOS_TEST_TIME(20, timeFlags, 8, PANTHEIOS_LITERAL_STRING("?<DD>:<DD>:<DD>"));
  197. PANTHEIOS_TEST_TIME(100, timeFlags, 8, PANTHEIOS_LITERAL_STRING("?<DD>:<DD>:<DD>"));
  198. PANTHEIOS_TEST_TIME(1000, timeFlags, 8, PANTHEIOS_LITERAL_STRING("?<DD>:<DD>:<DD>"));
  199. }
  200. static void test_unix_F_HIDE_TIME()
  201. {
  202. const int timeFlags = PANTHEIOS_GETCURRENTTIME_F_USE_UNIX_FORMAT
  203. | 0
  204. | PANTHEIOS_GETCURRENTTIME_F_HIDE_TIME
  205. | 0;
  206. PANTHEIOS_TEST_TIME( 0, timeFlags, 6, PANTHEIOS_LITERAL_STRING(""));
  207. PANTHEIOS_TEST_TIME( 1, timeFlags, 1, PANTHEIOS_LITERAL_STRING("[ADFJMNOS]"));
  208. PANTHEIOS_TEST_TIME( 2, timeFlags, 2, PANTHEIOS_LITERAL_STRING("[ADFJMNOS][abceglnoprtuvy]"));
  209. PANTHEIOS_TEST_TIME( 3, timeFlags, 3, PANTHEIOS_LITERAL_STRING("?<Mon>"));
  210. PANTHEIOS_TEST_TIME( 4, timeFlags, 4, PANTHEIOS_LITERAL_STRING("?<Mon> "));
  211. PANTHEIOS_TEST_TIME( 5, timeFlags, 5, PANTHEIOS_LITERAL_STRING("?<Mon> <D>"));
  212. PANTHEIOS_TEST_TIME( 6, timeFlags, 6, PANTHEIOS_LITERAL_STRING("?<Mon> <DD>"));
  213. PANTHEIOS_TEST_TIME( 7, timeFlags, 6, PANTHEIOS_LITERAL_STRING("?<Mon> <DD>"));
  214. PANTHEIOS_TEST_TIME( 8, timeFlags, 6, PANTHEIOS_LITERAL_STRING("?<Mon> <DD>"));
  215. PANTHEIOS_TEST_TIME( 9, timeFlags, 6, PANTHEIOS_LITERAL_STRING("?<Mon> <DD>"));
  216. PANTHEIOS_TEST_TIME(10, timeFlags, 6, PANTHEIOS_LITERAL_STRING("?<Mon> <DD>"));
  217. PANTHEIOS_TEST_TIME(11, timeFlags, 6, PANTHEIOS_LITERAL_STRING("?<Mon> <DD>"));
  218. PANTHEIOS_TEST_TIME(12, timeFlags, 6, PANTHEIOS_LITERAL_STRING("?<Mon> <DD>"));
  219. PANTHEIOS_TEST_TIME(13, timeFlags, 6, PANTHEIOS_LITERAL_STRING("?<Mon> <DD>"));
  220. PANTHEIOS_TEST_TIME(14, timeFlags, 6, PANTHEIOS_LITERAL_STRING("?<Mon> <DD>"));
  221. PANTHEIOS_TEST_TIME(15, timeFlags, 6, PANTHEIOS_LITERAL_STRING("?<Mon> <DD>"));
  222. PANTHEIOS_TEST_TIME(16, timeFlags, 6, PANTHEIOS_LITERAL_STRING("?<Mon> <DD>"));
  223. PANTHEIOS_TEST_TIME(16, timeFlags, 6, PANTHEIOS_LITERAL_STRING("?<Mon> <DD>"));
  224. PANTHEIOS_TEST_TIME(17, timeFlags, 6, PANTHEIOS_LITERAL_STRING("?<Mon> <DD>"));
  225. PANTHEIOS_TEST_TIME(18, timeFlags, 6, PANTHEIOS_LITERAL_STRING("?<Mon> <DD>"));
  226. PANTHEIOS_TEST_TIME(19, timeFlags, 6, PANTHEIOS_LITERAL_STRING("?<Mon> <DD>"));
  227. PANTHEIOS_TEST_TIME(20, timeFlags, 6, PANTHEIOS_LITERAL_STRING("?<Mon> <DD>"));
  228. PANTHEIOS_TEST_TIME(100, timeFlags, 6, PANTHEIOS_LITERAL_STRING("?<Mon> <DD>"));
  229. PANTHEIOS_TEST_TIME(1000, timeFlags, 6, PANTHEIOS_LITERAL_STRING("?<Mon> <DD>"));
  230. }
  231. /* ////////////////////////////////////////////////////////////////////// */
  232. #if defined(PLATFORMSTL_OS_IS_WINDOWS)
  233. static void test_win_0()
  234. {
  235. const int timeFlags = 0
  236. | 0
  237. | 0
  238. | 0;
  239. pan_beutil_time_t tm(0, NULL);
  240. size_t expected = pantheios_util_getCurrentTime(&tm, timeFlags);
  241. PANTHEIOS_TEST_TIME( 0, timeFlags, expected, PANTHEIOS_LITERAL_STRING(""));
  242. { for(size_t i = 1; i < expected + 100; ++i)
  243. {
  244. PANTHEIOS_TEST_TIME( expected + i, timeFlags, expected, PANTHEIOS_LITERAL_STRING("*"));
  245. }}
  246. }
  247. static void test_win_F_USE_SYSTEM_TIME()
  248. {
  249. const int timeFlags = 0
  250. | 0
  251. | PANTHEIOS_GETCURRENTTIME_F_USE_SYSTEM_TIME
  252. | 0;
  253. pan_beutil_time_t tm(0, NULL);
  254. size_t expected = pantheios_util_getCurrentTime(&tm, timeFlags);
  255. PANTHEIOS_TEST_TIME( 0, timeFlags, expected, PANTHEIOS_LITERAL_STRING(""));
  256. { for(size_t i = 1; i < expected + 100; ++i)
  257. {
  258. PANTHEIOS_TEST_TIME( expected + i, timeFlags, expected, PANTHEIOS_LITERAL_STRING("*"));
  259. }}
  260. }
  261. static void test_win_F_HIDE_DATE()
  262. {
  263. const int timeFlags = 0
  264. | 0
  265. | PANTHEIOS_GETCURRENTTIME_F_HIDE_DATE
  266. | 0;
  267. pan_beutil_time_t tm(0, NULL);
  268. size_t expected = pantheios_util_getCurrentTime(&tm, timeFlags);
  269. PANTHEIOS_TEST_TIME( 0, timeFlags, expected, PANTHEIOS_LITERAL_STRING(""));
  270. { for(size_t i = 1; i < expected + 100; ++i)
  271. {
  272. PANTHEIOS_TEST_TIME( expected + i, timeFlags, expected, PANTHEIOS_LITERAL_STRING("*"));
  273. }}
  274. }
  275. static void test_win_F_HIDE_TIME()
  276. {
  277. const int timeFlags = 0
  278. | 0
  279. | PANTHEIOS_GETCURRENTTIME_F_HIDE_TIME
  280. | 0;
  281. pan_beutil_time_t tm(0, NULL);
  282. size_t expected = pantheios_util_getCurrentTime(&tm, timeFlags);
  283. PANTHEIOS_TEST_TIME( 0, timeFlags, expected, PANTHEIOS_LITERAL_STRING(""));
  284. { for(size_t i = 1; i < expected + 100; ++i)
  285. {
  286. PANTHEIOS_TEST_TIME( expected + i, timeFlags, expected, PANTHEIOS_LITERAL_STRING("*"));
  287. }}
  288. }
  289. #endif /* PLATFORMSTL_OS_IS_WINDOWS */
  290. /* ////////////////////////////////////////////////////////////////////// */
  291. static string_t replace_all(string_t const& str, PAN_CHAR_T const* srch, PAN_CHAR_T const* repl)
  292. {
  293. string_t str2(str);
  294. size_t srchLen = stlsoft::c_str_len(srch);
  295. for(;;)
  296. {
  297. size_t lpos = str2.find(srch);
  298. size_t rpos = lpos + srchLen;
  299. if(string_t::npos == lpos)
  300. {
  301. break;
  302. }
  303. str2 = stlsoft::left(str2, lpos) + repl + stlsoft::right(str2, str2.length() - rpos);
  304. }
  305. return str2;
  306. }
  307. static int test_time(char const* file, int line, size_t cchBuff, int flags, size_t expectedResult, PAN_CHAR_T const* pattern)
  308. {
  309. if('?' == 0[pattern])
  310. {
  311. string_t str = translate_pattern(pattern);
  312. return test_time(file, line, cchBuff, flags, expectedResult, str.c_str());
  313. }
  314. pantheios::util::auto_buffer_selector<PAN_CHAR_T, 256>::type buff(cchBuff + 1);
  315. pan_beutil_time_t tm(buff.size() - 1, (buff.size() > 1) ? &buff[0] : NULL);
  316. size_t actualResult = pantheios_util_getCurrentTime(&tm, flags);
  317. int matchRes = 0;
  318. buff[cchBuff] = '\0';
  319. if(cchBuff > 0)
  320. {
  321. buff[actualResult] = '\0';
  322. }
  323. if( expectedResult == actualResult &&
  324. #ifdef PANTHEIOS_USE_WIDE_STRINGS
  325. 0 == (matchRes = shwild::match(stlsoft::w2m(pattern), stlsoft::w2m(buff.data()))))
  326. #else /* ? PANTHEIOS_USE_WIDE_STRINGS */
  327. 0 == (matchRes = shwild::match(pattern, buff.data())))
  328. #endif /* PANTHEIOS_USE_WIDE_STRINGS */
  329. {
  330. return true;
  331. }
  332. else
  333. {
  334. PAN_CHAR_T sz[21];
  335. string_t message;
  336. message += PANTHEIOS_LITERAL_STRING("time test failed: ");
  337. message += PANTHEIOS_LITERAL_STRING("expected length='");
  338. message += stlsoft::integer_to_string(&sz[0], STLSOFT_NUM_ELEMENTS(sz), expectedResult);
  339. message += PANTHEIOS_LITERAL_STRING("';");
  340. message += PANTHEIOS_LITERAL_STRING("pattern='");
  341. message += stlsoft::c_str_ptr(pattern);
  342. message += PANTHEIOS_LITERAL_STRING("';");
  343. message += PANTHEIOS_LITERAL_STRING("actual length='");
  344. message += stlsoft::integer_to_string(&sz[0], STLSOFT_NUM_ELEMENTS(sz), actualResult);
  345. message += PANTHEIOS_LITERAL_STRING("';");
  346. message += PANTHEIOS_LITERAL_STRING("result='");
  347. message += buff.data();
  348. message += PANTHEIOS_LITERAL_STRING("';");
  349. message += PANTHEIOS_LITERAL_STRING("match result='");
  350. message += stlsoft::integer_to_string(&sz[0], STLSOFT_NUM_ELEMENTS(sz), matchRes);
  351. message += PANTHEIOS_LITERAL_STRING("'");
  352. message += PANTHEIOS_LITERAL_STRING(";");
  353. #ifdef PANTHEIOS_USE_WIDE_STRINGS
  354. xtests::c::xtests_writeFailMessage(file, line, NULL, stlsoft::w2m(message), "");
  355. #else /* ? PANTHEIOS_USE_WIDE_STRINGS */
  356. xtests::c::xtests_writeFailMessage(file, line, NULL, message, "");
  357. #endif /* PANTHEIOS_USE_WIDE_STRINGS */
  358. return false;
  359. }
  360. }
  361. static string_t translate_pattern(PAN_CHAR_T const* pattern)
  362. {
  363. STLSOFT_ASSERT('?' == 0[pattern]);
  364. string_t str(pattern + 1);
  365. str = replace_all(str, PANTHEIOS_LITERAL_STRING("<Mon>"), PANTHEIOS_LITERAL_STRING("[JFMASOND][aepuco][nbrylgptvc]"));
  366. str = replace_all(str, PANTHEIOS_LITERAL_STRING("<D>"), PANTHEIOS_LITERAL_STRING("[0-9]"));
  367. str = replace_all(str, PANTHEIOS_LITERAL_STRING("<DD>"), PANTHEIOS_LITERAL_STRING("[0-9][0-9]"));
  368. return str;
  369. }
  370. /* ///////////////////////////// end of file //////////////////////////// */