// Copyright 2022 PDFium 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 "core/fpdfapi/parser/cpdf_dictionary.h"

#include <utility>

#include "core/fpdfapi/parser/cpdf_array.h"
#include "core/fpdfapi/parser/cpdf_number.h"
#include "core/fpdfapi/parser/cpdf_stream.h"
#include "testing/gtest/include/gtest/gtest.h"

TEST(DictionaryTest, Iterators) {
  auto dict = pdfium::MakeRetain<CPDF_Dictionary>();
  dict->SetNewFor<CPDF_Dictionary>("the-dictionary");
  dict->SetNewFor<CPDF_Array>("the-array");
  dict->SetNewFor<CPDF_Stream>("the-stream");
  dict->SetNewFor<CPDF_Number>("the-number", 42);

  CPDF_DictionaryLocker locked_dict(std::move(dict));
  auto it = locked_dict.begin();
  EXPECT_NE(it, locked_dict.end());
  EXPECT_EQ(it->first, ByteString("the-array"));
  EXPECT_TRUE(it->second->IsArray());

  ++it;
  EXPECT_NE(it, locked_dict.end());
  EXPECT_EQ(it->first, ByteString("the-dictionary"));
  EXPECT_TRUE(it->second->IsDictionary());

  ++it;
  EXPECT_NE(it, locked_dict.end());
  EXPECT_EQ(it->first, ByteString("the-number"));
  EXPECT_TRUE(it->second->IsNumber());

  ++it;
  EXPECT_NE(it, locked_dict.end());
  EXPECT_EQ(it->first, ByteString("the-stream"));
  EXPECT_TRUE(it->second->IsStream());

  ++it;
  EXPECT_EQ(it, locked_dict.end());
}
