iutest  1.17.99.14
iutest_default_xml_generator.hpp
[詳解]
1 //======================================================================
2 //-----------------------------------------------------------------------
13 //-----------------------------------------------------------------------
14 //======================================================================
15 #ifndef INCG_IRIS_IUTEST_DEFAULT_XML_GENERATOR_HPP_791DCB98_05CC_49BA_8518_0EC9CA2B5450_
16 #define INCG_IRIS_IUTEST_DEFAULT_XML_GENERATOR_HPP_791DCB98_05CC_49BA_8518_0EC9CA2B5450_
17 
18 namespace iutest
19 {
20 
21 //======================================================================
22 // class
26 class DefaultXmlGeneratorListener : public EmptyTestEventListener
27 {
28  ::std::string m_output_path_format;
29  ::std::string m_output_path;
30 protected:
31  IFile* m_fp;
32 public:
37  explicit DefaultXmlGeneratorListener(const ::std::string& path)
38  : m_fp(NULL)
39  {
40  SetFilePath(path);
41  }
43  {
44  FileClose();
45  TestEnv::event_listeners().set_default_xml_generator(NULL);
46  }
47 public:
51  const ::std::string& GetFilePath() const { return m_output_path; }
52 
53 private:
57  void SetFilePath(const ::std::string& path)
58  {
59  if( path.empty() )
60  {
61  m_output_path_format.clear();
62  m_output_path = detail::kStrings::DefaultXmlReportFileName;
63  }
64  else
65  {
66  m_output_path_format = path;
67  const ::std::string::size_type pos = path.find('.');
68  if( pos == ::std::string::npos
69  || pos == path.length()-1 )
70  {
71  m_output_path_format += detail::GetPathSeparator();
72  m_output_path_format += detail::kStrings::DefaultXmlReportFileName;
73  }
74  m_output_path = m_output_path_format;
75  }
76  }
77 
78 public:
79  virtual void OnTestIterationStart(const UnitTest& test, int iteration) IUTEST_CXX_OVERRIDE;
80  virtual void OnTestProgramEnd(const UnitTest& test) IUTEST_CXX_OVERRIDE;
81 
82 private:
83  virtual bool IsReportable(const UnitTest& test) { IUTEST_UNUSED_VAR(test); return true; }
84  virtual void OnReportTest(IFile* file, const UnitTest& test);
85 
86 private:
87  static void OnReportTestSuite(IFile* file, const TestSuite& test_suite);
88  static void OnReportTestInfo(IFile* file, const TestInfo& test_info);
89  static void OnReportTestProperty(IFile* file, const TestResult& test_result
90  , bool (*pfnValidate)(const ::std::string&));
91  static void OnReportTestSkipped(IFile* file, const TestInfo& test_info);
92 
93 private:
94  virtual bool FileOpen(const char* path);
95  virtual void FileClose();
96 
97 protected:
98  static void OutputXmlCDataSection(IFile* file, const char* data);
99  static void OutputXmlAttribute(IFile* file, const char* name, const char* value);
100 
101 protected:
102  static ::std::string EscapeXmlAttribute(const char* str)
103  {
104  return EscapeXml(str, true);
105  }
106  static ::std::string EscapeXmlAttribute(const ::std::string str)
107  {
108  return EscapeXml(str.c_str(), true);
109  }
110  static ::std::string EscapeXmlText(const char* str)
111  {
112  return EscapeXml(str, false);
113  }
117  static ::std::string EscapeXml(const char* str, bool is_attribute);
118 
123  static IUTEST_CXX_CONSTEXPR bool IsWhitespace(char c)
124  {
125  return c == 0x9 || c == 0xA || c == 0xD;
126  }
131  static IUTEST_CXX_CONSTEXPR bool IsValidXmlCharacter(char c)
132  {
133 IUTEST_PRAGMA_CONSTEXPR_CALLED_AT_RUNTIME_WARN_DISABLE_BEGIN()
134  return IsWhitespace(c) || c >= 0x20;
135 IUTEST_PRAGMA_CONSTEXPR_CALLED_AT_RUNTIME_WARN_DISABLE_END()
136  }
137 
138 public:
140  static bool SetUp()
141  {
142  ::std::string xmlpath = TestEnv::get_report_xml_filepath();
143  if( !xmlpath.empty() )
144  {
145  TestEnv::event_listeners().set_default_xml_generator(new DefaultXmlGeneratorListener(xmlpath));
146  return true;
147  }
148  return false;
149  }
150 };
151 
152 } // end of namespace iutest
153 
154 #if !IUTEST_HAS_LIB
155 # include "../impl/iutest_default_xml_generator.ipp" // IWYU pragma: export
156 #endif
157 
158 #endif // INCG_IRIS_IUTEST_DEFAULT_XML_GENERATOR_HPP_791DCB98_05CC_49BA_8518_0EC9CA2B5450_
xml出力イベントリスナー
Definition: iutest_default_xml_generator.hpp:28
const ::std::string & GetFilePath() const
出力ファイルパスの取得
Definition: iutest_default_xml_generator.hpp:52
static IUTEST_CXX_CONSTEXPR bool IsWhitespace(char c)
空白かどうか
Definition: iutest_default_xml_generator.hpp:124
virtual void OnTestIterationStart(const UnitTest &test, int iteration) IUTEST_CXX_OVERRIDE
単体テスト開始時に毎回呼ばれます
DefaultXmlGeneratorListener(const ::std::string &path)
コンストラクタ
Definition: iutest_default_xml_generator.hpp:38
static IUTEST_CXX_CONSTEXPR bool IsValidXmlCharacter(char c)
xml に利用可能な文字かどうか
Definition: iutest_default_xml_generator.hpp:132
::std::string EscapeXml(const char *str, bool is_attribute)
xml で使えない文字を置き換え
virtual void OnTestProgramEnd(const UnitTest &test) IUTEST_CXX_OVERRIDE
テストプログラム終了時に呼ばれます
ファイルクラスインターフェイス
Definition: iutest_file.hpp:41
::std::string get_report_xml_filepath()
xml 出力パスを取得
テスト情報クラス
Definition: iutest_info.hpp:38
テスト結果を示すクラス
Definition: iutest_result.hpp:216
TestSuite
Definition: iutest_suite.hpp:37
テスト全体の管理者
Definition: iutest_core.hpp:36
#define IUTEST_CXX_CONSTEXPR
constexpr
Definition: iutest_compiler.hpp:372
#define IUTEST_CXX_OVERRIDE
override definition
Definition: iutest_compiler.hpp:747
iutest root namespace
Definition: iutest_charcode.hpp:33