blob: 4e886a6c30dee904385751e23bcd941b94689f76 [file] [log] [blame]
// 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 "public/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</**/ ::std::uint8_t, 64> buf_a_{};
::emboss_test::ComplexWriter a_{&buf_a_};
::std::array<char, 64> 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