1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770 |
- #include "gmock/gmock-spec-builders.h"
- #include <ostream> // NOLINT
- #include <sstream>
- #include <string>
- #include "gmock/gmock.h"
- #include "gmock/internal/gmock-port.h"
- #include "gtest/gtest.h"
- #include "gtest/gtest-spi.h"
- #include "gtest/internal/gtest-port.h"
- namespace testing {
- namespace internal {
- class ExpectationTester {
- public:
-
- void SetCallCount(int n, ExpectationBase* exp) {
- exp->call_count_ = n;
- }
- };
- }
- }
- namespace {
- using testing::_;
- using testing::AnyNumber;
- using testing::AtLeast;
- using testing::AtMost;
- using testing::Between;
- using testing::Cardinality;
- using testing::CardinalityInterface;
- using testing::ContainsRegex;
- using testing::Const;
- using testing::DoAll;
- using testing::DoDefault;
- using testing::Eq;
- using testing::Expectation;
- using testing::ExpectationSet;
- using testing::GMOCK_FLAG(verbose);
- using testing::Gt;
- using testing::InSequence;
- using testing::Invoke;
- using testing::InvokeWithoutArgs;
- using testing::IsNotSubstring;
- using testing::IsSubstring;
- using testing::Lt;
- using testing::Message;
- using testing::Mock;
- using testing::NaggyMock;
- using testing::Ne;
- using testing::Return;
- using testing::SaveArg;
- using testing::Sequence;
- using testing::SetArgPointee;
- using testing::internal::ExpectationTester;
- using testing::internal::FormatFileLocation;
- using testing::internal::kAllow;
- using testing::internal::kErrorVerbosity;
- using testing::internal::kFail;
- using testing::internal::kInfoVerbosity;
- using testing::internal::kWarn;
- using testing::internal::kWarningVerbosity;
- using testing::internal::linked_ptr;
- #if GTEST_HAS_STREAM_REDIRECTION
- using testing::HasSubstr;
- using testing::internal::CaptureStdout;
- using testing::internal::GetCapturedStdout;
- #endif
- class Incomplete;
- class MockIncomplete {
- public:
-
-
- MOCK_METHOD1(ByRefFunc, void(const Incomplete& x));
- };
- void PrintTo(const Incomplete& x, ::std::ostream* os);
- TEST(MockMethodTest, CanInstantiateWithIncompleteArgType) {
-
-
-
-
- MockIncomplete incomplete;
- EXPECT_CALL(incomplete, ByRefFunc(_))
- .Times(AnyNumber());
- }
- void PrintTo(const Incomplete& , ::std::ostream* os) {
- *os << "incomplete";
- }
- class Result {};
- class NonDefaultConstructible {
- public:
- explicit NonDefaultConstructible(int ) {}
- };
- class MockA {
- public:
- MockA() {}
- MOCK_METHOD1(DoA, void(int n));
- MOCK_METHOD1(ReturnResult, Result(int n));
- MOCK_METHOD0(ReturnNonDefaultConstructible, NonDefaultConstructible());
- MOCK_METHOD2(Binary, bool(int x, int y));
- MOCK_METHOD2(ReturnInt, int(int x, int y));
- private:
- GTEST_DISALLOW_COPY_AND_ASSIGN_(MockA);
- };
- class MockB {
- public:
- MockB() {}
- MOCK_CONST_METHOD0(DoB, int());
- MOCK_METHOD1(DoB, int(int n));
- private:
- GTEST_DISALLOW_COPY_AND_ASSIGN_(MockB);
- };
- class ReferenceHoldingMock {
- public:
- ReferenceHoldingMock() {}
- MOCK_METHOD1(AcceptReference, void(linked_ptr<MockA>*));
- private:
- GTEST_DISALLOW_COPY_AND_ASSIGN_(ReferenceHoldingMock);
- };
- #define Method MethodW
- class CC {
- public:
- virtual ~CC() {}
- virtual int Method() = 0;
- };
- class MockCC : public CC {
- public:
- MockCC() {}
- MOCK_METHOD0(Method, int());
- private:
- GTEST_DISALLOW_COPY_AND_ASSIGN_(MockCC);
- };
- TEST(OnCallSyntaxTest, CompilesWithMethodNameExpandedFromMacro) {
- MockCC cc;
- ON_CALL(cc, Method());
- }
- TEST(OnCallSyntaxTest, WorksWithMethodNameExpandedFromMacro) {
- MockCC cc;
- ON_CALL(cc, Method()).WillByDefault(Return(42));
- EXPECT_EQ(42, cc.Method());
- }
- TEST(ExpectCallSyntaxTest, CompilesWithMethodNameExpandedFromMacro) {
- MockCC cc;
- EXPECT_CALL(cc, Method());
- cc.Method();
- }
- TEST(ExpectCallSyntaxTest, WorksWithMethodNameExpandedFromMacro) {
- MockCC cc;
- EXPECT_CALL(cc, Method()).WillOnce(Return(42));
- EXPECT_EQ(42, cc.Method());
- }
- #undef Method
- TEST(OnCallSyntaxTest, EvaluatesFirstArgumentOnce) {
- MockA a;
- MockA* pa = &a;
- ON_CALL(*pa++, DoA(_));
- EXPECT_EQ(&a + 1, pa);
- }
- TEST(OnCallSyntaxTest, EvaluatesSecondArgumentOnce) {
- MockA a;
- int n = 0;
- ON_CALL(a, DoA(n++));
- EXPECT_EQ(1, n);
- }
- TEST(OnCallSyntaxTest, WithIsOptional) {
- MockA a;
- ON_CALL(a, DoA(5))
- .WillByDefault(Return());
- ON_CALL(a, DoA(_))
- .With(_)
- .WillByDefault(Return());
- }
- TEST(OnCallSyntaxTest, WithCanAppearAtMostOnce) {
- MockA a;
- EXPECT_NONFATAL_FAILURE({
- ON_CALL(a, ReturnResult(_))
- .With(_)
- .With(_)
- .WillByDefault(Return(Result()));
- }, ".With() cannot appear more than once in an ON_CALL()");
- }
- TEST(OnCallSyntaxTest, WillByDefaultIsMandatory) {
- MockA a;
- EXPECT_DEATH_IF_SUPPORTED({
- ON_CALL(a, DoA(5));
- a.DoA(5);
- }, "");
- }
- TEST(OnCallSyntaxTest, WillByDefaultCanAppearAtMostOnce) {
- MockA a;
- EXPECT_NONFATAL_FAILURE({
- ON_CALL(a, DoA(5))
- .WillByDefault(Return())
- .WillByDefault(Return());
- }, ".WillByDefault() must appear exactly once in an ON_CALL()");
- }
- TEST(ExpectCallSyntaxTest, EvaluatesFirstArgumentOnce) {
- MockA a;
- MockA* pa = &a;
- EXPECT_CALL(*pa++, DoA(_));
- a.DoA(0);
- EXPECT_EQ(&a + 1, pa);
- }
- TEST(ExpectCallSyntaxTest, EvaluatesSecondArgumentOnce) {
- MockA a;
- int n = 0;
- EXPECT_CALL(a, DoA(n++));
- a.DoA(0);
- EXPECT_EQ(1, n);
- }
- TEST(ExpectCallSyntaxTest, WithIsOptional) {
- MockA a;
- EXPECT_CALL(a, DoA(5))
- .Times(0);
- EXPECT_CALL(a, DoA(6))
- .With(_)
- .Times(0);
- }
- TEST(ExpectCallSyntaxTest, WithCanAppearAtMostOnce) {
- MockA a;
- EXPECT_NONFATAL_FAILURE({
- EXPECT_CALL(a, DoA(6))
- .With(_)
- .With(_);
- }, ".With() cannot appear more than once in an EXPECT_CALL()");
- a.DoA(6);
- }
- TEST(ExpectCallSyntaxTest, WithMustBeFirstClause) {
- MockA a;
- EXPECT_NONFATAL_FAILURE({
- EXPECT_CALL(a, DoA(1))
- .Times(1)
- .With(_);
- }, ".With() must be the first clause in an EXPECT_CALL()");
- a.DoA(1);
- EXPECT_NONFATAL_FAILURE({
- EXPECT_CALL(a, DoA(2))
- .WillOnce(Return())
- .With(_);
- }, ".With() must be the first clause in an EXPECT_CALL()");
- a.DoA(2);
- }
- TEST(ExpectCallSyntaxTest, TimesCanBeInferred) {
- MockA a;
- EXPECT_CALL(a, DoA(1))
- .WillOnce(Return());
- EXPECT_CALL(a, DoA(2))
- .WillOnce(Return())
- .WillRepeatedly(Return());
- a.DoA(1);
- a.DoA(2);
- a.DoA(2);
- }
- TEST(ExpectCallSyntaxTest, TimesCanAppearAtMostOnce) {
- MockA a;
- EXPECT_NONFATAL_FAILURE({
- EXPECT_CALL(a, DoA(1))
- .Times(1)
- .Times(2);
- }, ".Times() cannot appear more than once in an EXPECT_CALL()");
- a.DoA(1);
- a.DoA(1);
- }
- TEST(ExpectCallSyntaxTest, TimesMustBeBeforeInSequence) {
- MockA a;
- Sequence s;
- EXPECT_NONFATAL_FAILURE({
- EXPECT_CALL(a, DoA(1))
- .InSequence(s)
- .Times(1);
- }, ".Times() cannot appear after ");
- a.DoA(1);
- }
- TEST(ExpectCallSyntaxTest, InSequenceIsOptional) {
- MockA a;
- Sequence s;
- EXPECT_CALL(a, DoA(1));
- EXPECT_CALL(a, DoA(2))
- .InSequence(s);
- a.DoA(1);
- a.DoA(2);
- }
- TEST(ExpectCallSyntaxTest, InSequenceCanAppearMultipleTimes) {
- MockA a;
- Sequence s1, s2;
- EXPECT_CALL(a, DoA(1))
- .InSequence(s1, s2)
- .InSequence(s1);
- a.DoA(1);
- }
- TEST(ExpectCallSyntaxTest, InSequenceMustBeBeforeAfter) {
- MockA a;
- Sequence s;
- Expectation e = EXPECT_CALL(a, DoA(1))
- .Times(AnyNumber());
- EXPECT_NONFATAL_FAILURE({
- EXPECT_CALL(a, DoA(2))
- .After(e)
- .InSequence(s);
- }, ".InSequence() cannot appear after ");
- a.DoA(2);
- }
- TEST(ExpectCallSyntaxTest, InSequenceMustBeBeforeWillOnce) {
- MockA a;
- Sequence s;
- EXPECT_NONFATAL_FAILURE({
- EXPECT_CALL(a, DoA(1))
- .WillOnce(Return())
- .InSequence(s);
- }, ".InSequence() cannot appear after ");
- a.DoA(1);
- }
- TEST(ExpectCallSyntaxTest, AfterMustBeBeforeWillOnce) {
- MockA a;
- Expectation e = EXPECT_CALL(a, DoA(1));
- EXPECT_NONFATAL_FAILURE({
- EXPECT_CALL(a, DoA(2))
- .WillOnce(Return())
- .After(e);
- }, ".After() cannot appear after ");
- a.DoA(1);
- a.DoA(2);
- }
- TEST(ExpectCallSyntaxTest, WillIsOptional) {
- MockA a;
- EXPECT_CALL(a, DoA(1));
- EXPECT_CALL(a, DoA(2))
- .WillOnce(Return());
- a.DoA(1);
- a.DoA(2);
- }
- TEST(ExpectCallSyntaxTest, WillCanAppearMultipleTimes) {
- MockA a;
- EXPECT_CALL(a, DoA(1))
- .Times(AnyNumber())
- .WillOnce(Return())
- .WillOnce(Return())
- .WillOnce(Return());
- }
- TEST(ExpectCallSyntaxTest, WillMustBeBeforeWillRepeatedly) {
- MockA a;
- EXPECT_NONFATAL_FAILURE({
- EXPECT_CALL(a, DoA(1))
- .WillRepeatedly(Return())
- .WillOnce(Return());
- }, ".WillOnce() cannot appear after ");
- a.DoA(1);
- }
- TEST(ExpectCallSyntaxTest, WillRepeatedlyIsOptional) {
- MockA a;
- EXPECT_CALL(a, DoA(1))
- .WillOnce(Return());
- EXPECT_CALL(a, DoA(2))
- .WillOnce(Return())
- .WillRepeatedly(Return());
- a.DoA(1);
- a.DoA(2);
- a.DoA(2);
- }
- TEST(ExpectCallSyntaxTest, WillRepeatedlyCannotAppearMultipleTimes) {
- MockA a;
- EXPECT_NONFATAL_FAILURE({
- EXPECT_CALL(a, DoA(1))
- .WillRepeatedly(Return())
- .WillRepeatedly(Return());
- }, ".WillRepeatedly() cannot appear more than once in an "
- "EXPECT_CALL()");
- }
- TEST(ExpectCallSyntaxTest, WillRepeatedlyMustBeBeforeRetiresOnSaturation) {
- MockA a;
- EXPECT_NONFATAL_FAILURE({
- EXPECT_CALL(a, DoA(1))
- .RetiresOnSaturation()
- .WillRepeatedly(Return());
- }, ".WillRepeatedly() cannot appear after ");
- }
- TEST(ExpectCallSyntaxTest, RetiresOnSaturationIsOptional) {
- MockA a;
- EXPECT_CALL(a, DoA(1));
- EXPECT_CALL(a, DoA(1))
- .RetiresOnSaturation();
- a.DoA(1);
- a.DoA(1);
- }
- TEST(ExpectCallSyntaxTest, RetiresOnSaturationCannotAppearMultipleTimes) {
- MockA a;
- EXPECT_NONFATAL_FAILURE({
- EXPECT_CALL(a, DoA(1))
- .RetiresOnSaturation()
- .RetiresOnSaturation();
- }, ".RetiresOnSaturation() cannot appear more than once");
- a.DoA(1);
- }
- TEST(ExpectCallSyntaxTest, DefaultCardinalityIsOnce) {
- {
- MockA a;
- EXPECT_CALL(a, DoA(1));
- a.DoA(1);
- }
- EXPECT_NONFATAL_FAILURE({
- MockA a;
- EXPECT_CALL(a, DoA(1));
- }, "to be called once");
- EXPECT_NONFATAL_FAILURE({
- MockA a;
- EXPECT_CALL(a, DoA(1));
- a.DoA(1);
- a.DoA(1);
- }, "to be called once");
- }
- #if GTEST_HAS_STREAM_REDIRECTION
- TEST(ExpectCallSyntaxTest, DoesNotWarnOnAdequateActionCount) {
- CaptureStdout();
- {
- MockB b;
-
- EXPECT_CALL(b, DoB())
- .Times(0);
- EXPECT_CALL(b, DoB(1))
- .Times(AtMost(1));
- EXPECT_CALL(b, DoB(2))
- .Times(1)
- .WillRepeatedly(Return(1));
-
- EXPECT_CALL(b, DoB(3))
- .Times(Between(1, 2))
- .WillOnce(Return(1))
- .WillOnce(Return(2));
-
-
- EXPECT_CALL(b, DoB(4))
- .Times(AtMost(3))
- .WillOnce(Return(1))
- .WillRepeatedly(Return(2));
-
- b.DoB(2);
- b.DoB(3);
- }
- EXPECT_STREQ("", GetCapturedStdout().c_str());
- }
- TEST(ExpectCallSyntaxTest, WarnsOnTooManyActions) {
- CaptureStdout();
- {
- MockB b;
-
- EXPECT_CALL(b, DoB())
- .Times(0)
- .WillOnce(Return(1));
- EXPECT_CALL(b, DoB())
- .Times(AtMost(1))
- .WillOnce(Return(1))
- .WillOnce(Return(2));
- EXPECT_CALL(b, DoB(1))
- .Times(1)
- .WillOnce(Return(1))
- .WillOnce(Return(2))
- .RetiresOnSaturation();
-
-
- EXPECT_CALL(b, DoB())
- .Times(0)
- .WillRepeatedly(Return(1));
- EXPECT_CALL(b, DoB(2))
- .Times(1)
- .WillOnce(Return(1))
- .WillRepeatedly(Return(2));
-
- b.DoB(1);
- b.DoB(2);
- }
- const std::string output = GetCapturedStdout();
- EXPECT_PRED_FORMAT2(
- IsSubstring,
- "Too many actions specified in EXPECT_CALL(b, DoB())...\n"
- "Expected to be never called, but has 1 WillOnce().",
- output);
- EXPECT_PRED_FORMAT2(
- IsSubstring,
- "Too many actions specified in EXPECT_CALL(b, DoB())...\n"
- "Expected to be called at most once, "
- "but has 2 WillOnce()s.",
- output);
- EXPECT_PRED_FORMAT2(
- IsSubstring,
- "Too many actions specified in EXPECT_CALL(b, DoB(1))...\n"
- "Expected to be called once, but has 2 WillOnce()s.",
- output);
- EXPECT_PRED_FORMAT2(
- IsSubstring,
- "Too many actions specified in EXPECT_CALL(b, DoB())...\n"
- "Expected to be never called, but has 0 WillOnce()s "
- "and a WillRepeatedly().",
- output);
- EXPECT_PRED_FORMAT2(
- IsSubstring,
- "Too many actions specified in EXPECT_CALL(b, DoB(2))...\n"
- "Expected to be called once, but has 1 WillOnce() "
- "and a WillRepeatedly().",
- output);
- }
- TEST(ExpectCallSyntaxTest, WarnsOnTooFewActions) {
- MockB b;
- EXPECT_CALL(b, DoB())
- .Times(Between(2, 3))
- .WillOnce(Return(1));
- CaptureStdout();
- b.DoB();
- const std::string output = GetCapturedStdout();
- EXPECT_PRED_FORMAT2(
- IsSubstring,
- "Too few actions specified in EXPECT_CALL(b, DoB())...\n"
- "Expected to be called between 2 and 3 times, "
- "but has only 1 WillOnce().",
- output);
- b.DoB();
- }
- TEST(ExpectCallSyntaxTest, WarningIsErrorWithFlag) {
- int original_behavior = testing::GMOCK_FLAG(default_mock_behavior);
- testing::GMOCK_FLAG(default_mock_behavior) = kAllow;
- CaptureStdout();
- {
- MockA a;
- a.DoA(0);
- }
- std::string output = GetCapturedStdout();
- EXPECT_TRUE(output.empty()) << output;
- testing::GMOCK_FLAG(default_mock_behavior) = kWarn;
- CaptureStdout();
- {
- MockA a;
- a.DoA(0);
- }
- std::string warning_output = GetCapturedStdout();
- EXPECT_PRED_FORMAT2(IsSubstring, "GMOCK WARNING", warning_output);
- EXPECT_PRED_FORMAT2(IsSubstring, "Uninteresting mock function call",
- warning_output);
- testing::GMOCK_FLAG(default_mock_behavior) = kFail;
- EXPECT_NONFATAL_FAILURE({
- MockA a;
- a.DoA(0);
- }, "Uninteresting mock function call");
-
- testing::GMOCK_FLAG(default_mock_behavior) = -1;
- CaptureStdout();
- {
- MockA a;
- a.DoA(0);
- }
- warning_output = GetCapturedStdout();
- EXPECT_PRED_FORMAT2(IsSubstring, "GMOCK WARNING", warning_output);
- EXPECT_PRED_FORMAT2(IsSubstring, "Uninteresting mock function call",
- warning_output);
- testing::GMOCK_FLAG(default_mock_behavior) = 3;
- CaptureStdout();
- {
- MockA a;
- a.DoA(0);
- }
- warning_output = GetCapturedStdout();
- EXPECT_PRED_FORMAT2(IsSubstring, "GMOCK WARNING", warning_output);
- EXPECT_PRED_FORMAT2(IsSubstring, "Uninteresting mock function call",
- warning_output);
- testing::GMOCK_FLAG(default_mock_behavior) = original_behavior;
- }
- #endif
- TEST(OnCallTest, TakesBuiltInDefaultActionWhenNoOnCall) {
- MockB b;
- EXPECT_CALL(b, DoB());
- EXPECT_EQ(0, b.DoB());
- }
- TEST(OnCallTest, TakesBuiltInDefaultActionWhenNoOnCallMatches) {
- MockB b;
- ON_CALL(b, DoB(1))
- .WillByDefault(Return(1));
- EXPECT_CALL(b, DoB(_));
- EXPECT_EQ(0, b.DoB(2));
- }
- TEST(OnCallTest, PicksLastMatchingOnCall) {
- MockB b;
- ON_CALL(b, DoB(_))
- .WillByDefault(Return(3));
- ON_CALL(b, DoB(2))
- .WillByDefault(Return(2));
- ON_CALL(b, DoB(1))
- .WillByDefault(Return(1));
- EXPECT_CALL(b, DoB(_));
- EXPECT_EQ(2, b.DoB(2));
- }
- TEST(ExpectCallTest, AllowsAnyCallWhenNoSpec) {
- MockB b;
- EXPECT_CALL(b, DoB());
-
- b.DoB();
-
- b.DoB(1);
- b.DoB(2);
- }
- TEST(ExpectCallTest, PicksLastMatchingExpectCall) {
- MockB b;
- EXPECT_CALL(b, DoB(_))
- .WillRepeatedly(Return(2));
- EXPECT_CALL(b, DoB(1))
- .WillRepeatedly(Return(1));
- EXPECT_EQ(1, b.DoB(1));
- }
- TEST(ExpectCallTest, CatchesTooFewCalls) {
- EXPECT_NONFATAL_FAILURE({
- MockB b;
- EXPECT_CALL(b, DoB(5))
- .Times(AtLeast(2));
- b.DoB(5);
- }, "Actual function call count doesn't match EXPECT_CALL(b, DoB(5))...\n"
- " Expected: to be called at least twice\n"
- " Actual: called once - unsatisfied and active");
- }
- TEST(ExpectCallTest, InfersCardinalityWhenThereIsNoWillRepeatedly) {
- {
- MockB b;
- EXPECT_CALL(b, DoB())
- .WillOnce(Return(1))
- .WillOnce(Return(2));
- EXPECT_EQ(1, b.DoB());
- EXPECT_EQ(2, b.DoB());
- }
- EXPECT_NONFATAL_FAILURE({
- MockB b;
- EXPECT_CALL(b, DoB())
- .WillOnce(Return(1))
- .WillOnce(Return(2));
- EXPECT_EQ(1, b.DoB());
- }, "to be called twice");
- {
- MockB b;
- EXPECT_CALL(b, DoB())
- .WillOnce(Return(1))
- .WillOnce(Return(2));
- EXPECT_EQ(1, b.DoB());
- EXPECT_EQ(2, b.DoB());
- EXPECT_NONFATAL_FAILURE(b.DoB(), "to be called twice");
- }
- }
- TEST(ExpectCallTest, InfersCardinality1WhenThereIsWillRepeatedly) {
- {
- MockB b;
- EXPECT_CALL(b, DoB())
- .WillOnce(Return(1))
- .WillRepeatedly(Return(2));
- EXPECT_EQ(1, b.DoB());
- }
- {
- MockB b;
- EXPECT_CALL(b, DoB())
- .WillOnce(Return(1))
- .WillRepeatedly(Return(2));
- EXPECT_EQ(1, b.DoB());
- EXPECT_EQ(2, b.DoB());
- EXPECT_EQ(2, b.DoB());
- }
- EXPECT_NONFATAL_FAILURE({
- MockB b;
- EXPECT_CALL(b, DoB())
- .WillOnce(Return(1))
- .WillRepeatedly(Return(2));
- }, "to be called at least once");
- }
- TEST(ExpectCallTest, NthMatchTakesNthAction) {
- MockB b;
- EXPECT_CALL(b, DoB())
- .WillOnce(Return(1))
- .WillOnce(Return(2))
- .WillOnce(Return(3));
- EXPECT_EQ(1, b.DoB());
- EXPECT_EQ(2, b.DoB());
- EXPECT_EQ(3, b.DoB());
- }
- TEST(ExpectCallTest, TakesRepeatedActionWhenWillListIsExhausted) {
- MockB b;
- EXPECT_CALL(b, DoB())
- .WillOnce(Return(1))
- .WillRepeatedly(Return(2));
- EXPECT_EQ(1, b.DoB());
- EXPECT_EQ(2, b.DoB());
- EXPECT_EQ(2, b.DoB());
- }
- #if GTEST_HAS_STREAM_REDIRECTION
- TEST(ExpectCallTest, TakesDefaultActionWhenWillListIsExhausted) {
- MockB b;
- EXPECT_CALL(b, DoB(_))
- .Times(1);
- EXPECT_CALL(b, DoB())
- .Times(AnyNumber())
- .WillOnce(Return(1))
- .WillOnce(Return(2));
- CaptureStdout();
- EXPECT_EQ(0, b.DoB(1));
-
- EXPECT_EQ(1, b.DoB());
- EXPECT_EQ(2, b.DoB());
- const std::string output1 = GetCapturedStdout();
- EXPECT_STREQ("", output1.c_str());
- CaptureStdout();
- EXPECT_EQ(0, b.DoB());
- EXPECT_EQ(0, b.DoB());
- const std::string output2 = GetCapturedStdout();
- EXPECT_THAT(output2.c_str(),
- HasSubstr("Actions ran out in EXPECT_CALL(b, DoB())...\n"
- "Called 3 times, but only 2 WillOnce()s are specified"
- " - returning default value."));
- EXPECT_THAT(output2.c_str(),
- HasSubstr("Actions ran out in EXPECT_CALL(b, DoB())...\n"
- "Called 4 times, but only 2 WillOnce()s are specified"
- " - returning default value."));
- }
- TEST(FunctionMockerMessageTest, ReportsExpectCallLocationForExhausedActions) {
- MockB b;
- std::string expect_call_location = FormatFileLocation(__FILE__, __LINE__ + 1);
- EXPECT_CALL(b, DoB()).Times(AnyNumber()).WillOnce(Return(1));
- EXPECT_EQ(1, b.DoB());
- CaptureStdout();
- EXPECT_EQ(0, b.DoB());
- const std::string output = GetCapturedStdout();
-
- EXPECT_PRED_FORMAT2(IsSubstring, expect_call_location, output);
- }
- TEST(FunctionMockerMessageTest,
- ReportsDefaultActionLocationOfUninterestingCallsForNaggyMock) {
- std::string on_call_location;
- CaptureStdout();
- {
- NaggyMock<MockB> b;
- on_call_location = FormatFileLocation(__FILE__, __LINE__ + 1);
- ON_CALL(b, DoB(_)).WillByDefault(Return(0));
- b.DoB(0);
- }
- EXPECT_PRED_FORMAT2(IsSubstring, on_call_location, GetCapturedStdout());
- }
- #endif
- TEST(UninterestingCallTest, DoesDefaultAction) {
-
-
- MockA a;
- ON_CALL(a, Binary(_, _))
- .WillByDefault(Return(true));
- EXPECT_TRUE(a.Binary(1, 2));
-
-
- MockB b;
- EXPECT_EQ(0, b.DoB());
- }
- TEST(UnexpectedCallTest, DoesDefaultAction) {
-
-
- MockA a;
- ON_CALL(a, Binary(_, _))
- .WillByDefault(Return(true));
- EXPECT_CALL(a, Binary(0, 0));
- a.Binary(0, 0);
- bool result = false;
- EXPECT_NONFATAL_FAILURE(result = a.Binary(1, 2),
- "Unexpected mock function call");
- EXPECT_TRUE(result);
-
-
- MockB b;
- EXPECT_CALL(b, DoB(0))
- .Times(0);
- int n = -1;
- EXPECT_NONFATAL_FAILURE(n = b.DoB(1),
- "Unexpected mock function call");
- EXPECT_EQ(0, n);
- }
- TEST(UnexpectedCallTest, GeneratesFailureForVoidFunction) {
-
- MockA a1;
- EXPECT_CALL(a1, DoA(1));
- a1.DoA(1);
-
-
-
- EXPECT_NONFATAL_FAILURE(
- a1.DoA(9),
- "Unexpected mock function call - returning directly.\n"
- " Function call: DoA(9)\n"
- "Google Mock tried the following 1 expectation, but it didn't match:");
- EXPECT_NONFATAL_FAILURE(
- a1.DoA(9),
- " Expected arg #0: is equal to 1\n"
- " Actual: 9\n"
- " Expected: to be called once\n"
- " Actual: called once - saturated and active");
-
- MockA a2;
- EXPECT_CALL(a2, DoA(1));
- EXPECT_CALL(a2, DoA(3));
- a2.DoA(1);
- EXPECT_NONFATAL_FAILURE(
- a2.DoA(2),
- "Unexpected mock function call - returning directly.\n"
- " Function call: DoA(2)\n"
- "Google Mock tried the following 2 expectations, but none matched:");
- EXPECT_NONFATAL_FAILURE(
- a2.DoA(2),
- "tried expectation #0: EXPECT_CALL(a2, DoA(1))...\n"
- " Expected arg #0: is equal to 1\n"
- " Actual: 2\n"
- " Expected: to be called once\n"
- " Actual: called once - saturated and active");
- EXPECT_NONFATAL_FAILURE(
- a2.DoA(2),
- "tried expectation #1: EXPECT_CALL(a2, DoA(3))...\n"
- " Expected arg #0: is equal to 3\n"
- " Actual: 2\n"
- " Expected: to be called once\n"
- " Actual: never called - unsatisfied and active");
- a2.DoA(3);
- }
- TEST(UnexpectedCallTest, GeneartesFailureForNonVoidFunction) {
- MockB b1;
- EXPECT_CALL(b1, DoB(1));
- b1.DoB(1);
- EXPECT_NONFATAL_FAILURE(
- b1.DoB(2),
- "Unexpected mock function call - returning default value.\n"
- " Function call: DoB(2)\n"
- " Returns: 0\n"
- "Google Mock tried the following 1 expectation, but it didn't match:");
- EXPECT_NONFATAL_FAILURE(
- b1.DoB(2),
- " Expected arg #0: is equal to 1\n"
- " Actual: 2\n"
- " Expected: to be called once\n"
- " Actual: called once - saturated and active");
- }
- TEST(UnexpectedCallTest, RetiredExpectation) {
- MockB b;
- EXPECT_CALL(b, DoB(1))
- .RetiresOnSaturation();
- b.DoB(1);
- EXPECT_NONFATAL_FAILURE(
- b.DoB(1),
- " Expected: the expectation is active\n"
- " Actual: it is retired");
- }
- TEST(UnexpectedCallTest, UnmatchedArguments) {
- MockB b;
- EXPECT_CALL(b, DoB(1));
- EXPECT_NONFATAL_FAILURE(
- b.DoB(2),
- " Expected arg #0: is equal to 1\n"
- " Actual: 2\n");
- b.DoB(1);
- }
- TEST(UnexpectedCallTest, UnsatisifiedPrerequisites) {
- Sequence s1, s2;
- MockB b;
- EXPECT_CALL(b, DoB(1))
- .InSequence(s1);
- EXPECT_CALL(b, DoB(2))
- .Times(AnyNumber())
- .InSequence(s1);
- EXPECT_CALL(b, DoB(3))
- .InSequence(s2);
- EXPECT_CALL(b, DoB(4))
- .InSequence(s1, s2);
- ::testing::TestPartResultArray failures;
- {
- ::testing::ScopedFakeTestPartResultReporter reporter(&failures);
- b.DoB(4);
-
-
- }
-
- ASSERT_EQ(1, failures.size());
- const ::testing::TestPartResult& r = failures.GetTestPartResult(0);
- EXPECT_EQ(::testing::TestPartResult::kNonFatalFailure, r.type());
-
-
- #if GTEST_USES_PCRE
- EXPECT_THAT(r.message(), ContainsRegex(
-
-
- "(?s)the following immediate pre-requisites are not satisfied:\n"
- ".*: pre-requisite #0\n"
- ".*: pre-requisite #1"));
- #elif GTEST_USES_POSIX_RE
- EXPECT_THAT(r.message(), ContainsRegex(
-
-
- "the following immediate pre-requisites are not satisfied:\n"
- "(.|\n)*: pre-requisite #0\n"
- "(.|\n)*: pre-requisite #1"));
- #else
-
- EXPECT_THAT(r.message(), ContainsRegex(
- "the following immediate pre-requisites are not satisfied:"));
- EXPECT_THAT(r.message(), ContainsRegex(": pre-requisite #0"));
- EXPECT_THAT(r.message(), ContainsRegex(": pre-requisite #1"));
- #endif
- b.DoB(1);
- b.DoB(3);
- b.DoB(4);
- }
- TEST(UndefinedReturnValueTest,
- ReturnValueIsMandatoryWhenNotDefaultConstructible) {
- MockA a;
-
-
-
- #if GTEST_HAS_EXCEPTIONS
- EXPECT_ANY_THROW(a.ReturnNonDefaultConstructible());
- #else
- EXPECT_DEATH_IF_SUPPORTED(a.ReturnNonDefaultConstructible(), "");
- #endif
- }
- TEST(ExcessiveCallTest, DoesDefaultAction) {
-
-
- MockA a;
- ON_CALL(a, Binary(_, _))
- .WillByDefault(Return(true));
- EXPECT_CALL(a, Binary(0, 0));
- a.Binary(0, 0);
- bool result = false;
- EXPECT_NONFATAL_FAILURE(result = a.Binary(0, 0),
- "Mock function called more times than expected");
- EXPECT_TRUE(result);
-
-
- MockB b;
- EXPECT_CALL(b, DoB(0))
- .Times(0);
- int n = -1;
- EXPECT_NONFATAL_FAILURE(n = b.DoB(0),
- "Mock function called more times than expected");
- EXPECT_EQ(0, n);
- }
- TEST(ExcessiveCallTest, GeneratesFailureForVoidFunction) {
- MockA a;
- EXPECT_CALL(a, DoA(_))
- .Times(0);
- EXPECT_NONFATAL_FAILURE(
- a.DoA(9),
- "Mock function called more times than expected - returning directly.\n"
- " Function call: DoA(9)\n"
- " Expected: to be never called\n"
- " Actual: called once - over-saturated and active");
- }
- TEST(ExcessiveCallTest, GeneratesFailureForNonVoidFunction) {
- MockB b;
- EXPECT_CALL(b, DoB(_));
- b.DoB(1);
- EXPECT_NONFATAL_FAILURE(
- b.DoB(2),
- "Mock function called more times than expected - "
- "returning default value.\n"
- " Function call: DoB(2)\n"
- " Returns: 0\n"
- " Expected: to be called once\n"
- " Actual: called twice - over-saturated and active");
- }
- TEST(InSequenceTest, AllExpectationInScopeAreInSequence) {
- MockA a;
- {
- InSequence dummy;
- EXPECT_CALL(a, DoA(1));
- EXPECT_CALL(a, DoA(2));
- }
- EXPECT_NONFATAL_FAILURE({
- a.DoA(2);
- }, "Unexpected mock function call");
- a.DoA(1);
- a.DoA(2);
- }
- TEST(InSequenceTest, NestedInSequence) {
- MockA a;
- {
- InSequence dummy;
- EXPECT_CALL(a, DoA(1));
- {
- InSequence dummy2;
- EXPECT_CALL(a, DoA(2));
- EXPECT_CALL(a, DoA(3));
- }
- }
- EXPECT_NONFATAL_FAILURE({
- a.DoA(1);
- a.DoA(3);
- }, "Unexpected mock function call");
- a.DoA(2);
- a.DoA(3);
- }
- TEST(InSequenceTest, ExpectationsOutOfScopeAreNotAffected) {
- MockA a;
- {
- InSequence dummy;
- EXPECT_CALL(a, DoA(1));
- EXPECT_CALL(a, DoA(2));
- }
- EXPECT_CALL(a, DoA(3));
- EXPECT_NONFATAL_FAILURE({
- a.DoA(2);
- }, "Unexpected mock function call");
- a.DoA(3);
- a.DoA(1);
- a.DoA(2);
- }
- TEST(SequenceTest, AnyOrderIsOkByDefault) {
- {
- MockA a;
- MockB b;
- EXPECT_CALL(a, DoA(1));
- EXPECT_CALL(b, DoB())
- .Times(AnyNumber());
- a.DoA(1);
- b.DoB();
- }
- {
- MockA a;
- MockB b;
- EXPECT_CALL(a, DoA(1));
- EXPECT_CALL(b, DoB())
- .Times(AnyNumber());
- b.DoB();
- a.DoA(1);
- }
- }
- TEST(SequenceTest, CallsMustBeInStrictOrderWhenSaidSo1) {
- MockA a;
- ON_CALL(a, ReturnResult(_))
- .WillByDefault(Return(Result()));
- Sequence s;
- EXPECT_CALL(a, ReturnResult(1))
- .InSequence(s);
- EXPECT_CALL(a, ReturnResult(2))
- .InSequence(s);
- EXPECT_CALL(a, ReturnResult(3))
- .InSequence(s);
- a.ReturnResult(1);
-
- EXPECT_NONFATAL_FAILURE(a.ReturnResult(3), "Unexpected mock function call");
- a.ReturnResult(2);
- a.ReturnResult(3);
- }
- TEST(SequenceTest, CallsMustBeInStrictOrderWhenSaidSo2) {
- MockA a;
- ON_CALL(a, ReturnResult(_))
- .WillByDefault(Return(Result()));
- Sequence s;
- EXPECT_CALL(a, ReturnResult(1))
- .InSequence(s);
- EXPECT_CALL(a, ReturnResult(2))
- .InSequence(s);
-
- EXPECT_NONFATAL_FAILURE(a.ReturnResult(2), "Unexpected mock function call");
- a.ReturnResult(1);
- a.ReturnResult(2);
- }
- class PartialOrderTest : public testing::Test {
- protected:
- PartialOrderTest() {
- ON_CALL(a_, ReturnResult(_))
- .WillByDefault(Return(Result()));
-
-
-
-
-
- Sequence x, y;
- EXPECT_CALL(a_, ReturnResult(1))
- .InSequence(x);
- EXPECT_CALL(b_, DoB())
- .Times(2)
- .InSequence(y);
- EXPECT_CALL(a_, ReturnResult(2))
- .Times(AnyNumber())
- .InSequence(x, y);
- EXPECT_CALL(a_, ReturnResult(3))
- .InSequence(x);
- }
- MockA a_;
- MockB b_;
- };
- TEST_F(PartialOrderTest, CallsMustConformToSpecifiedDag1) {
- a_.ReturnResult(1);
- b_.DoB();
-
- EXPECT_NONFATAL_FAILURE(a_.ReturnResult(2), "Unexpected mock function call");
- b_.DoB();
- a_.ReturnResult(3);
- }
- TEST_F(PartialOrderTest, CallsMustConformToSpecifiedDag2) {
-
- EXPECT_NONFATAL_FAILURE(a_.ReturnResult(2), "Unexpected mock function call");
- a_.ReturnResult(1);
- b_.DoB();
- b_.DoB();
- a_.ReturnResult(3);
- }
- TEST_F(PartialOrderTest, CallsMustConformToSpecifiedDag3) {
-
- EXPECT_NONFATAL_FAILURE(a_.ReturnResult(3), "Unexpected mock function call");
- a_.ReturnResult(1);
- b_.DoB();
- b_.DoB();
- a_.ReturnResult(3);
- }
- TEST_F(PartialOrderTest, CallsMustConformToSpecifiedDag4) {
- a_.ReturnResult(1);
- b_.DoB();
- b_.DoB();
- a_.ReturnResult(3);
-
- EXPECT_NONFATAL_FAILURE(a_.ReturnResult(2), "Unexpected mock function call");
- }
- TEST(SequenceTest, Retirement) {
- MockA a;
- Sequence s;
- EXPECT_CALL(a, DoA(1))
- .InSequence(s);
- EXPECT_CALL(a, DoA(_))
- .InSequence(s)
- .RetiresOnSaturation();
- EXPECT_CALL(a, DoA(1))
- .InSequence(s);
- a.DoA(1);
- a.DoA(2);
- a.DoA(1);
- }
- TEST(ExpectationTest, ConstrutorsWork) {
- MockA a;
- Expectation e1;
-
- Expectation e2 = EXPECT_CALL(a, DoA(2));
- Expectation e3 = EXPECT_CALL(a, DoA(3)).With(_);
- {
- Sequence s;
- Expectation e4 = EXPECT_CALL(a, DoA(4)).Times(1);
- Expectation e5 = EXPECT_CALL(a, DoA(5)).InSequence(s);
- }
- Expectation e6 = EXPECT_CALL(a, DoA(6)).After(e2);
- Expectation e7 = EXPECT_CALL(a, DoA(7)).WillOnce(Return());
- Expectation e8 = EXPECT_CALL(a, DoA(8)).WillRepeatedly(Return());
- Expectation e9 = EXPECT_CALL(a, DoA(9)).RetiresOnSaturation();
- Expectation e10 = e2;
- EXPECT_THAT(e1, Ne(e2));
- EXPECT_THAT(e2, Eq(e10));
- a.DoA(2);
- a.DoA(3);
- a.DoA(4);
- a.DoA(5);
- a.DoA(6);
- a.DoA(7);
- a.DoA(8);
- a.DoA(9);
- }
- TEST(ExpectationTest, AssignmentWorks) {
- MockA a;
- Expectation e1;
- Expectation e2 = EXPECT_CALL(a, DoA(1));
- EXPECT_THAT(e1, Ne(e2));
- e1 = e2;
- EXPECT_THAT(e1, Eq(e2));
- a.DoA(1);
- }
- TEST(ExpectationSetTest, MemberTypesAreCorrect) {
- ::testing::StaticAssertTypeEq<Expectation, ExpectationSet::value_type>();
- }
- TEST(ExpectationSetTest, ConstructorsWork) {
- MockA a;
- Expectation e1;
- const Expectation e2;
- ExpectationSet es1;
- ExpectationSet es2 = EXPECT_CALL(a, DoA(1));
- ExpectationSet es3 = e1;
- ExpectationSet es4(e1);
- ExpectationSet es5 = e2;
- ExpectationSet es6(e2);
- ExpectationSet es7 = es2;
- EXPECT_EQ(0, es1.size());
- EXPECT_EQ(1, es2.size());
- EXPECT_EQ(1, es3.size());
- EXPECT_EQ(1, es4.size());
- EXPECT_EQ(1, es5.size());
- EXPECT_EQ(1, es6.size());
- EXPECT_EQ(1, es7.size());
- EXPECT_THAT(es3, Ne(es2));
- EXPECT_THAT(es4, Eq(es3));
- EXPECT_THAT(es5, Eq(es4));
- EXPECT_THAT(es6, Eq(es5));
- EXPECT_THAT(es7, Eq(es2));
- a.DoA(1);
- }
- TEST(ExpectationSetTest, AssignmentWorks) {
- ExpectationSet es1;
- ExpectationSet es2 = Expectation();
- es1 = es2;
- EXPECT_EQ(1, es1.size());
- EXPECT_THAT(*(es1.begin()), Eq(Expectation()));
- EXPECT_THAT(es1, Eq(es2));
- }
- TEST(ExpectationSetTest, InsertionWorks) {
- ExpectationSet es1;
- Expectation e1;
- es1 += e1;
- EXPECT_EQ(1, es1.size());
- EXPECT_THAT(*(es1.begin()), Eq(e1));
- MockA a;
- Expectation e2 = EXPECT_CALL(a, DoA(1));
- es1 += e2;
- EXPECT_EQ(2, es1.size());
- ExpectationSet::const_iterator it1 = es1.begin();
- ExpectationSet::const_iterator it2 = it1;
- ++it2;
- EXPECT_TRUE(*it1 == e1 || *it2 == e1);
- EXPECT_TRUE(*it1 == e2 || *it2 == e2);
- a.DoA(1);
- }
- TEST(ExpectationSetTest, SizeWorks) {
- ExpectationSet es;
- EXPECT_EQ(0, es.size());
- es += Expectation();
- EXPECT_EQ(1, es.size());
- MockA a;
- es += EXPECT_CALL(a, DoA(1));
- EXPECT_EQ(2, es.size());
- a.DoA(1);
- }
- TEST(ExpectationSetTest, IsEnumerable) {
- ExpectationSet es;
- EXPECT_TRUE(es.begin() == es.end());
- es += Expectation();
- ExpectationSet::const_iterator it = es.begin();
- EXPECT_TRUE(it != es.end());
- EXPECT_THAT(*it, Eq(Expectation()));
- ++it;
- EXPECT_TRUE(it== es.end());
- }
- TEST(AfterTest, SucceedsWhenPartialOrderIsSatisfied) {
- MockA a;
- ExpectationSet es;
- es += EXPECT_CALL(a, DoA(1));
- es += EXPECT_CALL(a, DoA(2));
- EXPECT_CALL(a, DoA(3))
- .After(es);
- a.DoA(1);
- a.DoA(2);
- a.DoA(3);
- }
- TEST(AfterTest, SucceedsWhenTotalOrderIsSatisfied) {
- MockA a;
- MockB b;
-
-
- const Expectation e1 = EXPECT_CALL(a, DoA(1));
- const Expectation e2 = EXPECT_CALL(b, DoB())
- .Times(2)
- .After(e1);
- EXPECT_CALL(a, DoA(2)).After(e2);
- a.DoA(1);
- b.DoB();
- b.DoB();
- a.DoA(2);
- }
- TEST(AfterTest, CallsMustBeInStrictOrderWhenSpecifiedSo1) {
- MockA a;
- MockB b;
-
-
- Expectation e1 = EXPECT_CALL(a, DoA(1));
- Expectation e2 = EXPECT_CALL(b, DoB())
- .After(e1);
- EXPECT_CALL(a, DoA(2))
- .After(e2);
- a.DoA(1);
-
- EXPECT_NONFATAL_FAILURE(a.DoA(2), "Unexpected mock function call");
- b.DoB();
- a.DoA(2);
- }
- TEST(AfterTest, CallsMustBeInStrictOrderWhenSpecifiedSo2) {
- MockA a;
- MockB b;
-
-
- Expectation e1 = EXPECT_CALL(a, DoA(1));
- Expectation e2 = EXPECT_CALL(b, DoB())
- .Times(2)
- .After(e1);
- EXPECT_CALL(a, DoA(2))
- .After(e2);
- a.DoA(1);
- b.DoB();
-
- EXPECT_NONFATAL_FAILURE(a.DoA(2), "Unexpected mock function call");
- b.DoB();
- a.DoA(2);
- }
- TEST(AfterTest, CallsMustSatisfyPartialOrderWhenSpecifiedSo) {
- MockA a;
- ON_CALL(a, ReturnResult(_))
- .WillByDefault(Return(Result()));
-
-
-
- Expectation e = EXPECT_CALL(a, DoA(1));
- const ExpectationSet es = EXPECT_CALL(a, DoA(2));
- EXPECT_CALL(a, ReturnResult(3))
- .After(e, es);
-
- EXPECT_NONFATAL_FAILURE(a.ReturnResult(3), "Unexpected mock function call");
- a.DoA(2);
- a.DoA(1);
- a.ReturnResult(3);
- }
- TEST(AfterTest, CallsMustSatisfyPartialOrderWhenSpecifiedSo2) {
- MockA a;
-
-
-
- Expectation e = EXPECT_CALL(a, DoA(1));
- const ExpectationSet es = EXPECT_CALL(a, DoA(2));
- EXPECT_CALL(a, DoA(3))
- .After(e, es);
- a.DoA(2);
-
- EXPECT_NONFATAL_FAILURE(a.DoA(3), "Unexpected mock function call");
- a.DoA(1);
- a.DoA(3);
- }
- TEST(AfterTest, CanBeUsedWithInSequence) {
- MockA a;
- Sequence s;
- Expectation e = EXPECT_CALL(a, DoA(1));
- EXPECT_CALL(a, DoA(2)).InSequence(s);
- EXPECT_CALL(a, DoA(3))
- .InSequence(s)
- .After(e);
- a.DoA(1);
-
- EXPECT_NONFATAL_FAILURE(a.DoA(3), "Unexpected mock function call");
- a.DoA(2);
- a.DoA(3);
- }
- TEST(AfterTest, CanBeCalledManyTimes) {
- MockA a;
- Expectation e1 = EXPECT_CALL(a, DoA(1));
- Expectation e2 = EXPECT_CALL(a, DoA(2));
- Expectation e3 = EXPECT_CALL(a, DoA(3));
- EXPECT_CALL(a, DoA(4))
- .After(e1)
- .After(e2)
- .After(e3);
- a.DoA(3);
- a.DoA(1);
- a.DoA(2);
- a.DoA(4);
- }
- TEST(AfterTest, AcceptsUpToFiveArguments) {
- MockA a;
- Expectation e1 = EXPECT_CALL(a, DoA(1));
- Expectation e2 = EXPECT_CALL(a, DoA(2));
- Expectation e3 = EXPECT_CALL(a, DoA(3));
- ExpectationSet es1 = EXPECT_CALL(a, DoA(4));
- ExpectationSet es2 = EXPECT_CALL(a, DoA(5));
- EXPECT_CALL(a, DoA(6))
- .After(e1, e2, e3, es1, es2);
- a.DoA(5);
- a.DoA(2);
- a.DoA(4);
- a.DoA(1);
- a.DoA(3);
- a.DoA(6);
- }
- TEST(AfterTest, AcceptsDuplicatedInput) {
- MockA a;
- ON_CALL(a, ReturnResult(_))
- .WillByDefault(Return(Result()));
-
-
-
- Expectation e1 = EXPECT_CALL(a, DoA(1));
- Expectation e2 = EXPECT_CALL(a, DoA(2));
- ExpectationSet es;
- es += e1;
- es += e2;
- EXPECT_CALL(a, ReturnResult(3))
- .After(e1, e2, es, e1);
- a.DoA(1);
-
- EXPECT_NONFATAL_FAILURE(a.ReturnResult(3), "Unexpected mock function call");
- a.DoA(2);
- a.ReturnResult(3);
- }
- TEST(AfterTest, ChangesToExpectationSetHaveNoEffectAfterwards) {
- MockA a;
- ExpectationSet es1 = EXPECT_CALL(a, DoA(1));
- Expectation e2 = EXPECT_CALL(a, DoA(2));
- EXPECT_CALL(a, DoA(3))
- .After(es1);
- es1 += e2;
- a.DoA(1);
- a.DoA(3);
- a.DoA(2);
- }
- TEST(DeletingMockEarlyTest, Success1) {
- MockB* const b1 = new MockB;
- MockA* const a = new MockA;
- MockB* const b2 = new MockB;
- {
- InSequence dummy;
- EXPECT_CALL(*b1, DoB(_))
- .WillOnce(Return(1));
- EXPECT_CALL(*a, Binary(_, _))
- .Times(AnyNumber())
- .WillRepeatedly(Return(true));
- EXPECT_CALL(*b2, DoB(_))
- .Times(AnyNumber())
- .WillRepeatedly(Return(2));
- }
- EXPECT_EQ(1, b1->DoB(1));
- delete b1;
-
- EXPECT_TRUE(a->Binary(0, 1));
- delete b2;
-
- EXPECT_TRUE(a->Binary(1, 2));
- delete a;
- }
- TEST(DeletingMockEarlyTest, Success2) {
- MockB* const b1 = new MockB;
- MockA* const a = new MockA;
- MockB* const b2 = new MockB;
- {
- InSequence dummy;
- EXPECT_CALL(*b1, DoB(_))
- .WillOnce(Return(1));
- EXPECT_CALL(*a, Binary(_, _))
- .Times(AnyNumber());
- EXPECT_CALL(*b2, DoB(_))
- .Times(AnyNumber())
- .WillRepeatedly(Return(2));
- }
- delete a;
- EXPECT_EQ(1, b1->DoB(1));
- EXPECT_EQ(2, b2->DoB(2));
- delete b1;
- delete b2;
- }
- #ifdef _MSC_VER
- # pragma warning(push)
- # pragma warning(disable:4100)
- #endif
- ACTION_P(Delete, ptr) { delete ptr; }
- #ifdef _MSC_VER
- # pragma warning(pop)
- #endif
- TEST(DeletingMockEarlyTest, CanDeleteSelfInActionReturningVoid) {
- MockA* const a = new MockA;
- EXPECT_CALL(*a, DoA(_)).WillOnce(Delete(a));
- a->DoA(42);
- }
- TEST(DeletingMockEarlyTest, CanDeleteSelfInActionReturningValue) {
- MockA* const a = new MockA;
- EXPECT_CALL(*a, ReturnResult(_))
- .WillOnce(DoAll(Delete(a), Return(Result())));
- a->ReturnResult(42);
- }
- TEST(DeletingMockEarlyTest, Failure1) {
- MockB* const b1 = new MockB;
- MockA* const a = new MockA;
- MockB* const b2 = new MockB;
- {
- InSequence dummy;
- EXPECT_CALL(*b1, DoB(_))
- .WillOnce(Return(1));
- EXPECT_CALL(*a, Binary(_, _))
- .Times(AnyNumber());
- EXPECT_CALL(*b2, DoB(_))
- .Times(AnyNumber())
- .WillRepeatedly(Return(2));
- }
- delete a;
- EXPECT_NONFATAL_FAILURE({
- b2->DoB(2);
- }, "Unexpected mock function call");
- EXPECT_EQ(1, b1->DoB(1));
- delete b1;
- delete b2;
- }
- TEST(DeletingMockEarlyTest, Failure2) {
- MockB* const b1 = new MockB;
- MockA* const a = new MockA;
- MockB* const b2 = new MockB;
- {
- InSequence dummy;
- EXPECT_CALL(*b1, DoB(_));
- EXPECT_CALL(*a, Binary(_, _))
- .Times(AnyNumber());
- EXPECT_CALL(*b2, DoB(_))
- .Times(AnyNumber());
- }
- EXPECT_NONFATAL_FAILURE(delete b1,
- "Actual: never called");
- EXPECT_NONFATAL_FAILURE(a->Binary(0, 1),
- "Unexpected mock function call");
- EXPECT_NONFATAL_FAILURE(b2->DoB(1),
- "Unexpected mock function call");
- delete a;
- delete b2;
- }
- class EvenNumberCardinality : public CardinalityInterface {
- public:
-
- virtual bool IsSatisfiedByCallCount(int call_count) const {
- return call_count % 2 == 0;
- }
-
- virtual bool IsSaturatedByCallCount(int ) const {
- return false;
- }
-
- virtual void DescribeTo(::std::ostream* os) const {
- *os << "called even number of times";
- }
- };
- Cardinality EvenNumber() {
- return Cardinality(new EvenNumberCardinality);
- }
- TEST(ExpectationBaseTest,
- AllPrerequisitesAreSatisfiedWorksForNonMonotonicCardinality) {
- MockA* a = new MockA;
- Sequence s;
- EXPECT_CALL(*a, DoA(1))
- .Times(EvenNumber())
- .InSequence(s);
- EXPECT_CALL(*a, DoA(2))
- .Times(AnyNumber())
- .InSequence(s);
- EXPECT_CALL(*a, DoA(3))
- .Times(AnyNumber());
- a->DoA(3);
- a->DoA(1);
- EXPECT_NONFATAL_FAILURE(a->DoA(2), "Unexpected mock function call");
- EXPECT_NONFATAL_FAILURE(delete a, "to be called even number of times");
- }
- struct Printable {
- };
- inline void operator<<(::std::ostream& os, const Printable&) {
- os << "Printable";
- }
- struct Unprintable {
- Unprintable() : value(0) {}
- int value;
- };
- class MockC {
- public:
- MockC() {}
- MOCK_METHOD6(VoidMethod, void(bool cond, int n, std::string s, void* p,
- const Printable& x, Unprintable y));
- MOCK_METHOD0(NonVoidMethod, int());
- private:
- GTEST_DISALLOW_COPY_AND_ASSIGN_(MockC);
- };
- class VerboseFlagPreservingFixture : public testing::Test {
- protected:
- VerboseFlagPreservingFixture()
- : saved_verbose_flag_(GMOCK_FLAG(verbose)) {}
- ~VerboseFlagPreservingFixture() { GMOCK_FLAG(verbose) = saved_verbose_flag_; }
- private:
- const std::string saved_verbose_flag_;
- GTEST_DISALLOW_COPY_AND_ASSIGN_(VerboseFlagPreservingFixture);
- };
- #if GTEST_HAS_STREAM_REDIRECTION
- TEST(FunctionCallMessageTest,
- UninterestingCallOnNaggyMockGeneratesNoStackTraceWhenVerboseWarning) {
- GMOCK_FLAG(verbose) = kWarningVerbosity;
- NaggyMock<MockC> c;
- CaptureStdout();
- c.VoidMethod(false, 5, "Hi", NULL, Printable(), Unprintable());
- const std::string output = GetCapturedStdout();
- EXPECT_PRED_FORMAT2(IsSubstring, "GMOCK WARNING", output);
- EXPECT_PRED_FORMAT2(IsNotSubstring, "Stack trace:", output);
- }
- TEST(FunctionCallMessageTest,
- UninterestingCallOnNaggyMockGeneratesFyiWithStackTraceWhenVerboseInfo) {
- GMOCK_FLAG(verbose) = kInfoVerbosity;
- NaggyMock<MockC> c;
- CaptureStdout();
- c.VoidMethod(false, 5, "Hi", NULL, Printable(), Unprintable());
- const std::string output = GetCapturedStdout();
- EXPECT_PRED_FORMAT2(IsSubstring, "GMOCK WARNING", output);
- EXPECT_PRED_FORMAT2(IsSubstring, "Stack trace:", output);
- # ifndef NDEBUG
-
-
-
-
- EXPECT_PRED_FORMAT2(IsSubstring, "VoidMethod(", output);
-
-
- CaptureStdout();
- c.NonVoidMethod();
- const std::string output2 = GetCapturedStdout();
- EXPECT_PRED_FORMAT2(IsSubstring, "NonVoidMethod(", output2);
- # endif
- }
- TEST(FunctionCallMessageTest,
- UninterestingCallOnNaggyMockPrintsArgumentsAndReturnValue) {
-
- NaggyMock<MockB> b;
- CaptureStdout();
- b.DoB();
- const std::string output1 = GetCapturedStdout();
- EXPECT_PRED_FORMAT2(
- IsSubstring,
- "Uninteresting mock function call - returning default value.\n"
- " Function call: DoB()\n"
- " Returns: 0\n", output1.c_str());
-
-
- NaggyMock<MockC> c;
- CaptureStdout();
- c.VoidMethod(false, 5, "Hi", NULL, Printable(), Unprintable());
- const std::string output2 = GetCapturedStdout();
- EXPECT_THAT(output2.c_str(),
- ContainsRegex(
- "Uninteresting mock function call - returning directly\\.\n"
- " Function call: VoidMethod"
- "\\(false, 5, \"Hi\", NULL, @.+ "
- "Printable, 4-byte object <00-00 00-00>\\)"));
-
- }
- class GMockVerboseFlagTest : public VerboseFlagPreservingFixture {
- public:
-
-
-
-
- void VerifyOutput(const std::string& output, bool should_print,
- const std::string& expected_substring,
- const std::string& function_name) {
- if (should_print) {
- EXPECT_THAT(output.c_str(), HasSubstr(expected_substring));
- # ifndef NDEBUG
-
-
- EXPECT_THAT(output.c_str(), HasSubstr(function_name));
- # else
-
- static_cast<void>(function_name);
- # endif
- } else {
- EXPECT_STREQ("", output.c_str());
- }
- }
-
- void TestExpectedCall(bool should_print) {
- MockA a;
- EXPECT_CALL(a, DoA(5));
- EXPECT_CALL(a, Binary(_, 1))
- .WillOnce(Return(true));
-
- CaptureStdout();
- a.DoA(5);
- VerifyOutput(
- GetCapturedStdout(),
- should_print,
- "Mock function call matches EXPECT_CALL(a, DoA(5))...\n"
- " Function call: DoA(5)\n"
- "Stack trace:\n",
- "DoA");
-
- CaptureStdout();
- a.Binary(2, 1);
- VerifyOutput(
- GetCapturedStdout(),
- should_print,
- "Mock function call matches EXPECT_CALL(a, Binary(_, 1))...\n"
- " Function call: Binary(2, 1)\n"
- " Returns: true\n"
- "Stack trace:\n",
- "Binary");
- }
-
- void TestUninterestingCallOnNaggyMock(bool should_print) {
- NaggyMock<MockA> a;
- const std::string note =
- "NOTE: You can safely ignore the above warning unless this "
- "call should not happen. Do not suppress it by blindly adding "
- "an EXPECT_CALL() if you don't mean to enforce the call. "
- "See "
- "https://github.com/google/googletest/blob/master/googlemock/docs/"
- "CookBook.md#"
- "knowing-when-to-expect for details.";
-
- CaptureStdout();
- a.DoA(5);
- VerifyOutput(
- GetCapturedStdout(),
- should_print,
- "\nGMOCK WARNING:\n"
- "Uninteresting mock function call - returning directly.\n"
- " Function call: DoA(5)\n" +
- note,
- "DoA");
-
- CaptureStdout();
- a.Binary(2, 1);
- VerifyOutput(
- GetCapturedStdout(),
- should_print,
- "\nGMOCK WARNING:\n"
- "Uninteresting mock function call - returning default value.\n"
- " Function call: Binary(2, 1)\n"
- " Returns: false\n" +
- note,
- "Binary");
- }
- };
- TEST_F(GMockVerboseFlagTest, Info) {
- GMOCK_FLAG(verbose) = kInfoVerbosity;
- TestExpectedCall(true);
- TestUninterestingCallOnNaggyMock(true);
- }
- TEST_F(GMockVerboseFlagTest, Warning) {
- GMOCK_FLAG(verbose) = kWarningVerbosity;
- TestExpectedCall(false);
- TestUninterestingCallOnNaggyMock(true);
- }
- TEST_F(GMockVerboseFlagTest, Error) {
- GMOCK_FLAG(verbose) = kErrorVerbosity;
- TestExpectedCall(false);
- TestUninterestingCallOnNaggyMock(false);
- }
- TEST_F(GMockVerboseFlagTest, InvalidFlagIsTreatedAsWarning) {
- GMOCK_FLAG(verbose) = "invalid";
- TestExpectedCall(false);
- TestUninterestingCallOnNaggyMock(true);
- }
- #endif
- class PrintMeNot {};
- void PrintTo(PrintMeNot , ::std::ostream* ) {
- ADD_FAILURE() << "Google Mock is printing a value that shouldn't be "
- << "printed even to an internal buffer.";
- }
- class LogTestHelper {
- public:
- LogTestHelper() {}
- MOCK_METHOD1(Foo, PrintMeNot(PrintMeNot));
- private:
- GTEST_DISALLOW_COPY_AND_ASSIGN_(LogTestHelper);
- };
- class GMockLogTest : public VerboseFlagPreservingFixture {
- protected:
- LogTestHelper helper_;
- };
- TEST_F(GMockLogTest, DoesNotPrintGoodCallInternallyIfVerbosityIsWarning) {
- GMOCK_FLAG(verbose) = kWarningVerbosity;
- EXPECT_CALL(helper_, Foo(_))
- .WillOnce(Return(PrintMeNot()));
- helper_.Foo(PrintMeNot());
- }
- TEST_F(GMockLogTest, DoesNotPrintGoodCallInternallyIfVerbosityIsError) {
- GMOCK_FLAG(verbose) = kErrorVerbosity;
- EXPECT_CALL(helper_, Foo(_))
- .WillOnce(Return(PrintMeNot()));
- helper_.Foo(PrintMeNot());
- }
- TEST_F(GMockLogTest, DoesNotPrintWarningInternallyIfVerbosityIsError) {
- GMOCK_FLAG(verbose) = kErrorVerbosity;
- ON_CALL(helper_, Foo(_))
- .WillByDefault(Return(PrintMeNot()));
- helper_.Foo(PrintMeNot());
- }
- TEST(AllowLeakTest, AllowsLeakingUnusedMockObject) {
- MockA* a = new MockA;
- Mock::AllowLeak(a);
- }
- TEST(AllowLeakTest, CanBeCalledBeforeOnCall) {
- MockA* a = new MockA;
- Mock::AllowLeak(a);
- ON_CALL(*a, DoA(_)).WillByDefault(Return());
- a->DoA(0);
- }
- TEST(AllowLeakTest, CanBeCalledAfterOnCall) {
- MockA* a = new MockA;
- ON_CALL(*a, DoA(_)).WillByDefault(Return());
- Mock::AllowLeak(a);
- }
- TEST(AllowLeakTest, CanBeCalledBeforeExpectCall) {
- MockA* a = new MockA;
- Mock::AllowLeak(a);
- EXPECT_CALL(*a, DoA(_));
- a->DoA(0);
- }
- TEST(AllowLeakTest, CanBeCalledAfterExpectCall) {
- MockA* a = new MockA;
- EXPECT_CALL(*a, DoA(_)).Times(AnyNumber());
- Mock::AllowLeak(a);
- }
- TEST(AllowLeakTest, WorksWhenBothOnCallAndExpectCallArePresent) {
- MockA* a = new MockA;
- ON_CALL(*a, DoA(_)).WillByDefault(Return());
- EXPECT_CALL(*a, DoA(_)).Times(AnyNumber());
- Mock::AllowLeak(a);
- }
- TEST(VerifyAndClearExpectationsTest, NoMethodHasExpectations) {
- MockB b;
- ASSERT_TRUE(Mock::VerifyAndClearExpectations(&b));
-
-
- EXPECT_EQ(0, b.DoB());
- EXPECT_EQ(0, b.DoB(1));
- }
- TEST(VerifyAndClearExpectationsTest, SomeMethodsHaveExpectationsAndSucceed) {
- MockB b;
- EXPECT_CALL(b, DoB())
- .WillOnce(Return(1));
- b.DoB();
- ASSERT_TRUE(Mock::VerifyAndClearExpectations(&b));
-
-
- EXPECT_EQ(0, b.DoB());
- EXPECT_EQ(0, b.DoB(1));
- }
- TEST(VerifyAndClearExpectationsTest, SomeMethodsHaveExpectationsAndFail) {
- MockB b;
- EXPECT_CALL(b, DoB())
- .WillOnce(Return(1));
- bool result = true;
- EXPECT_NONFATAL_FAILURE(result = Mock::VerifyAndClearExpectations(&b),
- "Actual: never called");
- ASSERT_FALSE(result);
-
-
- EXPECT_EQ(0, b.DoB());
- EXPECT_EQ(0, b.DoB(1));
- }
- TEST(VerifyAndClearExpectationsTest, AllMethodsHaveExpectations) {
- MockB b;
- EXPECT_CALL(b, DoB())
- .WillOnce(Return(1));
- EXPECT_CALL(b, DoB(_))
- .WillOnce(Return(2));
- b.DoB();
- b.DoB(1);
- ASSERT_TRUE(Mock::VerifyAndClearExpectations(&b));
-
-
- EXPECT_EQ(0, b.DoB());
- EXPECT_EQ(0, b.DoB(1));
- }
- TEST(VerifyAndClearExpectationsTest, AMethodHasManyExpectations) {
- MockB b;
- EXPECT_CALL(b, DoB(0))
- .WillOnce(Return(1));
- EXPECT_CALL(b, DoB(_))
- .WillOnce(Return(2));
- b.DoB(1);
- bool result = true;
- EXPECT_NONFATAL_FAILURE(result = Mock::VerifyAndClearExpectations(&b),
- "Actual: never called");
- ASSERT_FALSE(result);
-
-
- EXPECT_EQ(0, b.DoB());
- EXPECT_EQ(0, b.DoB(1));
- }
- TEST(VerifyAndClearExpectationsTest, CanCallManyTimes) {
- MockB b;
- EXPECT_CALL(b, DoB());
- b.DoB();
- Mock::VerifyAndClearExpectations(&b);
- EXPECT_CALL(b, DoB(_))
- .WillOnce(Return(1));
- b.DoB(1);
- Mock::VerifyAndClearExpectations(&b);
- Mock::VerifyAndClearExpectations(&b);
-
-
- EXPECT_EQ(0, b.DoB());
- EXPECT_EQ(0, b.DoB(1));
- }
- TEST(VerifyAndClearTest, NoMethodHasDefaultActions) {
- MockB b;
-
- Mock::VerifyAndClear(&b);
- EXPECT_EQ(0, b.DoB());
- }
- TEST(VerifyAndClearTest, SomeMethodsHaveDefaultActions) {
- MockB b;
- ON_CALL(b, DoB())
- .WillByDefault(Return(1));
- Mock::VerifyAndClear(&b);
-
- EXPECT_EQ(0, b.DoB());
- }
- TEST(VerifyAndClearTest, AllMethodsHaveDefaultActions) {
- MockB b;
- ON_CALL(b, DoB())
- .WillByDefault(Return(1));
- ON_CALL(b, DoB(_))
- .WillByDefault(Return(2));
- Mock::VerifyAndClear(&b);
-
- EXPECT_EQ(0, b.DoB());
-
- EXPECT_EQ(0, b.DoB(0));
- }
- TEST(VerifyAndClearTest, AMethodHasManyDefaultActions) {
- MockB b;
- ON_CALL(b, DoB(0))
- .WillByDefault(Return(1));
- ON_CALL(b, DoB(_))
- .WillByDefault(Return(2));
- Mock::VerifyAndClear(&b);
-
-
- EXPECT_EQ(0, b.DoB(0));
- EXPECT_EQ(0, b.DoB(1));
- }
- TEST(VerifyAndClearTest, CanCallManyTimes) {
- MockB b;
- ON_CALL(b, DoB())
- .WillByDefault(Return(1));
- Mock::VerifyAndClear(&b);
- Mock::VerifyAndClear(&b);
- ON_CALL(b, DoB(_))
- .WillByDefault(Return(1));
- Mock::VerifyAndClear(&b);
- EXPECT_EQ(0, b.DoB());
- EXPECT_EQ(0, b.DoB(1));
- }
- TEST(VerifyAndClearTest, Success) {
- MockB b;
- ON_CALL(b, DoB())
- .WillByDefault(Return(1));
- EXPECT_CALL(b, DoB(1))
- .WillOnce(Return(2));
- b.DoB();
- b.DoB(1);
- ASSERT_TRUE(Mock::VerifyAndClear(&b));
-
-
- EXPECT_EQ(0, b.DoB());
- EXPECT_EQ(0, b.DoB(1));
- }
- TEST(VerifyAndClearTest, Failure) {
- MockB b;
- ON_CALL(b, DoB(_))
- .WillByDefault(Return(1));
- EXPECT_CALL(b, DoB())
- .WillOnce(Return(2));
- b.DoB(1);
- bool result = true;
- EXPECT_NONFATAL_FAILURE(result = Mock::VerifyAndClear(&b),
- "Actual: never called");
- ASSERT_FALSE(result);
-
-
- EXPECT_EQ(0, b.DoB());
- EXPECT_EQ(0, b.DoB(1));
- }
- TEST(VerifyAndClearTest, Const) {
- MockB b;
- ON_CALL(Const(b), DoB())
- .WillByDefault(Return(1));
- EXPECT_CALL(Const(b), DoB())
- .WillOnce(DoDefault())
- .WillOnce(Return(2));
- b.DoB();
- b.DoB();
- ASSERT_TRUE(Mock::VerifyAndClear(&b));
-
-
- EXPECT_EQ(0, b.DoB());
- EXPECT_EQ(0, b.DoB(1));
- }
- TEST(VerifyAndClearTest, CanSetDefaultActionsAndExpectationsAfterwards) {
- MockB b;
- ON_CALL(b, DoB())
- .WillByDefault(Return(1));
- EXPECT_CALL(b, DoB(_))
- .WillOnce(Return(2));
- b.DoB(1);
- Mock::VerifyAndClear(&b);
- EXPECT_CALL(b, DoB())
- .WillOnce(Return(3));
- ON_CALL(b, DoB(_))
- .WillByDefault(Return(4));
- EXPECT_EQ(3, b.DoB());
- EXPECT_EQ(4, b.DoB(1));
- }
- TEST(VerifyAndClearTest, DoesNotAffectOtherMockObjects) {
- MockA a;
- MockB b1;
- MockB b2;
- ON_CALL(a, Binary(_, _))
- .WillByDefault(Return(true));
- EXPECT_CALL(a, Binary(_, _))
- .WillOnce(DoDefault())
- .WillOnce(Return(false));
- ON_CALL(b1, DoB())
- .WillByDefault(Return(1));
- EXPECT_CALL(b1, DoB(_))
- .WillOnce(Return(2));
- ON_CALL(b2, DoB())
- .WillByDefault(Return(3));
- EXPECT_CALL(b2, DoB(_));
- b2.DoB(0);
- Mock::VerifyAndClear(&b2);
-
-
- EXPECT_TRUE(a.Binary(0, 0));
- EXPECT_FALSE(a.Binary(0, 0));
- EXPECT_EQ(1, b1.DoB());
- EXPECT_EQ(2, b1.DoB(0));
- }
- TEST(VerifyAndClearTest,
- DestroyingChainedMocksDoesNotDeadlockThroughExpectations) {
- linked_ptr<MockA> a(new MockA);
- ReferenceHoldingMock test_mock;
-
- EXPECT_CALL(test_mock, AcceptReference(_))
- .WillRepeatedly(SetArgPointee<0>(a));
-
-
- a.reset();
-
-
-
-
-
- }
- TEST(VerifyAndClearTest,
- DestroyingChainedMocksDoesNotDeadlockThroughDefaultAction) {
- linked_ptr<MockA> a(new MockA);
- ReferenceHoldingMock test_mock;
-
- ON_CALL(test_mock, AcceptReference(_))
- .WillByDefault(SetArgPointee<0>(a));
-
-
- a.reset();
-
-
-
-
-
- }
- TEST(SynchronizationTest, CanCallMockMethodInAction) {
- MockA a;
- MockC c;
- ON_CALL(a, DoA(_))
- .WillByDefault(IgnoreResult(InvokeWithoutArgs(&c,
- &MockC::NonVoidMethod)));
- EXPECT_CALL(a, DoA(1));
- EXPECT_CALL(a, DoA(1))
- .WillOnce(Invoke(&a, &MockA::DoA))
- .RetiresOnSaturation();
- EXPECT_CALL(c, NonVoidMethod());
- a.DoA(1);
-
-
-
-
- }
- TEST(ParameterlessExpectationsTest, CanSetExpectationsWithoutMatchers) {
- MockA a;
- int do_a_arg0 = 0;
- ON_CALL(a, DoA).WillByDefault(SaveArg<0>(&do_a_arg0));
- int do_a_47_arg0 = 0;
- ON_CALL(a, DoA(47)).WillByDefault(SaveArg<0>(&do_a_47_arg0));
- a.DoA(17);
- EXPECT_THAT(do_a_arg0, 17);
- EXPECT_THAT(do_a_47_arg0, 0);
- a.DoA(47);
- EXPECT_THAT(do_a_arg0, 17);
- EXPECT_THAT(do_a_47_arg0, 47);
- ON_CALL(a, Binary).WillByDefault(Return(true));
- ON_CALL(a, Binary(_, 14)).WillByDefault(Return(false));
- EXPECT_THAT(a.Binary(14, 17), true);
- EXPECT_THAT(a.Binary(17, 14), false);
- }
- TEST(ParameterlessExpectationsTest, CanSetExpectationsForOverloadedMethods) {
- MockB b;
- ON_CALL(b, DoB()).WillByDefault(Return(9));
- ON_CALL(b, DoB(5)).WillByDefault(Return(11));
- EXPECT_THAT(b.DoB(), 9);
- EXPECT_THAT(b.DoB(1), 0);
- EXPECT_THAT(b.DoB(5), 11);
- }
- struct MockWithConstMethods {
- public:
- MOCK_CONST_METHOD1(Foo, int(int));
- MOCK_CONST_METHOD2(Bar, int(int, const char*));
- };
- TEST(ParameterlessExpectationsTest, CanSetExpectationsForConstMethods) {
- MockWithConstMethods mock;
- ON_CALL(mock, Foo).WillByDefault(Return(7));
- ON_CALL(mock, Bar).WillByDefault(Return(33));
- EXPECT_THAT(mock.Foo(17), 7);
- EXPECT_THAT(mock.Bar(27, "purple"), 33);
- }
- class MockConstOverload {
- public:
- MOCK_METHOD1(Overloaded, int(int));
- MOCK_CONST_METHOD1(Overloaded, int(int));
- };
- TEST(ParameterlessExpectationsTest,
- CanSetExpectationsForConstOverloadedMethods) {
- MockConstOverload mock;
- ON_CALL(mock, Overloaded(_)).WillByDefault(Return(7));
- ON_CALL(mock, Overloaded(5)).WillByDefault(Return(9));
- ON_CALL(Const(mock), Overloaded(5)).WillByDefault(Return(11));
- ON_CALL(Const(mock), Overloaded(7)).WillByDefault(Return(13));
- EXPECT_THAT(mock.Overloaded(1), 7);
- EXPECT_THAT(mock.Overloaded(5), 9);
- EXPECT_THAT(mock.Overloaded(7), 7);
- const MockConstOverload& const_mock = mock;
- EXPECT_THAT(const_mock.Overloaded(1), 0);
- EXPECT_THAT(const_mock.Overloaded(5), 11);
- EXPECT_THAT(const_mock.Overloaded(7), 13);
- }
- }
- #if GMOCK_RENAME_MAIN
- int gmock_main(int argc, char **argv) {
- #else
- int main(int argc, char **argv) {
- #endif
- testing::InitGoogleMock(&argc, argv);
-
-
- testing::GMOCK_FLAG(catch_leaked_mocks) = true;
- testing::GMOCK_FLAG(verbose) = testing::internal::kWarningVerbosity;
- return RUN_ALL_TESTS();
- }
|