summaryrefslogtreecommitdiff
path: root/indra/llcommon/tests/lleventdispatcher_test.cpp
diff options
context:
space:
mode:
authorNat Goodspeed <nat@lindenlab.com>2011-02-05 11:11:20 -0500
committerNat Goodspeed <nat@lindenlab.com>2011-02-05 11:11:20 -0500
commit950cac24ccfe963b5af1dc4f7b07acda1e8bd062 (patch)
treeea58829f9f59b21a664c8e90ef45a2d466a60a1e /indra/llcommon/tests/lleventdispatcher_test.cpp
parentf18885e55df025059e279605d997364575c1561a (diff)
Add successful calls to array-style functions.
Diffstat (limited to 'indra/llcommon/tests/lleventdispatcher_test.cpp')
-rw-r--r--indra/llcommon/tests/lleventdispatcher_test.cpp70
1 files changed, 70 insertions, 0 deletions
diff --git a/indra/llcommon/tests/lleventdispatcher_test.cpp b/indra/llcommon/tests/lleventdispatcher_test.cpp
index 9de0819b66..c8f45290d6 100644
--- a/indra/llcommon/tests/lleventdispatcher_test.cpp
+++ b/indra/llcommon/tests/lleventdispatcher_test.cpp
@@ -628,6 +628,26 @@ namespace tut
ensure(STRINGIZE("No metadata for " << name), meta.isDefined());
return meta;
}
+
+ // If I call this ensure_equals(), it blocks visibility of all other
+ // ensure_equals() overloads. Normally I could say 'using
+ // baseclass::ensure_equals;' and fix that, but I don't know what the
+ // base class is!
+ void ensure_llsd(const std::string& msg, const LLSD& actual, const LLSD& expected, U32 bits)
+ {
+ std::ostringstream out;
+ if (! msg.empty())
+ {
+ out << msg << ": ";
+ }
+ out << "expected " << expected << ", actual " << actual;
+ ensure(out.str(), llsd_equals(actual, expected, bits));
+ }
+
+ void ensure_llsd(const LLSD& actual, const LLSD& expected, U32 bits)
+ {
+ ensure_llsd("", actual, expected, bits);
+ }
};
typedef test_group<lleventdispatcher_data> lleventdispatcher_group;
typedef lleventdispatcher_group::object object;
@@ -1132,4 +1152,54 @@ namespace tut
call_exc(tr.name2, tooshort, "requires more arguments");
}
}
+
+ template<> template<>
+ void object::test<20>()
+ {
+ set_test_name("call array-style functions with (just right | too long) arrays");
+ std::vector<U8> binary;
+ for (size_t h(0x01), i(0); i < 5; h+= 0x22, ++i)
+ {
+ binary.push_back(h);
+ }
+ LLSD argsa(LLSDArray(true)(17)(3.14)(123.456)("char*"));
+ LLSD argsb(LLSDArray("string")(LLUUID("01234567-89ab-cdef-0123-456789abcdef"))
+ (LLDate("2011-02-03T15:07:00Z"))(LLURI("http://secondlife.com"))(binary));
+ LLSD argsaplus(argsa), argsbplus(argsb);
+ argsaplus.append("bogus");
+ argsbplus.append("bogus");
+ LLSD expecta, expectb;
+ for (LLSD::Integer i(0), iend(paramsa.size()); i < iend; ++i)
+ {
+ expecta[paramsa[i].asString()] = argsa[i];
+ }
+ for (LLSD::Integer i(0), iend(paramsb.size()); i < iend; ++i)
+ {
+ expectb[paramsb[i].asString()] = argsb[i];
+ }
+ cout << "expecta: " << expecta << "\nexpectb: " << expectb << '\n';
+ foreach(const FunctionsTriple& tr, array_funcs(v))
+ {
+ *tr.vars = Vars();
+ work(tr.name1, argsa);
+ ensure_llsd(STRINGIZE(tr.name1 << ": expecta mismatch"),
+ tr.vars->inspect(), expecta, 7);
+
+ *tr.vars = Vars();
+ work(tr.name2, argsb);
+ ensure_llsd(STRINGIZE(tr.name2 << ": expectb mismatch"),
+ tr.vars->inspect(), expectb, 7);
+
+ // TODO: argsaplus, argsbplus, check LL_WARNS output?
+ }
+ }
+
+ // TODO:
+ // - refactor params-related data as {'a':arraya, 'b':arrayb}
+ // - function to build a map from keys array, values array (or
+ // vice-versa?)
+ // - Vars formatting for char* and for binary should be done in setter
+ // method, storing each as std::string. We should NOT NOT NOT store
+ // char*! The string data we receive through the param list will be gone
+ // by the time we try to inspect()!
} // namespace tut