621
628
EXPECT_EQ("qux", proto_array_.Get(0));
631
// -----------------------------------------------------------------------------
632
// Unit-tests for the insert iterators
633
// google::protobuf::RepeatedFieldBackInserter,
634
// google::protobuf::AllocatedRepeatedPtrFieldBackInserter
635
// Ported from util/gtl/proto-array-iterators_unittest.
637
class RepeatedFieldInsertionIteratorsTest : public testing::Test {
639
std::list<double> halves;
640
std::list<int> fibonacci;
641
std::vector<string> words;
642
typedef TestAllTypes::NestedMessage Nested;
644
std::vector<Nested*> nested_ptrs;
645
TestAllTypes protobuffer;
647
virtual void SetUp() {
648
fibonacci.push_back(1);
649
fibonacci.push_back(1);
650
fibonacci.push_back(2);
651
fibonacci.push_back(3);
652
fibonacci.push_back(5);
653
fibonacci.push_back(8);
654
std::copy(fibonacci.begin(), fibonacci.end(),
655
RepeatedFieldBackInserter(protobuffer.mutable_repeated_int32()));
657
halves.push_back(1.0);
658
halves.push_back(0.5);
659
halves.push_back(0.25);
660
halves.push_back(0.125);
661
halves.push_back(0.0625);
662
std::copy(halves.begin(), halves.end(),
663
RepeatedFieldBackInserter(protobuffer.mutable_repeated_double()));
665
words.push_back("Able");
666
words.push_back("was");
667
words.push_back("I");
668
words.push_back("ere");
669
words.push_back("I");
670
words.push_back("saw");
671
words.push_back("Elba");
672
std::copy(words.begin(), words.end(),
673
RepeatedFieldBackInserter(protobuffer.mutable_repeated_string()));
675
nesteds[0].set_bb(17);
676
nesteds[1].set_bb(4711);
677
std::copy(&nesteds[0], &nesteds[2],
678
RepeatedFieldBackInserter(
679
protobuffer.mutable_repeated_nested_message()));
681
nested_ptrs.push_back(new Nested);
682
nested_ptrs.back()->set_bb(170);
683
nested_ptrs.push_back(new Nested);
684
nested_ptrs.back()->set_bb(47110);
685
std::copy(nested_ptrs.begin(), nested_ptrs.end(),
686
RepeatedFieldBackInserter(
687
protobuffer.mutable_repeated_nested_message()));
691
virtual void TearDown() {
692
STLDeleteContainerPointers(nested_ptrs.begin(), nested_ptrs.end());
696
TEST_F(RepeatedFieldInsertionIteratorsTest, Fibonacci) {
697
EXPECT_TRUE(std::equal(fibonacci.begin(),
699
protobuffer.repeated_int32().begin()));
700
EXPECT_TRUE(std::equal(protobuffer.repeated_int32().begin(),
701
protobuffer.repeated_int32().end(),
705
TEST_F(RepeatedFieldInsertionIteratorsTest, Halves) {
706
EXPECT_TRUE(std::equal(halves.begin(),
708
protobuffer.repeated_double().begin()));
709
EXPECT_TRUE(std::equal(protobuffer.repeated_double().begin(),
710
protobuffer.repeated_double().end(),
714
TEST_F(RepeatedFieldInsertionIteratorsTest, Words) {
715
ASSERT_EQ(words.size(), protobuffer.repeated_string_size());
716
EXPECT_EQ(words.at(0), protobuffer.repeated_string(0));
717
EXPECT_EQ(words.at(1), protobuffer.repeated_string(1));
718
EXPECT_EQ(words.at(2), protobuffer.repeated_string(2));
719
EXPECT_EQ(words.at(3), protobuffer.repeated_string(3));
720
EXPECT_EQ(words.at(4), protobuffer.repeated_string(4));
721
EXPECT_EQ(words.at(5), protobuffer.repeated_string(5));
722
EXPECT_EQ(words.at(6), protobuffer.repeated_string(6));
725
TEST_F(RepeatedFieldInsertionIteratorsTest, Nesteds) {
726
ASSERT_EQ(protobuffer.repeated_nested_message_size(), 4);
727
EXPECT_EQ(protobuffer.repeated_nested_message(0).bb(), 17);
728
EXPECT_EQ(protobuffer.repeated_nested_message(1).bb(), 4711);
729
EXPECT_EQ(protobuffer.repeated_nested_message(2).bb(), 170);
730
EXPECT_EQ(protobuffer.repeated_nested_message(3).bb(), 47110);
733
TEST_F(RepeatedFieldInsertionIteratorsTest,
734
AllocatedRepeatedPtrFieldWithStringIntData) {
735
vector<Nested*> data;
736
TestAllTypes goldenproto;
737
for (int i = 0; i < 10; ++i) {
738
Nested* new_data = new Nested;
740
data.push_back(new_data);
742
new_data = goldenproto.add_repeated_nested_message();
745
TestAllTypes testproto;
746
copy(data.begin(), data.end(),
747
AllocatedRepeatedPtrFieldBackInserter(
748
testproto.mutable_repeated_nested_message()));
749
EXPECT_EQ(testproto.DebugString(), goldenproto.DebugString());
752
TEST_F(RepeatedFieldInsertionIteratorsTest,
753
AllocatedRepeatedPtrFieldWithString) {
754
vector<string*> data;
755
TestAllTypes goldenproto;
756
for (int i = 0; i < 10; ++i) {
757
string* new_data = new string;
758
*new_data = "name-" + SimpleItoa(i);
759
data.push_back(new_data);
761
new_data = goldenproto.add_repeated_string();
762
*new_data = "name-" + SimpleItoa(i);
764
TestAllTypes testproto;
765
copy(data.begin(), data.end(),
766
AllocatedRepeatedPtrFieldBackInserter(
767
testproto.mutable_repeated_string()));
768
EXPECT_EQ(testproto.DebugString(), goldenproto.DebugString());
624
773
} // namespace protobuf
625
774
} // namespace google