Skip to content
This repository was archived by the owner on Aug 5, 2022. It is now read-only.

Commit 3d38fee

Browse files
committed
Merge pull request #351 from dawagner/fix-elementhandle-setArray
Fix ElementHandle::setAs.*Array methods
2 parents cea9fe7 + 04b3a54 commit 3d38fee

File tree

4 files changed

+79
-18
lines changed

4 files changed

+79
-18
lines changed

parameter/ElementHandle.cpp

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,20 @@ using std::string;
4141
using std::mutex;
4242
using std::lock_guard;
4343

44+
/** @return 0 by default, ie for non overloaded types. */
45+
template <class T>
46+
static size_t getUserInputSize(const T & /*scalar*/)
47+
{
48+
return 0;
49+
}
50+
51+
/** @return the vector's size. */
52+
template <class T>
53+
static size_t getUserInputSize(const std::vector<T> &vector)
54+
{
55+
return vector.size();
56+
}
57+
4458
ElementHandle::ElementHandle(CConfigurableElement &element, CParameterMgr &parameterMgr)
4559
: mElement(element), mParameterMgr(parameterMgr)
4660
{
@@ -146,18 +160,6 @@ struct isVector<std::vector<T>> : std::true_type
146160
{
147161
};
148162

149-
template <class T>
150-
size_t ElementHandle::getSize(T /*value*/)
151-
{
152-
return 0;
153-
}
154-
155-
template <class T>
156-
size_t ElementHandle::getSize(std::vector<T> &values)
157-
{
158-
return values.size();
159-
}
160-
161163
bool ElementHandle::getAsXML(std::string &xmlValue, std::string &error) const
162164
{
163165
std::string result;
@@ -194,7 +196,7 @@ bool ElementHandle::setAsBytes(const std::vector<uint8_t> &bytesValue, std::stri
194196
template <class T>
195197
bool ElementHandle::setAs(const T value, string &error) const
196198
{
197-
if (not checkSetValidity(getSize(value), error)) {
199+
if (not checkSetValidity(getUserInputSize(value), error)) {
198200
return false;
199201
}
200202
// Safe downcast thanks to isParameter check in checkSetValidity

parameter/include/ElementHandle.h

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -234,11 +234,6 @@ class PARAMETER_EXPORT ElementHandle
234234
template <class T>
235235
bool getAs(T &value, std::string &error) const;
236236

237-
template <class T>
238-
static size_t getSize(T value);
239-
template <class T>
240-
static size_t getSize(std::vector<T> &values);
241-
242237
CBaseParameter &getParameter();
243238
const CBaseParameter &getParameter() const;
244239

test/functional-tests/Handle.cpp

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -602,4 +602,46 @@ SCENARIO("Mapping handle access", "[handler][mapping]")
602602
}
603603
}
604604

605+
SCENARIO_METHOD(SettingsTestPF, "Handle Get/Set as various kinds", "[handler][dynamic]")
606+
{
607+
ElementHandle intScalar(*this, "/test/test/parameter_block/integer");
608+
WHEN ("Setting a scalar integer") {
609+
WHEN ("As an array") {
610+
THEN ("It should fail") {
611+
CHECK_THROWS(intScalar.setAsIntegerArray({0, 0}));
612+
}
613+
}
614+
WHEN ("As a scalalar") {
615+
THEN ("It should succeed") {
616+
uint32_t expected = 111;
617+
CHECK_NOTHROW(intScalar.setAsInteger(expected));
618+
AND_THEN ("Getting it back should give the same value") {
619+
uint32_t back = 42;
620+
CHECK_NOTHROW(intScalar.getAsInteger(back));
621+
CHECK(back == expected);
622+
}
623+
}
624+
}
625+
}
626+
627+
ElementHandle intArray(*this, "/test/test/parameter_block/integer_array");
628+
WHEN ("Setting a array integer") {
629+
WHEN ("As a scalar") {
630+
THEN ("It should fail") {
631+
CHECK_THROWS(intArray.setAsSignedInteger(0));
632+
}
633+
}
634+
WHEN ("As a integer") {
635+
THEN ("It should succeed") {
636+
const std::vector<int32_t> expected = {-9, 8, -7, 6};
637+
CHECK_NOTHROW(intArray.setAsSignedIntegerArray(expected));
638+
AND_THEN ("Getting it back should give the same value") {
639+
std::vector<int32_t> back = {-42, 42, 43, -43};
640+
CHECK_NOTHROW(intArray.getAsSignedIntegerArray(back));
641+
CHECK(back == expected);
642+
}
643+
}
644+
}
645+
}
646+
}
605647
} // namespace parameterFramework

test/functional-tests/include/ElementHandle.hpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,28 @@ class ElementHandle : private FailureWrapper<::ElementHandle>
7676
/** Wrap EH::getAsDouble to throw an exception on failure. */
7777
void getAsDouble(double &value) const { mayFailCall(&EH::getAsDouble, value); }
7878

79+
void setAsInteger(uint32_t value) { mayFailCall(&EH::setAsInteger, value); }
80+
void getAsInteger(uint32_t &value) const { mayFailCall(&EH::getAsInteger, value); }
81+
void setAsIntegerArray(const std::vector<uint32_t> &value)
82+
{
83+
mayFailCall(&EH::setAsIntegerArray, value);
84+
}
85+
void getAsIntegerArray(std::vector<uint32_t> &value) const
86+
{
87+
mayFailCall(&EH::getAsIntegerArray, value);
88+
}
89+
90+
void setAsSignedInteger(int32_t value) { mayFailCall(&EH::setAsSignedInteger, value); }
91+
void getAsSignedInteger(int32_t &value) const { mayFailCall(&EH::getAsSignedInteger, value); }
92+
void setAsSignedIntegerArray(const std::vector<int32_t> &value)
93+
{
94+
mayFailCall(&EH::setAsSignedIntegerArray, value);
95+
}
96+
void getAsSignedIntegerArray(std::vector<int32_t> &value) const
97+
{
98+
mayFailCall(&EH::getAsSignedIntegerArray, value);
99+
}
100+
79101
std::string getStructureAsXML() const { return mayFailGet(&EH::getStructureAsXML); }
80102

81103
std::string getAsXML() const { return mayFailGet(&EH::getAsXML); }

0 commit comments

Comments
 (0)