Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(302)

Side by Side Diff: testing/gmock/include/gmock/gmock-spec-builders.h

Issue 521012: Update gmock and gtest. (Closed)
Patch Set: update readme Created 10 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2007, Google Inc. 1 // Copyright 2007, Google Inc.
2 // All rights reserved. 2 // All rights reserved.
3 // 3 //
4 // Redistribution and use in source and binary forms, with or without 4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions are 5 // modification, are permitted provided that the following conditions are
6 // met: 6 // met:
7 // 7 //
8 // * Redistributions of source code must retain the above copyright 8 // * Redistributions of source code must retain the above copyright
9 // notice, this list of conditions and the following disclaimer. 9 // notice, this list of conditions and the following disclaimer.
10 // * Redistributions in binary form must reproduce the above 10 // * Redistributions in binary form must reproduce the above
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
135 // This template class implements a default action spec (i.e. an 135 // This template class implements a default action spec (i.e. an
136 // ON_CALL() statement). 136 // ON_CALL() statement).
137 template <typename F> 137 template <typename F>
138 class DefaultActionSpec { 138 class DefaultActionSpec {
139 public: 139 public:
140 typedef typename Function<F>::ArgumentTuple ArgumentTuple; 140 typedef typename Function<F>::ArgumentTuple ArgumentTuple;
141 typedef typename Function<F>::ArgumentMatcherTuple ArgumentMatcherTuple; 141 typedef typename Function<F>::ArgumentMatcherTuple ArgumentMatcherTuple;
142 142
143 // Constructs a DefaultActionSpec object from the information inside 143 // Constructs a DefaultActionSpec object from the information inside
144 // the parenthesis of an ON_CALL() statement. 144 // the parenthesis of an ON_CALL() statement.
145 DefaultActionSpec(const char* file, int line, 145 DefaultActionSpec(const char* a_file, int a_line,
146 const ArgumentMatcherTuple& matchers) 146 const ArgumentMatcherTuple& matchers)
147 : file_(file), 147 : file_(a_file),
148 line_(line), 148 line_(a_line),
149 matchers_(matchers), 149 matchers_(matchers),
150 // By default, extra_matcher_ should match anything. However, 150 // By default, extra_matcher_ should match anything. However,
151 // we cannot initialize it with _ as that triggers a compiler 151 // we cannot initialize it with _ as that triggers a compiler
152 // bug in Symbian's C++ compiler (cannot decide between two 152 // bug in Symbian's C++ compiler (cannot decide between two
153 // overloaded constructors of Matcher<const ArgumentTuple&>). 153 // overloaded constructors of Matcher<const ArgumentTuple&>).
154 extra_matcher_(A<const ArgumentTuple&>()), 154 extra_matcher_(A<const ArgumentTuple&>()),
155 last_clause_(kNone) { 155 last_clause_(kNone) {
156 } 156 }
157 157
158 // Where in the source file was the default action spec defined? 158 // Where in the source file was the default action spec defined?
(...skipping 30 matching lines...) Expand all
189 return TupleMatches(matchers_, args) && extra_matcher_.Matches(args); 189 return TupleMatches(matchers_, args) && extra_matcher_.Matches(args);
190 } 190 }
191 191
192 // Returns the action specified by the user. 192 // Returns the action specified by the user.
193 const Action<F>& GetAction() const { 193 const Action<F>& GetAction() const {
194 AssertSpecProperty(last_clause_ == kWillByDefault, 194 AssertSpecProperty(last_clause_ == kWillByDefault,
195 ".WillByDefault() must appear exactly " 195 ".WillByDefault() must appear exactly "
196 "once in an ON_CALL()."); 196 "once in an ON_CALL().");
197 return action_; 197 return action_;
198 } 198 }
199
199 private: 200 private:
200 // Gives each clause in the ON_CALL() statement a name. 201 // Gives each clause in the ON_CALL() statement a name.
201 enum Clause { 202 enum Clause {
202 // Do not change the order of the enum members! The run-time 203 // Do not change the order of the enum members! The run-time
203 // syntax checking relies on it. 204 // syntax checking relies on it.
204 kNone, 205 kNone,
205 kWith, 206 kWith,
206 kWillByDefault, 207 kWillByDefault,
207 }; 208 };
208 209
(...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after
554 // types (e.g. all pre-requisites of a particular expectation, all 555 // types (e.g. all pre-requisites of a particular expectation, all
555 // expectations in a sequence). Therefore these expectation objects 556 // expectations in a sequence). Therefore these expectation objects
556 // must share a common base class. 557 // must share a common base class.
557 // 558 //
558 // 2. We can avoid binary code bloat by moving methods not depending 559 // 2. We can avoid binary code bloat by moving methods not depending
559 // on the template argument of Expectation to the base class. 560 // on the template argument of Expectation to the base class.
560 // 561 //
561 // This class is internal and mustn't be used by user code directly. 562 // This class is internal and mustn't be used by user code directly.
562 class ExpectationBase { 563 class ExpectationBase {
563 public: 564 public:
564 ExpectationBase(const char* file, int line); 565 // source_text is the EXPECT_CALL(...) source that created this Expectation.
566 ExpectationBase(const char* file, int line, const string& source_text);
565 567
566 virtual ~ExpectationBase(); 568 virtual ~ExpectationBase();
567 569
568 // Where in the source file was the expectation spec defined? 570 // Where in the source file was the expectation spec defined?
569 const char* file() const { return file_; } 571 const char* file() const { return file_; }
570 int line() const { return line_; } 572 int line() const { return line_; }
571 573 const char* source_text() const { return source_text_.c_str(); }
572 // Returns the cardinality specified in the expectation spec. 574 // Returns the cardinality specified in the expectation spec.
573 const Cardinality& cardinality() const { return cardinality_; } 575 const Cardinality& cardinality() const { return cardinality_; }
574 576
575 // Describes the source file location of this expectation. 577 // Describes the source file location of this expectation.
576 void DescribeLocationTo(::std::ostream* os) const { 578 void DescribeLocationTo(::std::ostream* os) const {
577 *os << file() << ":" << line() << ": "; 579 *os << file() << ":" << line() << ": ";
578 } 580 }
579 581
580 // Describes how many times a function call matching this 582 // Describes how many times a function call matching this
581 // expectation has occurred. 583 // expectation has occurred.
582 // L >= g_gmock_mutex 584 // L >= g_gmock_mutex
583 virtual void DescribeCallCountTo(::std::ostream* os) const = 0; 585 virtual void DescribeCallCountTo(::std::ostream* os) const = 0;
586
584 protected: 587 protected:
585 friend class ::testing::Expectation; 588 friend class ::testing::Expectation;
586 589
587 enum Clause { 590 enum Clause {
588 // Don't change the order of the enum members! 591 // Don't change the order of the enum members!
589 kNone, 592 kNone,
590 kWith, 593 kWith,
591 kTimes, 594 kTimes,
592 kInSequence, 595 kInSequence,
593 kAfter, 596 kAfter,
(...skipping 18 matching lines...) Expand all
612 615
613 // Explicitly specifies the cardinality of this expectation. Used 616 // Explicitly specifies the cardinality of this expectation. Used
614 // by the subclasses to implement the .Times() clause. 617 // by the subclasses to implement the .Times() clause.
615 void SpecifyCardinality(const Cardinality& cardinality); 618 void SpecifyCardinality(const Cardinality& cardinality);
616 619
617 // Returns true iff the user specified the cardinality explicitly 620 // Returns true iff the user specified the cardinality explicitly
618 // using a .Times(). 621 // using a .Times().
619 bool cardinality_specified() const { return cardinality_specified_; } 622 bool cardinality_specified() const { return cardinality_specified_; }
620 623
621 // Sets the cardinality of this expectation spec. 624 // Sets the cardinality of this expectation spec.
622 void set_cardinality(const Cardinality& cardinality) { 625 void set_cardinality(const Cardinality& a_cardinality) {
623 cardinality_ = cardinality; 626 cardinality_ = a_cardinality;
624 } 627 }
625 628
626 // The following group of methods should only be called after the 629 // The following group of methods should only be called after the
627 // EXPECT_CALL() statement, and only when g_gmock_mutex is held by 630 // EXPECT_CALL() statement, and only when g_gmock_mutex is held by
628 // the current thread. 631 // the current thread.
629 632
630 // Retires all pre-requisites of this expectation. 633 // Retires all pre-requisites of this expectation.
631 // L >= g_gmock_mutex 634 // L >= g_gmock_mutex
632 void RetireAllPreRequisites(); 635 void RetireAllPreRequisites();
633 636
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
690 693
691 private: 694 private:
692 friend class ::testing::Sequence; 695 friend class ::testing::Sequence;
693 friend class ::testing::internal::ExpectationTester; 696 friend class ::testing::internal::ExpectationTester;
694 697
695 template <typename Function> 698 template <typename Function>
696 friend class TypedExpectation; 699 friend class TypedExpectation;
697 700
698 // This group of fields are part of the spec and won't change after 701 // This group of fields are part of the spec and won't change after
699 // an EXPECT_CALL() statement finishes. 702 // an EXPECT_CALL() statement finishes.
700 const char* file_; // The file that contains the expectation. 703 const char* file_; // The file that contains the expectation.
701 int line_; // The line number of the expectation. 704 int line_; // The line number of the expectation.
705 const string source_text_; // The EXPECT_CALL(...) source text.
702 // True iff the cardinality is specified explicitly. 706 // True iff the cardinality is specified explicitly.
703 bool cardinality_specified_; 707 bool cardinality_specified_;
704 Cardinality cardinality_; // The cardinality of the expectation. 708 Cardinality cardinality_; // The cardinality of the expectation.
705 // The immediate pre-requisites (i.e. expectations that must be 709 // The immediate pre-requisites (i.e. expectations that must be
706 // satisfied before this expectation can be matched) of this 710 // satisfied before this expectation can be matched) of this
707 // expectation. We use linked_ptr in the set because we want an 711 // expectation. We use linked_ptr in the set because we want an
708 // Expectation object to be co-owned by its FunctionMocker and its 712 // Expectation object to be co-owned by its FunctionMocker and its
709 // successors. This allows multiple mock objects to be deleted at 713 // successors. This allows multiple mock objects to be deleted at
710 // different times. 714 // different times.
711 ExpectationSet immediate_prerequisites_; 715 ExpectationSet immediate_prerequisites_;
712 716
713 // This group of fields are the current state of the expectation, 717 // This group of fields are the current state of the expectation,
714 // and can change as the mock function is called. 718 // and can change as the mock function is called.
715 int call_count_; // How many times this expectation has been invoked. 719 int call_count_; // How many times this expectation has been invoked.
716 bool retired_; // True iff this expectation has retired. 720 bool retired_; // True iff this expectation has retired.
721
722 GTEST_DISALLOW_ASSIGN_(ExpectationBase);
717 }; // class ExpectationBase 723 }; // class ExpectationBase
718 724
719 // Impements an expectation for the given function type. 725 // Impements an expectation for the given function type.
720 template <typename F> 726 template <typename F>
721 class TypedExpectation : public ExpectationBase { 727 class TypedExpectation : public ExpectationBase {
722 public: 728 public:
723 typedef typename Function<F>::ArgumentTuple ArgumentTuple; 729 typedef typename Function<F>::ArgumentTuple ArgumentTuple;
724 typedef typename Function<F>::ArgumentMatcherTuple ArgumentMatcherTuple; 730 typedef typename Function<F>::ArgumentMatcherTuple ArgumentMatcherTuple;
725 typedef typename Function<F>::Result Result; 731 typedef typename Function<F>::Result Result;
726 732
727 TypedExpectation(FunctionMockerBase<F>* owner, const char* file, int line, 733 TypedExpectation(FunctionMockerBase<F>* owner,
734 const char* a_file, int a_line, const string& a_source_text,
728 const ArgumentMatcherTuple& m) 735 const ArgumentMatcherTuple& m)
729 : ExpectationBase(file, line), 736 : ExpectationBase(a_file, a_line, a_source_text),
730 owner_(owner), 737 owner_(owner),
731 matchers_(m), 738 matchers_(m),
739 extra_matcher_specified_(false),
732 // By default, extra_matcher_ should match anything. However, 740 // By default, extra_matcher_ should match anything. However,
733 // we cannot initialize it with _ as that triggers a compiler 741 // we cannot initialize it with _ as that triggers a compiler
734 // bug in Symbian's C++ compiler (cannot decide between two 742 // bug in Symbian's C++ compiler (cannot decide between two
735 // overloaded constructors of Matcher<const ArgumentTuple&>). 743 // overloaded constructors of Matcher<const ArgumentTuple&>).
736 extra_matcher_(A<const ArgumentTuple&>()), 744 extra_matcher_(A<const ArgumentTuple&>()),
737 repeated_action_specified_(false), 745 repeated_action_specified_(false),
738 repeated_action_(DoDefault()), 746 repeated_action_(DoDefault()),
739 retires_on_saturation_(false), 747 retires_on_saturation_(false),
740 last_clause_(kNone), 748 last_clause_(kNone),
741 action_count_checked_(false) {} 749 action_count_checked_(false) {}
(...skipping 11 matching lines...) Expand all
753 ".With() cannot appear " 761 ".With() cannot appear "
754 "more than once in an EXPECT_CALL()."); 762 "more than once in an EXPECT_CALL().");
755 } else { 763 } else {
756 ExpectSpecProperty(last_clause_ < kWith, 764 ExpectSpecProperty(last_clause_ < kWith,
757 ".With() must be the first " 765 ".With() must be the first "
758 "clause in an EXPECT_CALL()."); 766 "clause in an EXPECT_CALL().");
759 } 767 }
760 last_clause_ = kWith; 768 last_clause_ = kWith;
761 769
762 extra_matcher_ = m; 770 extra_matcher_ = m;
771 extra_matcher_specified_ = true;
763 return *this; 772 return *this;
764 } 773 }
765 774
766 // Implements the .Times() clause. 775 // Implements the .Times() clause.
767 TypedExpectation& Times(const Cardinality& cardinality) { 776 TypedExpectation& Times(const Cardinality& a_cardinality) {
768 if (last_clause_ ==kTimes) { 777 if (last_clause_ ==kTimes) {
769 ExpectSpecProperty(false, 778 ExpectSpecProperty(false,
770 ".Times() cannot appear " 779 ".Times() cannot appear "
771 "more than once in an EXPECT_CALL()."); 780 "more than once in an EXPECT_CALL().");
772 } else { 781 } else {
773 ExpectSpecProperty(last_clause_ < kTimes, 782 ExpectSpecProperty(last_clause_ < kTimes,
774 ".Times() cannot appear after " 783 ".Times() cannot appear after "
775 ".InSequence(), .WillOnce(), .WillRepeatedly(), " 784 ".InSequence(), .WillOnce(), .WillRepeatedly(), "
776 "or .RetiresOnSaturation()."); 785 "or .RetiresOnSaturation().");
777 } 786 }
778 last_clause_ = kTimes; 787 last_clause_ = kTimes;
779 788
780 ExpectationBase::SpecifyCardinality(cardinality); 789 ExpectationBase::SpecifyCardinality(a_cardinality);
781 return *this; 790 return *this;
782 } 791 }
783 792
784 // Implements the .Times() clause. 793 // Implements the .Times() clause.
785 TypedExpectation& Times(int n) { 794 TypedExpectation& Times(int n) {
786 return Times(Exactly(n)); 795 return Times(Exactly(n));
787 } 796 }
788 797
789 // Implements the .InSequence() clause. 798 // Implements the .InSequence() clause.
790 TypedExpectation& InSequence(const Sequence& s) { 799 TypedExpectation& InSequence(const Sequence& s) {
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
931 Cardinality::DescribeActualCallCountTo(call_count(), os); 940 Cardinality::DescribeActualCallCountTo(call_count(), os);
932 941
933 // Describes the state of the expectation (e.g. is it satisfied? 942 // Describes the state of the expectation (e.g. is it satisfied?
934 // is it active?). 943 // is it active?).
935 *os << " - " << (IsOverSaturated() ? "over-saturated" : 944 *os << " - " << (IsOverSaturated() ? "over-saturated" :
936 IsSaturated() ? "saturated" : 945 IsSaturated() ? "saturated" :
937 IsSatisfied() ? "satisfied" : "unsatisfied") 946 IsSatisfied() ? "satisfied" : "unsatisfied")
938 << " and " 947 << " and "
939 << (is_retired() ? "retired" : "active"); 948 << (is_retired() ? "retired" : "active");
940 } 949 }
950
951 void MaybeDescribeExtraMatcherTo(::std::ostream* os) {
952 if (extra_matcher_specified_) {
953 *os << " Expected args: ";
954 extra_matcher_.DescribeTo(os);
955 *os << "\n";
956 }
957 }
958
941 private: 959 private:
942 template <typename Function> 960 template <typename Function>
943 friend class FunctionMockerBase; 961 friend class FunctionMockerBase;
944 962
945 // Returns an Expectation object that references and co-owns this 963 // Returns an Expectation object that references and co-owns this
946 // expectation. 964 // expectation.
947 virtual Expectation GetHandle() { 965 virtual Expectation GetHandle() {
948 return owner_->GetHandleOf(this); 966 return owner_->GetHandleOf(this);
949 } 967 }
950 968
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
1027 "call_count() is <= 0 when GetCurrentAction() is " 1045 "call_count() is <= 0 when GetCurrentAction() is "
1028 "called - this should never happen."); 1046 "called - this should never happen.");
1029 1047
1030 const int action_count = static_cast<int>(actions().size()); 1048 const int action_count = static_cast<int>(actions().size());
1031 if (action_count > 0 && !repeated_action_specified_ && 1049 if (action_count > 0 && !repeated_action_specified_ &&
1032 count > action_count) { 1050 count > action_count) {
1033 // If there is at least one WillOnce() and no WillRepeatedly(), 1051 // If there is at least one WillOnce() and no WillRepeatedly(),
1034 // we warn the user when the WillOnce() clauses ran out. 1052 // we warn the user when the WillOnce() clauses ran out.
1035 ::std::stringstream ss; 1053 ::std::stringstream ss;
1036 DescribeLocationTo(&ss); 1054 DescribeLocationTo(&ss);
1037 ss << "Actions ran out.\n" 1055 ss << "Actions ran out in " << source_text() << "...\n"
1038 << "Called " << count << " times, but only " 1056 << "Called " << count << " times, but only "
1039 << action_count << " WillOnce()" 1057 << action_count << " WillOnce()"
1040 << (action_count == 1 ? " is" : "s are") << " specified - "; 1058 << (action_count == 1 ? " is" : "s are") << " specified - ";
1041 mocker->DescribeDefaultActionTo(args, &ss); 1059 mocker->DescribeDefaultActionTo(args, &ss);
1042 Log(WARNING, ss.str(), 1); 1060 Log(WARNING, ss.str(), 1);
1043 } 1061 }
1044 1062
1045 return count <= action_count ? actions()[count - 1] : repeated_action(); 1063 return count <= action_count ? actions()[count - 1] : repeated_action();
1046 } 1064 }
1047 1065
(...skipping 23 matching lines...) Expand all
1071 } 1089 }
1072 1090
1073 IncrementCallCount(); 1091 IncrementCallCount();
1074 RetireAllPreRequisites(); 1092 RetireAllPreRequisites();
1075 1093
1076 if (retires_on_saturation() && IsSaturated()) { 1094 if (retires_on_saturation() && IsSaturated()) {
1077 Retire(); 1095 Retire();
1078 } 1096 }
1079 1097
1080 // Must be done after IncrementCount()! 1098 // Must be done after IncrementCount()!
1081 *what << "Expected mock function call.\n"; 1099 *what << "Mock function call matches " << source_text() <<"...\n";
1082 return GetCurrentAction(mocker, args); 1100 return GetCurrentAction(mocker, args);
1083 } 1101 }
1084 1102
1085 // Checks the action count (i.e. the number of WillOnce() and 1103 // Checks the action count (i.e. the number of WillOnce() and
1086 // WillRepeatedly() clauses) against the cardinality if this hasn't 1104 // WillRepeatedly() clauses) against the cardinality if this hasn't
1087 // been done before. Prints a warning if there are too many or too 1105 // been done before. Prints a warning if there are too many or too
1088 // few actions. 1106 // few actions.
1089 // L < mutex_ 1107 // L < mutex_
1090 void CheckActionCountIfNotDone() const { 1108 void CheckActionCountIfNotDone() const {
1091 bool should_check = false; 1109 bool should_check = false;
(...skipping 24 matching lines...) Expand all
1116 } else if (0 < action_count && action_count < lower_bound && 1134 } else if (0 < action_count && action_count < lower_bound &&
1117 !repeated_action_specified_) { 1135 !repeated_action_specified_) {
1118 too_many = false; 1136 too_many = false;
1119 } else { 1137 } else {
1120 return; 1138 return;
1121 } 1139 }
1122 1140
1123 ::std::stringstream ss; 1141 ::std::stringstream ss;
1124 DescribeLocationTo(&ss); 1142 DescribeLocationTo(&ss);
1125 ss << "Too " << (too_many ? "many" : "few") 1143 ss << "Too " << (too_many ? "many" : "few")
1126 << " actions specified.\n" 1144 << " actions specified in " << source_text() << "...\n"
1127 << "Expected to be "; 1145 << "Expected to be ";
1128 cardinality().DescribeTo(&ss); 1146 cardinality().DescribeTo(&ss);
1129 ss << ", but has " << (too_many ? "" : "only ") 1147 ss << ", but has " << (too_many ? "" : "only ")
1130 << action_count << " WillOnce()" 1148 << action_count << " WillOnce()"
1131 << (action_count == 1 ? "" : "s"); 1149 << (action_count == 1 ? "" : "s");
1132 if (repeated_action_specified_) { 1150 if (repeated_action_specified_) {
1133 ss << " and a WillRepeatedly()"; 1151 ss << " and a WillRepeatedly()";
1134 } 1152 }
1135 ss << "."; 1153 ss << ".";
1136 Log(WARNING, ss.str(), -1); // -1 means "don't print stack trace". 1154 Log(WARNING, ss.str(), -1); // -1 means "don't print stack trace".
1137 } 1155 }
1138 } 1156 }
1139 1157
1140 // All the fields below won't change once the EXPECT_CALL() 1158 // All the fields below won't change once the EXPECT_CALL()
1141 // statement finishes. 1159 // statement finishes.
1142 FunctionMockerBase<F>* const owner_; 1160 FunctionMockerBase<F>* const owner_;
1143 ArgumentMatcherTuple matchers_; 1161 ArgumentMatcherTuple matchers_;
1162 bool extra_matcher_specified_;
1144 Matcher<const ArgumentTuple&> extra_matcher_; 1163 Matcher<const ArgumentTuple&> extra_matcher_;
1145 std::vector<Action<F> > actions_; 1164 std::vector<Action<F> > actions_;
1146 bool repeated_action_specified_; // True if a WillRepeatedly() was specified. 1165 bool repeated_action_specified_; // True if a WillRepeatedly() was specified.
1147 Action<F> repeated_action_; 1166 Action<F> repeated_action_;
1148 bool retires_on_saturation_; 1167 bool retires_on_saturation_;
1149 Clause last_clause_; 1168 Clause last_clause_;
1150 mutable bool action_count_checked_; // Under mutex_. 1169 mutable bool action_count_checked_; // Under mutex_.
1151 mutable Mutex mutex_; // Protects action_count_checked_. 1170 mutable Mutex mutex_; // Protects action_count_checked_.
1171
1172 GTEST_DISALLOW_COPY_AND_ASSIGN_(TypedExpectation);
1152 }; // class TypedExpectation 1173 }; // class TypedExpectation
1153 1174
1154 // A MockSpec object is used by ON_CALL() or EXPECT_CALL() for 1175 // A MockSpec object is used by ON_CALL() or EXPECT_CALL() for
1155 // specifying the default behavior of, or expectation on, a mock 1176 // specifying the default behavior of, or expectation on, a mock
1156 // function. 1177 // function.
1157 1178
1158 // Note: class MockSpec really belongs to the ::testing namespace. 1179 // Note: class MockSpec really belongs to the ::testing namespace.
1159 // However if we define it in ::testing, MSVC will complain when 1180 // However if we define it in ::testing, MSVC will complain when
1160 // classes in ::testing::internal declare it as a friend class 1181 // classes in ::testing::internal declare it as a friend class
1161 // template. To workaround this compiler bug, we define MockSpec in 1182 // template. To workaround this compiler bug, we define MockSpec in
(...skipping 17 matching lines...) Expand all
1179 const char* file, int line, const char* obj, const char* call) { 1200 const char* file, int line, const char* obj, const char* call) {
1180 LogWithLocation(internal::INFO, file, line, 1201 LogWithLocation(internal::INFO, file, line,
1181 string("ON_CALL(") + obj + ", " + call + ") invoked"); 1202 string("ON_CALL(") + obj + ", " + call + ") invoked");
1182 return function_mocker_->AddNewDefaultActionSpec(file, line, matchers_); 1203 return function_mocker_->AddNewDefaultActionSpec(file, line, matchers_);
1183 } 1204 }
1184 1205
1185 // Adds a new expectation spec to the function mocker and returns 1206 // Adds a new expectation spec to the function mocker and returns
1186 // the newly created spec. 1207 // the newly created spec.
1187 internal::TypedExpectation<F>& InternalExpectedAt( 1208 internal::TypedExpectation<F>& InternalExpectedAt(
1188 const char* file, int line, const char* obj, const char* call) { 1209 const char* file, int line, const char* obj, const char* call) {
1189 LogWithLocation(internal::INFO, file, line, 1210 const string source_text(string("EXPECT_CALL(") + obj + ", " + call + ")");
1190 string("EXPECT_CALL(") + obj + ", " + call + ") invoked"); 1211 LogWithLocation(internal::INFO, file, line, source_text + " invoked");
1191 return function_mocker_->AddNewExpectation(file, line, matchers_); 1212 return function_mocker_->AddNewExpectation(
1213 file, line, source_text, matchers_);
1192 } 1214 }
1193 1215
1194 private: 1216 private:
1195 template <typename Function> 1217 template <typename Function>
1196 friend class internal::FunctionMocker; 1218 friend class internal::FunctionMocker;
1197 1219
1198 void SetMatchers(const ArgumentMatcherTuple& matchers) { 1220 void SetMatchers(const ArgumentMatcherTuple& matchers) {
1199 matchers_ = matchers; 1221 matchers_ = matchers;
1200 } 1222 }
1201 1223
1202 // Logs a message including file and line number information. 1224 // Logs a message including file and line number information.
1203 void LogWithLocation(testing::internal::LogSeverity severity, 1225 void LogWithLocation(testing::internal::LogSeverity severity,
1204 const char* file, int line, 1226 const char* file, int line,
1205 const string& message) { 1227 const string& message) {
1206 ::std::ostringstream s; 1228 ::std::ostringstream s;
1207 s << file << ":" << line << ": " << message << ::std::endl; 1229 s << file << ":" << line << ": " << message << ::std::endl;
1208 Log(severity, s.str(), 0); 1230 Log(severity, s.str(), 0);
1209 } 1231 }
1210 1232
1211 // The function mocker that owns this spec. 1233 // The function mocker that owns this spec.
1212 internal::FunctionMockerBase<F>* const function_mocker_; 1234 internal::FunctionMockerBase<F>* const function_mocker_;
1213 // The argument matchers specified in the spec. 1235 // The argument matchers specified in the spec.
1214 ArgumentMatcherTuple matchers_; 1236 ArgumentMatcherTuple matchers_;
1237
1238 GTEST_DISALLOW_ASSIGN_(MockSpec);
1215 }; // class MockSpec 1239 }; // class MockSpec
1216 1240
1217 // MSVC warns about using 'this' in base member initializer list, so 1241 // MSVC warns about using 'this' in base member initializer list, so
1218 // we need to temporarily disable the warning. We have to do it for 1242 // we need to temporarily disable the warning. We have to do it for
1219 // the entire class to suppress the warning, even though it's about 1243 // the entire class to suppress the warning, even though it's about
1220 // the constructor only. 1244 // the constructor only.
1221 1245
1222 #ifdef _MSC_VER 1246 #ifdef _MSC_VER
1223 #pragma warning(push) // Saves the current warning state. 1247 #pragma warning(push) // Saves the current warning state.
1224 #pragma warning(disable:4355) // Temporarily disables warning 4355. 1248 #pragma warning(disable:4355) // Temporarily disables warning 4355.
1225 #endif // _MSV_VER 1249 #endif // _MSV_VER
1226 1250
1227 // C++ treats the void type specially. For example, you cannot define 1251 // C++ treats the void type specially. For example, you cannot define
1228 // a void-typed variable or pass a void value to a function. 1252 // a void-typed variable or pass a void value to a function.
1229 // ActionResultHolder<T> holds a value of type T, where T must be a 1253 // ActionResultHolder<T> holds a value of type T, where T must be a
1230 // copyable type or void (T doesn't need to be default-constructable). 1254 // copyable type or void (T doesn't need to be default-constructable).
1231 // It hides the syntactic difference between void and other types, and 1255 // It hides the syntactic difference between void and other types, and
1232 // is used to unify the code for invoking both void-returning and 1256 // is used to unify the code for invoking both void-returning and
1233 // non-void-returning mock functions. This generic definition is used 1257 // non-void-returning mock functions. This generic definition is used
1234 // when T is not void. 1258 // when T is not void.
1235 template <typename T> 1259 template <typename T>
1236 class ActionResultHolder { 1260 class ActionResultHolder {
1237 public: 1261 public:
1238 explicit ActionResultHolder(T value) : value_(value) {} 1262 explicit ActionResultHolder(T a_value) : value_(a_value) {}
1239 1263
1240 // The compiler-generated copy constructor and assignment operator 1264 // The compiler-generated copy constructor and assignment operator
1241 // are exactly what we need, so we don't need to define them. 1265 // are exactly what we need, so we don't need to define them.
1242 1266
1243 T value() const { return value_; } 1267 T value() const { return value_; }
1244 1268
1245 // Prints the held value as an action's result to os. 1269 // Prints the held value as an action's result to os.
1246 void PrintAsActionResult(::std::ostream* os) const { 1270 void PrintAsActionResult(::std::ostream* os) const {
1247 *os << "\n Returns: "; 1271 *os << "\n Returns: ";
1248 UniversalPrinter<T>::Print(value_, os); 1272 UniversalPrinter<T>::Print(value_, os);
(...skipping 13 matching lines...) Expand all
1262 // Performs the given action and returns the result in a 1286 // Performs the given action and returns the result in a
1263 // ActionResultHolder. 1287 // ActionResultHolder.
1264 template <typename Function, typename Arguments> 1288 template <typename Function, typename Arguments>
1265 static ActionResultHolder PerformAction(const Action<Function>& action, 1289 static ActionResultHolder PerformAction(const Action<Function>& action,
1266 const Arguments& args) { 1290 const Arguments& args) {
1267 return ActionResultHolder(action.Perform(args)); 1291 return ActionResultHolder(action.Perform(args));
1268 } 1292 }
1269 1293
1270 private: 1294 private:
1271 T value_; 1295 T value_;
1296
1297 // T could be a reference type, so = isn't supported.
1298 GTEST_DISALLOW_ASSIGN_(ActionResultHolder);
1272 }; 1299 };
1273 1300
1274 // Specialization for T = void. 1301 // Specialization for T = void.
1275 template <> 1302 template <>
1276 class ActionResultHolder<void> { 1303 class ActionResultHolder<void> {
1277 public: 1304 public:
1278 ActionResultHolder() {} 1305 ActionResultHolder() {}
1279 void value() const {} 1306 void value() const {}
1280 void PrintAsActionResult(::std::ostream* /* os */) const {} 1307 void PrintAsActionResult(::std::ostream* /* os */) const {}
1281 1308
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
1410 const char* Name() const { 1437 const char* Name() const {
1411 const char* name; 1438 const char* name;
1412 { 1439 {
1413 // We protect name_ under g_gmock_mutex in case this mock 1440 // We protect name_ under g_gmock_mutex in case this mock
1414 // function is called from two threads concurrently. 1441 // function is called from two threads concurrently.
1415 MutexLock l(&g_gmock_mutex); 1442 MutexLock l(&g_gmock_mutex);
1416 name = name_; 1443 name = name_;
1417 } 1444 }
1418 return name; 1445 return name;
1419 } 1446 }
1447
1420 protected: 1448 protected:
1421 template <typename Function> 1449 template <typename Function>
1422 friend class MockSpec; 1450 friend class MockSpec;
1423 1451
1424 // Returns the result of invoking this mock function with the given 1452 // Returns the result of invoking this mock function with the given
1425 // arguments. This function can be safely called from multiple 1453 // arguments. This function can be safely called from multiple
1426 // threads concurrently. 1454 // threads concurrently.
1427 // L < g_gmock_mutex 1455 // L < g_gmock_mutex
1428 Result InvokeWith(const ArgumentTuple& args); 1456 Result InvokeWith(const ArgumentTuple& args);
1429 1457
1430 // Adds and returns a default action spec for this mock function. 1458 // Adds and returns a default action spec for this mock function.
1431 // L < g_gmock_mutex 1459 // L < g_gmock_mutex
1432 DefaultActionSpec<F>& AddNewDefaultActionSpec( 1460 DefaultActionSpec<F>& AddNewDefaultActionSpec(
1433 const char* file, int line, 1461 const char* file, int line,
1434 const ArgumentMatcherTuple& m) { 1462 const ArgumentMatcherTuple& m) {
1435 Mock::RegisterUseByOnCallOrExpectCall(MockObject(), file, line); 1463 Mock::RegisterUseByOnCallOrExpectCall(MockObject(), file, line);
1436 default_actions_.push_back(DefaultActionSpec<F>(file, line, m)); 1464 default_actions_.push_back(DefaultActionSpec<F>(file, line, m));
1437 return default_actions_.back(); 1465 return default_actions_.back();
1438 } 1466 }
1439 1467
1440 // Adds and returns an expectation spec for this mock function. 1468 // Adds and returns an expectation spec for this mock function.
1441 // L < g_gmock_mutex 1469 // L < g_gmock_mutex
1442 TypedExpectation<F>& AddNewExpectation( 1470 TypedExpectation<F>& AddNewExpectation(
1443 const char* file, int line, 1471 const char* file,
1472 int line,
1473 const string& source_text,
1444 const ArgumentMatcherTuple& m) { 1474 const ArgumentMatcherTuple& m) {
1445 Mock::RegisterUseByOnCallOrExpectCall(MockObject(), file, line); 1475 Mock::RegisterUseByOnCallOrExpectCall(MockObject(), file, line);
1446 const linked_ptr<TypedExpectation<F> > expectation( 1476 const linked_ptr<TypedExpectation<F> > expectation(
1447 new TypedExpectation<F>(this, file, line, m)); 1477 new TypedExpectation<F>(this, file, line, source_text, m));
1448 expectations_.push_back(expectation); 1478 expectations_.push_back(expectation);
1449 1479
1450 // Adds this expectation into the implicit sequence if there is one. 1480 // Adds this expectation into the implicit sequence if there is one.
1451 Sequence* const implicit_sequence = g_gmock_implicit_sequence.get(); 1481 Sequence* const implicit_sequence = g_gmock_implicit_sequence.get();
1452 if (implicit_sequence != NULL) { 1482 if (implicit_sequence != NULL) {
1453 implicit_sequence->AddExpectation(Expectation(expectation)); 1483 implicit_sequence->AddExpectation(Expectation(expectation));
1454 } 1484 }
1455 1485
1456 return *expectation; 1486 return *expectation;
1457 } 1487 }
1458 1488
1459 // The current spec (either default action spec or expectation spec) 1489 // The current spec (either default action spec or expectation spec)
1460 // being described on this function mocker. 1490 // being described on this function mocker.
1461 MockSpec<F>& current_spec() { return current_spec_; } 1491 MockSpec<F>& current_spec() { return current_spec_; }
1492
1462 private: 1493 private:
1463 template <typename Func> friend class TypedExpectation; 1494 template <typename Func> friend class TypedExpectation;
1464 1495
1465 typedef std::vector<internal::linked_ptr<TypedExpectation<F> > > 1496 typedef std::vector<internal::linked_ptr<TypedExpectation<F> > >
1466 TypedExpectations; 1497 TypedExpectations;
1467 1498
1468 // Returns an Expectation object that references and co-owns exp, 1499 // Returns an Expectation object that references and co-owns exp,
1469 // which must be an expectation on this mock function. 1500 // which must be an expectation on this mock function.
1470 Expectation GetHandleOf(TypedExpectation<F>* exp) { 1501 Expectation GetHandleOf(TypedExpectation<F>* exp) {
1471 for (typename TypedExpectations::const_iterator it = expectations_.begin(); 1502 for (typename TypedExpectations::const_iterator it = expectations_.begin();
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
1577 g_gmock_mutex.AssertHeld(); 1608 g_gmock_mutex.AssertHeld();
1578 const int count = static_cast<int>(expectations_.size()); 1609 const int count = static_cast<int>(expectations_.size());
1579 *why << "Google Mock tried the following " << count << " " 1610 *why << "Google Mock tried the following " << count << " "
1580 << (count == 1 ? "expectation, but it didn't match" : 1611 << (count == 1 ? "expectation, but it didn't match" :
1581 "expectations, but none matched") 1612 "expectations, but none matched")
1582 << ":\n"; 1613 << ":\n";
1583 for (int i = 0; i < count; i++) { 1614 for (int i = 0; i < count; i++) {
1584 *why << "\n"; 1615 *why << "\n";
1585 expectations_[i]->DescribeLocationTo(why); 1616 expectations_[i]->DescribeLocationTo(why);
1586 if (count > 1) { 1617 if (count > 1) {
1587 *why << "tried expectation #" << i; 1618 *why << "tried expectation #" << i << ": ";
1588 } 1619 }
1589 *why << "\n"; 1620 *why << expectations_[i]->source_text() << "...\n";
1590 expectations_[i]->DescribeMatchResultTo(args, why); 1621 expectations_[i]->DescribeMatchResultTo(args, why);
1591 expectations_[i]->DescribeCallCountTo(why); 1622 expectations_[i]->DescribeCallCountTo(why);
1592 } 1623 }
1593 } 1624 }
1594 1625
1595 // Address of the mock object this mock method belongs to. Only 1626 // Address of the mock object this mock method belongs to. Only
1596 // valid after this mock method has been called or 1627 // valid after this mock method has been called or
1597 // ON_CALL/EXPECT_CALL has been invoked on it. 1628 // ON_CALL/EXPECT_CALL has been invoked on it.
1598 const void* mock_obj_; // Protected by g_gmock_mutex. 1629 const void* mock_obj_; // Protected by g_gmock_mutex.
1599 1630
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1644 TypedExpectation<F>* const exp = it->get(); 1675 TypedExpectation<F>* const exp = it->get();
1645 1676
1646 if (exp->IsOverSaturated()) { 1677 if (exp->IsOverSaturated()) {
1647 // There was an upper-bound violation. Since the error was 1678 // There was an upper-bound violation. Since the error was
1648 // already reported when it occurred, there is no need to do 1679 // already reported when it occurred, there is no need to do
1649 // anything here. 1680 // anything here.
1650 expectations_met = false; 1681 expectations_met = false;
1651 } else if (!exp->IsSatisfied()) { 1682 } else if (!exp->IsSatisfied()) {
1652 expectations_met = false; 1683 expectations_met = false;
1653 ::std::stringstream ss; 1684 ::std::stringstream ss;
1654 ss << "Actual function call count doesn't match this expectation.\n"; 1685 ss << "Actual function call count doesn't match "
1686 << exp->source_text() << "...\n";
1655 // No need to show the source file location of the expectation 1687 // No need to show the source file location of the expectation
1656 // in the description, as the Expect() call that follows already 1688 // in the description, as the Expect() call that follows already
1657 // takes care of it. 1689 // takes care of it.
1690 exp->MaybeDescribeExtraMatcherTo(&ss);
1658 exp->DescribeCallCountTo(&ss); 1691 exp->DescribeCallCountTo(&ss);
1659 Expect(false, exp->file(), exp->line(), ss.str()); 1692 Expect(false, exp->file(), exp->line(), ss.str());
1660 } 1693 }
1661 } 1694 }
1662 expectations_.clear(); 1695 expectations_.clear();
1663 return expectations_met; 1696 return expectations_met;
1664 } 1697 }
1665 1698
1666 // Reports an uninteresting call (whose description is in msg) in the 1699 // Reports an uninteresting call (whose description is in msg) in the
1667 // manner specified by 'reaction'. 1700 // manner specified by 'reaction'.
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
1811 #define GMOCK_ON_CALL_IMPL_(obj, call) \ 1844 #define GMOCK_ON_CALL_IMPL_(obj, call) \
1812 ((obj).gmock_##call).InternalDefaultActionSetAt(__FILE__, __LINE__, \ 1845 ((obj).gmock_##call).InternalDefaultActionSetAt(__FILE__, __LINE__, \
1813 #obj, #call) 1846 #obj, #call)
1814 #define ON_CALL(obj, call) GMOCK_ON_CALL_IMPL_(obj, call) 1847 #define ON_CALL(obj, call) GMOCK_ON_CALL_IMPL_(obj, call)
1815 1848
1816 #define GMOCK_EXPECT_CALL_IMPL_(obj, call) \ 1849 #define GMOCK_EXPECT_CALL_IMPL_(obj, call) \
1817 ((obj).gmock_##call).InternalExpectedAt(__FILE__, __LINE__, #obj, #call) 1850 ((obj).gmock_##call).InternalExpectedAt(__FILE__, __LINE__, #obj, #call)
1818 #define EXPECT_CALL(obj, call) GMOCK_EXPECT_CALL_IMPL_(obj, call) 1851 #define EXPECT_CALL(obj, call) GMOCK_EXPECT_CALL_IMPL_(obj, call)
1819 1852
1820 #endif // GMOCK_INCLUDE_GMOCK_GMOCK_SPEC_BUILDERS_H_ 1853 #endif // GMOCK_INCLUDE_GMOCK_GMOCK_SPEC_BUILDERS_H_
OLDNEW
« no previous file with comments | « testing/gmock/include/gmock/gmock-printers.h ('k') | testing/gmock/include/gmock/internal/gmock-internal-utils.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698