mirror of
https://gitlab.linphone.org/BC/public/linphone-iphone.git
synced 2026-01-17 19:18:06 +00:00
153 lines
4.3 KiB
C++
153 lines
4.3 KiB
C++
#include <string>
|
|
|
|
#include "liblinphone_tester_windows.h"
|
|
|
|
using namespace BelledonneCommunications::Linphone::Tester;
|
|
using namespace Platform;
|
|
using namespace Windows::Foundation;
|
|
using namespace Windows::Storage;
|
|
using namespace Windows::System::Threading;
|
|
|
|
#define MAX_TRACE_SIZE 2048
|
|
#define MAX_SUITE_NAME_SIZE 128
|
|
#define MAX_WRITABLE_DIR_SIZE 1024
|
|
|
|
static OutputTraceListener^ sTraceListener;
|
|
|
|
NativeTester^ NativeTester::_instance = ref new NativeTester();
|
|
|
|
static void nativeOutputTraceHandler(int lev, const char *fmt, va_list args)
|
|
{
|
|
if (sTraceListener) {
|
|
wchar_t wstr[MAX_TRACE_SIZE] = { 0 };
|
|
std::string str;
|
|
str.resize(MAX_TRACE_SIZE);
|
|
vsnprintf((char *)str.c_str(), MAX_TRACE_SIZE, fmt, args);
|
|
mbstowcs(wstr, str.c_str(), MAX_TRACE_SIZE - 1);
|
|
String^ msg = ref new String(wstr);
|
|
String^ l;
|
|
switch (lev) {
|
|
case ORTP_FATAL:
|
|
case ORTP_ERROR:
|
|
l = ref new String(L"Error");
|
|
break;
|
|
case ORTP_WARNING:
|
|
l = ref new String(L"Warning");
|
|
break;
|
|
case ORTP_MESSAGE:
|
|
l = ref new String(L"Message");
|
|
break;
|
|
default:
|
|
l = ref new String(L"Debug");
|
|
break;
|
|
}
|
|
sTraceListener->outputTrace(l, msg);
|
|
}
|
|
}
|
|
|
|
static void libLinphoneNativeOutputTraceHandler(const char *domain, OrtpLogLevel lev, const char *fmt, va_list args)
|
|
{
|
|
nativeOutputTraceHandler((int)lev, fmt, args);
|
|
}
|
|
|
|
|
|
NativeTester::NativeTester()
|
|
{
|
|
}
|
|
|
|
NativeTester::~NativeTester()
|
|
{
|
|
liblinphone_tester_uninit();
|
|
}
|
|
|
|
void NativeTester::setOutputTraceListener(OutputTraceListener^ traceListener)
|
|
{
|
|
sTraceListener = traceListener;
|
|
}
|
|
|
|
void NativeTester::initialize(StorageFolder^ writableDirectory, Platform::Boolean ui)
|
|
{
|
|
if (ui) {
|
|
liblinphone_tester_init(nativeOutputTraceHandler);
|
|
} else {
|
|
liblinphone_tester_init(NULL);
|
|
linphone_core_set_log_level_mask((OrtpLogLevel)(ORTP_MESSAGE | ORTP_WARNING | ORTP_ERROR | ORTP_FATAL));
|
|
}
|
|
|
|
char writable_dir[MAX_WRITABLE_DIR_SIZE] = { 0 };
|
|
const wchar_t *wwritable_dir = writableDirectory->Path->Data();
|
|
wcstombs(writable_dir, wwritable_dir, sizeof(writable_dir));
|
|
bc_tester_set_writable_dir_prefix(writable_dir);
|
|
bc_tester_set_resource_dir_prefix("Assets");
|
|
|
|
if (!ui) {
|
|
char *xmlFile = bc_tester_file("LibLinphoneWindows10.xml");
|
|
char *args[] = { "--xml-file", xmlFile };
|
|
bc_tester_parse_args(2, args, 0);
|
|
|
|
char *logFile = bc_tester_file("LibLinphoneWindows10.log");
|
|
liblinphone_tester_set_log_file(logFile);
|
|
free(logFile);
|
|
}
|
|
}
|
|
|
|
bool NativeTester::run(Platform::String^ suiteName, Platform::String^ caseName, Platform::Boolean verbose)
|
|
{
|
|
std::wstring all(L"ALL");
|
|
std::wstring wssuitename = suiteName->Data();
|
|
std::wstring wscasename = caseName->Data();
|
|
char csuitename[MAX_SUITE_NAME_SIZE] = { 0 };
|
|
char ccasename[MAX_SUITE_NAME_SIZE] = { 0 };
|
|
wcstombs(csuitename, wssuitename.c_str(), sizeof(csuitename));
|
|
wcstombs(ccasename, wscasename.c_str(), sizeof(ccasename));
|
|
|
|
if (verbose) {
|
|
linphone_core_set_log_level_mask((OrtpLogLevel)(ORTP_MESSAGE | ORTP_WARNING | ORTP_ERROR | ORTP_FATAL));
|
|
}
|
|
else {
|
|
linphone_core_set_log_level_mask(ORTP_FATAL);
|
|
}
|
|
linphone_core_set_log_handler(libLinphoneNativeOutputTraceHandler);
|
|
return bc_tester_run_tests(wssuitename == all ? 0 : csuitename, wscasename == all ? 0 : ccasename, NULL) != 0;
|
|
}
|
|
|
|
void NativeTester::runAllToXml()
|
|
{
|
|
auto workItem = ref new WorkItemHandler([this](IAsyncAction ^workItem) {
|
|
bc_tester_start(NULL);
|
|
bc_tester_uninit();
|
|
});
|
|
_asyncAction = ThreadPool::RunAsync(workItem);
|
|
}
|
|
|
|
unsigned int NativeTester::nbTestSuites()
|
|
{
|
|
return bc_tester_nb_suites();
|
|
}
|
|
|
|
unsigned int NativeTester::nbTests(Platform::String^ suiteName)
|
|
{
|
|
std::wstring suitename = suiteName->Data();
|
|
char cname[MAX_SUITE_NAME_SIZE] = { 0 };
|
|
wcstombs(cname, suitename.c_str(), sizeof(cname));
|
|
return bc_tester_nb_tests(cname);
|
|
}
|
|
|
|
Platform::String^ NativeTester::testSuiteName(int index)
|
|
{
|
|
const char *cname = bc_tester_suite_name(index);
|
|
wchar_t wcname[MAX_SUITE_NAME_SIZE];
|
|
mbstowcs(wcname, cname, sizeof(wcname));
|
|
return ref new String(wcname);
|
|
}
|
|
|
|
Platform::String^ NativeTester::testName(Platform::String^ suiteName, int testIndex)
|
|
{
|
|
std::wstring suitename = suiteName->Data();
|
|
char csuitename[MAX_SUITE_NAME_SIZE] = { 0 };
|
|
wcstombs(csuitename, suitename.c_str(), sizeof(csuitename));
|
|
const char *cname = bc_tester_test_name(csuitename, testIndex);
|
|
wchar_t wcname[MAX_SUITE_NAME_SIZE];
|
|
mbstowcs(wcname, cname, sizeof(wcname));
|
|
return ref new String(wcname);
|
|
}
|