blob: 7a357765a0a397e6d30c78a71151a0bee196dda9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
/*
* Copyright (C) 2005-2018 Team Kodi
* This file is part of Kodi - https://kodi.tv
*
* SPDX-License-Identifier: GPL-2.0-or-later
* See LICENSES/README.md for more information.
*/
#include "TestBasicEnvironment.h"
#include "FileItem.h"
#include "ServiceBroker.h"
#include "ServiceManager.h"
#include "TestUtils.h"
#include "application/AppEnvironment.h"
#include "application/AppParams.h"
#include "application/Application.h"
#include "filesystem/Directory.h"
#include "filesystem/File.h"
#include "filesystem/SpecialProtocol.h"
#include "messaging/ApplicationMessenger.h"
#include "platform/Filesystem.h"
#include "profiles/ProfileManager.h"
#include "settings/SettingsComponent.h"
#include "windowing/WinSystem.h"
#ifdef TARGET_DARWIN
#include "Util.h"
#endif
#include <cstdio>
#include <cstdlib>
#include <climits>
#include <system_error>
namespace fs = KODI::PLATFORM::FILESYSTEM;
TestBasicEnvironment::TestBasicEnvironment() = default;
void TestBasicEnvironment::SetUp()
{
const auto params = std::make_shared<CAppParams>();
params->SetPlatformDirectories(false);
CAppEnvironment::SetUp(params);
CServiceBroker::RegisterAppMessenger(std::make_shared<KODI::MESSAGING::CApplicationMessenger>());
XFILE::CFile *f;
g_application.m_ServiceManager.reset(new CServiceManager());
if (!CXBMCTestUtils::Instance().SetReferenceFileBasePath())
SetUpError();
CXBMCTestUtils::Instance().setTestFileFactoryWriteInputFile(
XBMC_REF_FILE_PATH("xbmc/filesystem/test/reffile.txt")
);
//for darwin set framework path - else we get assert
//in guisettings init below
#ifdef TARGET_DARWIN
std::string frameworksPath = CUtil::GetFrameworksPath();
CSpecialProtocol::SetXBMCFrameworksPath(frameworksPath);
#endif
/**
* @todo Something should be done about all the asserts in GUISettings so
* that the initialization of these components won't be needed.
*/
/* Create a temporary directory and set it to be used throughout the
* test suite run.
*/
std::error_code ec;
m_tempPath = fs::create_temp_directory(ec);
if (ec)
{
TearDown();
SetUpError();
}
CSpecialProtocol::SetTempPath(m_tempPath);
CSpecialProtocol::SetProfilePath(m_tempPath);
/* Create and delete a tempfile to initialize the VFS (really to initialize
* CLibcdio). This is done so that the initialization of the VFS does not
* affect the performance results of the test cases.
*/
/** @todo Make the initialization of the VFS here optional so it can be
* testable in a test case.
*/
f = XBMC_CREATETEMPFILE("");
if (!f || !XBMC_DELETETEMPFILE(f))
{
TearDown();
SetUpError();
}
const CProfile profile("special://temp");
CServiceBroker::GetSettingsComponent()->GetProfileManager()->AddProfile(profile);
CServiceBroker::GetSettingsComponent()->GetProfileManager()->CreateProfileFolders();
if (!g_application.m_ServiceManager->InitForTesting())
exit(1);
}
void TestBasicEnvironment::TearDown()
{
XFILE::CDirectory::RemoveRecursive(m_tempPath);
g_application.m_ServiceManager->DeinitTesting();
CServiceBroker::UnregisterAppMessenger();
CAppEnvironment::TearDown();
}
void TestBasicEnvironment::SetUpError()
{
fprintf(stderr, "Setup of basic environment failed.\n");
exit(EXIT_FAILURE);
}
|