output the unit test log files

//******************************************************
// FileName  : UnitTestLog.h
//                 :  
// Descripe   :  
// Author      :    Auding (
SpiritAuding@msn.com)
// Date         :   2005-2-4 13:03:04
//
// CopyRight  Auding (
SpiritAuding@msn.com)
//
// Permission to use, copy, modify, and distribute this software for any
// purpose is hereby granted without fee, provided that this copyright and
// permissions notice appear in all copies and derivatives.
//
// This software is provided "as is" without express or implied warranty.
//
//******************************************************

#ifndef __UNITTESTLOG_HEADER__
#define __UNITTESTLOG_HEADER__

#pragma message("UnitTestLog class CopyRight Auding( SpiritAuding@msn.com ) 2005-02-14 !/n")

#include <iostream>
#include <fstream>
#include <strstream>
#include <string>
#include
<algorithm>

#include <windows.h>
#include
<winbase.h>

class UnitTestLog
{
private:
 UnitTestLog(UnitTestLog& rth);
 UnitTestLog& operator = (UnitTestLog& rth); 
public:
 UnitTestLog() :
   m_strTitle("<?xml version='1.0'?>"),
   m_strUnitTestName(""),
   m_strWorkDirectory(""),
   m_file_ext(".log"),
   m_bStarted(false),
   m_bXmlFormat(false)
 {
 };
 UnitTestLog(const char* unittestname) :
  m_strTitle("<?xml version='1.0'?>"),
  m_strUnitTestName(unittestname),
  m_strWorkDirectory(""),
  m_file_ext(".log"),
  m_bStarted(false),
  m_bXmlFormat(false)
 {
 };
 ~UnitTestLog()
 {
  stop_log();
 };

 void set_name(const std::string& strname)
 {
  m_strUnitTestName = strname;
 }
 std::string get_name()const
 {
  return m_strUnitTestName;
 }
 
 void start_log()
 {
  char file_name[MAX_PATH];
  CreateFileName(file_name, MAX_PATH);
  std::string str_log_file_name(file_name);
  clear_file_name(str_log_file_name, m_file_ext);
  m_fstream.open(str_log_file_name.c_str(), std::ios_base::out);
  if(m_fstream.is_open())
  {
   m_bXmlFormat = (m_file_ext == ".xml");
   if(m_bXmlFormat)
    m_fstream << m_strTitle << "/n<UnitTestRoot>/n";
   m_bStarted = true;
  }
 }
 void stop_log()
 {
  if(m_fstream.is_open())
  {
   if(m_bXmlFormat)
    m_fstream << "</UnitTestRoot>";
   m_fstream.close();
  }
  m_bStarted = false;
 }

 void set_work_dir(const std::string& strWork)
 {
  m_strWorkDirectory = strWork;
  std::string::iterator it = m_strWorkDirectory.end();
  if("//" != it)
   m_strWorkDirectory += "//";
 }
 std::string get_work_dir()const
 {
  return m_strWorkDirectory;
 }

 void set_log_ext(const std::string& strext)
 {
  m_file_ext = strext;
 }
 std::string get_log_ext()const
 {
  return m_file_ext;
 }

 template<class T>
 std::ostream& operator<<(const T& logcontent)
 {
  m_fstream << logcontent;
  return m_fstream;
 }

private:
 std::string CreateFileName(char* buf, const int& n)
 {
  std::ostrstream os(buf, n);
  SYSTEMTIME systm;
  GetLocalTime(&systm);

  if(m_strWorkDirectory.length() == 0)
   usesysdir();

  // filename is looks like : "e://UnitTestName_Year_Month_Day_Hour_Minute_Second.FileExt"
  os << m_strWorkDirectory << m_strUnitTestName << "_"
   << systm.wYear << "_" << systm.wMonth << "_" << systm.wDay << "_"
   << systm.wHour << "_" << systm.wMinute << "_" << systm.wSecond
   << m_file_ext;

  return os.str();
 };

 void clear_file_name(std::string& strname, const std::string& strsub)
 {
  int npos = strname.find(strsub, 0);
  if(npos > -1 && npos + strsub.length() <= strname.length())
  {
   strname = strname.substr(0, npos + strsub.length());
  }
 }

 void usesysdir()
 {
  char tmpbuf[MAX_PATH];
  GetTempPath(MAX_PATH, tmpbuf);
  m_strWorkDirectory = tmpbuf;
 }
private:
 std::fstream m_fstream;
 std::string m_strUnitTestName;
 std::string m_strTitle;
 std::string m_strWorkDirectory;
 std::string m_file_ext;
 bool m_bStarted;
 bool m_bXmlFormat;
};

#endif //__UNITTESTLOG_HEADER__

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值