diff options
| author | Nat Goodspeed <nat@lindenlab.com> | 2019-08-12 08:26:51 -0400 | 
|---|---|---|
| committer | Nat Goodspeed <nat@lindenlab.com> | 2019-08-12 08:26:51 -0400 | 
| commit | f0fa4f94a5400fe5d21cf5bf7570129916bf9787 (patch) | |
| tree | 4b9ac64f2258dc6713eba0c5a793ec11965000e3 /indra/llcommon | |
| parent | adb3f447b33e42bdb6e4a5a1ac79eebd862dafb4 (diff) | |
DRTVWR-493: Make catch_llerrs() a member of WrapLLErrs.
Diffstat (limited to 'indra/llcommon')
| -rw-r--r-- | indra/llcommon/tests/lleventcoro_test.cpp | 4 | ||||
| -rw-r--r-- | indra/llcommon/tests/lleventfilter_test.cpp | 2 | ||||
| -rw-r--r-- | indra/llcommon/tests/llinstancetracker_test.cpp | 6 | ||||
| -rw-r--r-- | indra/llcommon/tests/wrapllerrs.h | 32 | 
4 files changed, 31 insertions, 13 deletions
| diff --git a/indra/llcommon/tests/lleventcoro_test.cpp b/indra/llcommon/tests/lleventcoro_test.cpp index ea198849cd..fa02d2bb1a 100644 --- a/indra/llcommon/tests/lleventcoro_test.cpp +++ b/indra/llcommon/tests/lleventcoro_test.cpp @@ -506,7 +506,7 @@ namespace tut              replyName = waiter.getName0();              errorName = waiter.getName1();              WrapLLErrs capture; -            threw = catch_llerrs([&waiter, &debug](){ +            threw = capture.catch_llerrs([&waiter, &debug](){                      result = waiter.suspendWithLog();                      debug("no exception");                  }); @@ -756,7 +756,7 @@ namespace tut          {              LLCoroEventPumps waiter;              WrapLLErrs capture; -            threw = catch_llerrs( +            threw = capture.catch_llerrs(                  [&waiter, &debug](){                      result = waiter.postAndSuspendWithLog(                          LLSDMap("value", 31)("fail", LLSD()), diff --git a/indra/llcommon/tests/lleventfilter_test.cpp b/indra/llcommon/tests/lleventfilter_test.cpp index a23abf453e..1875013794 100644 --- a/indra/llcommon/tests/lleventfilter_test.cpp +++ b/indra/llcommon/tests/lleventfilter_test.cpp @@ -350,7 +350,7 @@ namespace tut          // Now let the timer expire.          filter.forceTimeout();          // Notice the timeout. -        std::string threw = catch_llerrs([this](){ +        std::string threw = capture.catch_llerrs([this](){                  mainloop.post(17);              });          ensure_contains("errorAfter() timeout exception", threw, "timeout"); diff --git a/indra/llcommon/tests/llinstancetracker_test.cpp b/indra/llcommon/tests/llinstancetracker_test.cpp index 0fe65f0831..d94fc0c56d 100644 --- a/indra/llcommon/tests/llinstancetracker_test.cpp +++ b/indra/llcommon/tests/llinstancetracker_test.cpp @@ -198,7 +198,7 @@ namespace tut          {              WrapLLErrs wrapper;              Keyed::instance_iter i(Keyed::beginInstances()); -            what = catch_llerrs([&keyed](){ +            what = wrapper.catch_llerrs([&keyed](){                      delete keyed;                  });          } @@ -214,7 +214,7 @@ namespace tut          {              WrapLLErrs wrapper;              Keyed::key_iter i(Keyed::beginKeys()); -            what = catch_llerrs([&keyed](){ +            what = wrapper.catch_llerrs([&keyed](){                      delete keyed;                  });          } @@ -230,7 +230,7 @@ namespace tut          {              WrapLLErrs wrapper;              Unkeyed::instance_iter i(Unkeyed::beginInstances()); -            what = catch_llerrs([&unkeyed](){ +            what = wrapper.catch_llerrs([&unkeyed](){                      delete unkeyed;                  });          } diff --git a/indra/llcommon/tests/wrapllerrs.h b/indra/llcommon/tests/wrapllerrs.h index 3fb79f6b5d..b07d5afbd8 100644 --- a/indra/llcommon/tests/wrapllerrs.h +++ b/indra/llcommon/tests/wrapllerrs.h @@ -82,18 +82,36 @@ struct WrapLLErrs          LLTHROW(FatalException(message));      } +    /// Convenience wrapper for catch_what<FatalException>() +    // +    // The implementation makes it clear that this function need not be a +    // member; it could easily be a free function. It is a member because it +    // makes no sense to attempt to catch FatalException unless there is a +    // WrapLLErrs instance in scope. Without a live WrapLLErrs instance, any +    // LL_ERRS() reached by code within 'func' would terminate the test +    // program instead of throwing FatalException. +    // +    // We were tempted to introduce a free function, likewise accepting +    // arbitrary 'func', that would instantiate WrapLLErrs and then call +    // catch_llerrs() on that instance. We decided against it, for this +    // reason: on extending a test function containing a single call to that +    // free function, a maintainer would most likely make additional calls to +    // that free function, instead of switching to an explicit WrapLLErrs +    // declaration with several calls to its catch_llerrs() member function. +    // Even a construct such as WrapLLErrs().catch_llerrs(...) would make the +    // object declaration more visible; it's not unreasonable to expect a +    // maintainer to extend that by naming and reusing the WrapLLErrs instance. +    template <typename FUNC> +    std::string catch_llerrs(FUNC func) +    { +        return catch_what<FatalException>(func); +    } +      std::string error;      LLError::SettingsStoragePtr mPriorErrorSettings;      LLError::FatalFunction mPriorFatal;  }; -/// Convenience wrapper for catch_what<WrapLLErrs::FatalException>() -template <typename FUNC> -std::string catch_llerrs(FUNC func) -{ -    return catch_what<WrapLLErrs::FatalException>(func); -} -  /**   * Capture log messages. This is adapted (simplified) from the one in   * llerror_test.cpp. | 
