1
// Copyright 2007, Google Inc.
2
// All rights reserved.
4
// Redistribution and use in source and binary forms, with or without
5
// modification, are permitted provided that the following conditions are
8
// * Redistributions of source code must retain the above copyright
9
// notice, this list of conditions and the following disclaimer.
10
// * Redistributions in binary form must reproduce the above
11
// copyright notice, this list of conditions and the following disclaimer
12
// in the documentation and/or other materials provided with the
14
// * Neither the name of Google Inc. nor the names of its
15
// contributors may be used to endorse or promote products derived from
16
// this software without specific prior written permission.
18
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
// Author: wan@google.com (Zhanyong Wan)
32
// Google Mock - a framework for writing C++ mock classes.
34
// This file implements Matcher<const string&>, Matcher<string>, and
35
// utilities for defining matchers.
37
#include "gmock/gmock-matchers.h"
38
#include "gmock/gmock-generated-matchers.h"
46
// Constructs a matcher that matches a const string& whose value is
48
Matcher<const internal::string&>::Matcher(const internal::string& s) {
52
// Constructs a matcher that matches a const string& whose value is
54
Matcher<const internal::string&>::Matcher(const char* s) {
55
*this = Eq(internal::string(s));
58
// Constructs a matcher that matches a string whose value is equal to s.
59
Matcher<internal::string>::Matcher(const internal::string& s) { *this = Eq(s); }
61
// Constructs a matcher that matches a string whose value is equal to s.
62
Matcher<internal::string>::Matcher(const char* s) {
63
*this = Eq(internal::string(s));
66
#if GTEST_HAS_STRING_PIECE_
67
// Constructs a matcher that matches a const StringPiece& whose value is
69
Matcher<const StringPiece&>::Matcher(const internal::string& s) {
73
// Constructs a matcher that matches a const StringPiece& whose value is
75
Matcher<const StringPiece&>::Matcher(const char* s) {
76
*this = Eq(internal::string(s));
79
// Constructs a matcher that matches a const StringPiece& whose value is
81
Matcher<const StringPiece&>::Matcher(StringPiece s) {
82
*this = Eq(s.ToString());
85
// Constructs a matcher that matches a StringPiece whose value is equal to s.
86
Matcher<StringPiece>::Matcher(const internal::string& s) {
90
// Constructs a matcher that matches a StringPiece whose value is equal to s.
91
Matcher<StringPiece>::Matcher(const char* s) {
92
*this = Eq(internal::string(s));
95
// Constructs a matcher that matches a StringPiece whose value is equal to s.
96
Matcher<StringPiece>::Matcher(StringPiece s) {
97
*this = Eq(s.ToString());
99
#endif // GTEST_HAS_STRING_PIECE_
103
// Joins a vector of strings as if they are fields of a tuple; returns
104
// the joined string.
105
GTEST_API_ string JoinAsTuple(const Strings& fields) {
106
switch (fields.size()) {
112
string result = "(" + fields[0];
113
for (size_t i = 1; i < fields.size(); i++) {
122
// Returns the description for a matcher defined using the MATCHER*()
123
// macro where the user-supplied description string is "", if
124
// 'negation' is false; otherwise returns the description of the
125
// negation of the matcher. 'param_values' contains a list of strings
126
// that are the print-out of the matcher's parameters.
127
GTEST_API_ string FormatMatcherDescription(bool negation,
128
const char* matcher_name,
129
const Strings& param_values) {
130
string result = ConvertIdentifierNameToWords(matcher_name);
131
if (param_values.size() >= 1)
132
result += " " + JoinAsTuple(param_values);
133
return negation ? "not (" + result + ")" : result;
136
} // namespace internal
137
} // namespace testing