Skip to content

Commit 1824802

Browse files
committed
Re-enabled strict ordering checks.
1 parent 65c5329 commit 1824802

File tree

6 files changed

+86
-31
lines changed

6 files changed

+86
-31
lines changed

‎include/CppUTestExt/MockCheckedExpectedCall.h‎

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@ class MockCheckedExpectedCall : public MockExpectedCall
4040
virtual ~MockCheckedExpectedCall();
4141

4242
virtual MockExpectedCall& withName(const SimpleString& name) _override;
43-
virtual MockExpectedCall& withCallOrder(unsigned int callOrder) _override;
43+
virtual MockExpectedCall& withCallOrder(unsigned int callOrder) _override { return withCallOrder(callOrder, callOrder); }
44+
virtual MockExpectedCall& withCallOrder(unsigned int initialCallOrder, unsigned int finalCallOrder) _override;
4445
virtual MockExpectedCall& withBoolParameter(const SimpleString& name, bool value) _override;
4546
virtual MockExpectedCall& withIntParameter(const SimpleString& name, int value) _override;
4647
virtual MockExpectedCall& withUnsignedIntParameter(const SimpleString& name, unsigned int value) _override;
@@ -101,8 +102,7 @@ class MockCheckedExpectedCall : public MockExpectedCall
101102
virtual SimpleString callToString();
102103
virtual SimpleString missingParametersToString();
103104

104-
enum { NOT_CALLED_YET = 0, NO_EXPECTED_CALL_ORDER = 0 };
105-
virtual unsigned int getCallOrder() const;
105+
enum { NO_EXPECTED_CALL_ORDER = 0 };
106106

107107
virtual unsigned int getActualCallsFulfilled() const;
108108

@@ -128,8 +128,8 @@ class MockCheckedExpectedCall : public MockExpectedCall
128128

129129
bool ignoreOtherParameters_;
130130
bool isActualCallMatchFinalized_;
131-
unsigned int actualCallOrder_;
132-
unsigned int expectedCallOrder_;
131+
unsigned int initialExpectedCallOrder_;
132+
unsigned int finalExpectedCallOrder_;
133133
bool outOfOrder_;
134134
MockNamedValueList* inputParameters_;
135135
MockNamedValueList* outputParameters_;
@@ -146,6 +146,7 @@ class MockIgnoredExpectedCall: public MockExpectedCall
146146

147147
virtual MockExpectedCall& withName(const SimpleString&) _override { return *this;}
148148
virtual MockExpectedCall& withCallOrder(unsigned int) _override { return *this; }
149+
virtual MockExpectedCall& withCallOrder(unsigned int, unsigned int) _override { return *this; }
149150
virtual MockExpectedCall& withBoolParameter(const SimpleString&, bool) _override { return *this; }
150151
virtual MockExpectedCall& withIntParameter(const SimpleString&, int) _override { return *this; }
151152
virtual MockExpectedCall& withUnsignedIntParameter(const SimpleString&, unsigned int) _override{ return *this; }

‎include/CppUTestExt/MockExpectedCall.h‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ class MockExpectedCall
4040

4141
virtual MockExpectedCall& withName(const SimpleString& name)=0;
4242
virtual MockExpectedCall& withCallOrder(unsigned int)=0;
43+
virtual MockExpectedCall& withCallOrder(unsigned int, unsigned int)=0;
4344
MockExpectedCall& withParameter(const SimpleString& name, bool value) { return withBoolParameter(name, value); }
4445
MockExpectedCall& withParameter(const SimpleString& name, int value) { return withIntParameter(name, value); }
4546
MockExpectedCall& withParameter(const SimpleString& name, unsigned int value) { return withUnsignedIntParameter(name, value); }

‎src/CppUTestExt/MockExpectedCall.cpp‎

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,8 @@ SimpleString MockCheckedExpectedCall::getName() const
5252
}
5353

5454
MockCheckedExpectedCall::MockCheckedExpectedCall()
55-
: ignoreOtherParameters_(false), isActualCallMatchFinalized_(false), actualCallOrder_(NOT_CALLED_YET), expectedCallOrder_(NO_EXPECTED_CALL_ORDER),
55+
: ignoreOtherParameters_(false), isActualCallMatchFinalized_(false),
56+
initialExpectedCallOrder_(NO_EXPECTED_CALL_ORDER), finalExpectedCallOrder_(NO_EXPECTED_CALL_ORDER),
5657
outOfOrder_(false), returnValue_(""), objectPtr_(NULL), wasPassedToObject_(true),
5758
actualCalls_(0), expectedCalls_(1)
5859
{
@@ -61,7 +62,8 @@ MockCheckedExpectedCall::MockCheckedExpectedCall()
6162
}
6263

6364
MockCheckedExpectedCall::MockCheckedExpectedCall(unsigned int numCalls)
64-
: ignoreOtherParameters_(false), isActualCallMatchFinalized_(false), actualCallOrder_(NOT_CALLED_YET), expectedCallOrder_(NO_EXPECTED_CALL_ORDER),
65+
: ignoreOtherParameters_(false), isActualCallMatchFinalized_(false),
66+
initialExpectedCallOrder_(NO_EXPECTED_CALL_ORDER), finalExpectedCallOrder_(NO_EXPECTED_CALL_ORDER),
6567
outOfOrder_(false), returnValue_(""), objectPtr_(NULL), wasPassedToObject_(true),
6668
actualCalls_(0), expectedCalls_(numCalls)
6769
{
@@ -267,14 +269,11 @@ bool MockCheckedExpectedCall::isMatchingActualCall()
267269
void MockCheckedExpectedCall::callWasMade(unsigned int callOrder)
268270
{
269271
actualCalls_++;
270-
actualCallOrder_ = callOrder;
271272

272-
if (expectedCallOrder_ == NO_EXPECTED_CALL_ORDER)
273-
outOfOrder_ = false;
274-
else if (actualCallOrder_ == expectedCallOrder_)
275-
outOfOrder_ = false;
276-
else
273+
if ( (initialExpectedCallOrder_ != NO_EXPECTED_CALL_ORDER) &&
274+
((callOrder < initialExpectedCallOrder_) || (callOrder > finalExpectedCallOrder_)) ) {
277275
outOfOrder_ = true;
276+
}
278277

279278
resetActualCallMatchingState();
280279
}
@@ -292,7 +291,6 @@ void MockCheckedExpectedCall::wasPassedToObject()
292291

293292
void MockCheckedExpectedCall::resetActualCallMatchingState()
294293
{
295-
actualCallOrder_ = NOT_CALLED_YET;
296294
wasPassedToObject_ = (objectPtr_ == NULL);
297295
isActualCallMatchFinalized_ = false;
298296

@@ -346,8 +344,12 @@ SimpleString MockCheckedExpectedCall::callToString()
346344

347345
str += getName();
348346
str += " -> ";
349-
if (expectedCallOrder_ != NO_EXPECTED_CALL_ORDER) {
350-
str += StringFromFormat("expected call order: <%d> -> ", expectedCallOrder_);
347+
if (initialExpectedCallOrder_ != NO_EXPECTED_CALL_ORDER) {
348+
if (initialExpectedCallOrder_ == finalExpectedCallOrder_) {
349+
str += StringFromFormat("expected call order: <%u> -> ", initialExpectedCallOrder_);
350+
} else {
351+
str += StringFromFormat("expected calls order: <%u..%u> -> ", initialExpectedCallOrder_, finalExpectedCallOrder_);
352+
}
351353
}
352354

353355
if (inputParameters_->begin() == NULL && outputParameters_->begin() == NULL) {
@@ -512,14 +514,10 @@ MockNamedValue MockCheckedExpectedCall::returnValue()
512514
return returnValue_;
513515
}
514516

515-
unsigned int MockCheckedExpectedCall::getCallOrder() const
516-
{
517-
return actualCallOrder_;
518-
}
519-
520-
MockExpectedCall& MockCheckedExpectedCall::withCallOrder(unsigned int callOrder)
517+
MockExpectedCall& MockCheckedExpectedCall::withCallOrder(unsigned int initialCallOrder, unsigned int finalCallOrder)
521518
{
522-
expectedCallOrder_ = callOrder;
519+
initialExpectedCallOrder_ = initialCallOrder;
520+
finalExpectedCallOrder_ = finalCallOrder;
523521
return *this;
524522
}
525523

‎src/CppUTestExt/MockSupport.cpp‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,8 @@ MockExpectedCall& MockSupport::expectNCalls(unsigned int amount, const SimpleStr
172172
MockCheckedExpectedCall* call = new MockCheckedExpectedCall(amount);
173173
call->withName(appendScopeToName(functionName));
174174
if (strictOrdering_) {
175-
call->withCallOrder(++expectedCallOrder_);
175+
call->withCallOrder(expectedCallOrder_ + 1, expectedCallOrder_ + amount);
176+
expectedCallOrder_ += amount;
176177
}
177178
expectations_.addExpectedCall(call);
178179
return *call;
@@ -286,7 +287,6 @@ void MockSupport::failTestWithExpectedCallsNotFulfilled()
286287
expectationsList.addExpectations(getMockSupport(p)->expectations_);
287288

288289
MockExpectedCallsDidntHappenFailure failure(activeReporter_->getTestToFail(), expectationsList);
289-
clear();
290290
failTest(failure);
291291
}
292292

@@ -300,12 +300,12 @@ void MockSupport::failTestWithOutOfOrderCalls()
300300
expectationsList.addExpectations(getMockSupport(p)->expectations_);
301301

302302
MockCallOrderFailure failure(activeReporter_->getTestToFail(), expectationsList);
303-
clear();
304303
failTest(failure);
305304
}
306305

307306
void MockSupport::failTest(MockFailure& failure)
308307
{
308+
clear();
309309
activeReporter_->failTest(failure);
310310
}
311311

‎tests/CppUTestExt/MockExpectedCallTest.cpp‎

Lines changed: 54 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -556,7 +556,7 @@ TEST(MockExpectedCall, toStringForParameterAndIgnored)
556556
STRCMP_EQUAL("name -> const char* string: <value>, other parameters are ignored (expected 1 call, called 1 time)", expectedCall.callToString().asCharString());
557557
}
558558

559-
TEST(MockExpectedCall, toStringForCallOrder)
559+
TEST(MockExpectedCall, toStringForCallOrderSingle)
560560
{
561561
MockCheckedExpectedCall expectedCall(1);
562562
expectedCall.withName("name");
@@ -565,7 +565,20 @@ TEST(MockExpectedCall, toStringForCallOrder)
565565
STRCMP_EQUAL("name -> expected call order: <2> -> no parameters (expected 1 call, called 1 time)", expectedCall.callToString().asCharString());
566566
}
567567

568-
TEST(MockExpectedCall, callOrderIsNotFulfilledWithWrongOrder)
568+
TEST(MockExpectedCall, toStringForCallOrderMultiple)
569+
{
570+
MockCheckedExpectedCall expectedCall(5);
571+
expectedCall.withName("name");
572+
expectedCall.withCallOrder(5, 9);
573+
expectedCall.callWasMade(5);
574+
expectedCall.callWasMade(6);
575+
expectedCall.callWasMade(7);
576+
expectedCall.callWasMade(8);
577+
expectedCall.callWasMade(9);
578+
STRCMP_EQUAL("name -> expected calls order: <5..9> -> no parameters (expected 5 calls, called 5 times)", expectedCall.callToString().asCharString());
579+
}
580+
581+
TEST(MockExpectedCall, callOrderIsFulfilledButWithWrongOrderSingle)
569582
{
570583
call->withName("name");
571584
call->withCallOrder(2);
@@ -574,7 +587,31 @@ TEST(MockExpectedCall, callOrderIsNotFulfilledWithWrongOrder)
574587
CHECK(call->isOutOfOrder());
575588
}
576589

577-
TEST(MockExpectedCall, callOrderIsFulfilled)
590+
TEST(MockExpectedCall, callOrderIsFulfilledButWithWrongOrderMultipleTooEarly)
591+
{
592+
MockCheckedExpectedCall expectedCall(3);
593+
expectedCall.withName("name");
594+
expectedCall.withCallOrder(10, 12);
595+
expectedCall.callWasMade(9);
596+
expectedCall.callWasMade(10);
597+
expectedCall.callWasMade(11);
598+
CHECK(expectedCall.isFulfilled());
599+
CHECK(expectedCall.isOutOfOrder());
600+
}
601+
602+
TEST(MockExpectedCall, callOrderIsFulfilledButWithWrongOrderMultipleTooLate)
603+
{
604+
MockCheckedExpectedCall expectedCall(3);
605+
expectedCall.withName("name");
606+
expectedCall.withCallOrder(10, 12);
607+
expectedCall.callWasMade(11);
608+
expectedCall.callWasMade(12);
609+
expectedCall.callWasMade(13);
610+
CHECK(expectedCall.isFulfilled());
611+
CHECK(expectedCall.isOutOfOrder());
612+
}
613+
614+
TEST(MockExpectedCall, callOrderIsFulfilledSingle)
578615
{
579616
call->withName("name");
580617
call->withCallOrder(1);
@@ -583,6 +620,19 @@ TEST(MockExpectedCall, callOrderIsFulfilled)
583620
CHECK_FALSE(call->isOutOfOrder());
584621
}
585622

623+
TEST(MockExpectedCall, callOrderIsFulfilledMultiple)
624+
{
625+
MockCheckedExpectedCall expectedCall(4);
626+
expectedCall.withName("name");
627+
expectedCall.withCallOrder(150, 153);
628+
expectedCall.callWasMade(150);
629+
expectedCall.callWasMade(151);
630+
expectedCall.callWasMade(152);
631+
expectedCall.callWasMade(153);
632+
CHECK(expectedCall.isFulfilled());
633+
CHECK_FALSE(expectedCall.isOutOfOrder());
634+
}
635+
586636
TEST(MockExpectedCall, hasOutputParameter)
587637
{
588638
const int value = 1;
@@ -636,6 +686,7 @@ TEST(MockIgnoredExpectedCall, worksAsItShould)
636686
{
637687
ignored.withName("func");
638688
ignored.withCallOrder(1);
689+
ignored.withCallOrder(1, 1);
639690
ignored.onObject((void*) 0);
640691
ignored.withBoolParameter("umm", true);
641692
ignored.withIntParameter("bla", (int) 1);

‎tests/CppUTestExt/MockStrictOrderTest.cpp‎

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -178,18 +178,22 @@ TEST(MockStrictOrderTest, orderViolatedAcrossScopes)
178178
mock("mock2").checkExpectations();
179179
}
180180

181-
IGNORE_TEST(MockStrictOrderTest, orderUsingNCalls)
181+
TEST(MockStrictOrderTest, orderUsingNCalls)
182182
{
183183
mock().strictOrder();
184184

185185
mock().expectOneCall("foo1");
186186
mock().expectNCalls(2, "foo2");
187187
mock().expectOneCall("foo1");
188+
mock().expectNCalls(3, "foo2");
189+
188190
mock().actualCall("foo1");
189191
mock().actualCall("foo2");
190192
mock().actualCall("foo2");
191193
mock().actualCall("foo1");
194+
mock().actualCall("foo2");
195+
mock().actualCall("foo2");
196+
mock().actualCall("foo2");
192197

193198
mock().checkExpectations();
194199
}
195-

0 commit comments

Comments
 (0)