tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

exception_safety_testing.cc (2237B)


      1 // Copyright 2017 The Abseil Authors.
      2 //
      3 // Licensed under the Apache License, Version 2.0 (the "License");
      4 // you may not use this file except in compliance with the License.
      5 // You may obtain a copy of the License at
      6 //
      7 //      https://www.apache.org/licenses/LICENSE-2.0
      8 //
      9 // Unless required by applicable law or agreed to in writing, software
     10 // distributed under the License is distributed on an "AS IS" BASIS,
     11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     12 // See the License for the specific language governing permissions and
     13 // limitations under the License.
     14 
     15 #include "absl/base/internal/exception_safety_testing.h"
     16 
     17 #ifdef ABSL_HAVE_EXCEPTIONS
     18 
     19 #include "gtest/gtest.h"
     20 #include "absl/meta/type_traits.h"
     21 
     22 namespace testing {
     23 
     24 exceptions_internal::NoThrowTag nothrow_ctor;
     25 
     26 exceptions_internal::StrongGuaranteeTagType strong_guarantee;
     27 
     28 exceptions_internal::ExceptionSafetyTestBuilder<> MakeExceptionSafetyTester() {
     29  return {};
     30 }
     31 
     32 namespace exceptions_internal {
     33 
     34 int countdown = -1;
     35 
     36 ConstructorTracker* ConstructorTracker::current_tracker_instance_ = nullptr;
     37 
     38 void MaybeThrow(absl::string_view msg, bool throw_bad_alloc) {
     39  if (countdown-- == 0) {
     40    if (throw_bad_alloc) throw TestBadAllocException(msg);
     41    throw TestException(msg);
     42  }
     43 }
     44 
     45 testing::AssertionResult FailureMessage(const TestException& e,
     46                                        int countdown) noexcept {
     47  return testing::AssertionFailure() << "Exception thrown from " << e.what();
     48 }
     49 
     50 std::string GetSpecString(TypeSpec spec) {
     51  std::string out;
     52  absl::string_view sep;
     53  const auto append = [&](absl::string_view s) {
     54    absl::StrAppend(&out, sep, s);
     55    sep = " | ";
     56  };
     57  if (static_cast<bool>(TypeSpec::kNoThrowCopy & spec)) {
     58    append("kNoThrowCopy");
     59  }
     60  if (static_cast<bool>(TypeSpec::kNoThrowMove & spec)) {
     61    append("kNoThrowMove");
     62  }
     63  if (static_cast<bool>(TypeSpec::kNoThrowNew & spec)) {
     64    append("kNoThrowNew");
     65  }
     66  return out;
     67 }
     68 
     69 std::string GetSpecString(AllocSpec spec) {
     70  return static_cast<bool>(AllocSpec::kNoThrowAllocate & spec)
     71             ? "kNoThrowAllocate"
     72             : "";
     73 }
     74 
     75 }  // namespace exceptions_internal
     76 
     77 }  // namespace testing
     78 
     79 #endif  // ABSL_HAVE_EXCEPTIONS