// Copyright 2019 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #include "integration/googletest/emboss_test_util.h" #include "gmock/gmock.h" #include "gtest/gtest.h" #include "testdata/complex_structure.emb.h" namespace emboss { namespace test { namespace { class EmbossTestUtilTest : public ::testing::Test { protected: EmbossTestUtilTest() { b_.s().Write(1); } ::std::array buf_a_{}; ::emboss_test::ComplexWriter a_{&buf_a_}; ::std::array buf_b_{}; ::emboss_test::ComplexWriter b_{&buf_b_}; }; TEST_F(EmbossTestUtilTest, EqualsEmb) { EXPECT_THAT(a_, EqualsEmb(a_)); EXPECT_THAT(b_, EqualsEmb(b_)); EXPECT_THAT(a_, ::testing::Not(EqualsEmb(b_))); EXPECT_THAT(b_, ::testing::Not(EqualsEmb(a_))); } TEST_F(EmbossTestUtilTest, NotOkView) { auto null_view = ::emboss_test::ComplexView(nullptr); EXPECT_THAT(a_, ::testing::Not(EqualsEmb(null_view))); EXPECT_THAT(b_, ::testing::Not(EqualsEmb(null_view))); EXPECT_THAT(null_view, ::testing::Not(EqualsEmb(null_view))); EXPECT_THAT(null_view, ::testing::Not(EqualsEmb(a_))); EXPECT_THAT(null_view, ::testing::Not(EqualsEmb(b_))); } TEST_F(EmbossTestUtilTest, NotOkViewMatcherDescribe) { auto null_view = ::emboss_test::ComplexView(nullptr); ::testing::StringMatchResultListener listener; EqualsEmb(a_).impl().MatchAndExplain(null_view, &listener); EXPECT_EQ(listener.str(), "View for comparison from is not OK."); listener.Clear(); EqualsEmb(null_view).impl().MatchAndExplain(a_, &listener); EXPECT_EQ(listener.str(), "View for comparison to is not OK."); } TEST_F(EmbossTestUtilTest, MatcherDescribeEquivalent) { ::std::stringstream ss; EqualsEmb(a_).impl().DescribeTo(&ss); EXPECT_EQ(ss.str(), "are equal"); } TEST_F(EmbossTestUtilTest, MatcherDescribeNotEquivalent) { ::std::stringstream ss; EqualsEmb(a_).impl().DescribeNegationTo(&ss); EXPECT_EQ(ss.str(), "are NOT equal"); } TEST_F(EmbossTestUtilTest, MatcherExplainEquivalent) { ::testing::StringMatchResultListener listener; EqualsEmb(a_).impl().MatchAndExplain(a_, &listener); EXPECT_EQ(listener.str(), ""); EqualsEmb(b_).impl().MatchAndExplain(b_, &listener); EXPECT_EQ(listener.str(), ""); } TEST_F(EmbossTestUtilTest, MatcherExplainNotEquivalent) { ::testing::StringMatchResultListener listener; EqualsEmb(a_).impl().MatchAndExplain(b_, &listener); EXPECT_EQ(listener.str(), R"( @@ -1,3 +1,3 @@ - s: 0 # 0x0 + s: 1 # 0x1 u: 0 # 0x0 i: 0 # 0x0 @@ +4,34 @@ b: 0 # 0x0 a: { + [0]: { + [0]: { + a: { + x: 0 # 0x0 + l: 0 # 0x0 + h: 0 # 0x0 + } + } + [1]: { + a: { + x: 0 # 0x0 + l: 0 # 0x0 + h: 0 # 0x0 + } + } + [2]: { + a: { + x: 0 # 0x0 + l: 0 # 0x0 + h: 0 # 0x0 + } + } + [3]: { + a: { + x: 0 # 0x0 + l: 0 # 0x0 + h: 0 # 0x0 + } + } + } } a0: 0 # 0x0 )"); } } // namespace } // namespace test } // namespace emboss