Skip to content

Commit

Permalink
Merge branch 'develop' into devsecops
Browse files Browse the repository at this point in the history
  • Loading branch information
aleks-ivanov committed Mar 2, 2025
2 parents 27c6740 + df54baa commit 22e92e8
Show file tree
Hide file tree
Showing 17 changed files with 2,170 additions and 1,278 deletions.
39 changes: 39 additions & 0 deletions itext.tests/itext.pdfua.tests/itext/pdfua/PdfUA2TestPdfDocument.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
/*
This file is part of the iText (R) project.
Copyright (c) 1998-2025 Apryse Group NV
Authors: Apryse Software.
This program is offered under a commercial and under the AGPL license.
For commercial licensing, contact us at https://itextpdf.com/sales. For AGPL licensing, see below.
AGPL licensing:
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 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 Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
using iText.Kernel.Pdf;

namespace iText.Pdfua {
public class PdfUA2TestPdfDocument : PdfUADocument {
public PdfUA2TestPdfDocument(PdfWriter writer)
: base(writer, CreateConfig()) {
}

public PdfUA2TestPdfDocument(PdfReader reader, PdfWriter writer)
: base(reader, writer, CreateConfig()) {
}

private static PdfUAConfig CreateConfig() {
return new PdfUAConfig(PdfUAConformance.PDF_UA_2, "English pangram", "en-US");
}
}
}
399 changes: 262 additions & 137 deletions itext.tests/itext.pdfua.tests/itext/pdfua/PdfUAAnnotationsTest.cs

Large diffs are not rendered by default.

82 changes: 53 additions & 29 deletions itext.tests/itext.pdfua.tests/itext/pdfua/PdfUAFontsTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
using System;
using System.Collections.Generic;
using iText.Commons.Utils;
using iText.IO.Font;
using iText.IO.Font.Constants;
Expand All @@ -33,10 +34,8 @@ You should have received a copy of the GNU Affero General Public License
using iText.Layout.Element;
using iText.Pdfua.Exceptions;
using iText.Test;
using iText.Test.Pdfa;

namespace iText.Pdfua {
// Android-Conversion-Skip-Line (TODO DEVSIX-7377 introduce pdf/ua validation on Android)
[NUnit.Framework.Category("IntegrationTest")]
public class PdfUAFontsTest : ExtendedITextTest {
private static readonly String DESTINATION_FOLDER = NUnit.Framework.TestContext.CurrentContext.TestDirectory
Expand All @@ -60,8 +59,12 @@ public virtual void InitializeFramework() {
framework = new UaValidationTestFramework(DESTINATION_FOLDER);
}

[NUnit.Framework.Test]
public virtual void TryToUseType0Cid0FontTest() {
public static IList<PdfUAConformance> Data() {
return JavaUtil.ArraysAsList(PdfUAConformance.PDF_UA_1, PdfUAConformance.PDF_UA_2);
}

[NUnit.Framework.TestCaseSource("Data")]
public virtual void TryToUseType0Cid0FontTest(PdfUAConformance pdfUAConformance) {
framework.AddBeforeGenerationHook((pdfDoc) => {
Document document = new Document(pdfDoc);
PdfFont font;
Expand All @@ -77,12 +80,17 @@ public virtual void TryToUseType0Cid0FontTest() {
document.Add(paragraph);
}
);
framework.AssertBothFail("tryToUseType0Cid0FontTest", MessageFormatUtil.Format(PdfUAExceptionMessageConstants
.FONT_SHOULD_BE_EMBEDDED, "KozMinPro-Regular"), false);
if (pdfUAConformance == PdfUAConformance.PDF_UA_1) {
framework.AssertBothFail("tryToUseType0Cid0FontTest", MessageFormatUtil.Format(PdfUAExceptionMessageConstants
.FONT_SHOULD_BE_EMBEDDED, "KozMinPro-Regular"), false, pdfUAConformance);
}
if (pdfUAConformance == PdfUAConformance.PDF_UA_2) {
framework.AssertVeraPdfFail("tryToUseType0Cid0FontTest", pdfUAConformance);
}
}

[NUnit.Framework.Test]
public virtual void Type0Cid2FontTest() {
[NUnit.Framework.TestCaseSource("Data")]
public virtual void Type0Cid2FontTest(PdfUAConformance pdfUAConformance) {
framework.AddBeforeGenerationHook((pdfDoc) => {
Document document = new Document(pdfDoc);
PdfFont font;
Expand All @@ -97,11 +105,11 @@ public virtual void Type0Cid2FontTest() {
document.Add(paragraph);
}
);
framework.AssertBothValid("type0Cid2FontTest");
framework.AssertBothValid("type0Cid2FontTest", pdfUAConformance);
}

[NUnit.Framework.Test]
public virtual void TrueTypeFontTest() {
[NUnit.Framework.TestCaseSource("Data")]
public virtual void TrueTypeFontTest(PdfUAConformance pdfUAConformance) {
framework.AddBeforeGenerationHook((pdfDoc) => {
Document document = new Document(pdfDoc);
PdfFont font;
Expand All @@ -117,11 +125,11 @@ public virtual void TrueTypeFontTest() {
document.Add(paragraph);
}
);
framework.AssertBothValid("trueTypeFontTest");
framework.AssertBothValid("trueTypeFontTest", pdfUAConformance);
}

[NUnit.Framework.Test]
public virtual void TrueTypeFontGlyphNotPresentTest() {
[NUnit.Framework.TestCaseSource("Data")]
public virtual void TrueTypeFontGlyphNotPresentTest(PdfUAConformance pdfUAConformance) {
framework.AddBeforeGenerationHook((pdfDoc) => {
PdfFont font;
try {
Expand All @@ -138,14 +146,20 @@ public virtual void TrueTypeFontGlyphNotPresentTest() {
, 36).ShowText("world").EndText().RestoreState().CloseTag();
}
);
framework.AssertBothFail("trueTypeFontGlyphNotPresentTest", MessageFormatUtil.Format(PdfUAExceptionMessageConstants
.GLYPH_IS_NOT_DEFINED_OR_WITHOUT_UNICODE, "w"), false);
if (pdfUAConformance == PdfUAConformance.PDF_UA_1) {
framework.AssertBothFail("trueTypeFontGlyphNotPresentTest", MessageFormatUtil.Format(PdfUAExceptionMessageConstants
.GLYPH_IS_NOT_DEFINED_OR_WITHOUT_UNICODE, "w"), false, pdfUAConformance);
}
else {
if (pdfUAConformance == PdfUAConformance.PDF_UA_2) {
framework.AssertVeraPdfFail("trueTypeFontGlyphNotPresentTest", pdfUAConformance);
}
}
}

[NUnit.Framework.Test]
public virtual void TrueTypeFontWithDifferencesTest() {
String outPdf = DESTINATION_FOLDER + "trueTypeFontWithDifferencesTest.pdf";
using (PdfDocument pdfDoc = new PdfUATestPdfDocument(new PdfWriter(outPdf))) {
[NUnit.Framework.TestCaseSource("Data")]
public virtual void TrueTypeFontWithDifferencesTest(PdfUAConformance pdfUAConformance) {
framework.AddBeforeGenerationHook((pdfDoc) => {
PdfFont font;
try {
font = PdfFontFactory.CreateFont(FONT, "# simple 32 0077 006f 0072 006c 0064", PdfFontFactory.EmbeddingStrategy
Expand All @@ -160,12 +174,17 @@ public virtual void TrueTypeFontWithDifferencesTest() {
canvas.SaveState().OpenTag(tagPointer.GetTagReference()).BeginText().MoveText(36, 786).SetFontAndSize(font
, 36).ShowText("world").EndText().RestoreState().CloseTag();
}
new VeraPdfValidator().ValidateFailure(outPdf);
);
if (pdfUAConformance == PdfUAConformance.PDF_UA_1) {
framework.AssertVeraPdfFail("trueTypeFontWithDifferencesTest", pdfUAConformance);
}
if (pdfUAConformance == PdfUAConformance.PDF_UA_2) {
framework.AssertBothFail("trueTypeFontWithDifferencesTest", pdfUAConformance);
}
}

// Android-Conversion-Skip-Line (TODO DEVSIX-7377 introduce pdf/ua validation on Android)
[NUnit.Framework.Test]
public virtual void TryToUseStandardFontsTest() {
[NUnit.Framework.TestCaseSource("Data")]
public virtual void TryToUseStandardFontsTest(PdfUAConformance pdfUAConformance) {
framework.AddBeforeGenerationHook((pdfDoc) => {
Document document = new Document(pdfDoc);
PdfFont font;
Expand All @@ -182,12 +201,17 @@ public virtual void TryToUseStandardFontsTest() {
document.Close();
}
);
framework.AssertBothFail("tryToUseStandardFontsTest", MessageFormatUtil.Format(PdfUAExceptionMessageConstants
.FONT_SHOULD_BE_EMBEDDED, "Courier"), false);
if (pdfUAConformance == PdfUAConformance.PDF_UA_1) {
framework.AssertBothFail("tryToUseStandardFontsTest", MessageFormatUtil.Format(PdfUAExceptionMessageConstants
.FONT_SHOULD_BE_EMBEDDED, "Courier"), false, pdfUAConformance);
}
if (pdfUAConformance == PdfUAConformance.PDF_UA_2) {
framework.AssertVeraPdfFail("tryToUseStandardFontsTest", pdfUAConformance);
}
}

[NUnit.Framework.Test]
public virtual void Type1EmbeddedFontTest() {
[NUnit.Framework.TestCaseSource("Data")]
public virtual void Type1EmbeddedFontTest(PdfUAConformance pdfUAConformance) {
framework.AddBeforeGenerationHook((pdfDoc) => {
Document document = new Document(pdfDoc);
PdfFont font;
Expand All @@ -203,7 +227,7 @@ public virtual void Type1EmbeddedFontTest() {
document.Add(paragraph);
}
);
framework.AssertBothValid("type1EmbeddedFontTest");
framework.AssertBothValid("type1EmbeddedFontTest", pdfUAConformance);
}
}
}
30 changes: 10 additions & 20 deletions itext.tests/itext.pdfua.tests/itext/pdfua/PdfUAMetadataUnitTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -132,8 +132,7 @@ public virtual void DocumentWithBrokenMetadataTest() {

[NUnit.Framework.Test]
public virtual void ValidMetadataUA2Test() {
using (PdfDocument pdfDocument = new PdfUATestPdfDocument(new PdfWriter(new MemoryStream()), PdfUAConformance
.PDF_UA_2)) {
using (PdfDocument pdfDocument = new PdfUA2TestPdfDocument(new PdfWriter(new MemoryStream()))) {
pdfDocument.AddNewPage();
PdfCatalog catalog = pdfDocument.GetCatalog();
byte[] bytes = File.ReadAllBytes(System.IO.Path.Combine(SOURCE_FOLDER + "metadata_ua2.xmp"));
Expand All @@ -149,8 +148,7 @@ public virtual void ValidMetadataUA2Test() {

[NUnit.Framework.Test]
public virtual void CatalogNoMetadataUA2Test() {
using (PdfDocument pdfDocument = new PdfUATestPdfDocument(new PdfWriter(new MemoryStream()), PdfUAConformance
.PDF_UA_2)) {
using (PdfDocument pdfDocument = new PdfUA2TestPdfDocument(new PdfWriter(new MemoryStream()))) {
pdfDocument.AddNewPage();
PdfCatalog catalog = pdfDocument.GetCatalog();
catalog.Remove(PdfName.Metadata);
Expand All @@ -165,8 +163,7 @@ public virtual void CatalogNoMetadataUA2Test() {

[NUnit.Framework.Test]
public virtual void CatalogInvalidMetadataUA2Test() {
using (PdfDocument pdfDocument = new PdfUATestPdfDocument(new PdfWriter(new MemoryStream()), PdfUAConformance
.PDF_UA_2)) {
using (PdfDocument pdfDocument = new PdfUA2TestPdfDocument(new PdfWriter(new MemoryStream()))) {
pdfDocument.AddNewPage();
PdfCatalog catalog = pdfDocument.GetCatalog();
catalog.Put(PdfName.Metadata, new PdfString("Error"));
Expand All @@ -181,8 +178,7 @@ public virtual void CatalogInvalidMetadataUA2Test() {
[NUnit.Framework.Test]
[LogMessage(iText.IO.Logs.IoLogMessageConstant.EXCEPTION_WHILE_UPDATING_XMPMETADATA)]
public virtual void BrokenMetadataUA2Test() {
PdfDocument pdfDocument = new PdfUATestPdfDocument(new PdfWriter(new MemoryStream()), PdfUAConformance.PDF_UA_2
);
PdfDocument pdfDocument = new PdfUA2TestPdfDocument(new PdfWriter(new MemoryStream()));
pdfDocument.AddNewPage();
PdfCatalog catalog = pdfDocument.GetCatalog();
byte[] bytes = File.ReadAllBytes(System.IO.Path.Combine(SOURCE_FOLDER + "invalid_metadata_ua2.xmp"));
Expand All @@ -201,8 +197,7 @@ public virtual void BrokenMetadataUA2Test() {

[NUnit.Framework.Test]
public virtual void DocumentWithNoPartInMetadataUA2Test() {
using (PdfDocument pdfDocument = new PdfUATestPdfDocument(new PdfWriter(new MemoryStream()), PdfUAConformance
.PDF_UA_2)) {
using (PdfDocument pdfDocument = new PdfUA2TestPdfDocument(new PdfWriter(new MemoryStream()))) {
pdfDocument.AddNewPage();
PdfCatalog catalog = pdfDocument.GetCatalog();
byte[] bytes = File.ReadAllBytes(System.IO.Path.Combine(SOURCE_FOLDER + "metadata_no_part_ua2.xmp"));
Expand All @@ -221,8 +216,7 @@ public virtual void DocumentWithNoPartInMetadataUA2Test() {

[NUnit.Framework.Test]
public virtual void DocumentWithInvalidPartInMetadataUA2Test() {
PdfDocument pdfDocument = new PdfUATestPdfDocument(new PdfWriter(new MemoryStream()), PdfUAConformance.PDF_UA_2
);
PdfDocument pdfDocument = new PdfUA2TestPdfDocument(new PdfWriter(new MemoryStream()));
pdfDocument.AddNewPage();
PdfCatalog catalog = pdfDocument.GetCatalog();
byte[] bytes = File.ReadAllBytes(System.IO.Path.Combine(SOURCE_FOLDER + "metadata_invalid_part_ua2.xmp"));
Expand All @@ -241,8 +235,7 @@ public virtual void DocumentWithInvalidPartInMetadataUA2Test() {

[NUnit.Framework.Test]
public virtual void DocumentWithNoRevInMetadataUA2Test() {
using (PdfDocument pdfDocument = new PdfUATestPdfDocument(new PdfWriter(new MemoryStream()), PdfUAConformance
.PDF_UA_2)) {
using (PdfDocument pdfDocument = new PdfUA2TestPdfDocument(new PdfWriter(new MemoryStream()))) {
pdfDocument.AddNewPage();
PdfCatalog catalog = pdfDocument.GetCatalog();
byte[] bytes = File.ReadAllBytes(System.IO.Path.Combine(SOURCE_FOLDER + "metadata_no_rev_ua2.xmp"));
Expand All @@ -261,8 +254,7 @@ public virtual void DocumentWithNoRevInMetadataUA2Test() {

[NUnit.Framework.Test]
public virtual void DocumentWithInvalidRevInMetadataUA2Test() {
PdfDocument pdfDocument = new PdfUATestPdfDocument(new PdfWriter(new MemoryStream()), PdfUAConformance.PDF_UA_2
);
PdfDocument pdfDocument = new PdfUA2TestPdfDocument(new PdfWriter(new MemoryStream()));
pdfDocument.AddNewPage();
PdfCatalog catalog = pdfDocument.GetCatalog();
byte[] bytes = File.ReadAllBytes(System.IO.Path.Combine(SOURCE_FOLDER + "metadata_invalid_rev_ua2.xmp"));
Expand All @@ -281,8 +273,7 @@ public virtual void DocumentWithInvalidRevInMetadataUA2Test() {

[NUnit.Framework.Test]
public virtual void DocumentWithInvalidLengthRevInMetadataUA2Test() {
PdfDocument pdfDocument = new PdfUATestPdfDocument(new PdfWriter(new MemoryStream()), PdfUAConformance.PDF_UA_2
);
PdfDocument pdfDocument = new PdfUA2TestPdfDocument(new PdfWriter(new MemoryStream()));
pdfDocument.AddNewPage();
PdfCatalog catalog = pdfDocument.GetCatalog();
byte[] bytes = File.ReadAllBytes(System.IO.Path.Combine(SOURCE_FOLDER + "metadata_invalid_len_rev_ua2.xmp"
Expand All @@ -302,8 +293,7 @@ public virtual void DocumentWithInvalidLengthRevInMetadataUA2Test() {

[NUnit.Framework.Test]
public virtual void DocumentWithNoTitleInMetadataUA2Test() {
using (PdfDocument pdfDocument = new PdfUATestPdfDocument(new PdfWriter(new MemoryStream()), PdfUAConformance
.PDF_UA_2)) {
using (PdfDocument pdfDocument = new PdfUA2TestPdfDocument(new PdfWriter(new MemoryStream()))) {
pdfDocument.AddNewPage();
PdfCatalog catalog = pdfDocument.GetCatalog();
byte[] bytes = File.ReadAllBytes(System.IO.Path.Combine(SOURCE_FOLDER + "no_title_metadata_ua2.xmp"));
Expand Down
20 changes: 6 additions & 14 deletions itext.tests/itext.pdfua.tests/itext/pdfua/PdfUATestPdfDocument.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,31 +26,23 @@ namespace iText.Pdfua {
/// <summary>PdfDocument extension for testing purposes.</summary>
public class PdfUATestPdfDocument : PdfUADocument {
public PdfUATestPdfDocument(PdfWriter writer)
: this(writer, PdfUAConformance.PDF_UA_1) {
}

public PdfUATestPdfDocument(PdfWriter writer, PdfUAConformance conformance)
: base(writer, CreateConfig(conformance)) {
: base(writer, CreateConfig()) {
}

public PdfUATestPdfDocument(PdfWriter writer, DocumentProperties properties)
: base(writer, properties, CreateConfig(PdfUAConformance.PDF_UA_1)) {
: base(writer, properties, CreateConfig()) {
}

public PdfUATestPdfDocument(PdfReader reader, PdfWriter writer)
: this(reader, writer, PdfUAConformance.PDF_UA_1) {
}

public PdfUATestPdfDocument(PdfReader reader, PdfWriter writer, PdfUAConformance conformance)
: base(reader, writer, CreateConfig(conformance)) {
: base(reader, writer, CreateConfig()) {
}

public PdfUATestPdfDocument(PdfReader reader, PdfWriter writer, StampingProperties properties)
: base(reader, writer, properties, CreateConfig(PdfUAConformance.PDF_UA_1)) {
: base(reader, writer, properties, CreateConfig()) {
}

private static PdfUAConfig CreateConfig(PdfUAConformance uaConformance) {
return new PdfUAConfig(uaConformance, "English pangram", "en-US");
private static PdfUAConfig CreateConfig() {
return new PdfUAConfig(PdfUAConformance.PDF_UA_1, "English pangram", "en-US");
}
}
}
Loading

0 comments on commit 22e92e8

Please sign in to comment.