Bug 1790614 - Part 1: Add helpers for asserting nsresult in gtest, r=ahal

These helpers are inspired by the gtest-provided
{ASSERT,ENSURE}_HRESULT_{SUCCEEDED,FAILED} macros.

These are intended as replacements for patterns like
ENSURE_TRUE(NS_SUCCEEDED(rv)) which will actually report the encountered
nsresult error code code when they fail.

Differential Revision: https://phabricator.services.mozilla.com/D157213
This commit is contained in:
Nika Layzell 2022-09-15 14:51:49 +00:00
parent a2593348c1
commit 8aa98212cc
3 changed files with 75 additions and 0 deletions

View File

@ -0,0 +1,38 @@
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "MozAssertions.h"
#include "mozilla/ErrorNames.h"
#include "nsString.h"
namespace mozilla::gtest {
static testing::AssertionResult NsresultFailureHelper(const char* expr,
const char* expected,
nsresult rv) {
nsAutoCString name;
GetErrorName(rv, name);
return testing::AssertionFailure()
<< "Expected: " << expr << " " << expected << ".\n"
<< " Actual: " << name << "\n";
}
testing::AssertionResult IsNsresultSuccess(const char* expr, nsresult rv) {
if (NS_SUCCEEDED(rv)) {
return testing::AssertionSuccess();
}
return NsresultFailureHelper(expr, "succeeds", rv);
}
testing::AssertionResult IsNsresultFailure(const char* expr, nsresult rv) {
if (NS_FAILED(rv)) {
return testing::AssertionSuccess();
}
return NsresultFailureHelper(expr, "failed", rv);
}
} // namespace mozilla::gtest

View File

@ -0,0 +1,32 @@
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef mozilla_gtest_MozAssertions_h__
#define mozilla_gtest_MozAssertions_h__
#include "gtest/gtest.h"
#include "nsError.h"
namespace mozilla::gtest {
testing::AssertionResult IsNsresultSuccess(const char* expr, nsresult rv);
testing::AssertionResult IsNsresultFailure(const char* expr, nsresult rv);
} // namespace mozilla::gtest
#define EXPECT_NS_SUCCEEDED(expr) \
EXPECT_PRED_FORMAT1(::mozilla::gtest::IsNsresultSuccess, (expr))
#define ASSERT_NS_SUCCEEDED(expr) \
ASSERT_PRED_FORMAT1(::mozilla::gtest::IsNsresultSuccess, (expr))
#define EXPECT_NS_FAILED(expr) \
EXPECT_PRED_FORMAT1(::mozilla::gtest::IsNsresultFailure, (expr))
#define ASSERT_NS_FAILED(expr) \
ASSERT_PRED_FORMAT1(::mozilla::gtest::IsNsresultFailure, (expr))
#endif // mozilla_gtest_MozAssertions_h__

View File

@ -17,8 +17,13 @@ if CONFIG["ENABLE_TESTS"]:
"gmock-custom/gmock-port.h",
]
EXPORTS.mozilla.gtest += [
"MozAssertions.h",
]
SOURCES += [
"GTestRunner.cpp",
"MozAssertions.cpp",
"MozGTestBench.cpp",
"SanityTest.cpp",
]