📄 logunit.cpp
字号:
/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */#if defined(_MSC_VER)#pragma warning ( disable: 4231 4251 4275 4786 )#endif#include "logunit.h"#include <apr_general.h>#include <algorithm>#include <stdlib.h>#include <locale.h>void initialize() { setlocale(LC_CTYPE, ""); const char* ctype = setlocale(LC_CTYPE, 0); if (ctype == 0) { puts("LC_CTYPE: NULL"); } else { printf("LC_CTYPE: %s\n", ctype); } apr_initialize();}extern const char** testlist;static bool suite_sort(const LogUnit::SuiteList::value_type& lhs, const LogUnit::SuiteList::value_type& rhs) { return lhs.first < rhs.first;}abts_suite* abts_run_suites(abts_suite* suite) { LogUnit::SuiteList sorted(LogUnit::getAllSuites());#if !defined(_MSC_VER) std::sort(sorted.begin(), sorted.end(), suite_sort);#endif for(LogUnit::SuiteList::const_iterator iter = sorted.begin(); iter != sorted.end(); iter++) { // // if there is an explicit testlist or if the suite is not by default disabled // pump suite through filter if(testlist || !iter->second->isDisabled()) { suite = iter->second->run(suite); } } apr_terminate(); return suite;}using namespace LogUnit;using namespace std;TestException::TestException() {}TestException::TestException(const TestException& src) : std::exception(src) {}TestException& TestException::operator=(const TestException& src) { exception::operator=(src); return *this;}AssertException::AssertException(std::string message, int line) : msg(message), lineno(line) {}AssertException::AssertException(bool expected, const char* actualExpr, int line) : msg(actualExpr), lineno(line) { if (expected) { msg.append(" was expected to be true, was false."); } else { msg.append(" was expected to be true, was false."); }}AssertException::AssertException(const AssertException& src) : std::exception(src), msg(src.msg), lineno(src.lineno) {}AssertException::~AssertException() throw() {}AssertException& AssertException::operator=(const AssertException& src) { exception::operator=(src); msg = src.msg; lineno = src.lineno; return *this;}std::string AssertException::getMessage() const { return msg;}int AssertException::getLine() const { return lineno;}TestFixture::TestFixture() : tc(0) {}TestFixture::~TestFixture() {}void TestFixture::setCase(abts_case* tc) { this->tc = tc;}void TestFixture::setUp() {}void TestFixture::tearDown() {}void TestFixture::assertEquals(const char* expected, const char* actual, const char* expectedExpr, const char* actualExpr, int lineno) { abts_str_equal(tc, expected, actual, lineno); if ((expected == 0 || actual != 0) || (expected != 0 || actual == 0) || (expected != 0 && strcmp(expected, actual) != 0)) { throw TestException(); }}void TestFixture::assertEquals(const std::string expected, const std::string actual, const char* expectedExpr, const char* actualExpr, int lineno) { abts_str_equal(tc, expected.c_str(), actual.c_str(), lineno); if (expected != actual) { throw TestException(); }}template<class S>static void transcode(std::string& dst, const S& src) { for(typename S::const_iterator iter = src.begin(); iter != src.end(); iter++) { if (*iter <= 0x7F) { dst.append(1, (char) *iter); } else { dst.append(1, '?'); } }}#if LOG4CXX_LOGCHAR_IS_WCHAR || LOG4CXX_WCHAR_T_API void TestFixture::assertEquals(const std::wstring expected, const std::wstring actual, const char* expectedExpr, const char* actualExpr, int lineno) { if (expected != actual) { std::string exp, act; transcode(exp, expected); transcode(act, actual); abts_str_equal(tc, exp.c_str(), act.c_str(), lineno); throw TestException(); }}#endif #if LOG4CXX_LOGCHAR_IS_UNICHAR || LOG4CXX_UNICHAR_API || LOG4CXX_CFSTRING_APIvoid TestFixture::assertEquals(const std::basic_string<log4cxx::UniChar> expected, const std::basic_string<log4cxx::UniChar> actual, const char* expectedExpr, const char* actualExpr,int lineno) { if (expected != actual) { std::string exp, act; transcode(exp, expected); transcode(act, actual); abts_str_equal(tc, exp.c_str(), act.c_str(), lineno); throw TestException(); }}#endif void TestFixture::assertEquals(const int expected, const int actual, int lineno) { abts_int_equal(tc, expected, actual, lineno); if (expected != actual) { throw TestException(); }}LogUnit::TestSuite::TestSuite(const char* fname) : filename(fname), disabled(false) {#if defined(_WIN32) for(size_t i = filename.find('\\'); i != std::string::npos; i = filename.find('\\', i+1)) { filename.replace(i, 1, 1, '/'); }#endif}void LogUnit::TestSuite::addTest(const char*, test_func func) { test_funcs.push_back(func);}std::string LogUnit::TestSuite::getName() const { return filename;}void LogUnit::TestSuite::setDisabled(bool newVal) { disabled = newVal;}bool LogUnit::TestSuite::isDisabled() const { return disabled;}abts_suite* TestSuite::run(abts_suite* suite) const { suite = abts_add_suite(suite, filename.c_str()); for(TestList::const_iterator iter = test_funcs.begin(); iter != test_funcs.end(); iter++) { abts_run_test(suite, *iter, NULL); } return suite;}LogUnit::SuiteList& LogUnit::getAllSuites() { static LogUnit::SuiteList allSuites; return allSuites;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -