str2str_tests.cpp
上传用户:dangjiwu
上传日期:2013-07-19
资源大小:42019k
文件大小:9k
源码类别:

Symbian

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Source last modified: $Id: str2str_tests.cpp,v 1.1.1.1.50.3 2004/07/09 01:45:55 hubbe Exp $
  3.  * 
  4.  * Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved.
  5.  * 
  6.  * The contents of this file, and the files included with this file,
  7.  * are subject to the current version of the RealNetworks Public
  8.  * Source License (the "RPSL") available at
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed
  10.  * the file under the current version of the RealNetworks Community
  11.  * Source License (the "RCSL") available at
  12.  * http://www.helixcommunity.org/content/rcsl, in which case the RCSL
  13.  * will apply. You may also obtain the license terms directly from
  14.  * RealNetworks.  You may not use this file except in compliance with
  15.  * the RPSL or, if you have a valid RCSL with RealNetworks applicable
  16.  * to this file, the RCSL.  Please see the applicable RPSL or RCSL for
  17.  * the rights, obligations and limitations governing use of the
  18.  * contents of the file.
  19.  * 
  20.  * Alternatively, the contents of this file may be used under the
  21.  * terms of the GNU General Public License Version 2 or later (the
  22.  * "GPL") in which case the provisions of the GPL are applicable
  23.  * instead of those above. If you wish to allow use of your version of
  24.  * this file only under the terms of the GPL, and not to allow others
  25.  * to use your version of this file under the terms of either the RPSL
  26.  * or RCSL, indicate your decision by deleting the provisions above
  27.  * and replace them with the notice and other provisions required by
  28.  * the GPL. If you do not delete the provisions above, a recipient may
  29.  * use your version of this file under the terms of any one of the
  30.  * RPSL, the RCSL or the GPL.
  31.  * 
  32.  * This file is part of the Helix DNA Technology. RealNetworks is the
  33.  * developer of the Original Code and owns the copyrights in the
  34.  * portions it created.
  35.  * 
  36.  * This file, and the files included with this file, is distributed
  37.  * and made available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY
  38.  * KIND, EITHER EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS
  39.  * ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES
  40.  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET
  41.  * ENJOYMENT OR NON-INFRINGEMENT.
  42.  * 
  43.  * Technology Compatibility Kit Test Suite(s) Location:
  44.  *    http://www.helixcommunity.org/content/tck
  45.  * 
  46.  * Contributor(s):
  47.  * 
  48.  * ***** END LICENSE BLOCK ***** */
  49. #include "./map_spec_tests.h"
  50. #include "chxmapstringtostring.h"
  51. #include "hx_ut_debug.h"
  52. #include "./kv_store.h"
  53. #include "./hxlist.h"
  54. #include "./find_match.h"
  55. template<>
  56. class MapSpecificTests<CHXMapStringToString>
  57. {
  58. public:
  59.     bool operator()();
  60. private:
  61.     bool TestIterator();
  62.     bool TestIterator2();
  63.     bool TestGetStartPosition();
  64.     bool TestGetNextAssoc();
  65.     bool TestSetCaseSensitive();
  66. };
  67. bool MapSpecificTests<CHXMapStringToString>::operator() ()
  68. {
  69.     bool ret = (TestIterator() &&
  70. TestIterator2() &&
  71. TestGetStartPosition() &&
  72. TestGetNextAssoc() &&
  73. TestSetCaseSensitive());
  74.     DPRINTF (D_ERROR, ("MapSpecificTests<CHXMapStringToString> : %dn",
  75.        ret));
  76.     return ret;
  77. }
  78. bool MapSpecificTests<CHXMapStringToString>::TestIterator()
  79. {
  80.     bool ret = true;
  81.     CHXMapStringToString map;
  82.     KeyValueStore<CHXString, CHXString> store;
  83.     for (int i = 0; i < 10; i++)
  84. store.Create(i);
  85.     for (int j = 0; j < store.GetCount(); j++)
  86. map.SetAt(store.GetKey(j), store.GetValue(j));
  87.     CHXMapStringToString::Iterator itr = map.Begin();
  88.     HLXList<int> matchList;
  89.     for (; ret && (itr != map.End()); ++itr)
  90.     {
  91. int index = 0;
  92. if (FindMatch<CHXString, CHXString>()(store, itr.get_key(), *itr, index))
  93. {
  94.     if (!matchList.Find(index))
  95. matchList.AddTail(index);
  96.     else
  97. ret = false;
  98. }
  99. else
  100.     ret = false;
  101.     }
  102.     if (ret)
  103. ret = (matchList.GetCount() == map.GetCount());
  104.     return ret;
  105. }
  106. bool MapSpecificTests<CHXMapStringToString>::TestIterator2()
  107. {
  108.     // This test is the same as TestIterator() except that
  109.     // it uses the default constructor of the iterator.
  110.     bool ret = true;
  111.     CHXMapStringToString map;
  112.     KeyValueStore<CHXString, CHXString> store;
  113.     for (int i = 0; i < 10; i++)
  114. store.Create(i);
  115.     for (int j = 0; j < store.GetCount(); j++)
  116. map.SetAt(store.GetKey(j), store.GetValue(j));
  117.     CHXMapStringToString::Iterator itr;
  118.     HLXList<int> matchList;
  119.     for (itr = map.Begin(); ret && (itr != map.End()); ++itr)
  120.     {
  121. int index = 0;
  122. if (FindMatch<CHXString, CHXString>()(store, itr.get_key(), *itr, index))
  123. {
  124.     if (!matchList.Find(index))
  125. matchList.AddTail(index);
  126.     else
  127. ret = false;
  128. }
  129. else
  130.     ret = false;
  131.     }
  132.     if (ret)
  133. ret = (matchList.GetCount() == map.GetCount());
  134.     return ret;
  135. }
  136. bool MapSpecificTests<CHXMapStringToString>::TestGetStartPosition()
  137. {
  138.     bool ret = false;
  139.     CHXMapStringToString map;
  140.     POSITION pos = map.GetStartPosition();
  141.     if (!pos)
  142.     {
  143. KeyValueStore<CHXString, CHXString> store;
  144. store.Create(0);
  145. map.SetAt(store.GetKey(0), store.GetValue(0));
  146. pos = map.GetStartPosition();
  147. if (pos)
  148.     ret = true;
  149. else
  150. {
  151.     DPRINTF (D_ERROR, ("MapSpecificTests<CHXMapStringToString>::TestGetStartPosition() : pos NULL for a non-empty mapn"));
  152. }
  153.     }
  154.     else
  155.     {
  156. DPRINTF (D_ERROR, ("MapSpecificTests<CHXMapStringToString>::TestGetStartPosition() : pos not NULL for an empty mapn"));
  157.     }
  158.     return ret;
  159. }
  160. bool MapSpecificTests<CHXMapStringToString>::TestGetNextAssoc()
  161. {
  162.     bool ret = true;
  163.     CHXMapStringToString map;
  164.     KeyValueStore<CHXString, CHXString> store;
  165.     for (int i = 0; i < 10; i++)
  166. store.Create(i);
  167.     for (int j = 0; j < store.GetCount(); j++)
  168. map.SetAt(store.GetKey(j), store.GetValue(j));
  169. #ifdef DO_MAP_DUMP
  170.     map.Dump();
  171. #endif /* DO_MAP_DUMP */
  172.     POSITION pos = map.GetStartPosition();
  173.     HLXList<int> matchList;
  174.     while (ret && pos)
  175.     {
  176. CHXString key;
  177. CHXString value;
  178. int index = 0;
  179. map.GetNextAssoc(pos, key, value);
  180. if (!FindMatch<CHXString, CHXString>()(store, key, value, index))
  181. {
  182.     DPRINTF (D_ERROR, ("MapSpecificTests<CHXMapStringToString>::TestGetNextAssoc() : failed to find the key/value pairn"));
  183.     
  184.     ret = false;
  185. }
  186. else if (matchList.Find(index))
  187. {
  188.     DPRINTF (D_ERROR, ("MapSpecificTests<CHXMapStringToString>::TestGetNextAssoc() : Item %d already visitedn", index));
  189.     ret = false;
  190. }
  191. else
  192.     matchList.AddTail(index);
  193.     }
  194.     if (ret && (matchList.GetCount() != map.GetCount()))
  195.     {
  196. DPRINTF (D_ERROR, ("MapSpecificTests<CHXMapStringToString>::TestGetNextAssoc() : items visited count doesn't match map item countn"));
  197. ret = false;
  198.     }
  199.     
  200.     return ret;
  201. }
  202. struct StrToStrTestData 
  203. {
  204.     const char* m_pKey;
  205.     bool m_success;
  206.     const char* m_value;
  207. };
  208. static const StrToStrTestData testData[] = {
  209.     {"aabcd", true  , "efghijk"},
  210.     {"Aabcd", false , "efghijk"},
  211.     {"Abcde", false , "lmnopqr"},
  212.     {"abcde", false , "lmnopqr"},
  213.     {"aBcde", true  , "lmnopqr"},
  214.     {"HeLiX", true  , "Client"},
  215.     {"HELIX", false , "Client"},
  216.     {"helix", false , "Client"},
  217.     {"heLIX", false , "Client"}
  218. };
  219. bool MapSpecificTests<CHXMapStringToString>::TestSetCaseSensitive()
  220. {
  221.     bool ret = true;
  222.     CHXMapStringToString map;
  223.     
  224.     int testCount = sizeof(testData) / sizeof(struct StrToStrTestData);
  225.     map.SetAt("aabcd", "efghijk");
  226.     map.SetAt("aBcde", "lmnopqr");
  227.     map.SetAt("HeLiX", "Client");
  228.     
  229.     for (int i = 0; ret && (i < testCount); i++)
  230.     {
  231. CHXString value;
  232. bool result = (map.Lookup(testData[i].m_pKey, value) == TRUE);
  233. if (result != testData[i].m_success)
  234. {
  235.     DPRINTF(D_ERROR, ("MapSpecificTests<CHXMapStringToOb>::TestSetCaseSensitive() : Test %d lookup got %d expected %dn",
  236.       i,
  237.       result,
  238.       testData[i].m_success));
  239.     ret = false;
  240. }
  241. else if (result && (value != testData[i].m_value))
  242. {
  243.     DPRINTF(D_ERROR, ("MapSpecificTests<CHXMapStringToOb>::TestSetCaseSensitive() : Test %d value got '%s' expected '%s'n",
  244.       i,
  245.       (const char*)value,
  246.       (const char*)testData[i].m_value));
  247.     ret = false;
  248. }
  249.     }
  250.     if (ret)
  251.     {
  252. map.RemoveAll();
  253. map.SetCaseSensitive(false);
  254. map.SetAt("aabcd", "efghijk");
  255. map.SetAt("aBcde", "lmnopqr");
  256. map.SetAt("HeLiX", "Client");
  257. for (int j = 0; ret && (j < testCount); j++)
  258. {
  259.     CHXString value;
  260.     bool result = (map.Lookup(testData[j].m_pKey, value) == TRUE);
  261.     if (!result)
  262.     {
  263. DPRINTF(D_ERROR, ("MapSpecificTests<CHXMapStringToOb>::TestSetCaseSensitive() : Test %d lookup failedn",
  264.   j));
  265. ret = false;
  266.     }
  267.     else if (value != testData[j].m_value)
  268.     {
  269. DPRINTF(D_ERROR, ("MapSpecificTests<CHXMapStringToOb>::TestSetCaseSensitive() : Test %d value got '%s' expected '%s'n",
  270.   j,
  271.   (const char*)value,
  272.   (const char*)testData[j].m_value));
  273. ret = false;
  274.     }
  275. }
  276.     }
  277.     return ret;
  278. }