blob: c7012655aa3412e7f1d1af1472b0df4d032715c3 [file] [log] [blame]
// Copyright 2021 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/fxge/win32/cfx_psrenderer.h"
#include "core/fxcrt/bytestring.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
#include "third_party/base/span.h"
TEST(PSRendererTest, GenerateType42SfntData) {
absl::optional<ByteString> result;
result = CFX_PSRenderer::GenerateType42SfntDataForTesting("empty", {});
EXPECT_FALSE(result.has_value());
constexpr uint8_t kOddByteCountTestData[] = {0, 32, 55};
static constexpr char kExpectedOddByteCountResult[] = R"(/odd_sfnts [
<
002037
>
] def
)";
result = CFX_PSRenderer::GenerateType42SfntDataForTesting(
"odd", kOddByteCountTestData);
ASSERT_TRUE(result.has_value());
EXPECT_STREQ(kExpectedOddByteCountResult, result.value().c_str());
// Requires padding.
constexpr uint8_t kEvenByteCountTestData[] = {0, 32, 66, 77};
static constexpr char kExpectedEvenByteCountResult[] = R"(/even_sfnts [
<
0020424D00
>
] def
)";
result = CFX_PSRenderer::GenerateType42SfntDataForTesting(
"even", kEvenByteCountTestData);
ASSERT_TRUE(result.has_value());
EXPECT_STREQ(kExpectedEvenByteCountResult, result.value().c_str());
}
TEST(PSRendererTest, GenerateType42FontDictionary) {
ByteString result;
static constexpr char kExpected1DescendantFontResult[] = R"(8 dict begin
/FontType 42 def
/FontMatrix [1 0 0 1 0 0] def
/FontName /1descendant_0 def
/Encoding 3 array
dup 0 /c00 put
dup 1 /c01 put
dup 2 /c02 put
readonly def
/FontBBox [1 2 3 4] def
/PaintType 0 def
/CharStrings 4 dict dup begin
/.notdef 0 def
/c00 0 def
/c01 1 def
/c02 2 def
end readonly def
/sfnts 1descendant_sfnts def
FontName currentdict end definefont pop
6 dict begin
/FontName /1descendant def
/FontType 0 def
/FontMatrix [1 0 0 1 0 0] def
/FMapType 2 def
/Encoding [
0
] def
/FDepVector [
/1descendant_0 findfont
] def
FontName currentdict end definefont pop
%%EndResource
)";
result = CFX_PSRenderer::GenerateType42FontDictionaryForTesting(
"1descendant", FX_RECT(1, 2, 3, 4), /*num_glyphs=*/3,
/*glyphs_per_descendant_font=*/3);
EXPECT_STREQ(kExpected1DescendantFontResult, result.c_str());
static constexpr char kExpected2DescendantFontResult[] = R"(8 dict begin
/FontType 42 def
/FontMatrix [1 0 0 1 0 0] def
/FontName /2descendant_0 def
/Encoding 3 array
dup 0 /c00 put
dup 1 /c01 put
dup 2 /c02 put
readonly def
/FontBBox [12 -5 34 199] def
/PaintType 0 def
/CharStrings 4 dict dup begin
/.notdef 0 def
/c00 0 def
/c01 1 def
/c02 2 def
end readonly def
/sfnts 2descendant_sfnts def
FontName currentdict end definefont pop
8 dict begin
/FontType 42 def
/FontMatrix [1 0 0 1 0 0] def
/FontName /2descendant_1 def
/Encoding 3 array
dup 0 /c00 put
dup 1 /c01 put
readonly def
/FontBBox [12 -5 34 199] def
/PaintType 0 def
/CharStrings 4 dict dup begin
/.notdef 0 def
/c00 3 def
/c01 4 def
end readonly def
/sfnts 2descendant_sfnts def
FontName currentdict end definefont pop
6 dict begin
/FontName /2descendant def
/FontType 0 def
/FontMatrix [1 0 0 1 0 0] def
/FMapType 2 def
/Encoding [
0
1
] def
/FDepVector [
/2descendant_0 findfont
/2descendant_1 findfont
] def
FontName currentdict end definefont pop
%%EndResource
)";
result = CFX_PSRenderer::GenerateType42FontDictionaryForTesting(
"2descendant", FX_RECT(12, -5, 34, 199), /*num_glyphs=*/5,
/*glyphs_per_descendant_font=*/3);
EXPECT_STREQ(kExpected2DescendantFontResult, result.c_str());
}