24 static const std::vector<pdfium::NullTermWstrFuncTestData> test_data = {
28 {L"test.pdf", L"test.pdf"},
31 {L"r:\\pdfdocs\\spec.pdf", L"/r/pdfdocs/spec.pdf"},
33 {L"My Document\\test.pdf", L"My Document/test.pdf"},
35 {L"\\pdfdocs\\spec.pdf", L"//pdfdocs/spec.pdf"},
37 {L"\\\\pdfdocs\\spec.pdf", L"/pdfdocs/spec.pdf"},
40#elif BUILDFLAG(IS_APPLE)
42 {L"Mac HD:PDFDocs:spec.pdf", L"/Mac HD/PDFDocs/spec.pdf"},
44 {L"PDFDocs:spec.pdf", L"PDFDocs/spec.pdf"},
47 {L"./docs/test.pdf", L"./docs/test.pdf"},
49 {L"../test_docs/test.pdf", L"../test_docs/test.pdf"},
51 {L"/usr/local/home/test.pdf", L"/usr/local/home/test.pdf"},
54 for (
const auto& data : test_data) {
55 EXPECT_EQ(data.expected, CPDF_FileSpec::EncodeFileName(data.input));
57 EXPECT_EQ(data.input, CPDF_FileSpec::DecodeFileName(data.expected));
68#elif BUILDFLAG(IS_APPLE)
69 L"/Mac HD/docs/test.pdf",
70 L"Mac HD:docs:test.pdf"
76 auto str_obj =
pdfium::MakeRetain<CPDF_String>(
nullptr, test_data
.input);
85 {L"/C/docs/test.pdf", L"C:\\docs\\test.pdf"},
86 {L"/D/docs/test.pdf", L"D:\\docs\\test.pdf"},
87 {L"/E/docs/test.pdf", L"E:\\docs\\test.pdf"},
88 {L"/F/docs/test.pdf", L"F:\\docs\\test.pdf"},
89 {L"/G/docs/test.pdf", L"G:\\docs\\test.pdf"},
90#elif BUILDFLAG(IS_APPLE)
91 {L"/Mac HD/docs1/test.pdf", L"Mac HD:docs1:test.pdf"},
92 {L"/Mac HD/docs2/test.pdf", L"Mac HD:docs2:test.pdf"},
93 {L"/Mac HD/docs3/test.pdf", L"Mac HD:docs3:test.pdf"},
94 {L"/Mac HD/docs4/test.pdf", L"Mac HD:docs4:test.pdf"},
95 {L"/Mac HD/docs5/test.pdf", L"Mac HD:docs5:test.pdf"},
97 {L"/docs/a/test.pdf", L"/docs/a/test.pdf"},
98 {L"/docs/b/test.pdf", L"/docs/b/test.pdf"},
99 {L"/docs/c/test.pdf", L"/docs/c/test.pdf"},
100 {L"/docs/d/test.pdf", L"/docs/d/test.pdf"},
101 {L"/docs/e/test.pdf", L"/docs/e/test.pdf"},
105 constexpr std::array<
const char*, 5> keywords = {
106 {
"Unix",
"Mac",
"DOS",
"F",
"UF"}};
110 for (size_t i = 0; i <
std::size(keywords); ++i) {
111 dict_obj->SetNewFor<CPDF_String>(keywords[i], test_data[i].input);
116 dict_obj->SetNewFor<CPDF_String>(
"FS",
"URL");
122 auto name_obj =
pdfium::MakeRetain<CPDF_Name>(
nullptr,
"test.pdf");
130 for (
const char* key : {
"Unix",
"Mac",
"DOS",
"F",
"UF"}) {
131 dict_obj->SetNewFor<CPDF_Name>(key,
"http://evil.org");
132 EXPECT_TRUE(file_spec.GetFileName().IsEmpty());
134 dict_obj->SetNewFor<CPDF_String>(
"FS",
"URL");
142 auto name_obj =
pdfium::MakeRetain<CPDF_Name>(
nullptr,
"test.pdf");
166 const wchar_t file_name[] = L"test.pdf";
167 constexpr std::array<
const char*, 5> keys = {
168 {
"Unix",
"Mac",
"DOS",
"F",
"UF"}};
169 constexpr std::array<
const char*, 5> streams = {
170 {
"test1",
"test2",
"test3",
"test4",
"test5"}};
171 static_assert(
std::size(keys) ==
std::size(streams),
"size mismatch");
175 for (size_t i = 0; i <
std::size(keys); ++i) {
177 dict_obj->SetNewFor<CPDF_String>(keys[i], file_name);
180 auto stream_object = object_holder.NewIndirect<CPDF_Stream>(
182 ASSERT_TRUE(stream_object);
183 const uint32_t stream_object_number = stream_object->GetObjNum();
184 ASSERT_GT(stream_object_number, 0u);
185 file_dict->SetNewFor<CPDF_Reference>(keys[i], &object_holder,
186 stream_object_number);
189 EXPECT_EQ(streams[i],
190 file_spec.GetFileStream()->GetUnicodeText().ToUTF8());
193 dict_obj->SetNewFor<CPDF_String>(
"FS",
"URL");
203 auto name_obj =
pdfium::MakeRetain<CPDF_Name>(
nullptr,
"test.pdf");
213 dict_obj->SetNewFor<CPDF_String>(
"UF", L"test.pdf");
219 static constexpr char kHello[] =
"hello";
221 object_holder.NewIndirect<CPDF_Stream>(
pdfium::as_byte_span(kHello));
222 ASSERT_TRUE(stream_object);
223 const uint32_t stream_object_number = stream_object->GetObjNum();
224 ASSERT_GT(stream_object_number, 0u);
225 file_dict->SetNewFor<CPDF_Reference>(
"UF", &object_holder,
226 stream_object_number);
229 RetainPtr<CPDF_Stream> stream = file_dict->GetMutableStreamFor(
"UF");
236 stream_dict->GetMutableDictFor(
"Params");
237 params_dict->SetNewFor<CPDF_Number>(
"Size", 6);
238 EXPECT_EQ(6, file_spec.GetParamsDict()->GetIntegerFor(
"Size"));