CppUnit(C++单元测试)--SuiteUI类

 

/**
* @file 本文件名为SuiteUI.h
*
* 本文件仅包含类SuiteUI声明(定义).
*
* @author MM
* @version 1.0
* @date 2007-05-20
*/

#ifndef SUITEUI_H_HEADER_INCLUDED
#define SUITEUI_H_HEADER_INCLUDED

#pragma warning (disable: 4786)

#include <string>
#include <vector>

using std::string;
using std::vector;

namespace CppUnit
{
/**
* @brief 将每个测试集测试的结果显示在控制台上.
*
*
* 用法简介:
*
* 构造时传入测试集的名称,显示的长度和宽度,单位是字符串"- "的长度;
*
* 利用add_testItem()方法添加过程语句;
*
* 利用add_testResult()方法添加结果语句;
*
* 然后调用show()方法显示结果.
*
*/
class SuiteUI
{
private:

   string m_name;      ///< 名
   unsigned short m_width;    ///< 宽
   unsigned short m_high;    ///< 高

   vector<string> m_testItmes;   ///< 过程集
   vector<string> m_testResults; ///< 结果集

   void adapt();
   unsigned short cal(string str);
  
public:
  
   SuiteUI(std::string name = "Suite",unsigned short wid = 30,unsigned short high = 20);
   void add_testItem(const string &testItem);
   void add_testResult(const string &testResult);
   void show();
};
}

#endif /* SUITEUI_H_HEADER_INCLUDED */

 

/**
* @file 本文件名为SuiteUI.cpp
*
* 本文件仅包含类SuiteUI的实现.
*
* @author 蒙德鑫
* @version 1.0
* @date 2007-05-20
*/

#include "SuiteUI.h"
#include <iostream>

//using std::vector<std::string>::iterator;
using std::cout;
using std::endl;

namespace CppUnit
{

/**
* @brief 类SuiteUI的构造方法.
*
* 构造一个SuiteUI对象,传入各个参数;
*
* @param name 要显示的suite的名称.
*
* @param wid 要显示的宽度,单位是字符串"- "的长度.
*
* @param high 要显示的高度,单位是字符串"- "的长度.
*
* @see TestSuite
*/
SuiteUI::SuiteUI(std::string name /* = "Suite" */,unsigned short wid /* = 30 */,unsigned short high /* = 20 */):
      m_name(name),m_width(wid),m_high(high)
{
   //
}


/**
* @brief 添加过程语句.
*
* 向过程集m_testItems添加过程语句.
*
* @param testItem 要添加的过程语句.
*
* @return 无返回值
*/
void SuiteUI::add_testItem(const string &testItem)
{
   m_testItmes.push_back(testItem);
}


/**
* @brief 添加结果语句.
*
* 向过程集m_testResults添加结果语句.
*
* @return 无返回值
*/
void SuiteUI::add_testResult(const string &testResult)
{
   m_testResults.push_back(testResult);
}


/**
* @brief 适当地宽度或高度.
*
* 根据宽度和高度,以及过程集和结果集语句的个数,当宽度或者高度不够时,会适当地宽度或高度.
*
* @return 无返回值
*/
void SuiteUI::adapt()
{
   unsigned short maxWidth = 0;
   unsigned short maxHigth = 0;

   std::vector<std::string>::iterator pr;
   for (pr = m_testItmes.begin(); pr != m_testItmes.end(); pr++)
   {
    if((*pr).size() > maxWidth) //找出语句的最大长度
     maxWidth = (*pr).size();

    ++maxHigth;
   }

   for (pr = m_testResults.begin(); pr != m_testResults.end(); pr++)
   {
    if((*pr).size() > maxWidth) //找出语句的最大长度
     maxWidth = (*pr).size();

    ++maxHigth;
   }

   if(m_width < maxWidth + 2) //重新设置宽度
    m_width = maxWidth + 4;

   if(m_high < 2*maxHigth)   //重新设置高度
    m_high = 2*maxHigth + 5;
}


/**
* @brief 语句的横坐标.
*
* 根据语句的长度和当前的宽度,计算出语句的横坐标,以便使语句显示在中间位置.
*
* param str 要计算的语句.
*
* @return 无返回值
*/
unsigned short SuiteUI::cal(string str)
{
   return (m_width - str.size())/2;
}

 

/**
* @brief 显示结果.
*
* 调用adapt(),以适当增加当前的宽度和高度;
* 第一行左上角显示名称;
* 调用cal()方法获得每条语句显示的起始位置;
* 以下逐行显示.
*
* @return 无返回值
*/
void SuiteUI::show()
{
   int pos = 0;
   int i = 0;

   //显示左上角的内容
   string top_left_corner("Suite: ");
   top_left_corner += m_name;
   pos = cal(top_left_corner);
   for(i = 0; i < m_width - top_left_corner.size(); ++i)
   {
    if(pos == i)
     cout << top_left_corner;
    else
     cout << "*";
   }

   cout << endl;
   cout << endl;

   //过程集
   //cout << "过程集" << endl;
   std::vector<std::string>::iterator pr;
   for (pr = m_testItmes.begin(); pr != m_testItmes.end(); pr++)
   {
    pos = cal(*pr); //获得每条语句显示的起始位置
    for (i = 0; i < m_width; ++i)
    {
     if(pos == i)
      cout << (*pr);
     else
      cout << " ";
    }
    cout << endl;
   }

   for (i = 0; i < m_width; ++i)
    cout << "-";
   cout << endl;

   //结果集
   for (pr = m_testResults.begin(); pr != m_testResults.end(); pr++)
   {
    pos = cal(*pr); //获得每条语句显示的起始位置
    for (i = 0; i < m_width; ++i)
    {
     if(pos == i)
      cout << (*pr);
    
     else
      cout << " ";
    }
    cout << endl;
   }

   for (i = 0; i < m_width; ++i)
    cout << "*";
  
   cout << endl;
   cout << endl;
   cout << endl;
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值