14d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Copyright 2016 PDFium Authors. All rights reserved. 24d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Use of this source code is governed by a BSD-style license that can be 34d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// found in the LICENSE file. 44d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 54d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfapi/parser/cpdf_dictionary.h" 64d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfapi/parser/cpdf_indirect_object_holder.h" 74d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfapi/parser/cpdf_name.h" 84d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfapi/parser/cpdf_reference.h" 94d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfdoc/cpdf_formfield.h" 104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "testing/gtest/include/gtest/gtest.h" 114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannTEST(cpdf_formfield, FPDF_GetFullName) { 13d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann WideString name = FPDF_GetFullName(nullptr); 144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann EXPECT_TRUE(name.IsEmpty()); 154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_IndirectObjectHolder obj_holder; 174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Dictionary* root = obj_holder.NewIndirect<CPDF_Dictionary>(); 184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann root->SetNewFor<CPDF_Name>("T", "foo"); 194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann name = FPDF_GetFullName(root); 204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann EXPECT_STREQ("foo", name.UTF8Encode().c_str()); 214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Dictionary* dict1 = obj_holder.NewIndirect<CPDF_Dictionary>(); 234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann root->SetNewFor<CPDF_Reference>("Parent", &obj_holder, dict1->GetObjNum()); 244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann dict1->SetNewFor<CPDF_Name>("T", "bar"); 254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann name = FPDF_GetFullName(root); 264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann EXPECT_STREQ("bar.foo", name.UTF8Encode().c_str()); 274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Dictionary* dict2 = dict1->SetNewFor<CPDF_Dictionary>("Parent"); 294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann name = FPDF_GetFullName(root); 304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann EXPECT_STREQ("bar.foo", name.UTF8Encode().c_str()); 314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Dictionary* dict3 = obj_holder.NewIndirect<CPDF_Dictionary>(); 334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann dict2->SetNewFor<CPDF_Reference>("Parent", &obj_holder, dict3->GetObjNum()); 344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann dict3->SetNewFor<CPDF_Name>("T", "qux"); 364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann name = FPDF_GetFullName(root); 374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann EXPECT_STREQ("qux.bar.foo", name.UTF8Encode().c_str()); 384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann dict3->SetNewFor<CPDF_Reference>("Parent", &obj_holder, root->GetObjNum()); 404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann name = FPDF_GetFullName(root); 414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann EXPECT_STREQ("qux.bar.foo", name.UTF8Encode().c_str()); 424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann name = FPDF_GetFullName(dict1); 434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann EXPECT_STREQ("foo.qux.bar", name.UTF8Encode().c_str()); 444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann name = FPDF_GetFullName(dict2); 454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann EXPECT_STREQ("bar.foo.qux", name.UTF8Encode().c_str()); 464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann name = FPDF_GetFullName(dict3); 474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann EXPECT_STREQ("bar.foo.qux", name.UTF8Encode().c_str()); 484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 49