00001
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef MOCKPP_RETURNOBJECTLIST_H
00031 #define MOCKPP_RETURNOBJECTLIST_H
00032
00033 #include <mockpp/mockpp.h>
00034
00035 #include MOCKPP_VECTOR_H
00036
00037 #include <mockpp/Verifiable.h>
00038
00039 #include <mockpp/compat/Formatter.h>
00040
00041 #include <mockpp/util/AssertMo.h>
00042
00043
00044 MOCKPP_NS_START
00045
00046
00047 class VerifiableList;
00048
00061 template <class T>
00062 class ReturnObjectList : public Verifiable
00063 {
00064 public:
00065
00070 ReturnObjectList(const String &name, VerifiableList *parent)
00071 : Verifiable (name, parent)
00072 , haveDefault(false)
00073 {
00074 }
00075
00076
00081 ReturnObjectList& addObjectToReturn(const T &anObjectToReturn)
00082 {
00083 myObjects.push_back(anObjectToReturn);
00084 return *this;
00085 }
00086
00087
00093 ReturnObjectList& addObjectToReturn(const T &anObjectToReturn, unsigned count)
00094 {
00095 for (unsigned i = 0; i < count; ++i)
00096 addObjectToReturn(anObjectToReturn);
00097 return *this;
00098 }
00099
00100
00106 template <class I>
00107 ReturnObjectList& addObjectToReturn(I items, I end)
00108 {
00109 for ( ; items != end; ++items)
00110 addObjectToReturn(*items);
00111 return *this;
00112 }
00113
00114
00119 void setDefaultReturnValue(const T &defaultObj)
00120 {
00121 haveDefault = true;
00122 defaultObject = defaultObj;
00123 }
00124
00125
00129 T nextReturnObject()
00130 {
00131 String fmt = mockpp_i18n(MOCKPP_PCHAR("%1 has run out of objects."));
00132 fmt << getVerifiableName();
00133
00134 if (myObjects.size() == 0 && haveDefault)
00135 return defaultObject;
00136
00137 MOCKPP_ASSERT_TRUE_MESSAGE(fmt, myObjects.size() > 0);
00138
00139 T temp = myObjects[0];
00140 myObjects.erase(myObjects.begin());
00141 return temp;
00142 }
00143
00144
00147 void reset()
00148 {
00149 haveDefault = false;
00150 myObjects.clear();
00151 }
00152
00153
00158 String toString() const
00159 {
00160 if (myObjects.size() == 0 && !haveDefault)
00161 return MOCKPP_PCHAR("[]");
00162
00163 String ret;
00164 ret += MOCKPP_PCHAR("\n[\n");
00165
00166 for(unsigned i = 0; i < myObjects.size(); ++i)
00167 {
00168 String fmt = MOCKPP_PCHAR(" - %1\n");
00169 fmt << myObjects[i];
00170 ret += fmt;
00171 }
00172
00173 if (haveDefault)
00174 {
00175 String fmt = MOCKPP_PCHAR(" * %1\n");
00176 fmt << defaultObject;
00177 ret += fmt;
00178 }
00179
00180 ret += MOCKPP_PCHAR("]\n");
00181 return ret;
00182 }
00183
00184
00188 bool hasMoreObjects() const
00189 {
00190 return myObjects.size() != 0;
00191 }
00192
00193
00197 virtual void verify()
00198 {
00199 String fmt = mockpp_i18n(MOCKPP_PCHAR("%1 has %2 un-used objects."));
00200 fmt << getVerifiableName() << myObjects.size();
00201
00202 MOCKPP_ASSERT_EQUALS_MESSAGE(fmt, (size_t)0, myObjects.size());
00203 }
00204
00205 private:
00206
00207 MOCKPP_STL::vector<T> myObjects;
00208 bool haveDefault;
00209 T defaultObject;
00210 };
00211
00212
00213 MOCKPP_NS_END
00214
00215 #endif // MOCKPP_RETURNOBJECTLIST_H