void
CalloutManager::callCallouts(int hook_index, CalloutHandle& callout_handle) {
+ // Clear the "skip" flag so we don't carry state from a previous call.
+ // This is done regardless of whether callouts are present to avoid passing
+ // any state from the previous call of callCallouts().
+ callout_handle.setSkip(false);
+
// Only initialize and iterate if there are callouts present. This check
// also catches the case of an invalid index.
if (calloutsPresent(hook_index)) {
- // Clear the "skip" flag so we don't carry state from a previous call.
- callout_handle.setSkip(false);
-
// Set the current hook index. This is used should a callout wish to
// determine to what hook it is attached.
current_hook_ = hook_index;
EXPECT_FALSE(callout_handle.getSkip());
}
+// Check that the skip flag is cleared when callouts are called - even if
+// there are no callouts.
+
+TEST_F(HandlesTest, NoCalloutsSkipTest) {
+ // Note - no callouts are registered on any hook.
+ CalloutHandle callout_handle(getCalloutManager());
+
+ // Clear the skip flag and call a hook with no callouts.
+ callout_handle.setSkip(false);
+ getCalloutManager()->callCallouts(alpha_index_, callout_handle);
+ EXPECT_FALSE(callout_handle.getSkip());
+
+ // Set the skip flag and call a hook with no callouts.
+ callout_handle.setSkip(true);
+ getCalloutManager()->callCallouts(alpha_index_, callout_handle);
+ EXPECT_FALSE(callout_handle.getSkip());
+}
+
// The next set of callouts do a similar thing to the above "skip" tests,
// but alter the value of a string argument. This is for testing that the
// a callout is able to change an argument and return it to the caller.