blob: 3468a2c92afbe9007cafc42325de87fd0b4e55e8 [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "gtest/gtest.h"
#include "mojo/public/interfaces/bindings/tests/test_structs.mojom.h"
namespace mojo {
namespace test {
namespace {
RectPtr CreateRect() {
RectPtr r = Rect::New();
r->x = 1;
r->y = 2;
r->width = 3;
r->height = 4;
return r;
}
} // namespace
TEST(EqualsTest, Null) {
RectPtr r1;
RectPtr r2;
EXPECT_TRUE(r1.Equals(r2));
EXPECT_TRUE(r2.Equals(r1));
r1 = CreateRect();
EXPECT_FALSE(r1.Equals(r2));
EXPECT_FALSE(r2.Equals(r1));
}
TEST(EqualsTest, EqualsStruct) {
RectPtr r1(CreateRect());
RectPtr r2(r1.Clone());
EXPECT_TRUE(r1.Equals(r2));
r2->y = 1;
EXPECT_FALSE(r1.Equals(r2));
r2.reset();
EXPECT_FALSE(r1.Equals(r2));
}
TEST(EqualsTest, EqualsStructNested) {
RectPairPtr p1(RectPair::New());
p1->first = CreateRect();
p1->second = CreateRect();
RectPairPtr p2(p1.Clone());
EXPECT_TRUE(p1.Equals(p2));
p2->second->width = 0;
EXPECT_FALSE(p1.Equals(p2));
p2->second.reset();
EXPECT_FALSE(p1.Equals(p2));
}
TEST(EqualsTest, EqualsArray) {
NamedRegionPtr n1(NamedRegion::New());
n1->name = "n1";
n1->rects.push_back(CreateRect());
NamedRegionPtr n2(n1.Clone());
EXPECT_TRUE(n1.Equals(n2));
n2->rects.reset();
EXPECT_FALSE(n1.Equals(n2));
n2->rects.resize(0);
EXPECT_FALSE(n1.Equals(n2));
n2->rects.push_back(CreateRect());
n2->rects.push_back(CreateRect());
EXPECT_FALSE(n1.Equals(n2));
n2->rects.resize(1);
n2->rects[0]->width = 0;
EXPECT_FALSE(n1.Equals(n2));
n2->rects[0] = CreateRect();
EXPECT_TRUE(n1.Equals(n2));
}
TEST(EqualsTest, EqualsMap) {
auto n1(NamedRegion::New());
n1->name = "foo";
n1->rects.push_back(CreateRect());
Map<std::string, NamedRegionPtr> m1;
m1.insert("foo", n1.Pass());
decltype(m1) m2;
EXPECT_FALSE(m1.Equals(m2));
m2.insert("bar", m1.at("foo").Clone());
EXPECT_FALSE(m1.Equals(m2));
m2 = m1.Clone();
m2.at("foo")->name = "monkey";
EXPECT_FALSE(m1.Equals(m2));
m2 = m1.Clone();
m2.at("foo")->rects.push_back(Rect::New());
EXPECT_FALSE(m1.Equals(m2));
m2.at("foo")->rects.resize(1);
m2.at("foo")->rects[0]->width = 1;
EXPECT_FALSE(m1.Equals(m2));
m2 = m1.Clone();
EXPECT_TRUE(m1.Equals(m2));
}
} // test
} // mojo