1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255
|
/***************************************************************************
* Copyright (C) 2008 by Dominik Seichter *
* domseichter@web.de *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU Library General Public License as *
* published by the Free Software Foundation; either version 2 of the *
* License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU Library General Public *
* License along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
#include "VariantTest.h"
#include <podofo.h>
using namespace PoDoFo;
// Registers the fixture into the 'registry'
CPPUNIT_TEST_SUITE_REGISTRATION( VariantTest );
static const char* s_pszObjectData =
"242 0 obj\n"
"<<\n"
"/Type /Metadata\n"
"/Length 9393\n"
"/Subtype /XML\n"
">>\n"
"stream\n"
"<x:xmpmeta xmlns:x=\"adobe:ns:meta/\" x:xmptk=\"3.1.1-111\">\n"
" <rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n"
" <rdf:Description rdf:about=\"\"\n"
" xmlns:dc=\"http://purl.org/dc/elements/1.1/\"\n"
" xmlns:xap=\"http://ns.adobe.com/xap/1.0/\"\n"
" xmlns:xapGImg=\"http://ns.adobe.com/xap/1.0/g/img/\"\n"
" xmlns:xapMM=\"http://ns.adobe.com/xap/1.0/mm/\"\n"
" xmlns:stRef=\"http://ns.adobe.com/xap/1.0/sType/ResourceRef#\"\n"
" dc:format=\"application/pdf\"\n"
" xap:CreatorTool=\"Adobe Illustrator CS2\"\n"
" xap:CreateDate=\"2006-01-22T11:41:01-08:00\"\n"
" xap:ModifyDate=\"2006-01-22T16:11:11-08:00\"\n"
" xap:MetadataDate=\"2006-01-22T16:11:11-08:00\"\n"
" xapMM:DocumentID=\"uuid:9D3BA55D8CCC11DA9C1EF28F08BA9E2D\"\n"
" xapMM:InstanceID=\"uuid:c2536d1f-8ba4-11da-9a3c-000d937692d2\">\n"
" <xap:Thumbnails>\n"
" <rdf:Alt>\n"
" <rdf:li\n"
" xapGImg:width=\"256\"\n"
" xapGImg:height=\"92\"\n"
" xapGImg:format=\"JPEG\"\n"
" xapGImg:image=\"/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK
DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f
Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAXAEAAwER
AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA
AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB
UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE
1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ
qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy
obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp
0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo
+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7
FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FWmZVU
sxCqNyTsAMEpACzyUBK5vNGhRNxN0GI/kVmH3gEZqMnb+jgaM79wJ+4U5MdJkPREWmt6VdkLBcoz
HohPFj8g1DmRp+1dNmNQmCfkfkaYTwTjzCNzYNLsVdirsVdirsVdirsVdirsVdirsVdirsVdirsV
dirsVdirsVdirsVdirsVdirsVdirsVWSSog3OKsH8165Jd3LWcTUtoTRwP23HWvsM889o+1JZcpw
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
2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV//9k=\"/>\n"
" </rdf:Alt>\n"
" </xap:Thumbnails>\n"
" <xapMM:DerivedFrom\n"
" stRef:instanceID=\"uuid:80a15048-8a07-11da-95c4-000d937692d2\"\n"
" stRef:documentID=\"uuid:912BD87F8B5211DA82D09FC838327668\"/>\n"
" </rdf:Description>\n"
" </rdf:RDF>\n"
"</x:xmpmeta>\n"
"\n"
"endstream\n"
"endobj\n";
void VariantTest::setUp()
{
}
void VariantTest::tearDown()
{
}
void VariantTest::testEmptyObject()
{
const char* pszObject =
"10 0 obj\nendobj\n";
PdfRefCountedInputDevice device( pszObject, strlen( pszObject ) );
PdfRefCountedBuffer buffer( 1024 );
PdfVecObjects vecObjects;
PdfParserObject parser( &vecObjects, device, buffer, 0 );
parser.SetLoadOnDemand( false );
parser.ParseFile( NULL );
CPPUNIT_ASSERT_EQUAL( parser.IsNull(), true );
}
void VariantTest::testEmptyStream()
{
const char* pszObject =
"10 0 obj<</Length 0>>stream\nendstream\nendobj\n";
PdfRefCountedInputDevice device( pszObject, strlen( pszObject ) );
PdfRefCountedBuffer buffer( 1024 );
PdfVecObjects vecObjects;
PdfParserObject parser( &vecObjects, device, buffer, 0 );
parser.SetLoadOnDemand( false );
parser.ParseFile( NULL );
CPPUNIT_ASSERT_EQUAL( parser.IsDictionary(), true );
CPPUNIT_ASSERT_EQUAL( parser.HasStream(), true );
CPPUNIT_ASSERT_EQUAL( parser.GetStream()->GetLength(), static_cast<pdf_long>(0) );
}
void VariantTest::testNameObject()
{
const char* pszObject =
"10 0 obj / endobj\n";
PdfRefCountedInputDevice device( pszObject, strlen( pszObject ) );
PdfRefCountedBuffer buffer( 1024 );
PdfVecObjects vecObjects;
PdfParserObject parser( &vecObjects, device, buffer, 0 );
parser.SetLoadOnDemand( false );
parser.ParseFile( NULL );
CPPUNIT_ASSERT_EQUAL( parser.IsName(), true );
CPPUNIT_ASSERT_EQUAL( parser.GetName().GetName(), std::string("") );
}
void VariantTest::testIsDirtyTrue()
{
PdfArray array;
PdfDictionary dict;
PdfVariant varBool( true );
PdfVariant varLong( static_cast<pdf_int64>(1LL) );
PdfVariant varDouble( 1.0 );
PdfVariant varStr( PdfString("Any") );
PdfVariant varName( PdfName("Name") );
PdfVariant varRef( PdfReference( 0, 0 ) );
PdfVariant varArray( array );
PdfVariant varDict( dict );
PdfVariant varVariant( varBool );
varBool.SetBool( false );
varLong.SetNumber( static_cast<pdf_int64>(2LL) );
varDouble.SetReal( 2.0 );
varStr = PdfString("Other");
varName = PdfName("Name2");
varRef = PdfReference( 2, 0 );
varArray.GetArray().push_back( varBool );
varDict.GetDictionary().AddKey( varName.GetName(), varStr );
varVariant = varLong;
CPPUNIT_ASSERT_EQUAL_MESSAGE( "BOOL IsDirty() == true", true, varBool.IsDirty() );
CPPUNIT_ASSERT_EQUAL_MESSAGE( "LONG IsDirty() == true", true, varLong.IsDirty() );
CPPUNIT_ASSERT_EQUAL_MESSAGE( "DOUBLE IsDirty() == true", true, varDouble.IsDirty() );
CPPUNIT_ASSERT_EQUAL_MESSAGE( "STRING IsDirty() == true", true, varStr.IsDirty() );
CPPUNIT_ASSERT_EQUAL_MESSAGE( "REFERENCE IsDirty() == true", true, varRef.IsDirty() );
CPPUNIT_ASSERT_EQUAL_MESSAGE( "ARRAY IsDirty() == true", true, varArray.IsDirty() );
CPPUNIT_ASSERT_EQUAL_MESSAGE( "DICT IsDirty() == true", true, varDict.IsDirty() );
CPPUNIT_ASSERT_EQUAL_MESSAGE( "VARIANT IsDirty() == true", true, varVariant.IsDirty() );
PdfRefCountedInputDevice device( s_pszObjectData, strlen( s_pszObjectData ) );
PdfRefCountedBuffer buffer( 1024 );
PdfVecObjects vecObjects;
PdfParserObject parser( &vecObjects, device, buffer, 0 );
parser.SetLoadOnDemand( false );
parser.ParseFile( NULL );
// After reading const stream it has still to be clean
PdfStream* pStream = parser.GetStream();
CPPUNIT_ASSERT_EQUAL( static_cast<long>(pStream->GetLength()), 9381L );
CPPUNIT_ASSERT_EQUAL_MESSAGE( "STREAM IsDirty() == true", true, parser.IsDirty() );
}
void VariantTest::testIsDirtyFalse()
{
PdfArray array;
PdfDictionary dict;
PdfData data("/Name");
PdfVariant varEmpty;
PdfVariant varBool( true );
PdfVariant varLong( static_cast<pdf_int64>(1LL) );
PdfVariant varDouble( 1.0 );
PdfVariant varStr( PdfString("Any") );
PdfVariant varName( PdfName("Name") );
PdfVariant varRef( PdfReference( 0, 0 ) );
PdfVariant varArray( array );
PdfVariant varDict( dict );
PdfVariant varData( data );
PdfVariant varVariant( varBool );
// IsDirty() should be false after construction
CPPUNIT_ASSERT_EQUAL_MESSAGE( "EMPTY IsDirty() == false", false, varEmpty.IsDirty() );
CPPUNIT_ASSERT_EQUAL_MESSAGE( "BOOL IsDirty() == false", false, varBool.IsDirty() );
CPPUNIT_ASSERT_EQUAL_MESSAGE( "LONG IsDirty() == false", false, varLong.IsDirty() );
CPPUNIT_ASSERT_EQUAL_MESSAGE( "DOUBLE IsDirty() == false", false, varDouble.IsDirty() );
CPPUNIT_ASSERT_EQUAL_MESSAGE( "STRING IsDirty() == false", false, varStr.IsDirty() );
CPPUNIT_ASSERT_EQUAL_MESSAGE( "REFERENCE IsDirty() == false", false, varRef.IsDirty() );
CPPUNIT_ASSERT_EQUAL_MESSAGE( "ARRAY IsDirty() == false", false, varArray.IsDirty() );
CPPUNIT_ASSERT_EQUAL_MESSAGE( "DICT IsDirty() == false", false, varDict.IsDirty() );
CPPUNIT_ASSERT_EQUAL_MESSAGE( "DATA IsDirty() == false", false, varData.IsDirty() );
CPPUNIT_ASSERT_EQUAL_MESSAGE( "VARIANT IsDirty() == false", false, varVariant.IsDirty() );
// IsDirty() should be false after calling const getter
(void)varBool.GetBool();
(void)varLong.GetNumber();
(void)varDouble.GetReal();
(void)varStr.GetString();
(void)varName.GetName();
(void)varRef.GetReference();
(void)static_cast<const PdfVariant>(varArray).GetArray();
(void)static_cast<const PdfVariant>(varDict).GetDictionary();
(void)varVariant.GetBool();
CPPUNIT_ASSERT_EQUAL_MESSAGE( "BOOL IsDirty() == false", false, varBool.IsDirty() );
CPPUNIT_ASSERT_EQUAL_MESSAGE( "LONG IsDirty() == false", false, varLong.IsDirty() );
CPPUNIT_ASSERT_EQUAL_MESSAGE( "DOUBLE IsDirty() == false", false, varDouble.IsDirty() );
CPPUNIT_ASSERT_EQUAL_MESSAGE( "STRING IsDirty() == false", false, varStr.IsDirty() );
CPPUNIT_ASSERT_EQUAL_MESSAGE( "REFERENCE IsDirty() == false", false, varRef.IsDirty() );
CPPUNIT_ASSERT_EQUAL_MESSAGE( "ARRAY IsDirty() == false", false, varArray.IsDirty() );
CPPUNIT_ASSERT_EQUAL_MESSAGE( "DICT IsDirty() == false", false, varDict.IsDirty() );
CPPUNIT_ASSERT_EQUAL_MESSAGE( "VARIANT IsDirty() == false", false, varVariant.IsDirty() );
// IsDirty() should be false after calling non const getter, but not modifying object
(void) varArray.GetArray();
(void) varDict.GetDictionary();
CPPUNIT_ASSERT_EQUAL_MESSAGE( "ARRAY IsDirty() == false", false, varArray.IsDirty() );
CPPUNIT_ASSERT_EQUAL_MESSAGE( "DICT IsDirty() == false", false, varDict.IsDirty() );
// IsDirty() should be false after reading an object
PdfRefCountedInputDevice device( s_pszObjectData, strlen( s_pszObjectData ) );
PdfRefCountedBuffer buffer( 1024 );
PdfVecObjects vecObjects;
PdfParserObject parser( &vecObjects, device, buffer, 0 );
parser.SetLoadOnDemand( false );
parser.ParseFile( NULL );
// Newly create Object has to be clean
CPPUNIT_ASSERT_EQUAL_MESSAGE( "OBJECT IsDirty() == false", false, parser.IsDirty() );
// After reading const stream it has still to be clean
const PdfStream* pStream = static_cast<const PdfParserObject*>(&parser)->GetStream();
CPPUNIT_ASSERT_EQUAL( static_cast<long>(pStream->GetLength()), 9381L );
CPPUNIT_ASSERT_EQUAL_MESSAGE( "STREAM IsDirty() == false", false, parser.IsDirty() );
}
|