From 7b6554db3df63e1bd948c516c9ced5dafd588821 Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Wed, 22 Oct 2014 11:59:20 -0400 Subject: added quoting to clarify failure messages --- indra/test/lltut.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'indra/test/lltut.cpp') diff --git a/indra/test/lltut.cpp b/indra/test/lltut.cpp index c43a8f0c7d..a183cef9a9 100755 --- a/indra/test/lltut.cpp +++ b/indra/test/lltut.cpp @@ -158,8 +158,8 @@ namespace tut if( actual.find(expectedStart, 0) != 0 ) { std::stringstream ss; - ss << msg << ": " << "expected to find " << expectedStart - << " at start of actual " << actual; + ss << msg << ": " << "expected to find '" << expectedStart + << "' at start of actual '" << actual << "'"; throw failure(ss.str().c_str()); } } @@ -172,8 +172,8 @@ namespace tut != (actual.size() - expectedEnd.size()) ) { std::stringstream ss; - ss << msg << ": " << "expected to find " << expectedEnd - << " at end of actual " << actual; + ss << msg << ": " << "expected to find '" << expectedEnd + << "' at end of actual '" << actual << "'"; throw failure(ss.str().c_str()); } } @@ -184,8 +184,8 @@ namespace tut if( actual.find(expectedSubString, 0) == std::string::npos ) { std::stringstream ss; - ss << msg << ": " << "expected to find " << expectedSubString - << " in actual " << actual; + ss << msg << ": " << "expected to find '" << expectedSubString + << "' in actual '" << actual << "'"; throw failure(ss.str().c_str()); } } -- cgit v1.2.3 From 642c334efa2dbd0bafca5b0dbb11a986cd5ab4a9 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Thu, 23 Oct 2014 08:44:42 -0700 Subject: Fix Xcode 6 compile errors relating to tut::ensure_equals() overloads. lltut.h declares a number of ensure_equals() overloads for various data types, notably the types supported by LLSD. We expect these to be called by tut code. But the tut code in question is in a template in tut.hpp -- which was #included BEFORE the overloads were declared. Previous C++ compilers have evidently made multiple passes, collecting the relevant overloads before attempting to compile the template bodies. clang does not, complaining that the overloads must be declared before the tut.hpp template code that references them. Reordering parts of lltut.h seems to address that problem. For similar reasons, test programs that use StringVec.h and its operator<<() must #include StringVec.h before lltut.h. Add ensure_equals(const std::string&, const LLSD::Binary&, const LLSD::Binary&) overload. The sloppy mix of (const char*, ...) and (const std::string&, ...) overloads bothers me, since for many of those ... types we seem to have to duplicate them. --- indra/test/lltut.cpp | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) (limited to 'indra/test/lltut.cpp') diff --git a/indra/test/lltut.cpp b/indra/test/lltut.cpp index a183cef9a9..2730fb34d7 100755 --- a/indra/test/lltut.cpp +++ b/indra/test/lltut.cpp @@ -52,12 +52,25 @@ namespace tut actual.asString(), expected.asString()); } + // The lexical param types here intentionally diverge from the declaration + // in our header file. In lltut.h, LLSD is only a forward-declared type; + // we have no access to its LLSD::Binary nested type, and so must restate + // it explicitly to declare this overload. However, an overload that does + // NOT match LLSD::Binary does us no good whatsoever: it would never be + // engaged. Stating LLSD::Binary for this definition at least means that + // if the LLSD::Binary type ever diverges from what we expect in lltut.h, + // that divergence will produce an error: no definition will match that + // declaration. void ensure_equals(const char* msg, - const std::vector& actual, const std::vector& expected) + const LLSD::Binary& actual, const LLSD::Binary& expected) { - std::string s(msg); - - ensure_equals(s + " size", actual.size(), expected.size()); + ensure_equals(std::string(msg? msg : ""), actual, expected); + } + + void ensure_equals(const std::string& msg, + const LLSD::Binary& actual, const LLSD::Binary& expected) + { + ensure_equals(msg + " size", actual.size(), expected.size()); std::vector::const_iterator i, j; int k; @@ -65,14 +78,14 @@ namespace tut i != actual.end(); ++i, ++j, ++k) { - ensure_equals(s + " field", *i, *j); + ensure_equals(msg + " field", *i, *j); } } void ensure_equals(const char* m, const LLSD& actual, const LLSD& expected) { - ensure_equals(std::string(m), actual, expected); + ensure_equals(std::string(m? m : ""), actual, expected); } void ensure_equals(const std::string& msg, const LLSD& actual, -- cgit v1.2.3 From 918e2b629bd3dadfbe5288c0d72d93bcca1b8cfe Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Thu, 23 Oct 2014 20:23:08 -0700 Subject: Bring in new TUT library build. Clean up ensure_equals() overloads. The new TUT library build eliminates the ambiguity about ensure_equals(const char*, ...) versus ensure_equals(const std::string&, ...). Now it's all based on const std::string&. Remove pointless const char* overloads and ambiguous forwarding templates. With clang in Xcode 6, any new datatypes we intend to use with ensure_equals() must have operator<<(std::ostream&, datatype) declared BEFORE lltut.h #includes tut.hpp. Reorder code in certain test source files to guarantee that visibility. --- indra/test/lltut.cpp | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) (limited to 'indra/test/lltut.cpp') diff --git a/indra/test/lltut.cpp b/indra/test/lltut.cpp index 2730fb34d7..5a8ee87afd 100755 --- a/indra/test/lltut.cpp +++ b/indra/test/lltut.cpp @@ -38,14 +38,14 @@ namespace tut { - void ensure_equals(const char* msg, const LLDate& actual, + void ensure_equals(const std::string& msg, const LLDate& actual, const LLDate& expected) { ensure_equals(msg, actual.secondsSinceEpoch(), expected.secondsSinceEpoch()); } - void ensure_equals(const char* msg, const LLURI& actual, + void ensure_equals(const std::string& msg, const LLURI& actual, const LLURI& expected) { ensure_equals(msg, @@ -61,18 +61,12 @@ namespace tut // if the LLSD::Binary type ever diverges from what we expect in lltut.h, // that divergence will produce an error: no definition will match that // declaration. - void ensure_equals(const char* msg, - const LLSD::Binary& actual, const LLSD::Binary& expected) - { - ensure_equals(std::string(msg? msg : ""), actual, expected); - } - void ensure_equals(const std::string& msg, const LLSD::Binary& actual, const LLSD::Binary& expected) { ensure_equals(msg + " size", actual.size(), expected.size()); - std::vector::const_iterator i, j; + LLSD::Binary::const_iterator i, j; int k; for (i = actual.begin(), j = expected.begin(), k = 0; i != actual.end(); @@ -82,12 +76,6 @@ namespace tut } } - void ensure_equals(const char* m, const LLSD& actual, - const LLSD& expected) - { - ensure_equals(std::string(m? m : ""), actual, expected); - } - void ensure_equals(const std::string& msg, const LLSD& actual, const LLSD& expected) { -- cgit v1.2.3