diff options
| author | Nat Goodspeed <nat@lindenlab.com> | 2019-08-10 20:33:59 -0400 | 
|---|---|---|
| committer | Nat Goodspeed <nat@lindenlab.com> | 2019-08-10 20:33:59 -0400 | 
| commit | adb3f447b33e42bdb6e4a5a1ac79eebd862dafb4 (patch) | |
| tree | 707a9c35c7568782a7c7f968c6846b4646e84be3 /indra/llcommon | |
| parent | 8053bceaa0ccd6128536375c21cc3e9e19429efa (diff) | |
DRTVWR-493: Introduce test catch_what(), catch_llerrs() functions.
Use them in place of awkward try/catch test boilerplate.
Diffstat (limited to 'indra/llcommon')
| -rw-r--r-- | indra/llcommon/tests/lleventcoro_test.cpp | 33 | ||||
| -rw-r--r-- | indra/llcommon/tests/lleventdispatcher_test.cpp | 83 | ||||
| -rw-r--r-- | indra/llcommon/tests/lleventfilter_test.cpp | 12 | ||||
| -rw-r--r-- | indra/llcommon/tests/llinstancetracker_test.cpp | 33 | ||||
| -rw-r--r-- | indra/llcommon/tests/lllazy_test.cpp | 13 | ||||
| -rw-r--r-- | indra/llcommon/tests/llleap_test.cpp | 20 | ||||
| -rw-r--r-- | indra/llcommon/tests/llprocess_test.cpp | 16 | ||||
| -rw-r--r-- | indra/llcommon/tests/wrapllerrs.h | 8 | 
8 files changed, 70 insertions, 148 deletions
| diff --git a/indra/llcommon/tests/lleventcoro_test.cpp b/indra/llcommon/tests/lleventcoro_test.cpp index a459d17fb8..ea198849cd 100644 --- a/indra/llcommon/tests/lleventcoro_test.cpp +++ b/indra/llcommon/tests/lleventcoro_test.cpp @@ -506,16 +506,10 @@ namespace tut              replyName = waiter.getName0();              errorName = waiter.getName1();              WrapLLErrs capture; -            try -            { -                result = waiter.suspendWithLog(); -                debug("no exception"); -            } -            catch (const WrapLLErrs::FatalException& e) -            { -                debug(STRINGIZE("exception " << e.what())); -                threw = e.what(); -            } +            threw = catch_llerrs([&waiter, &debug](){ +                    result = waiter.suspendWithLog(); +                    debug("no exception"); +                });          }          END      } @@ -762,18 +756,13 @@ namespace tut          {              LLCoroEventPumps waiter;              WrapLLErrs capture; -            try -            { -                result = waiter.postAndSuspendWithLog( -                    LLSDMap("value", 31)("fail", LLSD()), -                    immediateAPI.getPump(), "reply", "error"); -                debug("no exception"); -            } -            catch (const WrapLLErrs::FatalException& e) -            { -                debug(STRINGIZE("exception " << e.what())); -                threw = e.what(); -            } +            threw = catch_llerrs( +                [&waiter, &debug](){ +                    result = waiter.postAndSuspendWithLog( +                        LLSDMap("value", 31)("fail", LLSD()), +                        immediateAPI.getPump(), "reply", "error"); +                    debug("no exception"); +                });          }          END      } diff --git a/indra/llcommon/tests/lleventdispatcher_test.cpp b/indra/llcommon/tests/lleventdispatcher_test.cpp index 5a4df81bf1..a181d5c941 100644 --- a/indra/llcommon/tests/lleventdispatcher_test.cpp +++ b/indra/llcommon/tests/lleventdispatcher_test.cpp @@ -22,6 +22,7 @@  #include "llsdutil.h"  #include "stringize.h"  #include "tests/wrapllerrs.h" +#include "../test/catch_and_store_what_in.h"  #include <map>  #include <string> @@ -630,16 +631,9 @@ namespace tut          void call_exc(const std::string& func, const LLSD& args, const std::string& exc_frag)          { -            std::string threw; -            try -            { -                work(func, args); -            } -            catch (const std::runtime_error& e) -            { -                cout << "*** " << e.what() << '\n'; -                threw = e.what(); -            } +            std::string threw = catch_what<std::runtime_error>([this, &func, &args](){ +                    work(func, args); +                });              ensure_has(threw, exc_frag);          } @@ -717,15 +711,9 @@ namespace tut          LLSD attempts(LLSDArray(17)(LLSDMap("pi", 3.14)("two", 2)));          foreach(LLSD ae, inArray(attempts))          { -            std::string threw; -            try -            { -                work.add("freena_err", "freena", freena, ae); -            } -            catch (const std::exception& e) -            { -                threw = e.what(); -            } +            std::string threw = catch_what<std::exception>([this, &ae](){ +                    work.add("freena_err", "freena", freena, ae); +                });              ensure_has(threw, "must be an array");          }      } @@ -734,15 +722,9 @@ namespace tut      void object::test<2>()      {          set_test_name("map-style registration with badly-formed defaults"); -        std::string threw; -        try -        { -            work.add("freena_err", "freena", freena, LLSDArray("a")("b"), 17); -        } -        catch (const std::exception& e) -        { -            threw = e.what(); -        } +        std::string threw = catch_what<std::exception>([this](){ +                work.add("freena_err", "freena", freena, LLSDArray("a")("b"), 17); +            });          ensure_has(threw, "must be a map or an array");      } @@ -750,17 +732,11 @@ namespace tut      void object::test<3>()      {          set_test_name("map-style registration with too many array defaults"); -        std::string threw; -        try -        { -            work.add("freena_err", "freena", freena, -                     LLSDArray("a")("b"), -                     LLSDArray(17)(0.9)("gack")); -        } -        catch (const std::exception& e) -        { -            threw = e.what(); -        } +        std::string threw = catch_what<std::exception>([this](){ +                work.add("freena_err", "freena", freena, +                         LLSDArray("a")("b"), +                         LLSDArray(17)(0.9)("gack")); +            });          ensure_has(threw, "shorter than");      } @@ -768,17 +744,11 @@ namespace tut      void object::test<4>()      {          set_test_name("map-style registration with too many map defaults"); -        std::string threw; -        try -        { -            work.add("freena_err", "freena", freena, -                     LLSDArray("a")("b"), -                     LLSDMap("b", 17)("foo", 3.14)("bar", "sinister")); -        } -        catch (const std::exception& e) -        { -            threw = e.what(); -        } +        std::string threw = catch_what<std::exception>([this](){ +                work.add("freena_err", "freena", freena, +                         LLSDArray("a")("b"), +                         LLSDMap("b", 17)("foo", 3.14)("bar", "sinister")); +            });          ensure_has(threw, "nonexistent params");          ensure_has(threw, "foo");          ensure_has(threw, "bar"); @@ -1039,16 +1009,9 @@ namespace tut          // We don't have a comparable helper function for the one-arg          // operator() method, and it's not worth building one just for this          // case. Write it out. -        std::string threw; -        try -        { -            work(LLSDMap("op", "freek")); -        } -        catch (const std::runtime_error& e) -        { -            cout << "*** " << e.what() << "\n"; -            threw = e.what(); -        } +        std::string threw = catch_what<std::runtime_error>([this](){ +                work(LLSDMap("op", "freek")); +            });          ensure_has(threw, "bad");          ensure_has(threw, "op");          ensure_has(threw, "freek"); diff --git a/indra/llcommon/tests/lleventfilter_test.cpp b/indra/llcommon/tests/lleventfilter_test.cpp index eb98b12ef5..a23abf453e 100644 --- a/indra/llcommon/tests/lleventfilter_test.cpp +++ b/indra/llcommon/tests/lleventfilter_test.cpp @@ -350,15 +350,9 @@ namespace tut          // Now let the timer expire.          filter.forceTimeout();          // Notice the timeout. -        std::string threw; -        try -        { -            mainloop.post(17); -        } -        catch (const WrapLLErrs::FatalException& e) -        { -            threw = e.what(); -        } +        std::string threw = catch_llerrs([this](){ +                mainloop.post(17); +            });          ensure_contains("errorAfter() timeout exception", threw, "timeout");          // Timing out cancels the timer. Verify that.          listener0.reset(0); diff --git a/indra/llcommon/tests/llinstancetracker_test.cpp b/indra/llcommon/tests/llinstancetracker_test.cpp index c7d4b8a06b..0fe65f0831 100644 --- a/indra/llcommon/tests/llinstancetracker_test.cpp +++ b/indra/llcommon/tests/llinstancetracker_test.cpp @@ -198,14 +198,9 @@ namespace tut          {              WrapLLErrs wrapper;              Keyed::instance_iter i(Keyed::beginInstances()); -            try -            { -                delete keyed; -            } -            catch (const WrapLLErrs::FatalException& e) -            { -                what = e.what(); -            } +            what = catch_llerrs([&keyed](){ +                    delete keyed; +                });          }          ensure(! what.empty());      } @@ -219,14 +214,9 @@ namespace tut          {              WrapLLErrs wrapper;              Keyed::key_iter i(Keyed::beginKeys()); -            try -            { -                delete keyed; -            } -            catch (const WrapLLErrs::FatalException& e) -            { -                what = e.what(); -            } +            what = catch_llerrs([&keyed](){ +                    delete keyed; +                });          }          ensure(! what.empty());      } @@ -240,14 +230,9 @@ namespace tut          {              WrapLLErrs wrapper;              Unkeyed::instance_iter i(Unkeyed::beginInstances()); -            try -            { -                delete unkeyed; -            } -            catch (const WrapLLErrs::FatalException& e) -            { -                what = e.what(); -            } +            what = catch_llerrs([&unkeyed](){ +                    delete unkeyed; +                });          }          ensure(! what.empty());      } diff --git a/indra/llcommon/tests/lllazy_test.cpp b/indra/llcommon/tests/lllazy_test.cpp index 32a717f4fc..542306ee22 100644 --- a/indra/llcommon/tests/lllazy_test.cpp +++ b/indra/llcommon/tests/lllazy_test.cpp @@ -38,6 +38,7 @@  #include <boost/lambda/bind.hpp>  // other Linden headers  #include "../test/lltut.h" +#include "../test/catch_and_store_what_in.h"  namespace bll = boost::lambda; @@ -200,15 +201,9 @@ namespace tut      void lllazy_object::test<2>()      {          TestNeedsTesting tnt; -        std::string threw; -        try -        { -            tnt.toolate(); -        } -        catch (const LLLazyCommon::InstanceChange& e) -        { -            threw = e.what(); -        } +        std::string threw = catch_what<LLLazyCommon::InstanceChange>([&tnt](){ +                tnt.toolate(); +            });          ensure_contains("InstanceChange exception", threw, "replace LLLazy instance");      } diff --git a/indra/llcommon/tests/llleap_test.cpp b/indra/llcommon/tests/llleap_test.cpp index 45648536c4..bf0a74d10d 100644 --- a/indra/llcommon/tests/llleap_test.cpp +++ b/indra/llcommon/tests/llleap_test.cpp @@ -23,7 +23,7 @@  #include "../test/lltut.h"  #include "../test/namedtempfile.h"  #include "../test/catch_and_store_what_in.h" -#include "wrapllerrs.h" +#include "wrapllerrs.h"             // CaptureLog  #include "llevents.h"  #include "llprocess.h"  #include "llstring.h" @@ -290,12 +290,9 @@ namespace tut      void object::test<6>()      {          set_test_name("empty plugin vector"); -        std::string threw; -        try -        { -            LLLeap::create("empty", StringVec()); -        } -        CATCH_AND_STORE_WHAT_IN(threw, LLLeap::Error) +        std::string threw = catch_what<LLLeap::Error>([](){ +                LLLeap::create("empty", StringVec()); +            });          ensure_contains("LLLeap::Error", threw, "no plugin");          // try the suppress-exception variant          ensure("bad launch returned non-NULL", ! LLLeap::create("empty", StringVec(), false)); @@ -308,12 +305,9 @@ namespace tut          // Synthesize bogus executable name          std::string BADPYTHON(PYTHON.substr(0, PYTHON.length()-1) + "x");          CaptureLog log; -        std::string threw; -        try -        { -            LLLeap::create("bad exe", BADPYTHON); -        } -        CATCH_AND_STORE_WHAT_IN(threw, LLLeap::Error) +        std::string threw = catch_what<LLLeap::Error>([&BADPYTHON](){ +                LLLeap::create("bad exe", BADPYTHON); +            });          ensure_contains("LLLeap::create() didn't throw", threw, "failed");          log.messageWith("failed");          log.messageWith(BADPYTHON); diff --git a/indra/llcommon/tests/llprocess_test.cpp b/indra/llcommon/tests/llprocess_test.cpp index 5c87cdabd9..222d832084 100644 --- a/indra/llcommon/tests/llprocess_test.cpp +++ b/indra/llcommon/tests/llprocess_test.cpp @@ -25,8 +25,6 @@  #include <boost/function.hpp>  #include <boost/algorithm/string/find_iterator.hpp>  #include <boost/algorithm/string/finder.hpp> -//#include <boost/lambda/lambda.hpp> -//#include <boost/lambda/bind.hpp>  // other Linden headers  #include "../test/lltut.h"  #include "../test/namedtempfile.h" @@ -35,7 +33,7 @@  #include "llsdutil.h"  #include "llevents.h"  #include "llstring.h" -#include "wrapllerrs.h" +#include "wrapllerrs.h"             // CaptureLog  #if defined(LL_WINDOWS)  #define sleep(secs) _sleep((secs) * 1000) @@ -45,8 +43,7 @@  #include <sys/wait.h>  #endif -//namespace lambda = boost::lambda; - std::string apr_strerror_helper(apr_status_t rv) +std::string apr_strerror_helper(apr_status_t rv)  {      char errbuf[256];      apr_strerror(rv, errbuf, sizeof(errbuf)); @@ -960,12 +957,9 @@ namespace tut  #define CATCH_IN(THREW, EXCEPTION, CODE)                                \      do                                                                  \      {                                                                   \ -        (THREW).clear();                                                \ -        try                                                             \ -        {                                                               \ -            CODE;                                                       \ -        }                                                               \ -        CATCH_AND_STORE_WHAT_IN(THREW, EXCEPTION)                       \ +        (THREW) = catch_what<EXCEPTION>([&](){                          \ +                CODE;                                                   \ +            });                                                         \          ensure("failed to throw " #EXCEPTION ": " #CODE, ! (THREW).empty()); \      } while (0) diff --git a/indra/llcommon/tests/wrapllerrs.h b/indra/llcommon/tests/wrapllerrs.h index 08fbf19b1c..3fb79f6b5d 100644 --- a/indra/llcommon/tests/wrapllerrs.h +++ b/indra/llcommon/tests/wrapllerrs.h @@ -37,6 +37,7 @@  #include "llerrorcontrol.h"  #include "llexception.h"  #include "stringize.h" +#include "../test/catch_and_store_what_in.h"  #include <boost/bind.hpp>  #include <boost/noncopyable.hpp>  #include <boost/shared_ptr.hpp> @@ -86,6 +87,13 @@ struct WrapLLErrs      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. | 
