forked from OSchip/llvm-project
73 lines
2.2 KiB
C
73 lines
2.2 KiB
C
|
//===-- ErrnoSetterMatcher.h ------------------------------------*- C++ -*-===//
|
||
|
//
|
||
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||
|
// See https://llvm.org/LICENSE.txt for license information.
|
||
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||
|
//
|
||
|
//===----------------------------------------------------------------------===//
|
||
|
|
||
|
#ifndef LLVM_LIBC_TEST_ERRNOSETTERMATCHER_H
|
||
|
#define LLVM_LIBC_TEST_ERRNOSETTERMATCHER_H
|
||
|
|
||
|
#include "src/errno/llvmlibc_errno.h"
|
||
|
#include "utils/UnitTest/Test.h"
|
||
|
|
||
|
namespace __llvm_libc {
|
||
|
namespace testing {
|
||
|
|
||
|
namespace internal {
|
||
|
|
||
|
extern "C" const char *strerror(int);
|
||
|
|
||
|
template <typename T> class ErrnoSetterMatcher : public Matcher<T> {
|
||
|
T ExpectedReturn;
|
||
|
T ActualReturn;
|
||
|
int ExpectedErrno;
|
||
|
int ActualErrno;
|
||
|
|
||
|
public:
|
||
|
ErrnoSetterMatcher(T ExpectedReturn, int ExpectedErrno)
|
||
|
: ExpectedReturn(ExpectedReturn), ExpectedErrno(ExpectedErrno) {}
|
||
|
|
||
|
void explainError(testutils::StreamWrapper &OS) override {
|
||
|
if (ActualReturn != ExpectedReturn)
|
||
|
OS << "Expected return to be " << ExpectedReturn << " but got "
|
||
|
<< ActualReturn << ".\nExpecte errno to be " << strerror(ExpectedErrno)
|
||
|
<< " but got " << strerror(ActualErrno) << ".\n";
|
||
|
else
|
||
|
OS << "Correct value " << ExpectedReturn
|
||
|
<< " was returned\nBut errno was unexpectely set to "
|
||
|
<< strerror(ActualErrno) << ".\n";
|
||
|
}
|
||
|
|
||
|
bool match(T Got) {
|
||
|
ActualReturn = Got;
|
||
|
ActualErrno = llvmlibc_errno;
|
||
|
llvmlibc_errno = 0;
|
||
|
return Got == ExpectedReturn && ActualErrno == ExpectedErrno;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
} // namespace internal
|
||
|
|
||
|
namespace ErrnoSetterMatcher {
|
||
|
|
||
|
template <typename RetT = int>
|
||
|
static internal::ErrnoSetterMatcher<RetT> Succeeds(RetT ExpectedReturn = 0,
|
||
|
int ExpectedErrno = 0) {
|
||
|
return {ExpectedReturn, ExpectedErrno};
|
||
|
}
|
||
|
|
||
|
template <typename RetT = int>
|
||
|
static internal::ErrnoSetterMatcher<RetT> Fails(int ExpectedErrno,
|
||
|
RetT ExpectedReturn = -1) {
|
||
|
return {ExpectedReturn, ExpectedErrno};
|
||
|
}
|
||
|
|
||
|
} // namespace ErrnoSetterMatcher
|
||
|
|
||
|
} // namespace testing
|
||
|
} // namespace __llvm_libc
|
||
|
|
||
|
#endif // LLVM_LIBC_TEST_ERRNOSETTERMATCHER_H
|