@@ -25,12 +25,11 @@ public virtual void FreeReferencesTest01() {
2525 + @out ) ) ;
2626 pdfDocument . Close ( ) ;
2727 String [ ] xrefString = ExtractXrefTableAsStrings ( @out ) ;
28- String [ ] expected = new String [ ] { "xref\n " + "0 5\n " + "0000000010 65535 f \n " + "0000000269 00000 n \n "
29- + "0000000561 00000 n \n " + "0000000314 00000 n \n " + "0000000011 65535 f \n " + "10 5\n " + "0000000000 00001 f \n "
30- + "0000000000 00002 f \n " + "0000000133 00000 n \n " + "0000000015 00000 n \n " + "0000000613 00000 n \n "
31- } ;
32- // TODO first xref shall have no subsections
33- // TODO linked list of refs is invalid
28+ String [ ] expected = new String [ ] { "xref\n " + "0 15\n " + "0000000004 65535 f \n " + "0000000269 00000 n \n "
29+ + "0000000561 00000 n \n " + "0000000314 00000 n \n " + "0000000005 65535 f \n " + "0000000006 00000 f \n "
30+ + "0000000007 00000 f \n " + "0000000008 00000 f \n " + "0000000009 00000 f \n " + "0000000010 00000 f \n "
31+ + "0000000011 00000 f \n " + "0000000000 00001 f \n " + "0000000133 00000 n \n " + "0000000015 00000 n \n "
32+ + "0000000613 00000 n \n " } ;
3433 NUnit . Framework . Assert . AreEqual ( expected , xrefString ) ;
3534 }
3635
@@ -42,12 +41,13 @@ public virtual void FreeReferencesTest02() {
4241 PdfDocument pdfDocument = new PdfDocument ( new PdfReader ( sourceFolder + src ) , new PdfWriter ( destinationFolder
4342 + @out ) , new StampingProperties ( ) . UseAppendMode ( ) ) ;
4443 pdfDocument . Close ( ) ;
45- // TODO exception is thrown on attempt to read free reference
4644 String [ ] xrefString = ExtractXrefTableAsStrings ( @out ) ;
4745 String [ ] expected = new String [ ] { "xref\n " + "0 5\n " + "0000000010 65535 f \n " + "0000000269 00000 n \n "
4846 + "0000000569 00000 n \n " + "0000000314 00000 n \n " + "0000000000 65535 f \n " + "10 5\n " + "0000000011 00000 f \n "
4947 + "0000000000 00001 f \n " + "0000000133 00000 n \n " + "0000000015 00000 n \n " + "0000000480 00000 n \n "
50- , "xref\n " + "3 1\n " + "0000000995 00000 n \n " } ;
48+ , "xref\n " + "0 1\n " + "0000000004 65535 f \n " + "3 9\n " + "0000000995 00000 n \n " + "0000000005 65535 f \n "
49+ + "0000000006 00000 f \n " + "0000000007 00000 f \n " + "0000000008 00000 f \n " + "0000000009 00000 f \n "
50+ + "0000000010 00000 f \n " + "0000000011 00000 f \n " + "0000000000 00001 f \n " } ;
5151 // Append mode, no possibility to fix subsections in first xref
5252 NUnit . Framework . Assert . AreEqual ( expected , xrefString ) ;
5353 }
@@ -65,9 +65,9 @@ public virtual void FreeReferencesTest03() {
6565 String [ ] expected = new String [ ] { "xref\n " + "0 7\n " + "0000000000 65535 f \n " + "0000000265 00000 n \n "
6666 + "0000000564 00000 n \n " + "0000000310 00000 n \n " + "0000000132 00000 n \n " + "0000000015 00001 n \n "
6767 + "0000000476 00000 n \n " , "xref\n " + "0 1\n " + "0000000005 65535 n \n " + "3 3\n " + "0000000923 00000 n \n "
68- + "0000001170 00000 n \n " + "0000000000 00002 f \n " + "7 1\n " + "0000001303 00000 n \n " , "xref\n " + "1 3 \n "
69- + "0000001706 00000 n \n " + "0000001998 00000 n \n " + "0000001751 00000 n \n " + "8 2 \n " + "0000002055 00000 n \n "
70- + "0000002156 00000 n \n " } ;
68+ + "0000001170 00000 n \n " + "0000000000 00002 f \n " + "7 1\n " + "0000001303 00000 n \n " , "xref\n " + "0 4 \n "
69+ + "0000000005 65535 f \n " + "0000001706 00000 n \n " + "0000001998 00000 n \n " + "0000001751 00000 n \n "
70+ + "5 1 \n " + "0000000000 00002 f \n " + "8 2 \n " + "0000002055 00000 n \n " + " 0000002156 00000 n \n " } ;
7171 NUnit . Framework . Assert . AreEqual ( expected , xrefString ) ;
7272 }
7373
@@ -84,8 +84,12 @@ public virtual void FreeReferencesTest04() {
8484 contentsRef . SetFree ( ) ;
8585 PdfObject freedContentsRefRefersTo = contentsRef . GetRefersTo ( ) ;
8686 NUnit . Framework . Assert . IsNull ( freedContentsRefRefersTo ) ;
87- // TODO assertion fails. Free reference should not be reread, see freeReferencesTest02
8887 pdfDocument . Close ( ) ;
88+ String [ ] xrefString = ExtractXrefTableAsStrings ( @out ) ;
89+ String [ ] expected = new String [ ] { "xref\n " + "0 7\n " + "0000000005 65535 f \n " + "0000000133 00000 n \n "
90+ + "0000000425 00000 n \n " + "0000000178 00000 n \n " + "0000000015 00000 n \n " + "0000000000 00001 f \n "
91+ + "0000000476 00000 n \n " } ;
92+ NUnit . Framework . Assert . AreEqual ( expected , xrefString ) ;
8993 }
9094
9195 /// <exception cref="System.IO.IOException"/>
@@ -97,10 +101,11 @@ public virtual void FreeReferencesTest05() {
97101 + @out ) ) ;
98102 pdfDocument . Close ( ) ;
99103 String [ ] xrefString = ExtractXrefTableAsStrings ( @out ) ;
100- String [ ] expected = new String [ ] { "xref\n " + "0 4\n " + "0000000000 65535 f \n " + "0000000269 00000 n \n "
101- + "0000000561 00000 n \n " + "0000000314 00000 n \n " + "11 3\n " + "0000000133 00000 n \n " + "0000000015 00000 n \n "
102- + "0000000613 00000 n \n " } ;
103- // TODO first xref shall have no subsections
104+ String [ ] expected = new String [ ] { "xref\n " + "0 14\n " + "0000000004 65535 f \n " + "0000000269 00000 n \n "
105+ + "0000000561 00000 n \n " + "0000000314 00000 n \n " + "0000000005 00000 f \n " + "0000000006 00000 f \n "
106+ + "0000000007 00000 f \n " + "0000000008 00000 f \n " + "0000000009 00000 f \n " + "0000000010 00000 f \n "
107+ + "0000000000 00000 f \n " + "0000000133 00000 n \n " + "0000000015 00000 n \n " + "0000000613 00000 n \n "
108+ } ;
104109 NUnit . Framework . Assert . AreEqual ( expected , xrefString ) ;
105110 }
106111
@@ -115,7 +120,9 @@ public virtual void FreeReferencesTest06() {
115120 String [ ] xrefString = ExtractXrefTableAsStrings ( @out ) ;
116121 String [ ] expected = new String [ ] { "xref\n " + "0 4\n " + "0000000000 65535 f \n " + "0000000269 00000 n \n "
117122 + "0000000569 00000 n \n " + "0000000314 00000 n \n " + "11 3\n " + "0000000133 00000 n \n " + "0000000015 00000 n \n "
118- + "0000000480 00000 n \n " , "xref\n " + "3 1\n " + "0000000935 00000 n \n " } ;
123+ + "0000000480 00000 n \n " , "xref\n " + "0 1\n " + "0000000004 65535 f \n " + "3 8\n " + "0000000935 00000 n \n "
124+ + "0000000005 00000 f \n " + "0000000006 00000 f \n " + "0000000007 00000 f \n " + "0000000008 00000 f \n "
125+ + "0000000009 00000 f \n " + "0000000010 00000 f \n " + "0000000000 00000 f \n " } ;
119126 // Append mode, no possibility to fix subsections in first xref
120127 NUnit . Framework . Assert . AreEqual ( expected , xrefString ) ;
121128 }
@@ -135,6 +142,29 @@ public virtual void FreeReferencesTest07() {
135142 NUnit . Framework . Assert . AreEqual ( expected , xrefString ) ;
136143 }
137144
145+ /// <exception cref="System.IO.IOException"/>
146+ [ NUnit . Framework . Test ]
147+ public virtual void FreeReferencesTest08 ( ) {
148+ String src = "simpleDoc.pdf" ;
149+ String @out = "freeReferencesTest08.pdf" ;
150+ PdfDocument pdfDocument = new PdfDocument ( new PdfReader ( sourceFolder + src ) , new PdfWriter ( destinationFolder
151+ + @out ) , new StampingProperties ( ) . UseAppendMode ( ) ) ;
152+ PdfObject contentsObj = pdfDocument . GetPage ( 1 ) . GetPdfObject ( ) . Remove ( PdfName . Contents ) ;
153+ pdfDocument . GetPage ( 1 ) . SetModified ( ) ;
154+ NUnit . Framework . Assert . IsTrue ( contentsObj is PdfIndirectReference ) ;
155+ PdfIndirectReference contentsRef = ( PdfIndirectReference ) contentsObj ;
156+ contentsRef . SetFree ( ) ;
157+ PdfObject freedContentsRefRefersTo = contentsRef . GetRefersTo ( ) ;
158+ NUnit . Framework . Assert . IsNull ( freedContentsRefRefersTo ) ;
159+ pdfDocument . Close ( ) ;
160+ String [ ] xrefString = ExtractXrefTableAsStrings ( @out ) ;
161+ String [ ] expected = new String [ ] { "xref\n " + "0 7\n " + "0000000000 65535 f \n " + "0000000265 00000 n \n "
162+ + "0000000564 00000 n \n " + "0000000310 00000 n \n " + "0000000132 00000 n \n " + "0000000015 00000 n \n "
163+ + "0000000476 00000 n \n " , "xref\n " + "0 1\n " + "0000000005 65535 f \n " + "3 3\n " + "0000000923 00000 n \n "
164+ + "0000001170 00000 n \n " + "0000000000 00001 f \n " } ;
165+ NUnit . Framework . Assert . AreEqual ( expected , xrefString ) ;
166+ }
167+
138168 /// <exception cref="System.IO.IOException"/>
139169 private String [ ] ExtractXrefTableAsStrings ( String @out ) {
140170 byte [ ] outPdfBytes = ReadFile ( destinationFolder + @out ) ;
0 commit comments