// Copyright 2016 The PDFium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "core/fpdfdoc/cpdf_dest.h" #include #include "core/fpdfapi/parser/cpdf_array.h" #include "core/fpdfapi/parser/cpdf_name.h" #include "core/fpdfapi/parser/cpdf_null.h" #include "core/fpdfapi/parser/cpdf_number.h" #include "testing/gtest/include/gtest/gtest.h" TEST(CPDFDestTest, GetXYZ) { bool hasX; bool hasY; bool hasZoom; float x; float y; float zoom; // |array| must outlive |dest|. auto array = pdfium::MakeRetain(); array->AppendNew(0); // Page Index. array->AppendNew("XYZ"); array->AppendNew(4); // X { CPDF_Dest dest(nullptr); EXPECT_FALSE(dest.GetXYZ(&hasX, &hasY, &hasZoom, &x, &y, &zoom)); } { // Not enough entries. CPDF_Dest dest(array); EXPECT_FALSE(dest.GetXYZ(&hasX, &hasY, &hasZoom, &x, &y, &zoom)); } array->AppendNew(5); // Y array->AppendNew(6); // Zoom. { CPDF_Dest dest(array); EXPECT_TRUE(dest.GetXYZ(&hasX, &hasY, &hasZoom, &x, &y, &zoom)); EXPECT_TRUE(hasX); EXPECT_TRUE(hasY); EXPECT_TRUE(hasZoom); EXPECT_EQ(4, x); EXPECT_EQ(5, y); EXPECT_EQ(6, zoom); } // Set zoom to 0. array->SetNewAt(4, 0); { CPDF_Dest dest(array); EXPECT_TRUE(dest.GetXYZ(&hasX, &hasY, &hasZoom, &x, &y, &zoom)); EXPECT_FALSE(hasZoom); } // Set values to null. array->SetNewAt(2); array->SetNewAt(3); array->SetNewAt(4); { CPDF_Dest dest(array); EXPECT_TRUE(dest.GetXYZ(&hasX, &hasY, &hasZoom, &x, &y, &zoom)); EXPECT_FALSE(hasX); EXPECT_FALSE(hasY); EXPECT_FALSE(hasZoom); } }