llstreamtools_tut.cpp
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:30k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /**
  2.  * @file llstreamtools_tut.cpp
  3.  * @author Adroit
  4.  * @date February 2007
  5.  * @brief llstreamtools test cases.
  6.  *
  7.  * $LicenseInfo:firstyear=2007&license=viewergpl$
  8.  * 
  9.  * Copyright (c) 2007-2010, Linden Research, Inc.
  10.  * 
  11.  * Second Life Viewer Source Code
  12.  * The source code in this file ("Source Code") is provided by Linden Lab
  13.  * to you under the terms of the GNU General Public License, version 2.0
  14.  * ("GPL"), unless you have obtained a separate licensing agreement
  15.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  16.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  17.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  18.  * 
  19.  * There are special exceptions to the terms and conditions of the GPL as
  20.  * it is applied to this Source Code. View the full text of the exception
  21.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  22.  * online at
  23.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  24.  * 
  25.  * By copying, modifying or distributing this software, you acknowledge
  26.  * that you have read and understood your obligations described above,
  27.  * and agree to abide by those obligations.
  28.  * 
  29.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  30.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  31.  * COMPLETENESS OR PERFORMANCE.
  32.  * $/LicenseInfo$
  33.  */
  34.  
  35. #include <tut/tut.hpp>
  36. #include "linden_common.h"
  37. #include "llstreamtools.h"
  38. #include "lltut.h"
  39. namespace tut
  40. {
  41. struct streamtools_data
  42. {
  43. };
  44. typedef test_group<streamtools_data> streamtools_test;
  45. typedef streamtools_test::object streamtools_object;
  46. tut::streamtools_test streamtools_testcase("streamtools");
  47. //test cases for skip_whitespace()
  48. template<> template<>
  49. void streamtools_object::test<1>()
  50. {
  51. char arr[255];
  52. std::string str;
  53. std::string expected_result;
  54. std::string actual_result;
  55. std::istringstream is;
  56. is.str(str = "");
  57. ensure("skip_whitespace: empty string", (false == skip_whitespace(is)));
  58. is.clear();
  59. is.str(str = " SecondLife is a 3D World");
  60. skip_whitespace(is);
  61. is.get(arr, 255, '');
  62. expected_result = "SecondLife is a 3D World";
  63. ensure_equals("skip_whitespace: space", arr, expected_result);
  64. is.clear();
  65. is.str(str = "t          tSecondLife is a 3D World");
  66. skip_whitespace(is);
  67. is.get(arr, 255, '');
  68. expected_result = "SecondLife is a 3D World";
  69. ensure_equals("skip_whitespace: space and tabs", arr, expected_result);
  70. is.clear();
  71. is.str(str = "t          tSecondLife is a 3D World       ");
  72. skip_whitespace(is);
  73. is.get(arr, 255, '');
  74. expected_result = "SecondLife is a 3D World       ";
  75. ensure_equals("skip_whitespace: space at end", arr, expected_result);
  76. is.clear();
  77. is.str(str = "t rnSecondLife is a 3D World");
  78. skip_whitespace(is);
  79. is.get(arr, 255, '');
  80. expected_result = "rnSecondLife is a 3D World";
  81. ensure_equals("skip_whitespace: space at end", arr, expected_result);
  82. }
  83. //testcases for skip_emptyspaces()
  84. template<> template<>
  85. void streamtools_object::test<2>()
  86. {
  87. char arr[255];
  88. std::string str;
  89. std::string expected_result;
  90. std::string actual_result;
  91. std::istringstream is;
  92. bool ret;
  93. is.clear();
  94. is.str(str = "  tSecondLife is a 3D World.n");
  95. skip_emptyspace(is);
  96. is.get(arr, 255, '');
  97. expected_result = "SecondLife is a 3D World.n";
  98. ensure_equals("skip_emptyspace: space and tabs", arr, expected_result);
  99. is.clear();
  100. is.str(str = "  trn    r    SecondLife is a 3D World.n");
  101. skip_emptyspace(is);
  102. is.get(arr, 255, '');
  103. expected_result = "SecondLife is a 3D World.n";
  104. ensure_equals("skip_emptyspace: space, tabs, carriage return, newline", arr, expected_result);
  105. is.clear();
  106. is.str(str = "");
  107. ret = skip_emptyspace(is);
  108. is.get(arr, 255, '');
  109. ensure("skip_emptyspace: empty string", ret == false);
  110. is.clear();
  111. is.str(str = "  rn  t ");
  112. ret = skip_emptyspace(is);
  113. is.get(arr, 255, '');
  114. ensure("skip_emptyspace: space newline empty", ret == false);
  115. }
  116. //testcases for skip_comments_and_emptyspace()
  117. template<> template<>
  118. void streamtools_object::test<3>()
  119. {
  120. char arr[255];
  121. std::string str;
  122. std::string expected_result;
  123. std::string actual_result;
  124. std::istringstream is;
  125. bool ret;
  126. is.clear();
  127. is.str(str = "  trn    r    SecondLife is a 3D World.n");
  128. skip_comments_and_emptyspace(is);
  129. is.get(arr, 255, '');
  130. expected_result = "SecondLife is a 3D World.n";
  131. ensure_equals("skip_comments_and_emptyspace: space, tabs, carriage return, newline", arr, expected_result);
  132. is.clear();
  133. is.str(str = "#    rn    SecondLife is a 3D World.");
  134. skip_comments_and_emptyspace(is);
  135. is.get(arr, 255, '');
  136. expected_result = "SecondLife is a 3D World.";
  137. ensure_equals("skip_comments_and_emptyspace: skip comment - 1", arr, expected_result);
  138. is.clear();
  139. is.str(str = "#    rn  #  SecondLife is a 3D World. ##");
  140. skip_comments_and_emptyspace(is);
  141. is.get(arr, 255, '');
  142. expected_result = "";
  143. ensure_equals("skip_comments_and_emptyspace: skip comment - 2", arr, expected_result);
  144. is.clear();
  145. is.str(str = " rn  SecondLife is a 3D World. ##");
  146. skip_comments_and_emptyspace(is);
  147. is.get(arr, 255, '');
  148. expected_result = "SecondLife is a 3D World. ##";
  149. ensure_equals("skip_comments_and_emptyspace: skip comment - 3", arr, expected_result);
  150. is.clear();
  151. is.str(str = "");
  152. ret = skip_comments_and_emptyspace(is);
  153. is.get(arr, 255, '');
  154. ensure("skip_comments_and_emptyspace: empty string", ret == false);
  155. is.clear();
  156. is.str(str = "  rn  t # SecondLife is a 3D World");
  157. ret = skip_comments_and_emptyspace(is);
  158. is.get(arr, 255, '');
  159. ensure("skip_comments_and_emptyspace: space newline comment empty", ret == false);
  160. }
  161. //testcases for skip_line()
  162. template<> template<>
  163. void streamtools_object::test<4>()
  164. {
  165. char arr[255];
  166. std::string str;
  167. std::string expected_result;
  168. std::string actual_result;
  169. std::istringstream is;
  170. bool ret;
  171. is.clear();
  172. is.str(str = "SecondLife is a 3D World.nn It provides an opportunity to the site nuser to perform real life activities in virtual world.");
  173. skip_line(is);
  174. is.get(arr, 255, '');
  175. expected_result = "n It provides an opportunity to the site nuser to perform real life activities in virtual world.";
  176. ensure_equals("skip_line: 1 newline", arr, expected_result);
  177. is.clear();
  178. is.str(expected_result);
  179. skip_line(is);
  180. is.get(arr, 255, '');
  181. expected_result = " It provides an opportunity to the site nuser to perform real life activities in virtual world.";
  182. ensure_equals("skip_line: 2 newline", arr, expected_result);
  183. is.clear();
  184. is.str(expected_result);
  185. skip_line(is);
  186. is.get(arr, 255, '');
  187. expected_result = "user to perform real life activities in virtual world.";
  188. ensure_equals("skip_line: 3 newline", arr, expected_result);
  189. is.clear();
  190. is.str(str = "");
  191. ret = skip_line(is);
  192. ensure("skip_line: empty string", ret == false);
  193. }
  194. // testcases for skip_to_next_word()
  195. template<> template<>
  196. void streamtools_object::test<5>()
  197. {
  198. char arr[255];
  199. std::string str;
  200. std::string expected_result;
  201. std::string actual_result;
  202. std::istringstream is;
  203. bool ret;
  204. is.clear();
  205. is.str(str = "SecondLife is a 3D_World.nn It-provides an opportunity to the site nuser to perform real life activities in virtual world.");
  206. skip_to_next_word(is); // get past SecondLife
  207. is.get(arr, 255, '');
  208. expected_result = "is a 3D_World.nn It-provides an opportunity to the site nuser to perform real life activities in virtual world.";
  209. ensure_equals("skip_to_next_word: 1", arr, expected_result);
  210. is.clear();
  211. is.str(expected_result);
  212. skip_to_next_word(is); // get past is
  213. skip_to_next_word(is); // get past a
  214. skip_to_next_word(is); // get past 3D_World.nn 
  215. is.get(arr, 255, '');
  216. expected_result = "It-provides an opportunity to the site nuser to perform real life activities in virtual world.";
  217. ensure_equals("skip_to_next_word: get past .nn 2", arr, expected_result);
  218. is.clear();
  219. is.str(expected_result);
  220. skip_to_next_word(is); // get past It- 
  221. expected_result = "provides an opportunity to the site nuser to perform real life activities in virtual world.";
  222. is.get(arr, 255, '');
  223. ensure_equals("skip_to_next_word: get past -", arr, expected_result);
  224. is.clear();
  225. is.str(str = "");
  226. ret = skip_to_next_word(is);
  227. ensure("skip_line: empty string", ret == false);
  228. is.clear();
  229. is.str(str = "                   rnrn");
  230. ret = skip_to_next_word(is);
  231. ensure("skip_line: space new lines", ret == false);
  232. }
  233. //testcases for skip_to_end_of_next_keyword()
  234. template<> template<>
  235. void streamtools_object::test<6>()
  236. {
  237. char arr[255];
  238. std::string str;
  239. std::string expected_result;
  240. std::string actual_result;
  241. std::istringstream is;
  242. bool ret;
  243. is.clear();
  244. is.str(str = "FIRSTKEY followed by second delimiternSECONDKEYt SecondValue followed by third delimiter   nSECONDKEYnFOURTHKEY FOURTHVALUEis a 3DWorld.");
  245. ret = skip_to_end_of_next_keyword("FIRSTKEY", is); 
  246. is.get(arr, 255, '');
  247. expected_result = " followed by second delimiternSECONDKEYt SecondValue followed by third delimiter   nSECONDKEYnFOURTHKEY FOURTHVALUEis a 3DWorld.";
  248. ensure_equals("skip_to_end_of_next_keyword: 1", arr, expected_result);
  249. is.clear();
  250. is.str(expected_result);
  251. ret = skip_to_end_of_next_keyword("SECONDKEY", is); 
  252. is.get(arr, 255, '');
  253. expected_result = "t SecondValue followed by third delimiter   nSECONDKEYnFOURTHKEY FOURTHVALUEis a 3DWorld.";
  254. ensure_equals("skip_to_end_of_next_keyword: 2", arr, expected_result);
  255. is.clear();
  256. is.str(expected_result);
  257. ret = skip_to_end_of_next_keyword("SECONDKEY", is); 
  258. is.get(arr, 255, '');
  259. expected_result = "nFOURTHKEY FOURTHVALUEis a 3DWorld.";
  260. ensure_equals("skip_to_end_of_next_keyword: 3", arr, expected_result);
  261. is.clear();
  262. is.str(expected_result);
  263. ret = skip_to_end_of_next_keyword("FOURTHKEY", is); 
  264. is.get(arr, 255, '');
  265. expected_result = " FOURTHVALUEis a 3DWorld.";
  266. ensure_equals("skip_to_end_of_next_keyword: 4", arr, expected_result);
  267. is.clear();
  268. is.str(str = "{should be skipped as newline/space/tab does not follow but this one should be pickedn { Does it?n");
  269. ret = skip_to_end_of_next_keyword("{", is); 
  270. is.get(arr, 255, '');
  271. expected_result = " Does it?n";
  272. ensure_equals("skip_to_end_of_next_keyword: multiple delim matches on same line", arr, expected_result);
  273. is.clear();
  274. is.str(str = "Delim { could not be found at start");
  275. ret = skip_to_end_of_next_keyword("{", is); 
  276. ensure("skip_to_end_of_next_keyword: delim should not be present", ret == false);
  277. is.clear();
  278. is.str(str = "Empty Delim");
  279. ret = skip_to_end_of_next_keyword("", is); 
  280. ensure("skip_to_end_of_next_keyword: empty delim should not be valid", ret == false);
  281. is.clear();
  282. is.str(str = "");
  283. ret = skip_to_end_of_next_keyword("}", is); 
  284. ensure("skip_to_end_of_next_keyword: empty string", ret == false);
  285. }
  286. //testcases for get_word(std::string& output_string, std::istream& input_stream)
  287. template<> template<>
  288. void streamtools_object::test<7>()
  289. {
  290. std::string str;
  291. std::string expected_result;
  292. std::string actual_result;
  293. std::istringstream is;
  294. bool ret;
  295. is.clear();
  296. is.str(str = "  First Second t r  n Third  Fourth-ShouldThisBePartOfFourth  Fifthn");
  297. actual_result = "";
  298. ret = get_word(actual_result, is); 
  299. expected_result = "First";
  300. ensure_equals("get_word: 1", actual_result, expected_result);
  301. actual_result = "";
  302. ret = get_word(actual_result, is); 
  303. expected_result = "Second";
  304. ensure_equals("get_word: 2", actual_result, expected_result);
  305. actual_result = "";
  306. ret = get_word(actual_result, is); 
  307. expected_result = "Third";
  308. ensure_equals("get_word: 3", actual_result, expected_result);
  309. // the current implementation of get_word seems inconsistent with
  310. // skip_to_next_word. skip_to_next_word treats any character other
  311. // than alhpa-numeric and '_' as a delimter, while get_word()
  312. // treats only isspace() (i.e. space,  form-feed('f'),  newline  ('n'),  
  313. // carriage  return ('r'), horizontal tab ('t'), and vertical tab ('v')
  314. // as delimiters 
  315. actual_result = "";
  316. ret = get_word(actual_result, is); // will copy Fourth-ShouldThisBePartOfFourth
  317. expected_result = "Fourth-ShouldThisBePartOfFourth"; // as per current impl.
  318. ensure_equals("get_word: 4", actual_result, expected_result);
  319. actual_result = "";
  320. ret = get_word(actual_result, is); // will copy Fifth
  321. expected_result = "Fifth"; // as per current impl.
  322. ensure_equals("get_word: 5", actual_result, expected_result);
  323. is.clear();
  324. is.str(str = "  t r  n ");
  325. actual_result = "";
  326. ret = get_word(actual_result, is); 
  327. ensure("get_word: empty all spaces, newline tabs", ret == false);
  328. is.clear();
  329. is.str(str = "");
  330. actual_result = "";
  331. ret = get_word(actual_result, is); 
  332. ensure("get_word: empty string", ret == false);
  333. }
  334. // testcase for get_word and skip_to_next_word compatibility
  335. template<> template<>
  336. void streamtools_object::test<8>()
  337. {
  338. std::string str;
  339. std::string expected_result;
  340. std::string actual_result;
  341. std::istringstream is;
  342. bool ret;
  343. is.clear();
  344. is.str(str = "  First Second t r  n Third  Fourth-ShouldThisBePartOfFourth  Fifthn");
  345. actual_result = "";
  346. ret = get_word(actual_result, is); // First
  347. actual_result = "";
  348. ret = get_word(actual_result, is); // Second
  349. actual_result = "";
  350. ret = get_word(actual_result, is); // Third
  351. // the current implementation of get_word seems inconsistent with
  352. // skip_to_next_word. skip_to_next_word treats any character other
  353. // than alhpa-numeric and '_' as a delimter, while get_word()
  354. // treats only isspace() (i.e. space,  form-feed('f'),  newline  ('n'),  
  355. // carriage  return ('r'), horizontal tab ('t'), and vertical tab ('v')
  356. // as delimiters 
  357. actual_result = "";
  358. ret = get_word(actual_result, is); // will copy Fourth-ShouldThisBePartOfFourth
  359. actual_result = "";
  360. ret = get_word(actual_result, is); // will copy Fifth
  361. is.clear();
  362. is.str(str = "  First Second t r  n Third  Fourth_ShouldThisBePartOfFourth Fifthn");
  363. ret = skip_to_next_word(is);  // should now point to First
  364. ret = skip_to_next_word(is);  // should now point to Second
  365. ret = skip_to_next_word(is);  // should now point to Third
  366. ret = skip_to_next_word(is);  // should now point to Fourth
  367. ret = skip_to_next_word(is);  // should now point to ShouldThisBePartOfFourth
  368. expected_result = "";
  369. // will copy ShouldThisBePartOfFourth, the fifth word, 
  370. // while using get_word above five times result in getting "Fifth"
  371. ret = get_word(expected_result, is); 
  372. ensure_equals("get_word: skip_to_next_word compatibility", actual_result, expected_result);
  373. }
  374. //testcases for get_word(std::string& output_string, std::istream& input_stream, int n)
  375. template<> template<>
  376. void streamtools_object::test<9>()
  377. {
  378. std::string str;
  379. std::string expected_result;
  380. std::string actual_result;
  381. std::istringstream is;
  382. bool ret;
  383. is.clear();
  384. is.str(str = "  First Second t r  n Third  Fourth-ShouldThisBePartOfFourth  Fifthn");
  385. actual_result = "";
  386. ret = get_word(actual_result, is, 255);
  387. expected_result = "First";
  388. ensure_equals("get_word: 1", actual_result, expected_result);
  389. actual_result = "";
  390. ret = get_word(actual_result, is, 4); 
  391. expected_result = "Seco"; // should be cut short
  392. ensure_equals("get_word: 2", actual_result, expected_result);
  393. actual_result = "";
  394. ret = get_word(actual_result, is, 255); 
  395. expected_result = "nd"; // get remainder of Second
  396. ensure_equals("get_word: 3", actual_result, expected_result);
  397. actual_result = "";
  398. ret = get_word(actual_result, is, 0); // 0 size string 
  399. expected_result = ""; // get remainder of Second
  400. ensure_equals("get_word: 0 sized output", actual_result, expected_result);
  401. actual_result = "";
  402. ret = get_word(actual_result, is, 255); 
  403. expected_result = "Third"; 
  404. ensure_equals("get_word: 4", actual_result, expected_result);
  405. is.clear();
  406. is.str(str = "  t r  n ");
  407. actual_result = "";
  408. ret = get_word(actual_result, is, 255); 
  409. ensure("get_word: empty all spaces, newline tabs", ret == false);
  410. is.clear();
  411. is.str(str = "");
  412. actual_result = "";
  413. ret = get_word(actual_result, is, 255); 
  414. ensure("get_word: empty string", ret == false);
  415. }
  416. //test cases for get_line(std::string& output_string, std::istream& input_stream)
  417. template<> template<>
  418. void streamtools_object::test<10>()
  419. {
  420. std::string str;
  421. std::string expected_result;
  422. std::string actual_result;
  423. std::istringstream is;
  424. bool ret;
  425. is.clear();
  426. is.str(str = "First Second t rn Third  Fourth-ShouldThisBePartOfFourth  IsThisFifthn");
  427. actual_result = "";
  428. ret = get_line(actual_result, is);
  429. expected_result = "First Second t rn";
  430. ensure_equals("get_line: 1", actual_result, expected_result);
  431. actual_result = "";
  432. ret = get_line(actual_result, is);
  433. expected_result = " Third  Fourth-ShouldThisBePartOfFourth  IsThisFifthn";
  434. ensure_equals("get_line: 2", actual_result, expected_result);
  435. is.clear();
  436. is.str(str = "nFirst Line.nnSecond Line.n");
  437. actual_result = "";
  438. ret = get_line(actual_result, is);
  439. expected_result = "n";
  440. ensure_equals("get_line: First char as newline", actual_result, expected_result);
  441. actual_result = "";
  442. ret = get_line(actual_result, is);
  443. expected_result = "First Line.n";
  444. ensure_equals("get_line: 3", actual_result, expected_result);
  445. actual_result = "";
  446. ret = get_line(actual_result, is);
  447. expected_result = "n";
  448. ensure_equals("get_line: 4", actual_result, expected_result);
  449. actual_result = "";
  450. ret = get_line(actual_result, is);
  451. expected_result = "Second Line.n";
  452. ensure_equals("get_line: 5", actual_result, expected_result);
  453. }
  454. //test cases for get_line(std::string& output_string, std::istream& input_stream)
  455. template<> template<>
  456. void streamtools_object::test<11>()
  457. {
  458. std::string str;
  459. std::string expected_result;
  460. std::string actual_result;
  461. std::istringstream is;
  462. bool ret;
  463. is.clear();
  464. is.str(str = "One Line only with no newline");
  465. actual_result = "";
  466. ret = get_line(actual_result, is);
  467. expected_result = "One Line only with no newline";
  468. ensure_equals("get_line: No newline", actual_result, expected_result);
  469. ensure_equals("return value is good state of stream", ret, is.good());
  470. }
  471. //test cases for get_line(std::string& output_string, std::istream& input_stream)
  472. template<> template<>
  473. void streamtools_object::test<12>()
  474. {
  475. std::string str;
  476. std::string expected_result;
  477. std::string actual_result;
  478. std::istringstream is;
  479. bool ret;
  480. // need to be check if this test case is wrong or the implementation is wrong.
  481. is.clear();
  482. is.str(str = "Should not skip lone r.rn");
  483. actual_result = "";
  484. ret = get_line(actual_result, is);
  485. expected_result = "Should not skip lone r.rn";
  486. ensure_equals("get_line: carriage return skipped even though not followed by newline", actual_result, expected_result);
  487. }
  488. //test cases for get_line(std::string& output_string, std::istream& input_stream)
  489. template<> template<>
  490. void streamtools_object::test<13>()
  491. {
  492. std::string str;
  493. std::string expected_result;
  494. std::string actual_result;
  495. std::istringstream is;
  496. bool ret;
  497. is.clear();
  498. is.str(str = "n");
  499. actual_result = "";
  500. ret = get_line(actual_result, is);
  501. expected_result = "n";
  502. ensure_equals("get_line: Just newline", actual_result, expected_result);
  503. }
  504. //testcases for get_line(std::string& output_string, std::istream& input_stream, int n)
  505. template<> template<>
  506. void streamtools_object::test<14>()
  507. {
  508. std::string str;
  509. std::string expected_result;
  510. std::string actual_result;
  511. std::istringstream is;
  512. bool ret;
  513. is.clear();
  514. is.str(str = "First Line.nSecond Line.n");
  515. actual_result = "";
  516. ret = get_line(actual_result, is, 255);
  517. expected_result = "First Line.n";
  518. ensure_equals("get_line: Basic Operation", actual_result, expected_result);
  519. actual_result = "";
  520. ret = get_line(actual_result, is, sizeof("Second")-1);
  521. expected_result = "Secondn";
  522. ensure_equals("get_line: Insufficient length 1", actual_result, expected_result);
  523. actual_result = "";
  524. ret = get_line(actual_result, is, 255);
  525. expected_result = " Line.n";
  526. ensure_equals("get_line: Remainder after earlier insufficient length", actual_result, expected_result);
  527. is.clear();
  528. is.str(str = "One Line only with no newline with limited length");
  529. actual_result = "";
  530. ret = get_line(actual_result, is, sizeof("One Line only with no newline with limited length")-1);
  531. expected_result = "One Line only with no newline with limited lengthn";
  532. ensure_equals("get_line: No newline with limited length", actual_result, expected_result);
  533. is.clear();
  534. is.str(str = "One Line only with no newline");
  535. actual_result = "";
  536. ret = get_line(actual_result, is, 255);
  537. expected_result = "One Line only with no newline";
  538. ensure_equals("get_line: No newline", actual_result, expected_result);
  539. }
  540. //testcases for get_line(std::string& output_string, std::istream& input_stream, int n)
  541. template<> template<>
  542. void streamtools_object::test<15>()
  543. {
  544. std::string str;
  545. std::string expected_result;
  546. std::string actual_result;
  547. std::istringstream is;
  548. bool ret;
  549. is.clear();
  550. is.str(str = "One Line only with no newline");
  551. actual_result = "";
  552. ret = get_line(actual_result, is, 255);
  553. expected_result = "One Line only with no newline";
  554. ensure_equals("get_line: No newline", actual_result, expected_result);
  555. ensure_equals("return value is good state of stream", ret, is.good());
  556. }
  557. //testcases for remove_last_char()
  558. template<> template<>
  559. void streamtools_object::test<16>()
  560. {
  561. std::string str;
  562. std::string expected_result;
  563. bool ret;
  564. str = "SecondLife is a 3D World";
  565. ret = remove_last_char('d',str);
  566. expected_result = "SecondLife is a 3D Worl";
  567. ensure_equals("remove_last_char: should remove last char", str, expected_result);
  568. str = "SecondLife is a 3D World";
  569. ret = remove_last_char('W',str);
  570. expected_result = "SecondLife is a 3D World";
  571. ensure_equals("remove_last_char: should not remove as it is not last char", str, expected_result);
  572. ensure("remove_last_char: should return false", ret == false);
  573. str = "SecondLife is a 3D Worldn";
  574. ret = remove_last_char('n',str);
  575. expected_result = "SecondLife is a 3D World";
  576. ensure_equals("remove_last_char: should remove last newline", str, expected_result);
  577. ensure("remove_last_char: should remove newline and return true", ret == true);
  578. }
  579. //testcases for unescaped_string()
  580. template<> template<>
  581. void streamtools_object::test<17>()
  582. {
  583. std::string str;
  584. std::string expected_result;
  585. str = "SecondLife is a 3D world \n";
  586. unescape_string(str);
  587. expected_result = "SecondLife is a 3D world n";
  588. ensure_equals("unescape_string: newline", str, expected_result);
  589. str = "SecondLife is a 3D world \\t \n";
  590. unescape_string(str);
  591. expected_result = "SecondLife is a 3D world \t n";
  592. ensure_equals("unescape_string: backslash and newline", str, expected_result);
  593. str = "SecondLife is a 3D world \ ";
  594. unescape_string(str);
  595. expected_result = "SecondLife is a 3D world \ ";
  596. ensure_equals("unescape_string: insufficient to unescape", str, expected_result);
  597. str = "SecondLife is a 3D world \n \n \n \\\n";
  598. unescape_string(str);
  599. expected_result = "SecondLife is a 3D world n n n \n";
  600. ensure_equals("unescape_string: multipel newline and backslash", str, expected_result);
  601. str = "SecondLife is a 3D world \t";
  602. unescape_string(str);
  603. expected_result = "SecondLife is a 3D world \t";
  604. ensure_equals("unescape_string: leaves tab as is", str, expected_result);
  605. str = "\n";
  606. unescape_string(str);
  607. expected_result = "n";
  608. ensure_equals("unescape_string: only a newline", str, expected_result);
  609. }
  610. //testcases for escape_string()
  611. template<> template<>
  612. void streamtools_object::test<18>()
  613. {
  614. std::string str;
  615. std::string expected_result;
  616. str = "SecondLife is a 3D world n";
  617. escape_string(str);
  618. expected_result = "SecondLife is a 3D world \n";
  619. ensure_equals("escape_string: newline", str, expected_result);
  620. str = "SecondLife is a 3D world \t n";
  621. escape_string(str);
  622. expected_result = "SecondLife is a 3D world \\t \n";
  623. ensure_equals("escape_string: backslash and newline", str, expected_result);
  624. str = "SecondLife is a 3D world n n n \n";
  625. escape_string(str);
  626. expected_result = "SecondLife is a 3D world \n \n \n \\\n";
  627. ensure_equals("escape_string: multipel newline and backslash", str, expected_result);
  628. str = "SecondLife is a 3D world t";
  629. escape_string(str);
  630. expected_result = "SecondLife is a 3D world t";
  631. ensure_equals("unescape_string: leaves tab as is", str, expected_result);
  632. str = "n";
  633. escape_string(str);
  634. expected_result = "\n";
  635. ensure_equals("unescape_string: only a newline", str, expected_result);
  636. // serialization/deserialization escape->unescape
  637. str = "SecondLife is a 3D world n n n \n";
  638. escape_string(str);
  639. unescape_string(str);
  640. expected_result = "SecondLife is a 3D world n n n \n";
  641. ensure_equals("escape_string: should preserve with escape/unescape", str, expected_result);
  642. // serialization/deserialization  unescape->escape
  643. str = "SecondLife is a 3D world \n \n \n \\";
  644. unescape_string(str);
  645. escape_string(str);
  646. expected_result = "SecondLife is a 3D world \n \n \n \\";
  647. ensure_equals("escape_string: should preserve with unescape/escape", str, expected_result);
  648. }
  649. // testcases for replace_newlines_with_whitespace()
  650. template<> template<>
  651. void streamtools_object::test<19>()
  652. {
  653. std::string str;
  654. std::string expected_result;
  655. str = "SecondLife is a 3D nnworldn";
  656. replace_newlines_with_whitespace(str);
  657. expected_result = "SecondLife is a 3D   world ";
  658. ensure_equals("replace_newlines_with_whitespace: replace all newline", str, expected_result);
  659. str = "nSecondLife is a 3D worldn";
  660. replace_newlines_with_whitespace(str);
  661. expected_result = " SecondLife is a 3D world ";
  662. ensure_equals("replace_newlines_with_whitespace: begin and newline", str, expected_result);
  663. str = "SecondLife is a 3D worldrt";
  664. replace_newlines_with_whitespace(str);
  665. expected_result = "SecondLife is a 3D worldrt";
  666. ensure_equals("replace_newlines_with_whitespace: should only replace newline", str, expected_result);
  667. str = "";
  668. replace_newlines_with_whitespace(str);
  669. expected_result = "";
  670. ensure_equals("replace_newlines_with_whitespace: empty string", str, expected_result);
  671. }
  672. //testcases for remove_double_quotes()
  673. template<> template<>
  674. void streamtools_object::test<20>()
  675. {
  676. std::string str;
  677. std::string expected_result;
  678. str = "SecondLife is a ""3D world";
  679. remove_double_quotes(str);
  680. expected_result = "SecondLife is a 3D world";
  681. ensure_equals("remove_double_quotes: replace empty doube quotes", str, expected_result);
  682. str = "SecondLife is a "3D world";
  683. remove_double_quotes(str);
  684. expected_result = "SecondLife is a 3D world";
  685. ensure_equals("remove_double_quotes: keep as is it matching quote not found", str, expected_result);
  686. }
  687. // testcases for get_brace_count()
  688. template<> template<>
  689. void streamtools_object::test<21>()
  690. {
  691. }
  692. //testcases for get_keyword_and_value()
  693. template<> template<>
  694. void streamtools_object::test<22>()
  695. {
  696. std::string s = "SecondLife is a 3D World";
  697. std::string keyword;
  698. std::string value;
  699. get_keyword_and_value(keyword, value, s);
  700. ensure("get_keyword_and_value: Unable to get Keyword and Value", ((keyword == "SecondLife") && (value == "is a 3D World")));
  701. s = "SecondLife";
  702. get_keyword_and_value(keyword, value, s);
  703. ensure("get_keyword_and_value: value should be empty", ((keyword == "SecondLife") && (value == "")));
  704. s = "SecondLife t  is cool!     n";
  705. get_keyword_and_value(keyword, value, s);
  706. ensure("get_keyword_and_value: remove space before value but not after", ((keyword == "SecondLife") && (value == "is cool!     ")));
  707. }
  708. //testcases for get_keyword_and_value()
  709. template<> template<>
  710. void streamtools_object::test<23>()
  711. {
  712. std::string s;
  713. std::string keyword = "SOME PRIOR KEYWORD";
  714. std::string value = "SOME PRIOR VALUE";
  715. s = "SecondLifen";
  716. get_keyword_and_value(keyword, value, s);
  717. ensure("get_keyword_and_value: terminated with newline. value should be empty", ((keyword == "SecondLife") && (value == "")));
  718. }
  719. //testcases for get_keyword_and_value()
  720. template<> template<>
  721. void streamtools_object::test<24>()
  722. {
  723. std::string s;
  724. std::string keyword = "SOME PRIOR KEYWORD";
  725. std::string value = "SOME PRIOR VALUE";
  726. s = "";
  727. get_keyword_and_value(keyword, value, s);
  728. ensure("get_keyword_and_value: empty string. keyword value should empty", ((keyword == "") && (value == "")));
  729. }
  730. //testcase for fullread()
  731. template<> template<>
  732. void streamtools_object::test<25>()
  733. {
  734. std::string str = "First Line.nSecond Linen";
  735. std::istringstream is(str);
  736. char buf[255] = {0};
  737. fullread(is, buf, 255);
  738. ensure_memory_matches("fullread: read with newlines", (void*) buf,  str.size()-1, (void*) str.c_str(), str.size()-1);
  739. is.clear();
  740. is.str(str = "First Line.nSecond Linen");
  741. memset(buf, 0, 255);
  742. char expected_string[] = "First Line.nSecond";
  743. int len = sizeof(expected_string)-1;
  744. fullread(is, buf, len);
  745. ensure_memory_matches("fullread: read with newlines", (void*) buf, len, (void*) &expected_string, len);
  746. }
  747. //   testcases for operator >>
  748. template<> template<>
  749. void streamtools_object::test<26>()
  750. {
  751. char arr[255];
  752. std::string str;
  753. std::string toCheck = "SecondLife" ;
  754. std::string expected_result;
  755. std::istringstream stream("SecondLife is a 3D World");
  756. stream >> toCheck.c_str();
  757. stream.get(arr, 255, '');
  758. expected_result = " is a 3D World"; 
  759. ensure_equals("istream << operator", arr, expected_result);
  760. stream.clear();
  761. stream.str(str = "SecondLife is a 3D World");
  762. toCheck = "is";
  763. stream >> toCheck.c_str();
  764. ensure("istream << operator should have failed", stream.good() == false);
  765. }
  766. }