1 // Copyright 2022 The PDFium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "core/fpdfapi/parser/cpdf_dictionary.h"
6
7 #include <utility>
8
9 #include "core/fpdfapi/parser/cpdf_array.h"
10 #include "core/fpdfapi/parser/cpdf_number.h"
11 #include "core/fpdfapi/parser/cpdf_stream.h"
12 #include "testing/gtest/include/gtest/gtest.h"
13
TEST(DictionaryTest,Iterators)14 TEST(DictionaryTest, Iterators) {
15 auto dict = pdfium::MakeRetain<CPDF_Dictionary>();
16 dict->SetNewFor<CPDF_Dictionary>("the-dictionary");
17 dict->SetNewFor<CPDF_Array>("the-array");
18 dict->SetNewFor<CPDF_Stream>("the-stream");
19 dict->SetNewFor<CPDF_Number>("the-number", 42);
20
21 CPDF_DictionaryLocker locked_dict(dict);
22 auto it = locked_dict.begin();
23 EXPECT_NE(it, locked_dict.end());
24 EXPECT_EQ(it->first, ByteString("the-array"));
25 EXPECT_TRUE(it->second->IsArray());
26
27 ++it;
28 EXPECT_NE(it, locked_dict.end());
29 EXPECT_EQ(it->first, ByteString("the-dictionary"));
30 EXPECT_TRUE(it->second->IsDictionary());
31
32 ++it;
33 EXPECT_NE(it, locked_dict.end());
34 EXPECT_EQ(it->first, ByteString("the-number"));
35 EXPECT_TRUE(it->second->IsNumber());
36
37 ++it;
38 EXPECT_NE(it, locked_dict.end());
39 EXPECT_EQ(it->first, ByteString("the-stream"));
40 EXPECT_TRUE(it->second->IsStream());
41
42 ++it;
43 EXPECT_EQ(it, locked_dict.end());
44 }
45