You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
MpLive/ZLMediaKit/3rdpart/ZLToolKit/tests/test_creator.cpp

194 lines
4.0 KiB
C++

/*
* Copyright (c) 2016 The ZLToolKit project authors. All Rights Reserved.
*
* This file is part of ZLToolKit(https://github.com/ZLMediaKit/ZLToolKit).
*
* Use of this source code is governed by MIT license that can be found in the
* LICENSE file in the root of the source tree. All contributing project authors
* may be found in the AUTHORS file in the root of the source tree.
*/
#include <iostream>
#include "Util/logger.h"
using namespace std;
using namespace toolkit;
//测试onCreate和onDestory同时存在 [AUTO-TRANSLATED:152351be]
// Test when both onCreate and onDestroy exist
class TestA {
public:
TestA() {
TraceL;
}
~TestA() {
TraceL;
}
void onCreate() {
TraceL << demangle(typeid(*this).name()) << "::" << __FUNCTION__;
}
void onDestory() {
TraceL << demangle(typeid(*this).name()) << "::" << __FUNCTION__;
}
};
//测试只存在onCreate [AUTO-TRANSLATED:721019f3]
// Test when only onCreate exists
class TestB {
public:
TestB() {
TraceL;
}
~TestB() {
TraceL;
}
void onCreate() {
TraceL << demangle(typeid(*this).name()) << "::" << __FUNCTION__;
}
};
//测试只存在onDestory [AUTO-TRANSLATED:65090f10]
// Test when only onDestroy exists
class TestC {
public:
TestC() {
TraceL;
}
~TestC() {
TraceL;
}
void onDestory() {
TraceL << demangle(typeid(*this).name()) << "::" << __FUNCTION__;
}
};
//测试onCreate和onDestory返回值不为void时 [AUTO-TRANSLATED:cafa864e]
// Test when onCreate and onDestroy return values are not void
class TestD {
public:
TestD() {
TraceL;
}
~TestD() {
TraceL;
}
int onCreate() {
TraceL << demangle(typeid(*this).name()) << "::" << __FUNCTION__;
return 1;
}
std::string onDestory() {
TraceL << demangle(typeid(*this).name()) << "::" << __FUNCTION__;
return "test";
}
};
//测试onCreate和onDestory都不存在时 [AUTO-TRANSLATED:475fb8f1]
// Test when neither onCreate nor onDestroy exist
class TestE {
public:
TestE() {
TraceL;
}
~TestE() {
TraceL;
}
};
//测试自定义构造函数 [AUTO-TRANSLATED:13ffcdcf]
// Test custom constructor
class TestF {
public:
TestF(int a, const char *b) {
TraceL << a << " " << b;
}
~TestF() {
TraceL;
}
};
//测试自定义onCreate函数 [AUTO-TRANSLATED:35c11999]
// Test custom onCreate function
class TestH {
public:
TestH() {
TraceL;
}
int onCreate(int a = 0, const char *b = nullptr) {
TraceL << demangle(typeid(*this).name()) << "::" << __FUNCTION__ << " " << a << " " << b;
return 10;
}
~TestH() {
TraceL;
}
};
//测试onDestory函数抛异常 [AUTO-TRANSLATED:6d70c971]
// Test onDestroy function throws an exception
class TestI {
public:
TestI() {
TraceL;
}
int onDestory() {
TraceL << demangle(typeid(*this).name()) << "::" << __FUNCTION__;
throw std::runtime_error("TestI");
}
~TestI() {
TraceL;
}
};
//测试自定义onDestoryonDestory将被忽略调用 [AUTO-TRANSLATED:5ab2ba7d]
// Test custom onDestroy, onDestroy will be ignored when called
class TestJ {
public:
TestJ() {
TraceL;
}
int onDestory(int a) {
return a;
}
~TestJ() {
TraceL;
}
};
int main() {
//初始化日志系统 [AUTO-TRANSLATED:25c549de]
// Initialize the logging system
Logger::Instance().add(std::make_shared<ConsoleChannel>());
Logger::Instance().setWriter(std::make_shared<AsyncLogWriter>());
Creator::create<TestA>();
Creator::create<TestB>();
Creator::create<TestC>();
Creator::create<TestD>();
Creator::create<TestE>();
Creator::create<TestF>(1, "hellow");
{
auto h = Creator::create2<TestH>(1, "hellow");
TraceL << "invoke TestH onCreate ret:" << CLASS_FUNC_INVOKE(TestH, *h, Create, 1, "hellow");
}
Creator::create<TestI>();
Creator::create<TestJ>();
return 0;
}