sdpparse_test.cpp
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:16k
源码类别:

Symbian

开发平台:

C/C++

  1. /* ***** BEGIN LICENSE BLOCK ***** 
  2.  * Version: RCSL 1.0/RPSL 1.0 
  3.  *  
  4.  * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved. 
  5.  *      
  6.  * The contents of this file, and the files included with this file, are 
  7.  * subject to the current version of the RealNetworks Public Source License 
  8.  * Version 1.0 (the "RPSL") available at 
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed 
  10.  * the file under the RealNetworks Community Source License Version 1.0 
  11.  * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl, 
  12.  * in which case the RCSL will apply. You may also obtain the license terms 
  13.  * directly from RealNetworks.  You may not use this file except in 
  14.  * compliance with the RPSL or, if you have a valid RCSL with RealNetworks 
  15.  * applicable to this file, the RCSL.  Please see the applicable RPSL or 
  16.  * RCSL for the rights, obligations and limitations governing use of the 
  17.  * contents of the file.  
  18.  *  
  19.  * This file is part of the Helix DNA Technology. RealNetworks is the 
  20.  * developer of the Original Code and owns the copyrights in the portions 
  21.  * it created. 
  22.  *  
  23.  * This file, and the files included with this file, is distributed and made 
  24.  * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
  25.  * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
  26.  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS 
  27.  * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
  28.  * 
  29.  * Technology Compatibility Kit Test Suite(s) Location: 
  30.  *    http://www.helixcommunity.org/content/tck 
  31.  * 
  32.  * Contributor(s): 
  33.  *  
  34.  * ***** END LICENSE BLOCK ***** */ 
  35. #include "./sdpparse_test.h"
  36. #include "hx_ut_debug.h"
  37. #include "ut_param_util.h"
  38. #include "chxminiccf.h"
  39. SDPMediaDescParserTest::SDPMediaDescParserTest() :
  40.     m_pContext(0),
  41.     m_pParser(0),
  42.     m_nValues(0),
  43.     m_ppValues(0)
  44. {
  45.     m_pContext = new CHXMiniCCF();
  46.     
  47.     if (m_pContext)
  48.     {
  49. m_pContext->AddRef();
  50. m_pContext->QueryInterface(IID_IHXCommonClassFactory,
  51.    (void**)&m_pCCF);
  52.     }
  53. }
  54. SDPMediaDescParserTest::~SDPMediaDescParserTest()
  55. {    
  56.     DestroyValues();
  57.     delete m_pParser;
  58.     m_pParser = 0;
  59.     HX_RELEASE(m_pCCF);
  60.     HX_RELEASE(m_pContext);
  61. }
  62. const char* SDPMediaDescParserTest::DefaultCommandLine() const
  63. {
  64.     return "tsdpparse tsdpparse.in";
  65. }
  66.     
  67. void SDPMediaDescParserTest::GetCommandInfo(UTVector<HLXUnitTestCmdInfo*>& cmds)
  68. {
  69.     int index = 0;
  70.     cmds.Resize(index + 1);
  71.     cmds[index++] = 
  72. new HLXUnitTestCmdInfoDisp<SDPMediaDescParserTest>(this, 
  73.    "Init",
  74.    &SDPMediaDescParserTest::HandleInitCmd,
  75.    2);
  76.     cmds.Resize(index + 1);
  77.     cmds[index++] = 
  78. new HLXUnitTestCmdInfoDisp<SDPMediaDescParserTest>(this, 
  79.    "Parse",
  80.    &SDPMediaDescParserTest::HandleParseCmd,
  81.    4);
  82.     
  83.     cmds.Resize(index + 1);
  84.     cmds[index++] = 
  85. new HLXUnitTestCmdInfoDisp<SDPMediaDescParserTest>(this, 
  86.    "IntCount",
  87.    &SDPMediaDescParserTest::HandleIntCountCmd,
  88.    3);
  89.     cmds.Resize(index + 1);
  90.     cmds[index++] = 
  91. new HLXUnitTestCmdInfoDisp<SDPMediaDescParserTest>(this, 
  92.    "StringCount",
  93.    &SDPMediaDescParserTest::HandleStringCountCmd,
  94.    3);
  95.     cmds.Resize(index + 1);
  96.     cmds[index++] = 
  97. new HLXUnitTestCmdInfoDisp<SDPMediaDescParserTest>(this, 
  98.    "BufferCount",
  99.    &SDPMediaDescParserTest::HandleBufferCountCmd,
  100.    3);
  101.     cmds.Resize(index + 1);
  102.     cmds[index++] = 
  103. new HLXUnitTestCmdInfoDisp<SDPMediaDescParserTest>(this, 
  104.    "GetInt",
  105.    &SDPMediaDescParserTest::HandleGetIntCmd,
  106.    4);
  107.     cmds.Resize(index + 1);
  108.     cmds[index++] = 
  109. new HLXUnitTestCmdInfoDisp<SDPMediaDescParserTest>(this, 
  110.    "GetString",
  111.    &SDPMediaDescParserTest::HandleGetStringCmd,
  112.    4);
  113.     cmds.Resize(index + 1);
  114.     cmds[index++] = 
  115. new HLXUnitTestCmdInfoDisp<SDPMediaDescParserTest>(this, 
  116.    "GetBuffer",
  117.    &SDPMediaDescParserTest::HandleGetBufferCmd,
  118.    4);
  119. }
  120. HLXCmdBasedTest* SDPMediaDescParserTest::Clone() const
  121. {
  122.     return new SDPMediaDescParserTest();
  123. }
  124. bool SDPMediaDescParserTest::HandleInitCmd(const UTVector<UTString>& info)
  125. {
  126.     bool ret = false;
  127.     ULONG32 ulVersion = 0;
  128.     delete m_pParser;
  129.     m_pParser = 0;
  130.     if (!UTParamUtil::GetULong(info[1], ulVersion))
  131.     {
  132. DPRINTF(D_ERROR, ("SDPMediaDescParserTest::HandleInitCmd : failed to convert parametern"));
  133.     }
  134.     else
  135.     {
  136. m_pParser = new SDPMediaDescParser(ulVersion);
  137. HX_RESULT res = m_pParser->Init(m_pContext);
  138. if (HXR_OK != res)
  139. {
  140.     DPRINTF(D_ERROR, ("SDPMediaDescParserTest::HandleInitCmd : failed to init parser %08xn", res));
  141. }
  142. else
  143. {
  144.     ret = true;
  145. }
  146.     }
  147.     return ret;
  148. }
  149. bool SDPMediaDescParserTest::HandleParseCmd(const UTVector<UTString>& info)
  150. {
  151.     bool ret = false;
  152.     IHXBuffer* pBuf = 0;
  153.     HX_RESULT expectedRes;
  154.     unsigned int expectedNum;
  155.     //DPRINTF (D_ERROR, ("--------n"));
  156.     if (!GetHXResult(info[1], expectedRes) ||
  157. !UTParamUtil::GetUInt(info[2], expectedNum))
  158.     {
  159. DPRINTF(D_ERROR, ("SDPMediaDescParserTest::HandleParseCmd : failed to convert parametern"));
  160.     }
  161.     else if (m_pCCF &&
  162.      (HXR_OK == m_pCCF->CreateInstance(CLSID_IHXBuffer,
  163.        (void**)&pBuf)) &&
  164.      (HXR_OK == pBuf->Set((const unsigned char*)(const char*)info[3], 
  165.   info[3].length())))
  166.     {
  167. DestroyValues();
  168. HX_RESULT res = m_pParser->Parse(pBuf, m_nValues, m_ppValues);
  169. if (res != expectedRes)
  170. {
  171.     DPRINTF(D_ERROR, ("SDPMediaDescParserTest::HandleParseCmd : Parse result expected %08x, got %08xn",
  172.       expectedRes, res));
  173. }
  174. else if (m_nValues != expectedNum)
  175. {
  176.     DPRINTF(D_ERROR, ("SDPMediaDescParserTest::HandleParseCmd : m_nValues expected %u, got %un",
  177.       expectedNum, m_nValues));
  178. }
  179. else
  180. {
  181.     ret = true;
  182. }
  183.     }
  184.     HX_RELEASE(pBuf);
  185.     return ret;
  186. }
  187. bool SDPMediaDescParserTest::GetHXResult(const char* pStr, 
  188.  HX_RESULT& res) const
  189. {
  190.     bool ret = false;
  191.     res = 0;
  192.     if ((pStr[0] == '0') &&
  193. (pStr[1] == 'x'))
  194.     {
  195. pStr += 2;
  196. if (*pStr)
  197. {
  198.     int i = 0;
  199.     ret = true;
  200.     for(; ret && *pStr; *pStr++, i++)
  201.     {
  202. res <<= 4;
  203. if ((*pStr >= '0') && (*pStr <= '9'))
  204. {
  205.     res += *pStr - '0';
  206. }
  207. else if ((*pStr >= 'a') && (*pStr <= 'f'))
  208. {
  209.     res += (*pStr - 'a') + 10;
  210. }
  211. else if ((*pStr >= 'A') && (*pStr <= 'F'))
  212. {
  213.     res += (*pStr - 'A') + 10;
  214. }
  215. else
  216. {
  217.     DPRINTF(D_ERROR, ("SDPMediaDescParserTest::GetHXResult : invalid character '%c'n", *pStr));
  218.     ret = false;
  219. }
  220.     }
  221.     if (ret && (i != 8))
  222.     {
  223. DPRINTF(D_ERROR, ("SDPMediaDescParserTest::GetHXResult : wrong number of hex digitsn"));
  224. ret = false;
  225.     }
  226. }
  227.     }
  228.     else
  229.     {
  230. DPRINTF(D_ERROR, ("SDPMediaDescParserTest::GetHXResult : invalid hex stringn"));
  231.     }
  232.     return ret;
  233. }
  234. bool SDPMediaDescParserTest::HandleIntCountCmd(const UTVector<UTString>& info)
  235. {
  236.     bool ret = false;
  237.     unsigned int valueIndex = 0;
  238.     unsigned int expectedCount = 0;
  239.     
  240.     //DPRINTF (D_ERROR, ("========n"));
  241.     if (!UTParamUtil::GetUInt(info[1], valueIndex) ||
  242. !UTParamUtil::GetUInt(info[2], expectedCount))
  243.     {
  244. DPRINTF(D_ERROR, ("SDPMediaDescParserTest::HandleIntCountCmd : failed to convert parametern"));
  245.     }
  246.     else if (valueIndex >= m_nValues)
  247.     {
  248. DPRINTF(D_ERROR, ("SDPMediaDescParserTest::HandleIntCountCmd : invalid value indexn"));
  249.     }
  250.     else
  251.     {
  252. IHXValues* pHdr = m_ppValues[valueIndex];
  253. unsigned int ulCount = 0;
  254. const char* pName = 0;
  255. ULONG32 ulValue = 0;
  256. HX_RESULT res = pHdr->GetFirstPropertyULONG32(pName, ulValue);
  257. while (HXR_OK == res)
  258. {
  259.     //    DPRINTF (D_ERROR, ("Int %s -> %lun", pName, ulValue));
  260.     ulCount++;
  261.     res = pHdr->GetNextPropertyULONG32(pName, ulValue);
  262. }
  263. if (ulCount != expectedCount)
  264. {
  265.     DPRINTF(D_ERROR, ("SDPMediaDescParserTest::HandleIntCountCmd : expected %lu, got %lun",
  266.       expectedCount, ulCount));
  267. }
  268. else
  269. {
  270.     ret = true;
  271. }
  272.     }
  273.     return ret;
  274. }
  275. bool SDPMediaDescParserTest::HandleStringCountCmd(const UTVector<UTString>& info)
  276. {
  277.     bool ret = false;
  278.     unsigned int valueIndex = 0;
  279.     unsigned int expectedCount = 0;
  280.     
  281.     //DPRINTF (D_ERROR, ("=*=*=*=*n"));
  282.     if (!UTParamUtil::GetUInt(info[1], valueIndex) ||
  283. !UTParamUtil::GetUInt(info[2], expectedCount))
  284.     {
  285. DPRINTF(D_ERROR, ("SDPMediaDescParserTest::HandleStringCountCmd : failed to convert parametern"));
  286.     }
  287.     else if (valueIndex >= m_nValues)
  288.     {
  289. DPRINTF(D_ERROR, ("SDPMediaDescParserTest::HandleStringCountCmd : invalid value indexn"));
  290.     }
  291.     else
  292.     {
  293. IHXValues* pHdr = m_ppValues[valueIndex];
  294. unsigned int ulCount = 0;
  295. const char* pName = 0;
  296. IHXBuffer* pValue = 0;
  297. HX_RESULT res = pHdr->GetFirstPropertyCString(pName, pValue);
  298. while (HXR_OK == res)
  299. {
  300.     //DPRINTF (D_ERROR, ("String %s -> '%s'n", 
  301.     //        pName, 
  302.     //        pValue->GetBuffer()));
  303.     ulCount++;
  304.     HX_RELEASE(pValue);
  305.     res = pHdr->GetNextPropertyCString(pName, pValue);
  306. }
  307. HX_RELEASE(pValue);
  308. if (ulCount != expectedCount)
  309. {
  310.     DPRINTF(D_ERROR, ("SDPMediaDescParserTest::HandleStringCountCmd : expected %lu, got %lun",
  311.       expectedCount, ulCount));
  312. }
  313. else
  314. {
  315.     ret = true;
  316. }
  317.     }
  318.     return ret;
  319. }
  320. bool SDPMediaDescParserTest::HandleBufferCountCmd(const UTVector<UTString>& info)
  321. {    
  322.     bool ret = false;
  323.     unsigned int valueIndex = 0;
  324.     unsigned int expectedCount = 0;
  325.     
  326.     //DPRINTF (D_ERROR, ("-=#=-=#=-n"));
  327.     if (!UTParamUtil::GetUInt(info[1], valueIndex) ||
  328. !UTParamUtil::GetUInt(info[2], expectedCount))
  329.     {
  330. DPRINTF(D_ERROR, ("SDPMediaDescParserTest::HandleBufferCountCmd : failed to convert parametern"));
  331.     }
  332.     else if (valueIndex >= m_nValues)
  333.     {
  334. DPRINTF(D_ERROR, ("SDPMediaDescParserTest::HandleBufferCountCmd : invalid value indexn"));
  335.     }
  336.     else
  337.     {
  338. IHXValues* pHdr = m_ppValues[valueIndex];
  339. unsigned int ulCount = 0;
  340. const char* pName = 0;
  341. IHXBuffer* pValue = 0;
  342. HX_RESULT res = pHdr->GetFirstPropertyBuffer(pName, pValue);
  343. while (HXR_OK == res)
  344. {
  345.     //PrintBuffer(pName, pValue);
  346.     ulCount++;
  347.     HX_RELEASE(pValue);
  348.     res = pHdr->GetNextPropertyBuffer(pName, pValue);
  349. }
  350. HX_RELEASE(pValue);
  351. if (ulCount != expectedCount)
  352. {
  353.     DPRINTF(D_ERROR, ("SDPMediaDescParserTest::HandleBufferCountCmd : expected %lu, got %lun",
  354.       expectedCount, ulCount));
  355. }
  356. else
  357. {
  358.     ret = true;
  359. }
  360.     }
  361.     return ret;
  362. }
  363. bool SDPMediaDescParserTest::HandleGetIntCmd(const UTVector<UTString>& info)
  364. {
  365.     bool ret = false;
  366.     unsigned int valueIndex = 0;
  367.     unsigned int expectedValue = 0;
  368.     if (!UTParamUtil::GetUInt(info[1], valueIndex) ||
  369. !UTParamUtil::GetUInt(info[3], expectedValue))
  370.     {
  371. DPRINTF(D_ERROR, ("SDPMediaDescParserTest::HandleGetIntCmd : failed to convert parametern"));
  372.     }
  373.     else if (valueIndex >= m_nValues)
  374.     {
  375. DPRINTF(D_ERROR, ("SDPMediaDescParserTest::HandleGetIntCmd : invalid value indexn"));
  376.     }
  377.     else
  378.     {
  379. IHXValues* pHdr = m_ppValues[valueIndex];
  380. ULONG32 ulValue = 0;
  381. HX_RESULT res = pHdr->GetPropertyULONG32(info[2], ulValue);
  382. if (HXR_OK != res)
  383. {
  384.     DPRINTF(D_ERROR, ("SDPMediaDescParserTest::HandleGetIntCmd : get failedn"));
  385. }
  386. else if (ulValue != expectedValue)
  387. {
  388.     DPRINTF(D_ERROR, ("SDPMediaDescParserTest::HandleGetIntCmd : expected %lu, got %lun",
  389.       expectedValue, ulValue));
  390. }
  391. else
  392. {
  393.     ret = true;
  394. }
  395.     }
  396.     return ret;
  397. }
  398. bool SDPMediaDescParserTest::HandleGetStringCmd(const UTVector<UTString>& info)
  399. {
  400.     bool ret = false;
  401.     unsigned int valueIndex = 0;
  402.     if (!UTParamUtil::GetUInt(info[1], valueIndex))
  403.     {
  404. DPRINTF(D_ERROR, ("SDPMediaDescParserTest::HandleGetStringCmd : failed to convert parametern"));
  405.     }
  406.     else if (valueIndex >= m_nValues)
  407.     {
  408. DPRINTF(D_ERROR, ("SDPMediaDescParserTest::HandleGetStringCmd : invalid value indexn"));
  409.     }
  410.     else
  411.     {
  412. IHXValues* pHdr = m_ppValues[valueIndex];
  413. IHXBuffer* pValue = 0;
  414. HX_RESULT res = pHdr->GetPropertyCString(info[2], pValue);
  415. if (HXR_OK != res)
  416. {
  417.     DPRINTF(D_ERROR, ("SDPMediaDescParserTest::HandleGetStringCmd : get failedn"));
  418. }
  419. else if (strcmp((const char*)pValue->GetBuffer(), info[3]))
  420. {
  421.     DPRINTF(D_ERROR, ("SDPMediaDescParserTest::HandleGetStringCmd : expected '%s', got '%s'n",
  422.       (const char*)info[3], 
  423.       (const char*)pValue->GetBuffer()));
  424. }
  425. else
  426. {
  427.     ret = true;
  428. }
  429. HX_RELEASE(pValue);
  430.     }
  431.     return ret;
  432. }
  433. bool SDPMediaDescParserTest::HandleGetBufferCmd(const UTVector<UTString>& info)
  434. {
  435.     bool ret = false;
  436.     unsigned int valueIndex = 0;
  437.     IHXBuffer* pExpected = 0;
  438.     if (!UTParamUtil::GetUInt(info[1], valueIndex) ||
  439. !GetBuffer(info[3], pExpected))
  440.     {
  441. DPRINTF(D_ERROR, ("SDPMediaDescParserTest::HandleGetBufferCmd : failed to convert parametern"));
  442.     }
  443.     else if (valueIndex >= m_nValues)
  444.     {
  445. DPRINTF(D_ERROR, ("SDPMediaDescParserTest::HandleGetBufferCmd : invalid value indexn"));
  446.     }
  447.     else
  448.     {
  449. IHXValues* pHdr = m_ppValues[valueIndex];
  450. IHXBuffer* pValue = 0;
  451. HX_RESULT res = pHdr->GetPropertyBuffer(info[2], pValue);
  452. if (HXR_OK != res)
  453. {
  454.     DPRINTF(D_ERROR, ("SDPMediaDescParserTest::HandleGetBufferCmd : get failedn"));
  455. }
  456. else if (pValue->GetSize() != pExpected->GetSize())
  457. {
  458.     DPRINTF(D_ERROR, ("SDPMediaDescParserTest::HandleGetBufferCmd : size expected %lu, got %lun",
  459.       pExpected->GetSize(),
  460.       pValue->GetSize()));
  461. }
  462. else if (memcmp(pValue->GetBuffer(), pExpected->GetBuffer(), 
  463. pValue->GetSize()))
  464. {
  465.     DPRINTF(D_ERROR, ("SDPMediaDescParserTest::HandleGetBufferCmd : buffers don't matchn"));
  466. }
  467. else
  468. {
  469.     ret = true;
  470. }
  471. HX_RELEASE(pValue);
  472.     }
  473.     HX_RELEASE(pExpected);
  474.     return ret;
  475. }
  476. static int Char2Num(char ch)
  477. {
  478.     int ret = -1;
  479.     if ((ch >= '0') && (ch <= '9'))
  480. ret = ch - '0';
  481.     else if ((ch >= 'a') && (ch <= 'f'))
  482. ret = ch - 'a' + 10;
  483.     else if ((ch >= 'A') && (ch <= 'F'))
  484. ret = ch - 'A' + 10;
  485.     return ret;
  486. }
  487. bool SDPMediaDescParserTest::GetBuffer(const char* pStr, 
  488.        IHXBuffer*& pValue) const
  489. {
  490.     bool ret = false;
  491.     int length = strlen(pStr);
  492.     if (m_pCCF && (length > 0) && ((length & 0x1) == 0) &&
  493. (HXR_OK == m_pCCF->CreateInstance(CLSID_IHXBuffer, (void**)&pValue))&&
  494. (HXR_OK == pValue->SetSize(length / 2)))
  495.     {
  496. ret = true;
  497. unsigned char* pDest = pValue->GetBuffer();
  498. while(ret && *pStr)
  499. {
  500.     int high = Char2Num(*pStr++);
  501.     int low = Char2Num(*pStr++);
  502.     if ((high == -1) || (low == -1))
  503.     {
  504. ret = false;
  505.     }
  506.     else
  507.     {
  508. *pDest++ = (unsigned char)((high << 4) | low);
  509.     }
  510. }
  511.     }
  512.     if (!ret)
  513.     {
  514. HX_RELEASE(pValue);
  515.     }
  516.     return ret;
  517. }
  518. void SDPMediaDescParserTest::PrintBuffer(const char* pLabel, 
  519.  IHXBuffer* pBuf) const
  520. {
  521.     IHXBuffer* pStrBuf = 0;
  522.     if (m_pCCF &&
  523. (HXR_OK == m_pCCF->CreateInstance(CLSID_IHXBuffer, (void**)&pStrBuf))&&
  524. (HXR_OK == pStrBuf->SetSize(pBuf->GetSize() * 2 + 1)))
  525.     {
  526. static const char z_hexChars[] = "0123456789abcdef";
  527. UINT8* pSrc = pBuf->GetBuffer();
  528. char* pDest = (char*)pStrBuf->GetBuffer();
  529. for (ULONG32 i = 0; i < pBuf->GetSize(); i++)
  530. {
  531.     *pDest++ = z_hexChars[*pSrc >> 4];
  532.     *pDest++ = z_hexChars[*pSrc++ & 0xf];
  533. }
  534. *pDest = '';
  535. DPRINTF (D_ERROR, ("%s '%s'n", 
  536.    pLabel, (const char*)pStrBuf->GetBuffer()));
  537.     }
  538.     HX_RELEASE(pStrBuf);
  539. }
  540. void SDPMediaDescParserTest::DestroyValues()
  541. {
  542.     if (m_ppValues)
  543.     {
  544. for (UINT16 i = 0; i < m_nValues; i++)
  545. {
  546.     HX_RELEASE(m_ppValues[i]);
  547. }
  548.     }
  549.     m_nValues = 0;
  550.     delete [] m_ppValues;
  551.     m_ppValues = 0;
  552. }