diff --git a/Tests/TPPDFTests/Math/CGPoint+Math_Spec.swift b/Tests/TPPDFTests/Math/CGPoint+Math_Spec.swift deleted file mode 100644 index 9011a0f7..00000000 --- a/Tests/TPPDFTests/Math/CGPoint+Math_Spec.swift +++ /dev/null @@ -1,38 +0,0 @@ -// -// CGPoint+Math_Spec.swift -// TPPDF -// -// Created by Philip Niedertscheider on 11.05.2017. -// Copyright © 2016-2026 techprimate GmbH. All rights reserved. -// - -import CoreGraphics -import Nimble -import Quick -@testable import TPPDF - -class CGPoint_Math_Spec: QuickSpec { - override func spec() { - describe("CGPoint") { - let point = CGPoint(x: 10, y: 20) - - it("can be added to a CGPoint") { - let point2 = CGPoint(x: 30, y: 40) - - expect(point + point2) == CGPoint(x: 40, y: 60) - } - - it("can be subtracted from a point") { - let point2 = CGPoint(x: 30, y: 40) - - expect(point - point2) == CGPoint(x: -20, y: -20) - } - - it("can be added by a value") { - let value: CGFloat = 20 - - expect(point + value) == CGPoint(x: 30, y: 40) - } - } - } -} diff --git a/Tests/TPPDFTests/Math/CGPointMathTests.swift b/Tests/TPPDFTests/Math/CGPointMathTests.swift new file mode 100644 index 00000000..ef18b73a --- /dev/null +++ b/Tests/TPPDFTests/Math/CGPointMathTests.swift @@ -0,0 +1,49 @@ +// +// CGPointMathTests.swift +// TPPDF +// +// Created by Philip Niedertscheider on 11.05.2017. +// Copyright © 2016-2026 techprimate GmbH. All rights reserved. +// + +import CoreGraphics +import Testing +@testable import TPPDF + +struct CGPointMathTests { + @Test func addingPointsAddsBothCoordinates() { + // Arrange + let point = CGPoint(x: 10, y: 20) + let otherPoint = CGPoint(x: 30, y: 40) + + // Act + let result = point + otherPoint + + // Assert + #expect(result == CGPoint(x: 40, y: 60)) + } + + @Test func subtractingPointsSubtractsBothCoordinates() { + // Arrange + let point = CGPoint(x: 10, y: 20) + let otherPoint = CGPoint(x: 30, y: 40) + + // Act + let result = point - otherPoint + + // Assert + #expect(result == CGPoint(x: -20, y: -20)) + } + + @Test func addingScalarAddsToBothCoordinates() { + // Arrange + let point = CGPoint(x: 10, y: 20) + let value: CGFloat = 20 + + // Act + let result = point + value + + // Assert + #expect(result == CGPoint(x: 30, y: 40)) + } +} diff --git a/Tests/TPPDFTests/Metadata/PDFInfo+Equatable_Spec.swift b/Tests/TPPDFTests/Metadata/PDFInfo+Equatable_Spec.swift deleted file mode 100644 index 61b73f6c..00000000 --- a/Tests/TPPDFTests/Metadata/PDFInfo+Equatable_Spec.swift +++ /dev/null @@ -1,92 +0,0 @@ -// -// PDFInfo+Equatable_Spec.swift -// TPPDF -// -// Created by Philip Niedertscheider on 27.12.2017. -// Copyright © 2016-2026 techprimate GmbH. All rights reserved. -// - -import Nimble -import Quick -@testable import TPPDF - -class PDFInfo_Equatable_Spec: QuickSpec { - // swiftlint:disable closure_body_length function_body_length - override func spec() { - describe("PDFInfo+Equatable") { - context("Equatable") { - var object: PDFInfo! - - beforeEach { - object = PDFInfo() - } - - it("is equal") { - let otherObject = PDFInfo() - expect(object) == otherObject - } - - it("is not equal with different title") { - let otherObject = PDFInfo() - otherObject.title = "OTHER" - - expect(object) != otherObject - } - - it("is not equal with different author") { - let otherObject = PDFInfo() - otherObject.author = "OTHER" - - expect(object) != otherObject - } - - it("is not equal with different subject") { - let otherObject = PDFInfo() - otherObject.subject = "OTHER" - - expect(object) != otherObject - } - - it("is not equal with different keywords") { - let otherObject = PDFInfo() - otherObject.keywords = ["OTHER"] - - expect(object) != otherObject - } - - it("is not equal with different owner password") { - let otherObject = PDFInfo() - otherObject.ownerPassword = "OTHER" - - expect(object) != otherObject - } - - it("is not equal with different user password") { - let otherObject = PDFInfo() - otherObject.userPassword = "OTHER" - - expect(object) != otherObject - } - - it("is not equal with different allowsPrinting") { - object.allowsPrinting = true - - let otherObject = PDFInfo() - otherObject.allowsPrinting = false - - expect(object) != otherObject - } - - it("is not equal with different allows copying") { - object.allowsCopying = true - - let otherObject = PDFInfo() - otherObject.allowsCopying = false - - expect(object) != otherObject - } - } - } - } - // swiftlint:enable closure_body_length function_body_length -} diff --git a/Tests/TPPDFTests/Metadata/PDFInfoEquatableTests.swift b/Tests/TPPDFTests/Metadata/PDFInfoEquatableTests.swift new file mode 100644 index 00000000..8c7da78a --- /dev/null +++ b/Tests/TPPDFTests/Metadata/PDFInfoEquatableTests.swift @@ -0,0 +1,47 @@ +// +// PDFInfoEquatableTests.swift +// TPPDF +// +// Created by Philip Niedertscheider on 27.12.2017. +// Copyright © 2016-2026 techprimate GmbH. All rights reserved. +// + +import Testing +@testable import TPPDF + +struct PDFInfoEquatableTests { + @Test func defaultMetadataIsEqual() { + // Arrange + let info = PDFInfo() + let otherInfo = PDFInfo() + + // Act + let isEqual = info == otherInfo + + // Assert + #expect(isEqual) + } + + @Test(arguments: ["title", "author", "subject", "keywords", "ownerPassword", "userPassword", "allowsPrinting", "allowsCopying"]) + func changingMetadataMakesItUnequal(property: String) { + // Arrange + let info = PDFInfo() + let otherInfo = PDFInfo() + switch property { + case "title": otherInfo.title = "OTHER" + case "author": otherInfo.author = "OTHER" + case "subject": otherInfo.subject = "OTHER" + case "keywords": otherInfo.keywords = ["OTHER"] + case "ownerPassword": otherInfo.ownerPassword = "OTHER" + case "userPassword": otherInfo.userPassword = "OTHER" + case "allowsPrinting": otherInfo.allowsPrinting = false + default: otherInfo.allowsCopying = false + } + + // Act + let isEqual = info == otherInfo + + // Assert + #expect(!isEqual) + } +} diff --git a/Tests/TPPDFTests/Metadata/PDFInfoTests.swift b/Tests/TPPDFTests/Metadata/PDFInfoTests.swift new file mode 100644 index 00000000..13ca96c7 --- /dev/null +++ b/Tests/TPPDFTests/Metadata/PDFInfoTests.swift @@ -0,0 +1,53 @@ +// +// PDFInfoTests.swift +// TPPDF +// +// Created by Philip Niedertscheider on 11.04.2017. +// Copyright © 2016-2026 techprimate GmbH. All rights reserved. +// + +import CoreGraphics +import Testing +@testable import TPPDF + +struct PDFInfoTests { + @Test func initializesWithDefaultMetadataAndPermissions() { + // Arrange + let expectedKeywords = ["tppdf", "pdf", "generator"] + + // Act + let info = PDFInfo() + + // Assert + #expect(info.title == "Title") + #expect(info.author == "Author") + #expect(info.subject == "Subject") + #expect(info.keywords == expectedKeywords) + #expect(info.ownerPassword == nil) + #expect(info.userPassword == nil) + #expect(info.allowsPrinting) + #expect(info.allowsCopying) + } + + @Test func generatesMetadataWithConfiguredPasswordsAndPermissions() { + // Arrange + let info = PDFInfo() + info.ownerPassword = "1234" + info.userPassword = "ABCD" + info.allowsPrinting = false + + // Act + let metadata = info.generate() + + // Assert + #expect(metadata[kCGPDFContextTitle as String] as? String == "Title") + #expect(metadata[kCGPDFContextAuthor as String] as? String == "Author") + #expect(metadata[kCGPDFContextSubject as String] as? String == "Subject") + #expect(metadata[kCGPDFContextKeywords as String] as? [String] == ["tppdf", "pdf", "generator"]) + #expect(metadata[kCGPDFContextAllowsPrinting as String] as? Bool == false) + #expect(metadata[kCGPDFContextAllowsCopying as String] as? Bool == true) + #expect(metadata[kCGPDFContextOwnerPassword as String] as? String == "1234") + #expect(metadata[kCGPDFContextUserPassword as String] as? String == "ABCD") + #expect((metadata[kCGPDFContextCreator as String] as? String ?? "").hasPrefix("xctest")) + } +} diff --git a/Tests/TPPDFTests/Metadata/PDFInfo_Spec.swift b/Tests/TPPDFTests/Metadata/PDFInfo_Spec.swift deleted file mode 100644 index c6d73bdf..00000000 --- a/Tests/TPPDFTests/Metadata/PDFInfo_Spec.swift +++ /dev/null @@ -1,78 +0,0 @@ -// -// PDFInfo_Spec.swift -// TPPDF -// -// Created by Philip Niedertscheider on 11.04.2017. -// Copyright © 2016-2026 techprimate GmbH. All rights reserved. -// - -import CoreGraphics -import Nimble -import Quick -@testable import TPPDF - -class PDFInfo_Spec: QuickSpec { - // swiftlint:disable closure_body_length - override func spec() { - describe("PDFInfo") { - var info: PDFInfo! - - beforeEach { - info = PDFInfo() - } - - context("default variables") { - it("should have default title") { - expect(info.title) == "Title" - } - - it("should have default author") { - expect(info.author) == "Author" - } - - it("should have default subject") { - expect(info.subject) == "Subject" - } - - it("should have default keywords") { - expect(info.keywords) == ["tppdf", "pdf", "generator"] - } - - it("should not have default owner password") { - expect(info.ownerPassword).to(beNil()) - } - - it("should not have default user password") { - expect(info.userPassword).to(beNil()) - } - - it("should have default allow printing flag") { - expect(info.allowsPrinting) == true - } - - it("should have default allow copying flag") { - expect(info.allowsCopying) == true - } - } - - it("should generate PDF metadata") { - info.ownerPassword = "1234" - info.userPassword = "ABCD" - info.allowsPrinting = false - - let metadata = info.generate() - - expect(metadata[kCGPDFContextTitle as String] as? String) == "Title" - expect(metadata[kCGPDFContextAuthor as String] as? String) == "Author" - expect(metadata[kCGPDFContextSubject as String] as? String) == "Subject" - expect(metadata[kCGPDFContextKeywords as String] as? [String]) == ["tppdf", "pdf", "generator"] - expect(metadata[kCGPDFContextAllowsPrinting as String] as? Bool).to(beFalse()) - expect(metadata[kCGPDFContextAllowsCopying as String] as? Bool).to(beTrue()) - expect(metadata[kCGPDFContextOwnerPassword as String] as? String) == "1234" - expect(metadata[kCGPDFContextUserPassword as String] as? String) == "ABCD" - expect((metadata[kCGPDFContextCreator as String] as? String ?? "").hasPrefix("xctest")).to(beTrue()) - } - } - } - // swiftlint:enable closure_body_length -} diff --git a/Tests/TPPDFTests/Page Format/PDFPageFormat+Layout_Spec.swift b/Tests/TPPDFTests/Page Format/PDFPageFormat+Layout_Spec.swift deleted file mode 100644 index eb586329..00000000 --- a/Tests/TPPDFTests/Page Format/PDFPageFormat+Layout_Spec.swift +++ /dev/null @@ -1,31 +0,0 @@ -// -// PDFPageFormat+Layout_Spec.swift -// TPPDF -// -// Created by Philip Niedertscheider on 27.12.2017. -// Copyright © 2016-2026 techprimate GmbH. All rights reserved. -// - -import CoreGraphics -import Nimble -import Quick -@testable import TPPDF - -class PDFPageFormat_Layout_Spec: QuickSpec { - override func spec() { - describe("PDFPageFormat") { - context("layout") { - it("has a shorthand method to creaet a PDFPageLayout") { - expect(PDFPageFormat.a0.layout) == PDFPageLayout(size: CGSize(width: 2384, height: 3370), - margin: EdgeInsets( - top: 60.0, - left: 60.0, - bottom: 60.0, - right: 60.0 - ), - space: (header: 15, footer: 15)) - } - } - } - } -} diff --git a/Tests/TPPDFTests/Page Format/PDFPageFormat+NameConstants_Spec.swift b/Tests/TPPDFTests/Page Format/PDFPageFormat+NameConstants_Spec.swift deleted file mode 100644 index e53f95ca..00000000 --- a/Tests/TPPDFTests/Page Format/PDFPageFormat+NameConstants_Spec.swift +++ /dev/null @@ -1,204 +0,0 @@ -// -// PDFPageFormat+NameConstants_Spec.swift -// TPPDF -// -// Created by Philip Niedertscheider on 27.12.2017. -// Copyright © 2016-2026 techprimate GmbH. All rights reserved. -// - -import CoreGraphics -import Nimble -import Quick -@testable import TPPDF - -class PDFPageFormat_NameConstants_Spec: QuickSpec { - // swiftlint:disable closure_body_length function_body_length - override func spec() { - describe("PDFPagename") { - context("NameConstants") { - context("US Series") { - it("has a US Half Letter name") { - expect(PDFPageFormat.usHalfLetter.name) == "US Half Letter" - } - - it("has a US Letter name") { - expect(PDFPageFormat.usLetter.name) == "US Letter" - } - - it("has a US Legal name") { - expect(PDFPageFormat.usLegal.name) == "US Legal" - } - - it("has a US Junior Legal name") { - expect(PDFPageFormat.usJuniorLegal.name) == "US Junior Legal" - } - - it("has a US Ledger name") { - expect(PDFPageFormat.usLedger.name) == "US Ledger" - } - } - - context("ANSI Series") { - it("has a ANSI A name") { - expect(PDFPageFormat.ansiA.name) == "ANSI A" - } - - it("has a ANSI B name") { - expect(PDFPageFormat.ansiB.name) == "ANSI B" - } - - it("has a ANSI C name") { - expect(PDFPageFormat.ansiC.name) == "ANSI C" - } - - it("has a ANSI D name") { - expect(PDFPageFormat.ansiD.name) == "ANSI D" - } - - it("has a ANSI E name") { - expect(PDFPageFormat.ansiE.name) == "ANSI E" - } - } - - context("A Series") { - it("has a A0 name") { - expect(PDFPageFormat.a0.name) == "A0" - } - - it("has a A1 name") { - expect(PDFPageFormat.a1.name) == "A1" - } - - it("has a A2 name") { - expect(PDFPageFormat.a2.name) == "A2" - } - - it("has a A3 name") { - expect(PDFPageFormat.a3.name) == "A3" - } - - it("has a A4 name") { - expect(PDFPageFormat.a4.name) == "A4" - } - - it("has a A5 name") { - expect(PDFPageFormat.a5.name) == "A5" - } - - it("has a A6 name") { - expect(PDFPageFormat.a6.name) == "A6" - } - - it("has a A7 name") { - expect(PDFPageFormat.a7.name) == "A7" - } - - it("has a A8 name") { - expect(PDFPageFormat.a8.name) == "A8" - } - - it("has a A9 name") { - expect(PDFPageFormat.a9.name) == "A9" - } - - it("has a A10 name") { - expect(PDFPageFormat.a10.name) == "A10" - } - } - - context("B Series") { - it("has a B0 name") { - expect(PDFPageFormat.b0.name) == "B0" - } - - it("has a B1 name") { - expect(PDFPageFormat.b1.name) == "B1" - } - - it("has a B2 name") { - expect(PDFPageFormat.b2.name) == "B2" - } - - it("has a B3 name") { - expect(PDFPageFormat.b3.name) == "B3" - } - - it("has a B4 name") { - expect(PDFPageFormat.b4.name) == "B4" - } - - it("has a B5 name") { - expect(PDFPageFormat.b5.name) == "B5" - } - - it("has a B6 name") { - expect(PDFPageFormat.b6.name) == "B6" - } - - it("has a B7 name") { - expect(PDFPageFormat.b7.name) == "B7" - } - - it("has a B8 name") { - expect(PDFPageFormat.b8.name) == "B8" - } - - it("has a B9 name") { - expect(PDFPageFormat.b9.name) == "B9" - } - - it("has a B10 name") { - expect(PDFPageFormat.b10.name) == "B10" - } - } - - context("C Series") { - it("has a C0 name") { - expect(PDFPageFormat.c0.name) == "C0" - } - - it("has a C1 name") { - expect(PDFPageFormat.c1.name) == "C1" - } - - it("has a C2 name") { - expect(PDFPageFormat.c2.name) == "C2" - } - - it("has a C3 name") { - expect(PDFPageFormat.c3.name) == "C3" - } - - it("has a C4 name") { - expect(PDFPageFormat.c4.name) == "C4" - } - - it("has a C5 name") { - expect(PDFPageFormat.c5.name) == "C5" - } - - it("has a C6 name") { - expect(PDFPageFormat.c6.name) == "C6" - } - - it("has a C7 name") { - expect(PDFPageFormat.c7.name) == "C7" - } - - it("has a C8 name") { - expect(PDFPageFormat.c8.name) == "C8" - } - - it("has a C9 name") { - expect(PDFPageFormat.c9.name) == "C9" - } - - it("has a C10 name") { - expect(PDFPageFormat.c10.name) == "C10" - } - } - } - } - } - // swiftlint:enable closure_body_length function_body_length -} diff --git a/Tests/TPPDFTests/Page Format/PDFPageFormat+SizeConstants_Spec.swift b/Tests/TPPDFTests/Page Format/PDFPageFormat+SizeConstants_Spec.swift deleted file mode 100644 index ca8db670..00000000 --- a/Tests/TPPDFTests/Page Format/PDFPageFormat+SizeConstants_Spec.swift +++ /dev/null @@ -1,204 +0,0 @@ -// -// PDFPageFormat+SizeConstants_Spec.swift -// TPPDF -// -// Created by Philip Niedertscheider on 27.12.2017. -// Copyright © 2016-2026 techprimate GmbH. All rights reserved. -// - -import CoreGraphics -import Nimble -import Quick -@testable import TPPDF - -class PDFPageFormat_SizeConstants_Spec: QuickSpec { - // swiftlint:disable closure_body_length function_body_length - override func spec() { - describe("PDFPageFormat") { - context("SizeConstants") { - context("US Series") { - it("has a US Half Letter format") { - expect(PDFPageFormat.usHalfLetter.size) == CGSize(width: 396, height: 612) - } - - it("has a US Letter format") { - expect(PDFPageFormat.usLetter.size) == CGSize(width: 612, height: 792) - } - - it("has a US Legal format") { - expect(PDFPageFormat.usLegal.size) == CGSize(width: 612, height: 1008) - } - - it("has a US Junior Legal format") { - expect(PDFPageFormat.usJuniorLegal.size) == CGSize(width: 360, height: 576) - } - - it("has a US Ledger format") { - expect(PDFPageFormat.usLedger.size) == CGSize(width: 792, height: 1224) - } - } - - context("ANSI Series") { - it("has a ANSI A format") { - expect(PDFPageFormat.ansiA.size) == CGSize(width: 612, height: 792) - } - - it("has a ANSI B format") { - expect(PDFPageFormat.ansiB.size) == CGSize(width: 792, height: 1224) - } - - it("has a ANSI C format") { - expect(PDFPageFormat.ansiC.size) == CGSize(width: 1224, height: 1584) - } - - it("has a ANSI D format") { - expect(PDFPageFormat.ansiD.size) == CGSize(width: 1584, height: 2448) - } - - it("has a ANSI E format") { - expect(PDFPageFormat.ansiE.size) == CGSize(width: 2448, height: 3168) - } - } - - context("A Series") { - it("has a A0 format") { - expect(PDFPageFormat.a0.size) == CGSize(width: 2384, height: 3370) - } - - it("has a A1 format") { - expect(PDFPageFormat.a1.size) == CGSize(width: 1684, height: 2384) - } - - it("has a A2 format") { - expect(PDFPageFormat.a2.size) == CGSize(width: 1191, height: 1684) - } - - it("has a A3 format") { - expect(PDFPageFormat.a3.size) == CGSize(width: 842, height: 1191) - } - - it("has a A4 format") { - expect(PDFPageFormat.a4.size) == CGSize(width: 595, height: 842) - } - - it("has a A5 format") { - expect(PDFPageFormat.a5.size) == CGSize(width: 420, height: 595) - } - - it("has a A6 format") { - expect(PDFPageFormat.a6.size) == CGSize(width: 298, height: 420) - } - - it("has a A7 format") { - expect(PDFPageFormat.a7.size) == CGSize(width: 210, height: 298) - } - - it("has a A8 format") { - expect(PDFPageFormat.a8.size) == CGSize(width: 147, height: 210) - } - - it("has a A9 format") { - expect(PDFPageFormat.a9.size) == CGSize(width: 105, height: 147) - } - - it("has a A10 format") { - expect(PDFPageFormat.a10.size) == CGSize(width: 74, height: 105) - } - } - - context("B Series") { - it("has a B0 format") { - expect(PDFPageFormat.b0.size) == CGSize(width: 2834, height: 4008) - } - - it("has a B1 format") { - expect(PDFPageFormat.b1.size) == CGSize(width: 2004, height: 2834) - } - - it("has a B2 format") { - expect(PDFPageFormat.b2.size) == CGSize(width: 1417, height: 2004) - } - - it("has a B3 format") { - expect(PDFPageFormat.b3.size) == CGSize(width: 1001, height: 1417) - } - - it("has a B4 format") { - expect(PDFPageFormat.b4.size) == CGSize(width: 709, height: 1001) - } - - it("has a B5 format") { - expect(PDFPageFormat.b5.size) == CGSize(width: 499, height: 709) - } - - it("has a B6 format") { - expect(PDFPageFormat.b6.size) == CGSize(width: 354, height: 499) - } - - it("has a B7 format") { - expect(PDFPageFormat.b7.size) == CGSize(width: 249, height: 354) - } - - it("has a B8 format") { - expect(PDFPageFormat.b8.size) == CGSize(width: 176, height: 249) - } - - it("has a B9 format") { - expect(PDFPageFormat.b9.size) == CGSize(width: 125, height: 176) - } - - it("has a B10 format") { - expect(PDFPageFormat.b10.size) == CGSize(width: 88, height: 125) - } - } - - context("C Series") { - it("has a C0 format") { - expect(PDFPageFormat.c0.size) == CGSize(width: 2599, height: 3677) - } - - it("has a C1 format") { - expect(PDFPageFormat.c1.size) == CGSize(width: 1837, height: 2599) - } - - it("has a C2 format") { - expect(PDFPageFormat.c2.size) == CGSize(width: 1298, height: 1837) - } - - it("has a C3 format") { - expect(PDFPageFormat.c3.size) == CGSize(width: 918, height: 1298) - } - - it("has a C4 format") { - expect(PDFPageFormat.c4.size) == CGSize(width: 649, height: 918) - } - - it("has a C5 format") { - expect(PDFPageFormat.c5.size) == CGSize(width: 459, height: 649) - } - - it("has a C6 format") { - expect(PDFPageFormat.c6.size) == CGSize(width: 323, height: 459) - } - - it("has a C7 format") { - expect(PDFPageFormat.c7.size) == CGSize(width: 230, height: 323) - } - - it("has a C8 format") { - expect(PDFPageFormat.c8.size) == CGSize(width: 162, height: 230) - } - - it("has a C9 format") { - expect(PDFPageFormat.c9.size) == CGSize(width: 113, height: 162) - } - - it("has a C10 format") { - expect(PDFPageFormat.c10.size) == CGSize(width: 79, height: 113) - } - } - } - } - } - // swiftlint:enable closure_body_length function_body_length -} diff --git a/Tests/TPPDFTests/Page Format/PDFPageFormatLayoutTests.swift b/Tests/TPPDFTests/Page Format/PDFPageFormatLayoutTests.swift new file mode 100644 index 00000000..38989ea2 --- /dev/null +++ b/Tests/TPPDFTests/Page Format/PDFPageFormatLayoutTests.swift @@ -0,0 +1,29 @@ +// +// PDFPageFormatLayoutTests.swift +// TPPDF +// +// Created by Philip Niedertscheider on 27.12.2017. +// Copyright © 2016-2026 techprimate GmbH. All rights reserved. +// + +import CoreGraphics +import Testing +@testable import TPPDF + +struct PDFPageFormatLayoutTests { + @Test func shorthandCreatesLayoutWithDefaultMarginsAndSpacing() { + // Arrange + let format = PDFPageFormat.a0 + let expectedLayout = PDFPageLayout( + size: CGSize(width: 2384, height: 3370), + margin: EdgeInsets(top: 60, left: 60, bottom: 60, right: 60), + space: (header: 15, footer: 15) + ) + + // Act + let layout = format.layout + + // Assert + #expect(layout == expectedLayout) + } +} diff --git a/Tests/TPPDFTests/Page Format/PDFPageFormatNameConstantsTests.swift b/Tests/TPPDFTests/Page Format/PDFPageFormatNameConstantsTests.swift new file mode 100644 index 00000000..afa208ca --- /dev/null +++ b/Tests/TPPDFTests/Page Format/PDFPageFormatNameConstantsTests.swift @@ -0,0 +1,69 @@ +// +// PDFPageFormatNameConstantsTests.swift +// TPPDF +// +// Created by Philip Niedertscheider on 27.12.2017. +// Copyright © 2016-2026 techprimate GmbH. All rights reserved. +// + +import CoreGraphics +import Testing +@testable import TPPDF + +struct PDFPageFormatNameConstantsTests { + @Test(arguments: [ + ("us.half-letter", "US Half Letter"), + ("us.letter", "US Letter"), + ("us.legal", "US Legal"), + ("us.junior-legal", "US Junior Legal"), + ("us.ledger", "US Ledger"), + ("ansi.a", "ANSI A"), + ("ansi.b", "ANSI B"), + ("ansi.c", "ANSI C"), + ("ansi.d", "ANSI D"), + ("ansi.e", "ANSI E"), + ("a0", "A0"), + ("a1", "A1"), + ("a2", "A2"), + ("a3", "A3"), + ("a4", "A4"), + ("a5", "A5"), + ("a6", "A6"), + ("a7", "A7"), + ("a8", "A8"), + ("a9", "A9"), + ("a10", "A10"), + ("b0", "B0"), + ("b1", "B1"), + ("b2", "B2"), + ("b3", "B3"), + ("b4", "B4"), + ("b5", "B5"), + ("b6", "B6"), + ("b7", "B7"), + ("b8", "B8"), + ("b9", "B9"), + ("b10", "B10"), + ("c0", "C0"), + ("c1", "C1"), + ("c2", "C2"), + ("c3", "C3"), + ("c4", "C4"), + ("c5", "C5"), + ("c6", "C6"), + ("c7", "C7"), + ("c8", "C8"), + ("c9", "C9"), + ("c10", "C10"), + ]) + func formatsHaveExpectedNames(formatName: String, expectedName: String) throws { + // Arrange + let pageFormat = try #require(PDFPageFormat(rawValue: formatName)) + + // Act + let name = pageFormat.name + + // Assert + #expect(name == expectedName) + } +} diff --git a/Tests/TPPDFTests/Page Format/PDFPageFormatSizeConstantsTests.swift b/Tests/TPPDFTests/Page Format/PDFPageFormatSizeConstantsTests.swift new file mode 100644 index 00000000..e0091865 --- /dev/null +++ b/Tests/TPPDFTests/Page Format/PDFPageFormatSizeConstantsTests.swift @@ -0,0 +1,69 @@ +// +// PDFPageFormatSizeConstantsTests.swift +// TPPDF +// +// Created by Philip Niedertscheider on 27.12.2017. +// Copyright © 2016-2026 techprimate GmbH. All rights reserved. +// + +import CoreGraphics +import Testing +@testable import TPPDF + +struct PDFPageFormatSizeConstantsTests { + @Test(arguments: [ + ("us.half-letter", CGSize(width: 396, height: 612)), + ("us.letter", CGSize(width: 612, height: 792)), + ("us.legal", CGSize(width: 612, height: 1008)), + ("us.junior-legal", CGSize(width: 360, height: 576)), + ("us.ledger", CGSize(width: 792, height: 1224)), + ("ansi.a", CGSize(width: 612, height: 792)), + ("ansi.b", CGSize(width: 792, height: 1224)), + ("ansi.c", CGSize(width: 1224, height: 1584)), + ("ansi.d", CGSize(width: 1584, height: 2448)), + ("ansi.e", CGSize(width: 2448, height: 3168)), + ("a0", CGSize(width: 2384, height: 3370)), + ("a1", CGSize(width: 1684, height: 2384)), + ("a2", CGSize(width: 1191, height: 1684)), + ("a3", CGSize(width: 842, height: 1191)), + ("a4", CGSize(width: 595, height: 842)), + ("a5", CGSize(width: 420, height: 595)), + ("a6", CGSize(width: 298, height: 420)), + ("a7", CGSize(width: 210, height: 298)), + ("a8", CGSize(width: 147, height: 210)), + ("a9", CGSize(width: 105, height: 147)), + ("a10", CGSize(width: 74, height: 105)), + ("b0", CGSize(width: 2834, height: 4008)), + ("b1", CGSize(width: 2004, height: 2834)), + ("b2", CGSize(width: 1417, height: 2004)), + ("b3", CGSize(width: 1001, height: 1417)), + ("b4", CGSize(width: 709, height: 1001)), + ("b5", CGSize(width: 499, height: 709)), + ("b6", CGSize(width: 354, height: 499)), + ("b7", CGSize(width: 249, height: 354)), + ("b8", CGSize(width: 176, height: 249)), + ("b9", CGSize(width: 125, height: 176)), + ("b10", CGSize(width: 88, height: 125)), + ("c0", CGSize(width: 2599, height: 3677)), + ("c1", CGSize(width: 1837, height: 2599)), + ("c2", CGSize(width: 1298, height: 1837)), + ("c3", CGSize(width: 918, height: 1298)), + ("c4", CGSize(width: 649, height: 918)), + ("c5", CGSize(width: 459, height: 649)), + ("c6", CGSize(width: 323, height: 459)), + ("c7", CGSize(width: 230, height: 323)), + ("c8", CGSize(width: 162, height: 230)), + ("c9", CGSize(width: 113, height: 162)), + ("c10", CGSize(width: 79, height: 113)), + ]) + func formatsHaveExpectedSizes(formatName: String, expectedSize: CGSize) throws { + // Arrange + let pageFormat = try #require(PDFPageFormat(rawValue: formatName)) + + // Act + let size = pageFormat.size + + // Assert + #expect(size == expectedSize) + } +} diff --git a/Tests/TPPDFTests/Page Format/PDFPageFormatTests.swift b/Tests/TPPDFTests/Page Format/PDFPageFormatTests.swift new file mode 100644 index 00000000..41500348 --- /dev/null +++ b/Tests/TPPDFTests/Page Format/PDFPageFormatTests.swift @@ -0,0 +1,39 @@ +// +// PDFPageFormatTests.swift +// TPPDF +// +// Created by Philip Niedertscheider on 11.04.2017. +// Copyright © 2016-2026 techprimate GmbH. All rights reserved. +// + +import CoreGraphics +import Testing +@testable import TPPDF + +struct PDFPageFormatTests { + @Test func unrelatedSeriesFallBackToTheFormatSize() { + // Arrange + let cFormat = PDFPageFormat.c0 + let usFormat = PDFPageFormat.usLegal + + // Act + let fallbackSizes = [cFormat.usSize, cFormat.ansiSize, cFormat.aSize, cFormat.bSize] + let usFallbackSize = usFormat.cSize + + // Assert + #expect(fallbackSizes.allSatisfy { $0 == cFormat.size }) + #expect(usFallbackSize == usFormat.size) + } + + @Test func landscapeSizeSwapsWidthAndHeight() { + // Arrange + let format = PDFPageFormat.a0 + let expectedSize = CGSize(width: format.size.height, height: format.size.width) + + // Act + let size = format.landscapeSize + + // Assert + #expect(size == expectedSize) + } +} diff --git a/Tests/TPPDFTests/Page Format/PDFPageFormat_Spec.swift b/Tests/TPPDFTests/Page Format/PDFPageFormat_Spec.swift deleted file mode 100644 index 94afe0af..00000000 --- a/Tests/TPPDFTests/Page Format/PDFPageFormat_Spec.swift +++ /dev/null @@ -1,35 +0,0 @@ -// -// PDFPageFormat_Spec.swift -// TPPDF -// -// Created by Philip Niedertscheider on 11.04.2017. -// Copyright © 2016-2026 techprimate GmbH. All rights reserved. -// - -import CoreGraphics -import Nimble -import Quick -@testable import TPPDF - -class PDFPageFormat_Spec: QuickSpec { - override func spec() { - describe("PDFPageFormat") { - context("size") { - it("falls back to correct size") { - expect(PDFPageFormat.c0.usSize) == PDFPageFormat.c0.size - expect(PDFPageFormat.c0.ansiSize) == PDFPageFormat.c0.size - expect(PDFPageFormat.c0.aSize) == PDFPageFormat.c0.size - expect(PDFPageFormat.c0.bSize) == PDFPageFormat.c0.size - expect(PDFPageFormat.usLegal.cSize) == PDFPageFormat.usLegal.size - } - - it("can be rotated to landscape") { - expect(PDFPageFormat.a0.landscapeSize) == CGSize( - width: PDFPageFormat.a0.size.height, - height: PDFPageFormat.a0.size.width - ) - } - } - } - } -} diff --git a/Tests/TPPDFTests/Utils/PDFCalculationsTests.swift b/Tests/TPPDFTests/Utils/PDFCalculationsTests.swift new file mode 100644 index 00000000..2d0a48c4 --- /dev/null +++ b/Tests/TPPDFTests/Utils/PDFCalculationsTests.swift @@ -0,0 +1,37 @@ +// +// PDFCalculationsTests.swift +// TPPDF +// +// Created by Philip Niedertscheider on 11.02.2017. +// Copyright © 2016-2026 techprimate GmbH. All rights reserved. +// + +import CoreGraphics +import Foundation +import Testing +@testable import TPPDF + +struct PDFCalculationsTests { + @Test(arguments: [ + (CGSize(width: 100, height: 100), "12345\n12345\n12345\n12345\n12345", 33.369140625, 75.0, nil as String?), + (CGSize(width: 10, height: 200), "12345\n12345\n123", 6.673828125, 195.0, "45\n12345\n12345"), + (CGSize(width: 200, height: 20), "12345\n", 33.369140625, 15.0, "12345\n12345\n12345\n12345"), + (CGSize(width: 20, height: 20), "12", 13.34765625, 15.0, "345\n12345\n12345\n12345\n12345"), + ]) + func calculatesTextFrameAndRemainder( + bounds: CGSize, expectedText: String, expectedWidth: Double, expectedHeight: Double, expectedRemainder: String? + ) { + // Arrange + let text = NSAttributedString(string: "12345\n12345\n12345\n12345\n12345") + let remainder = expectedRemainder.map { NSAttributedString(string: $0) } + + // Act + let result = PDFCalculations.calculateTextSizeAndRemainder(of: text, in: bounds) + + // Assert + #expect(result.text == NSAttributedString(string: expectedText)) + #expect(abs(result.size.width - expectedWidth) < 0.00001) + #expect(result.size.height == CGFloat(expectedHeight)) + #expect(result.remainder == remainder) + } +} diff --git a/Tests/TPPDFTests/Utils/PDFCalculations_Spec.swift b/Tests/TPPDFTests/Utils/PDFCalculations_Spec.swift deleted file mode 100644 index 340cd938..00000000 --- a/Tests/TPPDFTests/Utils/PDFCalculations_Spec.swift +++ /dev/null @@ -1,57 +0,0 @@ -// -// PDFCalculations_Spec.swift -// TPPDF -// -// Created by Philip Niedertscheider on 11.02.2017. -// Copyright © 2016-2026 techprimate GmbH. All rights reserved. -// - -import CoreGraphics -import Foundation -import Nimble -import Quick -@testable import TPPDF - -class PDFCalculations_Spec: QuickSpec { - override func spec() { - describe("PDFCalculations") { - context("calculate text frame and remainder") { - it("should return correct frame and remainder") { - let attributedString = NSAttributedString(string: "12345\n12345\n12345\n12345\n12345") - - var bounds = CGSize(width: 100, height: 100) - var calcResult = PDFCalculations.calculateTextSizeAndRemainder(of: attributedString, in: bounds) - - expect(calcResult.text) == NSAttributedString(string: "12345\n12345\n12345\n12345\n12345") - expect(calcResult.size.width).to(beCloseTo(33.369140625, within: 0.00001)) - expect(calcResult.size.height) == 75.0 - expect(calcResult.remainder).to(beNil()) - - bounds = CGSize(width: 10, height: 200) - calcResult = PDFCalculations.calculateTextSizeAndRemainder(of: attributedString, in: bounds) - - expect(calcResult.text) == NSAttributedString(string: "12345\n12345\n123") - expect(calcResult.size.width).to(beCloseTo(6.673828125, within: 0.00001)) - expect(calcResult.size.height) == 195.0 - expect(calcResult.remainder) == NSAttributedString(string: "45\n12345\n12345") - - bounds = CGSize(width: 200, height: 20) - calcResult = PDFCalculations.calculateTextSizeAndRemainder(of: attributedString, in: bounds) - - expect(calcResult.text) == NSAttributedString(string: "12345\n") - expect(calcResult.size.width).to(beCloseTo(33.369140625, within: 0.00001)) - expect(calcResult.size.height) == 15.0 - expect(calcResult.remainder) == NSAttributedString(string: "12345\n12345\n12345\n12345") - - bounds = CGSize(width: 20, height: 20) - calcResult = PDFCalculations.calculateTextSizeAndRemainder(of: attributedString, in: bounds) - - expect(calcResult.text) == NSAttributedString(string: "12") - expect(calcResult.size.width).to(beCloseTo(13.34765625, within: 0.00001)) - expect(calcResult.size.height) == 15.0 - expect(calcResult.remainder) == NSAttributedString(string: "345\n12345\n12345\n12345\n12345") - } - } - } - } -} diff --git a/Tests/TPPDFTests/Utils/PDFErrorTests.swift b/Tests/TPPDFTests/Utils/PDFErrorTests.swift new file mode 100644 index 00000000..ae97f557 --- /dev/null +++ b/Tests/TPPDFTests/Utils/PDFErrorTests.swift @@ -0,0 +1,32 @@ +// +// PDFErrorTests.swift +// TPPDF +// +// Created by Philip Niedertscheider on 06.12.2017. +// Copyright © 2016-2026 techprimate GmbH. All rights reserved. +// + +import Foundation +import Testing +@testable import TPPDF + +struct PDFErrorTests { + @Test(arguments: [ + (PDFError.tableContentInvalid(value: nil), "Table content is invalid: nil"), + (.tableIsEmpty, "Table is empty"), + (.tableStructureInvalid(message: "MESSAGE"), "Table structure invalid: MESSAGE"), + (.tableIndexOutOfBounds(index: 5, length: 4), "Table index out of bounds: "), + (.textObjectIsNil, "No text object has been set"), + (.textObjectNotCalculated, "Text object is missing string, maybe not calculated?"), + ]) + func errorsHaveLocalizedDescriptions(error: PDFError, expectedDescription: String) { + // Arrange + let errorToDescribe = error + + // Act + let description = errorToDescribe.localizedDescription + + // Assert + #expect(description == expectedDescription) + } +} diff --git a/Tests/TPPDFTests/Utils/PDFError_Spec.swift b/Tests/TPPDFTests/Utils/PDFError_Spec.swift deleted file mode 100644 index abda12e0..00000000 --- a/Tests/TPPDFTests/Utils/PDFError_Spec.swift +++ /dev/null @@ -1,39 +0,0 @@ -// -// PDFError_Spec.swift -// TPPDF -// -// Created by Philip Niedertscheider on 06.12.2017. -// Copyright © 2016-2026 techprimate GmbH. All rights reserved. -// - -import Nimble -import Quick -@testable import TPPDF - -class PDFError_Spec: QuickSpec { - override func spec() { - describe("PDFError") { - it("should have enum values") { - expect(PDFError.tableContentInvalid(value: nil)).toNot(beNil()) - - expect(PDFError.tableIsEmpty).toNot(beNil()) - expect(PDFError.tableStructureInvalid(message: "MESSAGE")).toNot(beNil()) - expect(PDFError.tableIndexOutOfBounds(index: 5, length: 4)).toNot(beNil()) - - expect(PDFError.textObjectIsNil).toNot(beNil()) - expect(PDFError.textObjectNotCalculated).toNot(beNil()) - } - - it("should have a localized description") { - expect(PDFError.tableContentInvalid(value: nil).localizedDescription) == "Table content is invalid: nil" - - expect(PDFError.tableIsEmpty.localizedDescription) == "Table is empty" - expect(PDFError.tableStructureInvalid(message: "MESSAGE").localizedDescription) == "Table structure invalid: MESSAGE" - expect(PDFError.tableIndexOutOfBounds(index: 5, length: 4).localizedDescription) == "Table index out of bounds: " - - expect(PDFError.textObjectIsNil.localizedDescription) == "No text object has been set" - expect(PDFError.textObjectNotCalculated.localizedDescription) == "Text object is missing string, maybe not calculated?" - } - } - } -} diff --git a/Tests/TPPDFTests/Utils/PDFObject_Spec.swift b/Tests/TPPDFTests/Utils/PDFObject_Spec.swift deleted file mode 100644 index 7047d68a..00000000 --- a/Tests/TPPDFTests/Utils/PDFObject_Spec.swift +++ /dev/null @@ -1,56 +0,0 @@ -// -// PDFObject_Spec.swift -// TPPDF -// -// Created by Philip Niedertscheider on 11.02.2017. -// Copyright © 2016-2026 techprimate GmbH. All rights reserved. -// - -import CoreGraphics -import Foundation -import Nimble -import Quick -@testable import TPPDF - -class PDFObject_Spec: QuickSpec { - override func spec() { - describe("PDFObject") { - let object = PDFRenderObject() - - it("should have a null frame as default") { - expect(object.frame) == CGRect.null - } - - context("generator") { - var document: PDFDocument! - var generator: PDFGenerator! - var container: PDFContainer! - var context: CGContext! - - beforeEach { - document = PDFDocument(format: .a4) - generator = PDFGenerator(document: document) - container = PDFContainer.none - let url = URL(fileURLWithPath: NSTemporaryDirectory()) - .appendingPathComponent(UUID().uuidString) - context = CGContext(url as CFURL, mediaBox: nil, nil) - } - - it("should return a empty subobjects array when calculating") { - var objects: [PDFLocatedRenderObject]? - expect { - objects = try object.calculate(generator: generator, container: container) - }.toNot(throwError()) - - expect(objects).toEventually(beEmpty()) - } - - it("should have a draw method") { - expect { - try object.draw(generator: generator, container: container, in: PDFContext(cgContext: context)) - }.toNot(throwError()) - } - } - } - } -} diff --git a/Tests/TPPDFTests/Utils/PDFRenderObjectTests.swift b/Tests/TPPDFTests/Utils/PDFRenderObjectTests.swift new file mode 100644 index 00000000..d6a8971d --- /dev/null +++ b/Tests/TPPDFTests/Utils/PDFRenderObjectTests.swift @@ -0,0 +1,52 @@ +// +// PDFRenderObjectTests.swift +// TPPDF +// +// Created by Philip Niedertscheider on 11.02.2017. +// Copyright © 2016-2026 techprimate GmbH. All rights reserved. +// + +import CoreGraphics +import Foundation +import Testing +@testable import TPPDF + +struct PDFRenderObjectTests { + @Test func initializesWithNullFrame() { + // Arrange + let expectedFrame = CGRect.null + + // Act + let object = PDFRenderObject() + + // Assert + #expect(object.frame == expectedFrame) + } + + @Test func calculatingReturnsNoSubobjects() throws { + // Arrange + let object = PDFRenderObject() + let generator = PDFGenerator(document: PDFDocument(format: .a4)) + + // Act + let objects = try object.calculate(generator: generator, container: .none) + + // Assert + #expect(objects.isEmpty) + } + + @Test func drawingDoesNotThrow() throws { + // Arrange + let object = PDFRenderObject() + let generator = PDFGenerator(document: PDFDocument(format: .a4)) + let url = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(UUID().uuidString) + defer { try? FileManager.default.removeItem(at: url) } + let context = try #require(CGContext(url as CFURL, mediaBox: nil, nil)) + + // Act + try object.draw(generator: generator, container: .none, in: PDFContext(cgContext: context)) + + // Assert + #expect(object.frame == CGRect.null) + } +}