OLD | NEW |
1 // Copyright 2016 PDFium Authors. All rights reserved. | 1 // Copyright 2016 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <memory> | 5 #include <memory> |
6 #include <vector> | 6 #include <vector> |
7 | 7 |
8 #include "core/fpdfapi/parser/cpdf_dictionary.h" | 8 #include "core/fpdfapi/parser/cpdf_dictionary.h" |
9 #include "core/fpdfapi/parser/cpdf_name.h" | 9 #include "core/fpdfapi/parser/cpdf_name.h" |
10 #include "core/fpdfapi/parser/cpdf_string.h" | 10 #include "core/fpdfapi/parser/cpdf_string.h" |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
60 L"/C/docs/test.pdf", | 60 L"/C/docs/test.pdf", |
61 L"C:\\docs\\test.pdf" | 61 L"C:\\docs\\test.pdf" |
62 #elif _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ | 62 #elif _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ |
63 L"/Mac HD/docs/test.pdf", | 63 L"/Mac HD/docs/test.pdf", |
64 L"Mac HD:docs:test.pdf" | 64 L"Mac HD:docs:test.pdf" |
65 #else | 65 #else |
66 L"/docs/test.pdf", | 66 L"/docs/test.pdf", |
67 L"/docs/test.pdf" | 67 L"/docs/test.pdf" |
68 #endif | 68 #endif |
69 }; | 69 }; |
70 std::unique_ptr<CPDF_Object> str_obj(new CPDF_String(test_data.input)); | 70 std::unique_ptr<CPDF_Object> str_obj( |
| 71 new CPDF_String(nullptr, test_data.input)); |
71 CPDF_FileSpec file_spec(str_obj.get()); | 72 CPDF_FileSpec file_spec(str_obj.get()); |
72 CFX_WideString file_name; | 73 CFX_WideString file_name; |
73 EXPECT_TRUE(file_spec.GetFileName(&file_name)); | 74 EXPECT_TRUE(file_spec.GetFileName(&file_name)); |
74 EXPECT_TRUE(file_name == test_data.expected); | 75 EXPECT_TRUE(file_name == test_data.expected); |
75 } | 76 } |
76 { | 77 { |
77 // Dictionary object. | 78 // Dictionary object. |
78 pdfium::NullTermWstrFuncTestData test_data[5] = { | 79 pdfium::NullTermWstrFuncTestData test_data[5] = { |
79 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ | 80 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ |
80 {L"/C/docs/test.pdf", L"C:\\docs\\test.pdf"}, | 81 {L"/C/docs/test.pdf", L"C:\\docs\\test.pdf"}, |
(...skipping 14 matching lines...) Expand all Loading... |
95 {L"/docs/d/test.pdf", L"/docs/d/test.pdf"}, | 96 {L"/docs/d/test.pdf", L"/docs/d/test.pdf"}, |
96 {L"/docs/e/test.pdf", L"/docs/e/test.pdf"}, | 97 {L"/docs/e/test.pdf", L"/docs/e/test.pdf"}, |
97 #endif | 98 #endif |
98 }; | 99 }; |
99 // Keyword fields in reverse order of precedence to retrieve the file name. | 100 // Keyword fields in reverse order of precedence to retrieve the file name. |
100 const char* const keywords[5] = {"Unix", "Mac", "DOS", "F", "UF"}; | 101 const char* const keywords[5] = {"Unix", "Mac", "DOS", "F", "UF"}; |
101 std::unique_ptr<CPDF_Dictionary> dict_obj(new CPDF_Dictionary()); | 102 std::unique_ptr<CPDF_Dictionary> dict_obj(new CPDF_Dictionary()); |
102 CPDF_FileSpec file_spec(dict_obj.get()); | 103 CPDF_FileSpec file_spec(dict_obj.get()); |
103 CFX_WideString file_name; | 104 CFX_WideString file_name; |
104 for (int i = 0; i < 5; ++i) { | 105 for (int i = 0; i < 5; ++i) { |
105 dict_obj->SetFor(keywords[i], new CPDF_String(test_data[i].input)); | 106 dict_obj->SetNewFor<CPDF_String>(keywords[i], test_data[i].input); |
106 EXPECT_TRUE(file_spec.GetFileName(&file_name)); | 107 EXPECT_TRUE(file_spec.GetFileName(&file_name)); |
107 EXPECT_TRUE(file_name == test_data[i].expected); | 108 EXPECT_TRUE(file_name == test_data[i].expected); |
108 } | 109 } |
109 | 110 |
110 // With all the former fields and 'FS' field suggests 'URL' type. | 111 // With all the former fields and 'FS' field suggests 'URL' type. |
111 dict_obj->SetStringFor("FS", "URL"); | 112 dict_obj->SetNewFor<CPDF_String>("FS", "URL", false); |
112 EXPECT_TRUE(file_spec.GetFileName(&file_name)); | 113 EXPECT_TRUE(file_spec.GetFileName(&file_name)); |
113 // Url string is not decoded. | 114 // Url string is not decoded. |
114 EXPECT_TRUE(file_name == test_data[4].input); | 115 EXPECT_TRUE(file_name == test_data[4].input); |
115 } | 116 } |
116 { | 117 { |
117 // Invalid object. | 118 // Invalid object. |
118 std::unique_ptr<CPDF_Object> name_obj(new CPDF_Name(nullptr, "test.pdf")); | 119 std::unique_ptr<CPDF_Object> name_obj(new CPDF_Name(nullptr, "test.pdf")); |
119 CPDF_FileSpec file_spec(name_obj.get()); | 120 CPDF_FileSpec file_spec(name_obj.get()); |
120 CFX_WideString file_name; | 121 CFX_WideString file_name; |
121 EXPECT_FALSE(file_spec.GetFileName(&file_name)); | 122 EXPECT_FALSE(file_spec.GetFileName(&file_name)); |
122 } | 123 } |
123 } | 124 } |
124 | 125 |
125 TEST(cpdf_filespec, SetFileName) { | 126 TEST(cpdf_filespec, SetFileName) { |
126 pdfium::NullTermWstrFuncTestData test_data = { | 127 pdfium::NullTermWstrFuncTestData test_data = { |
127 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ | 128 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ |
128 L"C:\\docs\\test.pdf", | 129 L"C:\\docs\\test.pdf", |
129 L"/C/docs/test.pdf" | 130 L"/C/docs/test.pdf" |
130 #elif _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ | 131 #elif _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ |
131 L"Mac HD:docs:test.pdf", | 132 L"Mac HD:docs:test.pdf", |
132 L"/Mac HD/docs/test.pdf" | 133 L"/Mac HD/docs/test.pdf" |
133 #else | 134 #else |
134 L"/docs/test.pdf", | 135 L"/docs/test.pdf", |
135 L"/docs/test.pdf" | 136 L"/docs/test.pdf" |
136 #endif | 137 #endif |
137 }; | 138 }; |
138 // String object. | 139 // String object. |
139 std::unique_ptr<CPDF_Object> str_obj(new CPDF_String(L"babababa")); | 140 std::unique_ptr<CPDF_Object> str_obj(new CPDF_String(nullptr, L"babababa")); |
140 CPDF_FileSpec file_spec1(str_obj.get()); | 141 CPDF_FileSpec file_spec1(str_obj.get()); |
141 file_spec1.SetFileName(test_data.input); | 142 file_spec1.SetFileName(test_data.input); |
142 // Check internal object value. | 143 // Check internal object value. |
143 CFX_ByteString str = CFX_ByteString::FromUnicode(test_data.expected); | 144 CFX_ByteString str = CFX_ByteString::FromUnicode(test_data.expected); |
144 EXPECT_TRUE(str == str_obj->GetString()); | 145 EXPECT_TRUE(str == str_obj->GetString()); |
145 // Check we can get the file name back. | 146 // Check we can get the file name back. |
146 CFX_WideString file_name; | 147 CFX_WideString file_name; |
147 EXPECT_TRUE(file_spec1.GetFileName(&file_name)); | 148 EXPECT_TRUE(file_spec1.GetFileName(&file_name)); |
148 EXPECT_TRUE(file_name == test_data.input); | 149 EXPECT_TRUE(file_name == test_data.input); |
149 | 150 |
150 // Dictionary object. | 151 // Dictionary object. |
151 std::unique_ptr<CPDF_Dictionary> dict_obj(new CPDF_Dictionary()); | 152 std::unique_ptr<CPDF_Dictionary> dict_obj(new CPDF_Dictionary()); |
152 CPDF_FileSpec file_spec2(dict_obj.get()); | 153 CPDF_FileSpec file_spec2(dict_obj.get()); |
153 file_spec2.SetFileName(test_data.input); | 154 file_spec2.SetFileName(test_data.input); |
154 // Check internal object value. | 155 // Check internal object value. |
155 file_name = dict_obj->GetUnicodeTextFor("F"); | 156 file_name = dict_obj->GetUnicodeTextFor("F"); |
156 EXPECT_TRUE(file_name == test_data.expected); | 157 EXPECT_TRUE(file_name == test_data.expected); |
157 file_name = dict_obj->GetUnicodeTextFor("UF"); | 158 file_name = dict_obj->GetUnicodeTextFor("UF"); |
158 EXPECT_TRUE(file_name == test_data.expected); | 159 EXPECT_TRUE(file_name == test_data.expected); |
159 // Check we can get the file name back. | 160 // Check we can get the file name back. |
160 EXPECT_TRUE(file_spec2.GetFileName(&file_name)); | 161 EXPECT_TRUE(file_spec2.GetFileName(&file_name)); |
161 EXPECT_TRUE(file_name == test_data.input); | 162 EXPECT_TRUE(file_name == test_data.input); |
162 } | 163 } |
OLD | NEW |