github.com/jlmucb/cloudproxy@v0.0.0-20170830161738-b5aa0b619bc4/src/third_party/googlemock/test/gmock-generated-internal-utils_test.cc (about)

     1  // Copyright 2007, 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: wan@google.com (Zhanyong Wan)
    31  
    32  // Google Mock - a framework for writing C++ mock classes.
    33  //
    34  // This file tests the internal utilities.
    35  
    36  #include "gmock/internal/gmock-generated-internal-utils.h"
    37  #include "gmock/internal/gmock-internal-utils.h"
    38  #include "gtest/gtest.h"
    39  
    40  namespace {
    41  
    42  using ::std::tr1::tuple;
    43  using ::testing::Matcher;
    44  using ::testing::internal::CompileAssertTypesEqual;
    45  using ::testing::internal::MatcherTuple;
    46  using ::testing::internal::Function;
    47  using ::testing::internal::IgnoredValue;
    48  
    49  // Tests the MatcherTuple template struct.
    50  
    51  TEST(MatcherTupleTest, ForSize0) {
    52    CompileAssertTypesEqual<tuple<>, MatcherTuple<tuple<> >::type>();
    53  }
    54  
    55  TEST(MatcherTupleTest, ForSize1) {
    56    CompileAssertTypesEqual<tuple<Matcher<int> >,
    57                            MatcherTuple<tuple<int> >::type>();
    58  }
    59  
    60  TEST(MatcherTupleTest, ForSize2) {
    61    CompileAssertTypesEqual<tuple<Matcher<int>, Matcher<char> >,
    62                            MatcherTuple<tuple<int, char> >::type>();
    63  }
    64  
    65  TEST(MatcherTupleTest, ForSize5) {
    66    CompileAssertTypesEqual<tuple<Matcher<int>, Matcher<char>, Matcher<bool>,
    67                                  Matcher<double>, Matcher<char*> >,
    68                            MatcherTuple<tuple<int, char, bool, double, char*>
    69                                        >::type>();
    70  }
    71  
    72  // Tests the Function template struct.
    73  
    74  TEST(FunctionTest, Nullary) {
    75    typedef Function<int()> F;  // NOLINT
    76    CompileAssertTypesEqual<int, F::Result>();
    77    CompileAssertTypesEqual<tuple<>, F::ArgumentTuple>();
    78    CompileAssertTypesEqual<tuple<>, F::ArgumentMatcherTuple>();
    79    CompileAssertTypesEqual<void(), F::MakeResultVoid>();
    80    CompileAssertTypesEqual<IgnoredValue(), F::MakeResultIgnoredValue>();
    81  }
    82  
    83  TEST(FunctionTest, Unary) {
    84    typedef Function<int(bool)> F;  // NOLINT
    85    CompileAssertTypesEqual<int, F::Result>();
    86    CompileAssertTypesEqual<bool, F::Argument1>();
    87    CompileAssertTypesEqual<tuple<bool>, F::ArgumentTuple>();
    88    CompileAssertTypesEqual<tuple<Matcher<bool> >, F::ArgumentMatcherTuple>();
    89    CompileAssertTypesEqual<void(bool), F::MakeResultVoid>();  // NOLINT
    90    CompileAssertTypesEqual<IgnoredValue(bool),  // NOLINT
    91        F::MakeResultIgnoredValue>();
    92  }
    93  
    94  TEST(FunctionTest, Binary) {
    95    typedef Function<int(bool, const long&)> F;  // NOLINT
    96    CompileAssertTypesEqual<int, F::Result>();
    97    CompileAssertTypesEqual<bool, F::Argument1>();
    98    CompileAssertTypesEqual<const long&, F::Argument2>();  // NOLINT
    99    CompileAssertTypesEqual<tuple<bool, const long&>, F::ArgumentTuple>();  // NOLINT
   100    CompileAssertTypesEqual<tuple<Matcher<bool>, Matcher<const long&> >,  // NOLINT
   101                            F::ArgumentMatcherTuple>();
   102    CompileAssertTypesEqual<void(bool, const long&), F::MakeResultVoid>();  // NOLINT
   103    CompileAssertTypesEqual<IgnoredValue(bool, const long&),  // NOLINT
   104        F::MakeResultIgnoredValue>();
   105  }
   106  
   107  TEST(FunctionTest, LongArgumentList) {
   108    typedef Function<char(bool, int, char*, int&, const long&)> F;  // NOLINT
   109    CompileAssertTypesEqual<char, F::Result>();
   110    CompileAssertTypesEqual<bool, F::Argument1>();
   111    CompileAssertTypesEqual<int, F::Argument2>();
   112    CompileAssertTypesEqual<char*, F::Argument3>();
   113    CompileAssertTypesEqual<int&, F::Argument4>();
   114    CompileAssertTypesEqual<const long&, F::Argument5>();  // NOLINT
   115    CompileAssertTypesEqual<tuple<bool, int, char*, int&, const long&>,  // NOLINT
   116                            F::ArgumentTuple>();
   117    CompileAssertTypesEqual<tuple<Matcher<bool>, Matcher<int>, Matcher<char*>,
   118                                  Matcher<int&>, Matcher<const long&> >,  // NOLINT
   119                            F::ArgumentMatcherTuple>();
   120    CompileAssertTypesEqual<void(bool, int, char*, int&, const long&),  // NOLINT
   121                            F::MakeResultVoid>();
   122    CompileAssertTypesEqual<
   123        IgnoredValue(bool, int, char*, int&, const long&),  // NOLINT
   124        F::MakeResultIgnoredValue>();
   125  }
   126  
   127  }  // Unnamed namespace