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

Symbian

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Source last modified: $Id: strlist_test.cpp,v 1.3.46.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 "./strlist_test.h"
  50. #include "hx_ut_debug.h"
  51. #include "ut_param_util.h"
  52. #include "./param_util.h"
  53. HLXStrListTest::HLXStrListTest() :
  54.     m_pos(0)
  55. {}
  56. HLXStrListTest::~HLXStrListTest()
  57. {}
  58. const char* HLXStrListTest::DefaultCommandLine() const
  59. {
  60.     return "tstrlist tstrlist.in";
  61. }
  62.     
  63. void HLXStrListTest::GetCommandInfo(UTVector<HLXUnitTestCmdInfo*>& cmds)
  64. {
  65.     cmds.Resize(36);
  66.     cmds[0] = new HLXUnitTestCmdInfoDisp<HLXStrListTest>(this, 
  67.     "GetCount",
  68.     &HLXStrListTest::HandleGetCountCmd,
  69.     2);
  70.     cmds[1] = new HLXUnitTestCmdInfoDisp<HLXStrListTest>(this, 
  71.     "IsEmpty",
  72.     &HLXStrListTest::HandleIsEmptyCmd,
  73.     2);
  74.     cmds[2] = new HLXUnitTestCmdInfoDisp<HLXStrListTest>(this, 
  75.     "GetHead",
  76.     &HLXStrListTest::HandleGetHeadCmd,
  77.     2);
  78.     cmds[3] = new HLXUnitTestCmdInfoDisp<HLXStrListTest>(this, 
  79.     "ReplaceHead",
  80.     &HLXStrListTest::HandleReplaceHeadCmd,
  81.     2);
  82.     cmds[4] = new HLXUnitTestCmdInfoDisp<HLXStrListTest>(this, 
  83.     "GetTail",
  84.     &HLXStrListTest::HandleGetTailCmd,
  85.     2);
  86.     cmds[5] = new HLXUnitTestCmdInfoDisp<HLXStrListTest>(this, 
  87.     "ReplaceTail",
  88.     &HLXStrListTest::HandleReplaceTailCmd,
  89.     2);
  90.     cmds[6] = new HLXUnitTestCmdInfoDisp<HLXStrListTest>(this, 
  91.     "RemoveHead",
  92.     &HLXStrListTest::HandleRemoveHeadCmd,
  93.     1);
  94.     cmds[7] = new HLXUnitTestCmdInfoDisp<HLXStrListTest>(this, 
  95.     "RemoveTail",
  96.     &HLXStrListTest::HandleRemoveTailCmd,
  97.     1);
  98.     cmds[8] = new HLXUnitTestCmdInfoDisp<HLXStrListTest>(this, 
  99.     "RemoveAll",
  100.     &HLXStrListTest::HandleRemoveAllCmd,
  101.     1);
  102.     cmds[9] = new HLXUnitTestCmdInfoDisp<HLXStrListTest>(this, 
  103.     "GetHeadPosition",
  104.     &HLXStrListTest::HandleGetHeadPosCmd,
  105.     1);
  106.     cmds[10] = new HLXUnitTestCmdInfoDisp<HLXStrListTest>(this, 
  107.     "GetTailPosition",
  108.     &HLXStrListTest::HandleGetTailPosCmd,
  109.     1);
  110.     cmds[11] = new HLXUnitTestCmdInfoDisp<HLXStrListTest>(this, 
  111.     "GetNext",
  112.     &HLXStrListTest::HandleGetNextCmd,
  113.     2);
  114.     cmds[12] = new HLXUnitTestCmdInfoDisp<HLXStrListTest>(this, 
  115.     "GetPrev",
  116.     &HLXStrListTest::HandleGetPrevCmd,
  117.     2);
  118.     cmds[13] = new HLXUnitTestCmdInfoDisp<HLXStrListTest>(this, 
  119.     "ReplacePrev",
  120.     &HLXStrListTest::HandleReplacePrevCmd,
  121.     2);
  122.     cmds[14] = new HLXUnitTestCmdInfoDisp<HLXStrListTest>(this, 
  123.     "GetAtNext",
  124.     &HLXStrListTest::HandleGetAtNextCmd,
  125.     3);
  126.     cmds[15] = new HLXUnitTestCmdInfoDisp<HLXStrListTest>(this, 
  127.     "GetAtPrev",
  128.     &HLXStrListTest::HandleGetAtPrevCmd,
  129.     3);
  130.     cmds[16] = new HLXUnitTestCmdInfoDisp<HLXStrListTest>(this, 
  131.     "ReplaceAtPrev",
  132.     &HLXStrListTest::HandleReplaceAtPrevCmd,
  133.     2);
  134.     cmds[17] = new HLXUnitTestCmdInfoDisp<HLXStrListTest>(this, 
  135.     "GetAt",
  136.     &HLXStrListTest::HandleGetAtCmd,
  137.     2);
  138.     cmds[18] = new HLXUnitTestCmdInfoDisp<HLXStrListTest>(this, 
  139.     "ReplaceAt",
  140.     &HLXStrListTest::HandleReplaceAtCmd,
  141.     2);
  142.     cmds[19] = new HLXUnitTestCmdInfoDisp<HLXStrListTest>(this, 
  143.     "SetAt",
  144.     &HLXStrListTest::HandleSetAtCmd,
  145.     2);
  146.     cmds[20] = new HLXUnitTestCmdInfoDisp<HLXStrListTest>(this, 
  147.     "RemoveAt",
  148.     &HLXStrListTest::HandleRemoveAtCmd,
  149.     1);
  150.     cmds[21] = new HLXUnitTestCmdInfoDisp<HLXStrListTest>(this, 
  151.     "InsertBefore",
  152.     &HLXStrListTest::HandleInsertBeforeCmd,
  153.     2);
  154.     cmds[22] = new HLXUnitTestCmdInfoDisp<HLXStrListTest>(this, 
  155.     "InsertAfter",
  156.     &HLXStrListTest::HandleInsertAfterCmd,
  157.     2);
  158.     cmds[23] = new HLXUnitTestCmdInfoDisp<HLXStrListTest>(this, 
  159.     "Find",
  160.     &HLXStrListTest::HandleFindCmd,
  161.     3);
  162.     cmds[24] = new HLXUnitTestCmdInfoDisp<HLXStrListTest>(this, 
  163.     "FindIndex",
  164.     &HLXStrListTest::HandleFindIndexCmd,
  165.     2);
  166.     cmds[25] = new HLXUnitTestCmdInfoDisp<HLXStrListTest>(this, 
  167.     "IsPosValid",
  168.     &HLXStrListTest::HandleIsPosValidCmd,
  169.     2);
  170.     cmds[26] = new HLXUnitTestCmdInfoDisp<HLXStrListTest>(this, 
  171.     "ClearPos",
  172.     &HLXStrListTest::HandleClearPosCmd,
  173.     1);
  174.     cmds[27] = new HLXUnitTestCmdInfoDisp<HLXStrListTest>(this, 
  175.     "TestIterator",
  176.     &HLXStrListTest::HandleTestIteratorCmd,
  177.     1);
  178.     cmds[28] = new HLXUnitTestCmdInfoDisp<HLXStrListTest>(this, 
  179.     "AddHeadString",
  180.     &HLXStrListTest::HandleAddHeadStringCmd,
  181.     2);
  182.     cmds[29] = new HLXUnitTestCmdInfoDisp<HLXStrListTest>(this, 
  183.     "AddTailString",
  184.     &HLXStrListTest::HandleAddTailStringCmd,
  185.     2);
  186.     cmds[30] = new HLXUnitTestCmdInfoDisp<HLXStrListTest>(this, 
  187.     "AddStringAlphabetic",
  188.     &HLXStrListTest::HandleAddStringAlphabeticCmd,
  189.     2);
  190.     cmds[31] = new HLXUnitTestCmdInfoDisp<HLXStrListTest>(this, 
  191.     "FindString",
  192.     &HLXStrListTest::HandleFindStringCmd,
  193.     4);
  194.     cmds[32] = new HLXUnitTestCmdInfoDisp<HLXStrListTest>(this, 
  195.     "FindPrefixSubstring",
  196.     &HLXStrListTest::HandleFindPrefixSubstringCmd,
  197.     4);
  198.     cmds[33] = new HLXUnitTestCmdInfoDisp<HLXStrListTest>(this, 
  199.     "RemoveHeadString",
  200.     &HLXStrListTest::HandleRemoveHeadStringCmd,
  201.     1);
  202.     cmds[34] = new HLXUnitTestCmdInfoDisp<HLXStrListTest>(this, 
  203.     "RemoveTailString",
  204.     &HLXStrListTest::HandleRemoveTailStringCmd,
  205.     1);
  206.     cmds[35] = new HLXUnitTestCmdInfoDisp<HLXStrListTest>(this, 
  207.     "Dump",
  208.     &HLXStrListTest::HandleDumpCmd,
  209.     1, 2);
  210. }
  211. HLXCmdBasedTest* HLXStrListTest::Clone() const
  212. {
  213.     return new HLXStrListTest();
  214. }
  215. CHXString* HLXStrListTest::CreateValue(const char* pStr)
  216. {
  217.     return new CHXString(pStr);
  218. }
  219. void HLXStrListTest::DestroyValue(void* pStr)
  220. {
  221.     delete (CHXString*)pStr;
  222. }
  223. bool HLXStrListTest::GetValue(void* pStr, CHXString& val)
  224. {
  225.     bool ret = false;
  226.     if (pStr)
  227.     {
  228. val = *((CHXString*)pStr);
  229. ret = true;
  230.     }
  231.     return ret;
  232. }
  233. bool HLXStrListTest::FindValue(const CHXString& value, 
  234.       LISTPOSITION pos, void*& pValue)
  235. {
  236.     bool ret = false;
  237.     pValue = 0;
  238.     for(; pos && !pValue; m_list.GetNext(pos))
  239.     {
  240. CHXString cur;
  241. if ((GetValue(m_list.GetAt(pos), cur)) &&
  242.     (cur == value))
  243.     pValue = m_list.GetAt(pos);
  244.     }
  245.     if (pValue == 0)
  246.     {
  247. pValue = CreateValue(value);
  248. ret = true;
  249.     }
  250.     return ret;
  251. }
  252. bool HLXStrListTest::HandleGetCountCmd(const UTVector<UTString>& info)
  253. {
  254.     bool ret = false;
  255.     int expected = 0;
  256.     if (!UTParamUtil::GetInt(info[1], expected))
  257.     {
  258. DPRINTF(D_ERROR, ("npSList::HandleGetCountCmd : failed to convert parametern"));
  259.     }
  260.     else if (m_list.GetCount() != expected)
  261.     {
  262. DPRINTF(D_ERROR, ("npSList::HandleGetCountCmd : got %d expected %dn",
  263.   m_list.GetCount(),
  264.   expected));
  265.     }
  266.     else
  267. ret = true;
  268.     return ret;
  269. }
  270. bool HLXStrListTest::HandleIsEmptyCmd(const UTVector<UTString>& info)
  271. {
  272.     bool ret = false;
  273.     bool expected = false;
  274.     if (!UTParamUtil::GetBool(info[1], expected))
  275.     {
  276. DPRINTF(D_ERROR, ("npSList::HandleIsEmptyCmd : failed to convert parametern"));
  277.     }
  278.     else if ((m_list.IsEmpty() == TRUE) != expected)
  279.     {
  280. DPRINTF(D_ERROR, ("npSList::HandleIsEmptyCmd : got %d expected %dn",
  281.   m_list.IsEmpty(),
  282.   expected));
  283.     }
  284.     else
  285. ret = true;
  286.     
  287.     return ret;
  288. }
  289. bool HLXStrListTest::HandleGetHeadCmd(const UTVector<UTString>& info)
  290. {
  291.     bool ret = false;
  292.     
  293.     CHXString expected(info[1]);
  294.     CHXString result;
  295.     if (!GetValue(m_list.GetHead(), result))
  296.     {
  297. DPRINTF(D_ERROR, ("npSList::HandleGetHeadCmd : failed to get valuen"));
  298.     }
  299.     else if (result != expected)
  300.     {
  301. DPRINTF(D_ERROR, ("npSList::HandleGetHeadCmd : got '%s' expected '%s'n",
  302.   (const char*)result,
  303.   (const char*)expected));
  304.     }
  305.     else
  306. ret = true;
  307.     return ret;
  308. }
  309. bool HLXStrListTest::HandleReplaceHeadCmd(const UTVector<UTString>& info)
  310. {
  311.     CHXString value(info[1]);
  312.     DestroyValue(m_list.GetHead());
  313.     m_list.GetHead() = CreateValue(value);
  314.     
  315.     return true;
  316. }
  317. bool HLXStrListTest::HandleGetTailCmd(const UTVector<UTString>& info)
  318. {
  319.     bool ret = false;
  320.     
  321.     CHXString expected(info[1]);
  322.     CHXString result;
  323.     if (!GetValue(m_list.GetTail(), result))
  324.     {
  325. DPRINTF(D_ERROR, ("npSList::HandleGetTailCmd : failed to get valuen"));
  326.     }
  327.     else if (result != expected)
  328.     {
  329. DPRINTF(D_ERROR, ("npSList::HandleGetTailCmd : got '%s' expected '%s'n",
  330.   (const char*)result,
  331.   (const char*)expected));
  332.     }
  333.     else
  334. ret = true;
  335.     return ret;
  336. }
  337. bool HLXStrListTest::HandleReplaceTailCmd(const UTVector<UTString>& info)
  338. {
  339.     CHXString value(info[1]);
  340.     DestroyValue(m_list.GetHead());
  341.     m_list.GetTail() = CreateValue(value);
  342.     return true;
  343. }
  344. bool HLXStrListTest::HandleRemoveHeadCmd(const UTVector<UTString>& /*info*/)
  345. {
  346.     DestroyValue(m_list.RemoveHead());
  347.     return true;
  348. }
  349. bool HLXStrListTest::HandleRemoveTailCmd(const UTVector<UTString>& /*info*/)
  350. {
  351.     DestroyValue(m_list.RemoveTail());
  352.     return true;
  353. }
  354. bool HLXStrListTest::HandleRemoveAllCmd(const UTVector<UTString>& /*info*/)
  355. {
  356.     m_list.RemoveAll();
  357.     return true;
  358. }
  359. bool HLXStrListTest::HandleGetHeadPosCmd(const UTVector<UTString>& /*info*/)
  360. {
  361.     m_pos = m_list.GetHeadPosition();
  362.     return true;
  363. }
  364. bool HLXStrListTest::HandleGetTailPosCmd(const UTVector<UTString>& /*info*/)
  365. {
  366.     m_pos = m_list.GetTailPosition();
  367.     return true;
  368. }
  369. bool HLXStrListTest::HandleGetNextCmd(const UTVector<UTString>& info)
  370. {
  371.     bool ret = false;
  372.     CHXString expected(info[1]);
  373.     CHXString result;
  374.     if (!GetValue(m_list.GetNext(m_pos), result))
  375.     {
  376. DPRINTF(D_ERROR, ("npSList::HandleGetNextCmd : failed to get valuen"));
  377.     }
  378.     else if (result != expected)
  379.     {
  380. DPRINTF(D_ERROR, ("npSList::HandleGetNextCmd : got '%s' expected '%s'n",
  381.   (const char*)result,
  382.   (const char*)expected));
  383.     }
  384.     else
  385. ret = true;
  386.     return ret;
  387. }
  388. bool HLXStrListTest::HandleGetPrevCmd(const UTVector<UTString>& info)
  389. {
  390.     bool ret = false;
  391.     CHXString expected(info[1]);
  392.     CHXString result;
  393.     if (!GetValue(m_list.GetPrev(m_pos), result))
  394.     {
  395. DPRINTF(D_ERROR, ("npSList::HandleGetPrevCmd : failed to get valuen"));
  396.     }
  397.     else if (result != expected)
  398.     {
  399. DPRINTF(D_ERROR, ("npSList::HandleGetPrevCmd : got '%s' expected '%s'n",
  400.   (const char*)result,
  401.   (const char*)expected));
  402.     }
  403.     else
  404. ret = true;
  405.     return ret;
  406. }
  407. bool HLXStrListTest::HandleReplacePrevCmd(const UTVector<UTString>& info)
  408. {
  409.     CHXString value(info[1]);
  410.     LISTPOSITION tmpPos = m_pos;
  411.     DestroyValue(m_list.GetPrev(tmpPos));
  412.     m_list.GetPrev(m_pos) = CreateValue(value);
  413.     return true;
  414. }
  415. bool HLXStrListTest::HandleGetAtNextCmd(const UTVector<UTString>& info)
  416. {
  417.     bool ret = false;
  418.     bool expectValid = false;
  419.     CHXString expected(info[2]);
  420.     if (!UTParamUtil::GetBool(info[1], expectValid))
  421.     {
  422. DPRINTF(D_ERROR, ("npSList::HandleGetAtNextCmd : failed to convert parametern"));
  423.     }
  424.     else
  425.     {
  426. CHXString result;
  427. bool resultValid = GetValue(m_list.GetAtNext(m_pos), result);
  428. if (expectValid != resultValid)
  429. {
  430.     DPRINTF(D_ERROR, ("npSList::HandleGetAtNextCmd : got valid=%d expected valid=%dn",
  431.       resultValid,
  432.       expectValid));
  433. }
  434. else if (expectValid && (result != expected))
  435. {
  436.     DPRINTF(D_ERROR, ("npSList::HandleGetAtNextCmd : got '%s' expected '%s'n",
  437.       (const char*)result,
  438.       (const char*)expected));
  439. }
  440. else
  441.     ret = true;
  442.     }
  443.     return ret;
  444. }
  445. bool HLXStrListTest::HandleGetAtPrevCmd(const UTVector<UTString>& info)
  446. {
  447.     bool ret = false;
  448.     bool expectValid = false;
  449.     CHXString expected(info[2]);
  450.     if (!UTParamUtil::GetBool(info[1], expectValid))
  451.     {
  452. DPRINTF(D_ERROR, ("npSList::HandleGetAtPrevCmd : failed to convert parametern"));
  453.     }
  454.     else
  455.     {
  456. CHXString result;
  457. bool resultValid = GetValue(m_list.GetAtPrev(m_pos), result);
  458. if (expectValid != resultValid)
  459. {
  460.     DPRINTF(D_ERROR, ("npSList::HandleGetAtPrevCmd : got valid=%d expected valid=%dn",
  461.       resultValid,
  462.       expectValid));
  463. }
  464. else if (expectValid && (result != expected))
  465. {
  466.     DPRINTF(D_ERROR, ("npSList::HandleGetAtPrevCmd : got '%s' expected '%s'n",
  467.       (const char*)result,
  468.       (const char*)expected));
  469. }
  470. else
  471.     ret = true;
  472.     }
  473.     return ret;
  474. }
  475. bool HLXStrListTest::HandleReplaceAtPrevCmd(const UTVector<UTString>& info)
  476. {
  477.     CHXString value(info[1]);
  478.     
  479.     LISTPOSITION tmpPos = m_pos;
  480.     DestroyValue(m_list.GetAtPrev(tmpPos));
  481.     m_list.GetAtPrev(m_pos) = CreateValue(value);
  482.     return true;
  483. }
  484. bool HLXStrListTest::HandleGetAtCmd(const UTVector<UTString>& info)
  485. {
  486.     bool ret = false;
  487.     CHXString expected(info[1]);
  488.     CHXString result;
  489.     if (!GetValue(m_list.GetAt(m_pos), result))
  490.     {
  491. DPRINTF(D_ERROR, ("npSList::HandleGetAtCmd : invalid valuen"));
  492.     }
  493.     else if (result != expected)
  494.     {
  495. DPRINTF(D_ERROR, ("npSList::HandleGetAtCmd : got '%s' expected '%s'n",
  496.   (const char*)result,
  497.   (const char*)expected));
  498.     }
  499.     else
  500. ret = true;
  501.     return ret;
  502. }
  503. bool HLXStrListTest::HandleReplaceAtCmd(const UTVector<UTString>& info)
  504. {
  505.     CHXString value(info[1]);
  506.     
  507.     DestroyValue(m_list.GetAt(m_pos));
  508.     m_list.GetAt(m_pos) = CreateValue(value);
  509.     return true;
  510. }
  511. bool HLXStrListTest::HandleSetAtCmd(const UTVector<UTString>& info)
  512. {
  513.     CHXString value(info[1]);
  514.     DestroyValue(m_list.GetAt(m_pos));
  515.     m_list.SetAt(m_pos, CreateValue(value));
  516.     return true;
  517. }
  518. bool HLXStrListTest::HandleRemoveAtCmd(const UTVector<UTString>& /*info*/)
  519. {
  520.     m_pos = m_list.RemoveAt(m_pos);
  521.     return true;
  522. }
  523. bool HLXStrListTest::HandleInsertBeforeCmd(const UTVector<UTString>& info)
  524. {
  525.     CHXString value(info[1]);
  526.     
  527.     m_pos = m_list.InsertBefore(m_pos, CreateValue(value));
  528.     return true;
  529. }
  530. bool HLXStrListTest::HandleInsertAfterCmd(const UTVector<UTString>& info)
  531. {
  532.     CHXString value(info[1]);
  533.     
  534.     m_pos = m_list.InsertAfter(m_pos, CreateValue(value));
  535.     return true;
  536. }
  537. bool HLXStrListTest::HandleFindCmd(const UTVector<UTString>& info)
  538. {
  539.     bool ret = false;
  540.     CHXString value(info[1]);
  541.     bool useCurrentPos = false;
  542.     if (!UTParamUtil::GetBool(info[2], useCurrentPos))
  543.     {
  544. DPRINTF(D_ERROR, ("npSList::HandleFindCmd : failed to convert parametern"));
  545.     }
  546.     else
  547.     {
  548. LISTPOSITION pos = (useCurrentPos) ? m_pos : m_list.GetHeadPosition();
  549. void* pValue = 0;
  550. bool destroyValue = FindValue(value, pos, pValue);
  551. if (useCurrentPos)
  552.     m_pos = m_list.Find(pValue, pos);
  553. else
  554.     m_pos =  m_list.Find(pValue);
  555. if (destroyValue)
  556.     DestroyValue(pValue);
  557. ret = true;
  558.     }
  559.     return ret;
  560. }
  561. bool HLXStrListTest::HandleFindIndexCmd(const UTVector<UTString>& info)
  562. {
  563.     bool ret = false;
  564.     int index = 0;
  565.     if (!UTParamUtil::GetInt(info[1], index))
  566.     {
  567. DPRINTF(D_ERROR, ("npSList::HandleFindCmd : failed to convert parametern"));
  568.     }
  569.     else
  570.     {
  571. m_pos = m_list.FindIndex(index);
  572. ret = true;
  573.     }
  574.     return ret;
  575. }
  576. bool HLXStrListTest::HandleIsPosValidCmd(const UTVector<UTString>& info)
  577. {
  578.     bool ret = false;
  579.     bool expected = false;
  580.     if (!UTParamUtil::GetBool(info[1], expected))
  581.     {
  582. DPRINTF(D_ERROR, ("npSList::HandleIsPosValidCmd : failed to convert parametern"));
  583.     }
  584.     else 
  585.     {
  586. bool result = (m_pos != 0);
  587. if (result != expected)
  588. {
  589.     DPRINTF(D_ERROR, ("npSList::HandleIsPosValidCmd : got %d expected %dn",
  590.       result,
  591.       expected));
  592. }
  593. else
  594.     ret = true;
  595.     }
  596.     return ret;
  597. }
  598. bool HLXStrListTest::HandleClearPosCmd(const UTVector<UTString>& /*info*/)
  599. {
  600.     m_pos = 0;
  601.     return true;
  602. }
  603. bool HLXStrListTest::HandleTestIteratorCmd(const UTVector<UTString>& /*info*/)
  604. {
  605.     bool ret = true;
  606.     LISTPOSITION pos = m_list.GetHeadPosition();
  607.     CHXSimpleList::Iterator itr = m_list.Begin();
  608.     for(; ret && (itr != m_list.End()) && pos; ++itr)
  609.     {
  610. CHXString expected;
  611. CHXString result;
  612. if (!GetValue(m_list.GetNext(pos), expected))
  613. {
  614.     DPRINTF (D_ERROR,("HLXStrListTest::HandleTestIteratorCmd() : failed to get expected valuen"));
  615.     ret = false;
  616. }
  617. else if (!GetValue(*itr, result))
  618. {
  619.     DPRINTF (D_ERROR,("HLXStrListTest::HandleTestIteratorCmd() : failed to get result valuen"));
  620.     ret = false;
  621. }
  622. else if (expected != result)
  623. {
  624.     DPRINTF (D_ERROR,("HLXStrListTest::HandleTestIteratorCmd() : got '%s' expected '%s'n",
  625.       (const char*)result,
  626.       (const char*)expected));
  627.     ret = false;
  628. }
  629.     }
  630.     if (ret)
  631.     {
  632. // The comparisons are arranged this way so 
  633. // that I can test the == operator
  634. if (itr == m_list.End())
  635. {
  636.     if (pos != 0)
  637.     {
  638. DPRINTF (D_ERROR,("HLXStrListTest::HandleTestIteratorCmd() : Position is not at the endn"));
  639. ret = false;
  640.     }
  641. }
  642. else
  643. {
  644.     DPRINTF (D_ERROR,("HLXStrListTest::HandleTestIteratorCmd() : iterator not at the endn"));
  645.     ret = false;
  646. }
  647.     }
  648.     return ret;
  649. }
  650. bool HLXStrListTest::HandleAddHeadStringCmd(const UTVector<UTString>& info)
  651. {
  652.     m_list.AddHeadString(info[1]);
  653.     return true;
  654. }
  655. bool HLXStrListTest::HandleAddTailStringCmd(const UTVector<UTString>& info)
  656. {
  657.     m_list.AddTailString(info[1]);
  658.     return true;
  659. }
  660. bool HLXStrListTest::HandleAddStringAlphabeticCmd(const UTVector<UTString>& info)
  661. {
  662.     m_list.AddStringAlphabetic(info[1]);
  663.     return true;
  664. }
  665. bool HLXStrListTest::HandleFindStringCmd(const UTVector<UTString>& info)
  666. {
  667.     bool ret = false;
  668.     bool useCurrentPos = false;
  669.     bool isCaseSensitive = false;
  670.     if (!UTParamUtil::GetBool(info[2], useCurrentPos) ||
  671. !UTParamUtil::GetBool(info[3], isCaseSensitive))
  672.     {
  673. DPRINTF(D_ERROR, ("npSList::HandleFindStringCmd : failed to convert parametern"));
  674.     }
  675.     else
  676.     {
  677. LISTPOSITION pos = (useCurrentPos) ? m_pos : 0;
  678. m_pos = m_list.FindString(info[1], pos, isCaseSensitive);
  679. ret = true;
  680.     }
  681.     return ret;
  682. }
  683. bool HLXStrListTest::HandleFindPrefixSubstringCmd(const UTVector<UTString>& info)
  684. {
  685.     bool ret = false;
  686.     
  687.     bool useCurrentPos = false;
  688.     bool isCaseSensitive = false;
  689.     if (!UTParamUtil::GetBool(info[2], useCurrentPos) ||
  690. !UTParamUtil::GetBool(info[3], isCaseSensitive))
  691.     {
  692. DPRINTF(D_ERROR, ("npSList::HandleFindPrefixSubstringCmd : failed to convert parametern"));
  693.     }
  694.     else
  695.     {
  696. LISTPOSITION pos = (useCurrentPos) ? m_pos : 0;
  697. m_pos = m_list.FindPrefixSubstring(info[1], pos, isCaseSensitive);
  698. ret = true;
  699.     }
  700.     return ret;
  701. }
  702. bool HLXStrListTest::HandleRemoveHeadStringCmd(const UTVector<UTString>& /*info*/)
  703. {
  704.     m_list.RemoveHeadString();
  705.     return true;
  706. }
  707. bool HLXStrListTest::HandleRemoveTailStringCmd(const UTVector<UTString>& /*info*/)
  708. {
  709.     m_list.RemoveTailString();
  710.     return true;
  711. }
  712. bool HLXStrListTest::HandleDumpCmd(const UTVector<UTString>& info)
  713. {
  714.     if (info.Nelements() >= 2) m_list.Dump((const char*)info[1]);
  715.     else m_list.Dump();
  716.     return true;
  717. }