github.com/jlmucb/cloudproxy@v0.0.0-20170830161738-b5aa0b619bc4/src/third_party/googlemock/test/gmock_link_test.h (about)

     1  // Copyright 2009, Google Inc.
     2  // All rights reserved.
     3  //
     4  // Redistribution and use in source and binary forms, with or without
     5  // modification, are permitted provided that the following conditions are
     6  // met:
     7  //
     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
    13  // distribution.
    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.
    17  //
    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.
    29  //
    30  // Author: vladl@google.com (Vlad Losev)
    31  
    32  // Google Mock - a framework for writing C++ mock classes.
    33  //
    34  // This file tests that:
    35  // a. A header file defining a mock class can be included in multiple
    36  //    translation units without causing a link error.
    37  // b. Actions and matchers can be instantiated with identical template
    38  //    arguments in different translation units without causing link
    39  //    errors.
    40  //    The following constructs are currently tested:
    41  //    Actions:
    42  //      Return()
    43  //      Return(value)
    44  //      ReturnNull
    45  //      ReturnRef
    46  //      Assign
    47  //      SetArgPointee
    48  //      SetArrayArgument
    49  //      SetErrnoAndReturn
    50  //      Invoke(function)
    51  //      Invoke(object, method)
    52  //      InvokeWithoutArgs(function)
    53  //      InvokeWithoutArgs(object, method)
    54  //      InvokeArgument
    55  //      WithArg
    56  //      WithArgs
    57  //      WithoutArgs
    58  //      DoAll
    59  //      DoDefault
    60  //      IgnoreResult
    61  //      Throw
    62  //      ACTION()-generated
    63  //      ACTION_P()-generated
    64  //      ACTION_P2()-generated
    65  //    Matchers:
    66  //      _
    67  //      A
    68  //      An
    69  //      Eq
    70  //      Gt, Lt, Ge, Le, Ne
    71  //      NotNull
    72  //      Ref
    73  //      TypedEq
    74  //      DoubleEq
    75  //      FloatEq
    76  //      NanSensitiveDoubleEq
    77  //      NanSensitiveFloatEq
    78  //      ContainsRegex
    79  //      MatchesRegex
    80  //      EndsWith
    81  //      HasSubstr
    82  //      StartsWith
    83  //      StrCaseEq
    84  //      StrCaseNe
    85  //      StrEq
    86  //      StrNe
    87  //      ElementsAre
    88  //      ElementsAreArray
    89  //      ContainerEq
    90  //      Field
    91  //      Property
    92  //      ResultOf(function)
    93  //      Pointee
    94  //      Truly(predicate)
    95  //      AllOf
    96  //      AnyOf
    97  //      Not
    98  //      MatcherCast<T>
    99  //
   100  //  Please note: this test does not verify the functioning of these
   101  //  constructs, only that the programs using them will link successfully.
   102  //
   103  // Implementation note:
   104  // This test requires identical definitions of Interface and Mock to be
   105  // included in different translation units.  We achieve this by writing
   106  // them in this header and #including it in gmock_link_test.cc and
   107  // gmock_link2_test.cc.  Because the symbols generated by the compiler for
   108  // those constructs must be identical in both translation units,
   109  // definitions of Interface and Mock tests MUST be kept in the SAME
   110  // NON-ANONYMOUS namespace in this file.  The test fixture class LinkTest
   111  // is defined as LinkTest1 in gmock_link_test.cc and as LinkTest2 in
   112  // gmock_link2_test.cc to avoid producing linker errors.
   113  
   114  #ifndef GMOCK_TEST_GMOCK_LINK_TEST_H_
   115  #define GMOCK_TEST_GMOCK_LINK_TEST_H_
   116  
   117  #include "gmock/gmock.h"
   118  
   119  #if !GTEST_OS_WINDOWS_MOBILE
   120  # include <errno.h>
   121  #endif
   122  
   123  #include "gmock/internal/gmock-port.h"
   124  #include "gtest/gtest.h"
   125  #include <iostream>
   126  #include <vector>
   127  
   128  using testing::_;
   129  using testing::A;
   130  using testing::AllOf;
   131  using testing::AnyOf;
   132  using testing::Assign;
   133  using testing::ContainerEq;
   134  using testing::DoAll;
   135  using testing::DoDefault;
   136  using testing::DoubleEq;
   137  using testing::ElementsAre;
   138  using testing::ElementsAreArray;
   139  using testing::EndsWith;
   140  using testing::Eq;
   141  using testing::Field;
   142  using testing::FloatEq;
   143  using testing::Ge;
   144  using testing::Gt;
   145  using testing::HasSubstr;
   146  using testing::IgnoreResult;
   147  using testing::Invoke;
   148  using testing::InvokeArgument;
   149  using testing::InvokeWithoutArgs;
   150  using testing::IsNull;
   151  using testing::Le;
   152  using testing::Lt;
   153  using testing::Matcher;
   154  using testing::MatcherCast;
   155  using testing::NanSensitiveDoubleEq;
   156  using testing::NanSensitiveFloatEq;
   157  using testing::Ne;
   158  using testing::Not;
   159  using testing::NotNull;
   160  using testing::Pointee;
   161  using testing::Property;
   162  using testing::Ref;
   163  using testing::ResultOf;
   164  using testing::Return;
   165  using testing::ReturnNull;
   166  using testing::ReturnRef;
   167  using testing::SetArgPointee;
   168  using testing::SetArrayArgument;
   169  using testing::StartsWith;
   170  using testing::StrCaseEq;
   171  using testing::StrCaseNe;
   172  using testing::StrEq;
   173  using testing::StrNe;
   174  using testing::Truly;
   175  using testing::TypedEq;
   176  using testing::WithArg;
   177  using testing::WithArgs;
   178  using testing::WithoutArgs;
   179  
   180  #if !GTEST_OS_WINDOWS_MOBILE
   181  using testing::SetErrnoAndReturn;
   182  #endif
   183  
   184  #if GTEST_HAS_EXCEPTIONS
   185  using testing::Throw;
   186  #endif
   187  
   188  using testing::ContainsRegex;
   189  using testing::MatchesRegex;
   190  
   191  class Interface {
   192   public:
   193    virtual ~Interface() {}
   194    virtual void VoidFromString(char* str) = 0;
   195    virtual char* StringFromString(char* str) = 0;
   196    virtual int IntFromString(char* str) = 0;
   197    virtual int& IntRefFromString(char* str) = 0;
   198    virtual void VoidFromFunc(void(*func)(char* str)) = 0;
   199    virtual void VoidFromIntRef(int& n) = 0;  // NOLINT
   200    virtual void VoidFromFloat(float n) = 0;
   201    virtual void VoidFromDouble(double n) = 0;
   202    virtual void VoidFromVector(const std::vector<int>& v) = 0;
   203  };
   204  
   205  class Mock: public Interface {
   206   public:
   207    Mock() {}
   208  
   209    MOCK_METHOD1(VoidFromString, void(char* str));
   210    MOCK_METHOD1(StringFromString, char*(char* str));
   211    MOCK_METHOD1(IntFromString, int(char* str));
   212    MOCK_METHOD1(IntRefFromString, int&(char* str));
   213    MOCK_METHOD1(VoidFromFunc, void(void(*func)(char* str)));
   214    MOCK_METHOD1(VoidFromIntRef, void(int& n));  // NOLINT
   215    MOCK_METHOD1(VoidFromFloat, void(float n));
   216    MOCK_METHOD1(VoidFromDouble, void(double n));
   217    MOCK_METHOD1(VoidFromVector, void(const std::vector<int>& v));
   218  
   219   private:
   220    GTEST_DISALLOW_COPY_AND_ASSIGN_(Mock);
   221  };
   222  
   223  class InvokeHelper {
   224   public:
   225    static void StaticVoidFromVoid() {}
   226    void VoidFromVoid() {}
   227    static void StaticVoidFromString(char* /* str */) {}
   228    void VoidFromString(char* /* str */) {}
   229    static int StaticIntFromString(char* /* str */) { return 1; }
   230    static bool StaticBoolFromString(const char* /* str */) { return true; }
   231  };
   232  
   233  class FieldHelper {
   234   public:
   235    explicit FieldHelper(int a_field) : field_(a_field) {}
   236    int field() const { return field_; }
   237    int field_;  // NOLINT -- need external access to field_ to test
   238                 //           the Field matcher.
   239  };
   240  
   241  // Tests the linkage of the ReturnVoid action.
   242  TEST(LinkTest, TestReturnVoid) {
   243    Mock mock;
   244  
   245    EXPECT_CALL(mock, VoidFromString(_)).WillOnce(Return());
   246    mock.VoidFromString(NULL);
   247  }
   248  
   249  // Tests the linkage of the Return action.
   250  TEST(LinkTest, TestReturn) {
   251    Mock mock;
   252    char ch = 'x';
   253  
   254    EXPECT_CALL(mock, StringFromString(_)).WillOnce(Return(&ch));
   255    mock.StringFromString(NULL);
   256  }
   257  
   258  // Tests the linkage of the ReturnNull action.
   259  TEST(LinkTest, TestReturnNull) {
   260    Mock mock;
   261  
   262    EXPECT_CALL(mock, VoidFromString(_)).WillOnce(Return());
   263    mock.VoidFromString(NULL);
   264  }
   265  
   266  // Tests the linkage of the ReturnRef action.
   267  TEST(LinkTest, TestReturnRef) {
   268    Mock mock;
   269    int n = 42;
   270  
   271    EXPECT_CALL(mock, IntRefFromString(_)).WillOnce(ReturnRef(n));
   272    mock.IntRefFromString(NULL);
   273  }
   274  
   275  // Tests the linkage of the Assign action.
   276  TEST(LinkTest, TestAssign) {
   277    Mock mock;
   278    char ch = 'x';
   279  
   280    EXPECT_CALL(mock, VoidFromString(_)).WillOnce(Assign(&ch, 'y'));
   281    mock.VoidFromString(NULL);
   282  }
   283  
   284  // Tests the linkage of the SetArgPointee action.
   285  TEST(LinkTest, TestSetArgPointee) {
   286    Mock mock;
   287    char ch = 'x';
   288  
   289    EXPECT_CALL(mock, VoidFromString(_)).WillOnce(SetArgPointee<0>('y'));
   290    mock.VoidFromString(&ch);
   291  }
   292  
   293  // Tests the linkage of the SetArrayArgument action.
   294  TEST(LinkTest, TestSetArrayArgument) {
   295    Mock mock;
   296    char ch = 'x';
   297    char ch2 = 'y';
   298  
   299    EXPECT_CALL(mock, VoidFromString(_)).WillOnce(SetArrayArgument<0>(&ch2,
   300                                                                      &ch2 + 1));
   301    mock.VoidFromString(&ch);
   302  }
   303  
   304  #if !GTEST_OS_WINDOWS_MOBILE
   305  
   306  // Tests the linkage of the SetErrnoAndReturn action.
   307  TEST(LinkTest, TestSetErrnoAndReturn) {
   308    Mock mock;
   309  
   310    int saved_errno = errno;
   311    EXPECT_CALL(mock, IntFromString(_)).WillOnce(SetErrnoAndReturn(1, -1));
   312    mock.IntFromString(NULL);
   313    errno = saved_errno;
   314  }
   315  
   316  #endif  // !GTEST_OS_WINDOWS_MOBILE
   317  
   318  // Tests the linkage of the Invoke(function) and Invoke(object, method) actions.
   319  TEST(LinkTest, TestInvoke) {
   320    Mock mock;
   321    InvokeHelper test_invoke_helper;
   322  
   323    EXPECT_CALL(mock, VoidFromString(_))
   324        .WillOnce(Invoke(&InvokeHelper::StaticVoidFromString))
   325        .WillOnce(Invoke(&test_invoke_helper, &InvokeHelper::VoidFromString));
   326    mock.VoidFromString(NULL);
   327    mock.VoidFromString(NULL);
   328  }
   329  
   330  // Tests the linkage of the InvokeWithoutArgs action.
   331  TEST(LinkTest, TestInvokeWithoutArgs) {
   332    Mock mock;
   333    InvokeHelper test_invoke_helper;
   334  
   335    EXPECT_CALL(mock, VoidFromString(_))
   336        .WillOnce(InvokeWithoutArgs(&InvokeHelper::StaticVoidFromVoid))
   337        .WillOnce(InvokeWithoutArgs(&test_invoke_helper,
   338                                    &InvokeHelper::VoidFromVoid));
   339    mock.VoidFromString(NULL);
   340    mock.VoidFromString(NULL);
   341  }
   342  
   343  // Tests the linkage of the InvokeArgument action.
   344  TEST(LinkTest, TestInvokeArgument) {
   345    Mock mock;
   346    char ch = 'x';
   347  
   348    EXPECT_CALL(mock, VoidFromFunc(_)).WillOnce(InvokeArgument<0>(&ch));
   349    mock.VoidFromFunc(InvokeHelper::StaticVoidFromString);
   350  }
   351  
   352  // Tests the linkage of the WithArg action.
   353  TEST(LinkTest, TestWithArg) {
   354    Mock mock;
   355  
   356    EXPECT_CALL(mock, VoidFromString(_))
   357        .WillOnce(WithArg<0>(Invoke(&InvokeHelper::StaticVoidFromString)));
   358    mock.VoidFromString(NULL);
   359  }
   360  
   361  // Tests the linkage of the WithArgs action.
   362  TEST(LinkTest, TestWithArgs) {
   363    Mock mock;
   364  
   365    EXPECT_CALL(mock, VoidFromString(_))
   366        .WillOnce(WithArgs<0>(Invoke(&InvokeHelper::StaticVoidFromString)));
   367    mock.VoidFromString(NULL);
   368  }
   369  
   370  // Tests the linkage of the WithoutArgs action.
   371  TEST(LinkTest, TestWithoutArgs) {
   372    Mock mock;
   373  
   374    EXPECT_CALL(mock, VoidFromString(_)).WillOnce(WithoutArgs(Return()));
   375    mock.VoidFromString(NULL);
   376  }
   377  
   378  // Tests the linkage of the DoAll action.
   379  TEST(LinkTest, TestDoAll) {
   380    Mock mock;
   381    char ch = 'x';
   382  
   383    EXPECT_CALL(mock, VoidFromString(_))
   384        .WillOnce(DoAll(SetArgPointee<0>('y'), Return()));
   385    mock.VoidFromString(&ch);
   386  }
   387  
   388  // Tests the linkage of the DoDefault action.
   389  TEST(LinkTest, TestDoDefault) {
   390    Mock mock;
   391    char ch = 'x';
   392  
   393    ON_CALL(mock, VoidFromString(_)).WillByDefault(Return());
   394    EXPECT_CALL(mock, VoidFromString(_)).WillOnce(DoDefault());
   395    mock.VoidFromString(&ch);
   396  }
   397  
   398  // Tests the linkage of the IgnoreResult action.
   399  TEST(LinkTest, TestIgnoreResult) {
   400    Mock mock;
   401  
   402    EXPECT_CALL(mock, VoidFromString(_)).WillOnce(IgnoreResult(Return(42)));
   403    mock.VoidFromString(NULL);
   404  }
   405  
   406  #if GTEST_HAS_EXCEPTIONS
   407  // Tests the linkage of the Throw action.
   408  TEST(LinkTest, TestThrow) {
   409    Mock mock;
   410  
   411    EXPECT_CALL(mock, VoidFromString(_)).WillOnce(Throw(42));
   412    EXPECT_THROW(mock.VoidFromString(NULL), int);
   413  }
   414  #endif  // GTEST_HAS_EXCEPTIONS
   415  
   416  // The ACTION*() macros trigger warning C4100 (unreferenced formal
   417  // parameter) in MSVC with -W4.  Unfortunately they cannot be fixed in
   418  // the macro definition, as the warnings are generated when the macro
   419  // is expanded and macro expansion cannot contain #pragma.  Therefore
   420  // we suppress them here.
   421  #ifdef _MSC_VER
   422  # pragma warning(push)
   423  # pragma warning(disable:4100)
   424  #endif
   425  
   426  // Tests the linkage of actions created using ACTION macro.
   427  namespace {
   428  ACTION(Return1) { return 1; }
   429  }
   430  
   431  TEST(LinkTest, TestActionMacro) {
   432    Mock mock;
   433  
   434    EXPECT_CALL(mock, IntFromString(_)).WillOnce(Return1());
   435    mock.IntFromString(NULL);
   436  }
   437  
   438  // Tests the linkage of actions created using ACTION_P macro.
   439  namespace {
   440  ACTION_P(ReturnArgument, ret_value) { return ret_value; }
   441  }
   442  
   443  TEST(LinkTest, TestActionPMacro) {
   444    Mock mock;
   445  
   446    EXPECT_CALL(mock, IntFromString(_)).WillOnce(ReturnArgument(42));
   447    mock.IntFromString(NULL);
   448  }
   449  
   450  // Tests the linkage of actions created using ACTION_P2 macro.
   451  namespace {
   452  ACTION_P2(ReturnEqualsEitherOf, first, second) {
   453    return arg0 == first || arg0 == second;
   454  }
   455  }
   456  
   457  #ifdef _MSC_VER
   458  # pragma warning(pop)
   459  #endif
   460  
   461  TEST(LinkTest, TestActionP2Macro) {
   462    Mock mock;
   463    char ch = 'x';
   464  
   465    EXPECT_CALL(mock, IntFromString(_))
   466        .WillOnce(ReturnEqualsEitherOf("one", "two"));
   467    mock.IntFromString(&ch);
   468  }
   469  
   470  // Tests the linkage of the "_" matcher.
   471  TEST(LinkTest, TestMatcherAnything) {
   472    Mock mock;
   473  
   474    ON_CALL(mock, VoidFromString(_)).WillByDefault(Return());
   475  }
   476  
   477  // Tests the linkage of the A matcher.
   478  TEST(LinkTest, TestMatcherA) {
   479    Mock mock;
   480  
   481    ON_CALL(mock, VoidFromString(A<char*>())).WillByDefault(Return());
   482  }
   483  
   484  // Tests the linkage of the Eq and the "bare value" matcher.
   485  TEST(LinkTest, TestMatchersEq) {
   486    Mock mock;
   487    const char* p = "x";
   488  
   489    ON_CALL(mock, VoidFromString(Eq(p))).WillByDefault(Return());
   490    ON_CALL(mock, VoidFromString(const_cast<char*>("y")))
   491        .WillByDefault(Return());
   492  }
   493  
   494  // Tests the linkage of the Lt, Gt, Le, Ge, and Ne matchers.
   495  TEST(LinkTest, TestMatchersRelations) {
   496    Mock mock;
   497  
   498    ON_CALL(mock, VoidFromFloat(Lt(1.0f))).WillByDefault(Return());
   499    ON_CALL(mock, VoidFromFloat(Gt(1.0f))).WillByDefault(Return());
   500    ON_CALL(mock, VoidFromFloat(Le(1.0f))).WillByDefault(Return());
   501    ON_CALL(mock, VoidFromFloat(Ge(1.0f))).WillByDefault(Return());
   502    ON_CALL(mock, VoidFromFloat(Ne(1.0f))).WillByDefault(Return());
   503  }
   504  
   505  // Tests the linkage of the NotNull matcher.
   506  TEST(LinkTest, TestMatcherNotNull) {
   507    Mock mock;
   508  
   509    ON_CALL(mock, VoidFromString(NotNull())).WillByDefault(Return());
   510  }
   511  
   512  // Tests the linkage of the IsNull matcher.
   513  TEST(LinkTest, TestMatcherIsNull) {
   514    Mock mock;
   515  
   516    ON_CALL(mock, VoidFromString(IsNull())).WillByDefault(Return());
   517  }
   518  
   519  // Tests the linkage of the Ref matcher.
   520  TEST(LinkTest, TestMatcherRef) {
   521    Mock mock;
   522    int a = 0;
   523  
   524    ON_CALL(mock, VoidFromIntRef(Ref(a))).WillByDefault(Return());
   525  }
   526  
   527  // Tests the linkage of the TypedEq matcher.
   528  TEST(LinkTest, TestMatcherTypedEq) {
   529    Mock mock;
   530    long a = 0;
   531  
   532    ON_CALL(mock, VoidFromIntRef(TypedEq<int&>(a))).WillByDefault(Return());
   533  }
   534  
   535  // Tests the linkage of the FloatEq, DoubleEq, NanSensitiveFloatEq and
   536  // NanSensitiveDoubleEq matchers.
   537  TEST(LinkTest, TestMatchersFloatingPoint) {
   538    Mock mock;
   539    float a = 0;
   540  
   541    ON_CALL(mock, VoidFromFloat(FloatEq(a))).WillByDefault(Return());
   542    ON_CALL(mock, VoidFromDouble(DoubleEq(a))).WillByDefault(Return());
   543    ON_CALL(mock, VoidFromFloat(NanSensitiveFloatEq(a))).WillByDefault(Return());
   544    ON_CALL(mock, VoidFromDouble(NanSensitiveDoubleEq(a)))
   545        .WillByDefault(Return());
   546  }
   547  
   548  // Tests the linkage of the ContainsRegex matcher.
   549  TEST(LinkTest, TestMatcherContainsRegex) {
   550    Mock mock;
   551  
   552    ON_CALL(mock, VoidFromString(ContainsRegex(".*"))).WillByDefault(Return());
   553  }
   554  
   555  // Tests the linkage of the MatchesRegex matcher.
   556  TEST(LinkTest, TestMatcherMatchesRegex) {
   557    Mock mock;
   558  
   559    ON_CALL(mock, VoidFromString(MatchesRegex(".*"))).WillByDefault(Return());
   560  }
   561  
   562  // Tests the linkage of the StartsWith, EndsWith, and HasSubstr matchers.
   563  TEST(LinkTest, TestMatchersSubstrings) {
   564    Mock mock;
   565  
   566    ON_CALL(mock, VoidFromString(StartsWith("a"))).WillByDefault(Return());
   567    ON_CALL(mock, VoidFromString(EndsWith("c"))).WillByDefault(Return());
   568    ON_CALL(mock, VoidFromString(HasSubstr("b"))).WillByDefault(Return());
   569  }
   570  
   571  // Tests the linkage of the StrEq, StrNe, StrCaseEq, and StrCaseNe matchers.
   572  TEST(LinkTest, TestMatchersStringEquality) {
   573    Mock mock;
   574    ON_CALL(mock, VoidFromString(StrEq("a"))).WillByDefault(Return());
   575    ON_CALL(mock, VoidFromString(StrNe("a"))).WillByDefault(Return());
   576    ON_CALL(mock, VoidFromString(StrCaseEq("a"))).WillByDefault(Return());
   577    ON_CALL(mock, VoidFromString(StrCaseNe("a"))).WillByDefault(Return());
   578  }
   579  
   580  // Tests the linkage of the ElementsAre matcher.
   581  TEST(LinkTest, TestMatcherElementsAre) {
   582    Mock mock;
   583  
   584    ON_CALL(mock, VoidFromVector(ElementsAre('a', _))).WillByDefault(Return());
   585  }
   586  
   587  // Tests the linkage of the ElementsAreArray matcher.
   588  TEST(LinkTest, TestMatcherElementsAreArray) {
   589    Mock mock;
   590    char arr[] = { 'a', 'b' };
   591  
   592    ON_CALL(mock, VoidFromVector(ElementsAreArray(arr))).WillByDefault(Return());
   593  }
   594  
   595  // Tests the linkage of the ContainerEq matcher.
   596  TEST(LinkTest, TestMatcherContainerEq) {
   597    Mock mock;
   598    std::vector<int> v;
   599  
   600    ON_CALL(mock, VoidFromVector(ContainerEq(v))).WillByDefault(Return());
   601  }
   602  
   603  // Tests the linkage of the Field matcher.
   604  TEST(LinkTest, TestMatcherField) {
   605    FieldHelper helper(0);
   606  
   607    Matcher<const FieldHelper&> m = Field(&FieldHelper::field_, Eq(0));
   608    EXPECT_TRUE(m.Matches(helper));
   609  
   610    Matcher<const FieldHelper*> m2 = Field(&FieldHelper::field_, Eq(0));
   611    EXPECT_TRUE(m2.Matches(&helper));
   612  }
   613  
   614  // Tests the linkage of the Property matcher.
   615  TEST(LinkTest, TestMatcherProperty) {
   616    FieldHelper helper(0);
   617  
   618    Matcher<const FieldHelper&> m = Property(&FieldHelper::field, Eq(0));
   619    EXPECT_TRUE(m.Matches(helper));
   620  
   621    Matcher<const FieldHelper*> m2 = Property(&FieldHelper::field, Eq(0));
   622    EXPECT_TRUE(m2.Matches(&helper));
   623  }
   624  
   625  // Tests the linkage of the ResultOf matcher.
   626  TEST(LinkTest, TestMatcherResultOf) {
   627    Matcher<char*> m = ResultOf(&InvokeHelper::StaticIntFromString, Eq(1));
   628    EXPECT_TRUE(m.Matches(NULL));
   629  }
   630  
   631  // Tests the linkage of the ResultOf matcher.
   632  TEST(LinkTest, TestMatcherPointee) {
   633    int n = 1;
   634  
   635    Matcher<int*> m = Pointee(Eq(1));
   636    EXPECT_TRUE(m.Matches(&n));
   637  }
   638  
   639  // Tests the linkage of the Truly matcher.
   640  TEST(LinkTest, TestMatcherTruly) {
   641    Matcher<const char*> m = Truly(&InvokeHelper::StaticBoolFromString);
   642    EXPECT_TRUE(m.Matches(NULL));
   643  }
   644  
   645  // Tests the linkage of the AllOf matcher.
   646  TEST(LinkTest, TestMatcherAllOf) {
   647    Matcher<int> m = AllOf(_, Eq(1));
   648    EXPECT_TRUE(m.Matches(1));
   649  }
   650  
   651  // Tests the linkage of the AnyOf matcher.
   652  TEST(LinkTest, TestMatcherAnyOf) {
   653    Matcher<int> m = AnyOf(_, Eq(1));
   654    EXPECT_TRUE(m.Matches(1));
   655  }
   656  
   657  // Tests the linkage of the Not matcher.
   658  TEST(LinkTest, TestMatcherNot) {
   659    Matcher<int> m = Not(_);
   660    EXPECT_FALSE(m.Matches(1));
   661  }
   662  
   663  // Tests the linkage of the MatcherCast<T>() function.
   664  TEST(LinkTest, TestMatcherCast) {
   665    Matcher<const char*> m = MatcherCast<const char*>(_);
   666    EXPECT_TRUE(m.Matches(NULL));
   667  }
   668  
   669  #endif  // GMOCK_TEST_GMOCK_LINK_TEST_H_