You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
118 lines
3.3 KiB
118 lines
3.3 KiB
3 years ago
|
/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||
|
file Copyright.txt or https://cmake.org/licensing#kwsys for details. */
|
||
|
#include "kwsysPrivate.h"
|
||
|
#include KWSYS_HEADER(Status.hxx)
|
||
|
|
||
|
// Work-around CMake dependency scanning limitation. This must
|
||
|
// duplicate the above list of headers.
|
||
|
#if 0
|
||
|
# include "Status.hxx.in"
|
||
|
#endif
|
||
|
|
||
|
#include <cerrno>
|
||
|
#include <iostream>
|
||
|
|
||
|
#ifdef _WIN32
|
||
|
# include <windows.h>
|
||
|
#endif
|
||
|
|
||
|
int testStatus(int, char* [])
|
||
|
{
|
||
|
bool res = true;
|
||
|
{
|
||
|
kwsys::Status status;
|
||
|
if (status.GetKind() != kwsys::Status::Kind::Success) {
|
||
|
std::cerr << "Status default constructor does not produce Success\n";
|
||
|
res = false;
|
||
|
}
|
||
|
|
||
|
status = kwsys::Status::Success();
|
||
|
if (status.GetKind() != kwsys::Status::Kind::Success) {
|
||
|
std::cerr << "Status Success constructor does not produce Success\n";
|
||
|
res = false;
|
||
|
}
|
||
|
if (!status) {
|
||
|
std::cerr << "Status Success kind is not true\n";
|
||
|
res = false;
|
||
|
}
|
||
|
if (status.GetPOSIX() != 0) {
|
||
|
std::cerr << "Status Success kind does not return POSIX 0\n";
|
||
|
res = false;
|
||
|
}
|
||
|
#ifdef _WIN32
|
||
|
if (status.GetWindows() != 0) {
|
||
|
std::cerr << "Status Success kind does not return Windows 0\n";
|
||
|
res = false;
|
||
|
}
|
||
|
#endif
|
||
|
if (status.GetString() != "Success") {
|
||
|
std::cerr << "Status Success kind does not return \"Success\" string\n";
|
||
|
res = false;
|
||
|
}
|
||
|
|
||
|
status = kwsys::Status::POSIX(EINVAL);
|
||
|
if (status.GetKind() != kwsys::Status::Kind::POSIX) {
|
||
|
std::cerr << "Status POSIX constructor does not produce POSIX\n";
|
||
|
res = false;
|
||
|
}
|
||
|
if (status) {
|
||
|
std::cerr << "Status POSIX kind is not false\n";
|
||
|
res = false;
|
||
|
}
|
||
|
if (status.GetPOSIX() != EINVAL) {
|
||
|
std::cerr << "Status POSIX kind does not preserve POSIX value\n";
|
||
|
res = false;
|
||
|
}
|
||
|
#ifdef _WIN32
|
||
|
if (status.GetWindows() != 0) {
|
||
|
std::cerr << "Status POSIX kind does not return Windows 0\n";
|
||
|
res = false;
|
||
|
}
|
||
|
#endif
|
||
|
if (status.GetString().empty()) {
|
||
|
std::cerr << "Status POSIX kind returns empty string\n";
|
||
|
res = false;
|
||
|
}
|
||
|
errno = ENOENT;
|
||
|
status = kwsys::Status::POSIX_errno();
|
||
|
if (status.GetPOSIX() != ENOENT) {
|
||
|
std::cerr << "Status POSIX_errno did not use errno\n";
|
||
|
res = false;
|
||
|
}
|
||
|
errno = 0;
|
||
|
|
||
|
#ifdef _WIN32
|
||
|
status = kwsys::Status::Windows(ERROR_INVALID_PARAMETER);
|
||
|
if (status.GetKind() != kwsys::Status::Kind::Windows) {
|
||
|
std::cerr << "Status Windows constructor does not produce Windows\n";
|
||
|
res = false;
|
||
|
}
|
||
|
if (status) {
|
||
|
std::cerr << "Status Windows kind is not false\n";
|
||
|
res = false;
|
||
|
}
|
||
|
if (status.GetWindows() != ERROR_INVALID_PARAMETER) {
|
||
|
std::cerr << "Status Windows kind does not preserve Windows value\n";
|
||
|
res = false;
|
||
|
}
|
||
|
if (status.GetPOSIX() != 0) {
|
||
|
std::cerr << "Status Windows kind does not return POSIX 0\n";
|
||
|
res = false;
|
||
|
}
|
||
|
if (status.GetString().empty()) {
|
||
|
std::cerr << "Status Windows kind returns empty string\n";
|
||
|
res = false;
|
||
|
}
|
||
|
|
||
|
SetLastError(ERROR_FILE_NOT_FOUND);
|
||
|
status = kwsys::Status::Windows_GetLastError();
|
||
|
if (status.GetWindows() != ERROR_FILE_NOT_FOUND) {
|
||
|
std::cerr << "Status Windows_GetLastError did not use GetLastError()\n";
|
||
|
res = false;
|
||
|
}
|
||
|
SetLastError(ERROR_SUCCESS);
|
||
|
#endif
|
||
|
}
|
||
|
return res ? 0 : 1;
|
||
|
}
|