diff --git a/Package.swift b/Package.swift index 0c312d51..3a4bbdbd 100644 --- a/Package.swift +++ b/Package.swift @@ -18,6 +18,7 @@ if isTestingEnabled { "Nimble", ], resources: [ .copy("resources/sample.pdf"), + .copy("resources/image-fixture.jpg"), ]), .testTarget(name: "TPPDFIntegrationTests", dependencies: [ "TPPDF", diff --git a/Tests/TPPDFTests/Image/PDFImageEquatableTests.swift b/Tests/TPPDFTests/Image/PDFImageEquatableTests.swift new file mode 100644 index 00000000..6c032522 --- /dev/null +++ b/Tests/TPPDFTests/Image/PDFImageEquatableTests.swift @@ -0,0 +1,55 @@ +// +// PDFImageEquatableTests.swift +// TPPDF +// +// Created by Philip Niedertscheider on 11.12.2017. +// Copyright © 2016-2026 techprimate GmbH. All rights reserved. +// + +import CoreGraphics +import Foundation +import Testing +@testable import TPPDF + +struct PDFImageEquatableTests { + @Test func imagesWithSameSettingsAreEqual() throws { + // Arrange + let url = try #require(Bundle.module.url(forResource: "image-fixture", withExtension: "jpg")) + let image = try #require(Image(data: Data(contentsOf: url))) + let caption = PDFSimpleText(text: "EXAMPLE") + let size = CGSize(width: 100, height: 100) + let pdfImage = PDFImage(image: image, caption: caption, size: size, sizeFit: .height, quality: 0.9) + let otherImage = PDFImage(image: image, caption: caption, size: size, sizeFit: .height, quality: 0.9) + + // Act + let isEqual = pdfImage == otherImage + + // Assert + #expect(isEqual) + } + + @Test(arguments: ["image", "caption", "missingCaption", "size", "sizeFit", "quality"]) + func imagesWithDifferentSettingsAreUnequal(property: String) throws { + // Arrange + let url = try #require(Bundle.module.url(forResource: "image-fixture", withExtension: "jpg")) + let image = try #require(Image(data: Data(contentsOf: url))) + let caption = PDFSimpleText(text: "EXAMPLE") + let size = CGSize(width: 100, height: 100) + let pdfImage = PDFImage(image: image, caption: caption, size: size, sizeFit: .height, quality: 0.9) + let otherImage = PDFImage(image: image, caption: caption, size: size, sizeFit: .height, quality: 0.9) + switch property { + case "image": otherImage.image = Image() + case "caption": otherImage.caption = PDFSimpleText(text: "DIFFERENT") + case "missingCaption": otherImage.caption = nil + case "size": otherImage.size = CGSize(width: 20, height: 30) + case "sizeFit": otherImage.sizeFit = .width + default: otherImage.quality = 0.3 + } + + // Act + let isEqual = pdfImage == otherImage + + // Assert + #expect(!isEqual) + } +} diff --git a/Tests/TPPDFTests/Image/PDFImageSizeFitTests.swift b/Tests/TPPDFTests/Image/PDFImageSizeFitTests.swift new file mode 100644 index 00000000..4ed2a863 --- /dev/null +++ b/Tests/TPPDFTests/Image/PDFImageSizeFitTests.swift @@ -0,0 +1,26 @@ +// +// PDFImageSizeFitTests.swift +// TPPDF +// +// Created by Philip Niedertscheider on 11.13.2017. +// Copyright © 2016-2026 techprimate GmbH. All rights reserved. +// + +import Testing +@testable import TPPDF + +struct PDFImageSizeFitTests { + @Test(arguments: [0, 1, 2]) + func initializingImagePreservesEachFittingMode(modeIndex: Int) { + // Arrange + let fittingModes: [PDFImageSizeFit] = [.width, .height, .widthHeight] + let fittingMode = fittingModes[modeIndex] + let image = Image() + + // Act + let pdfImage = PDFImage(image: image, sizeFit: fittingMode) + + // Assert + #expect(pdfImage.sizeFit == fittingMode) + } +} diff --git a/Tests/TPPDFTests/Image/PDFImageSizeFit_Spec.swift b/Tests/TPPDFTests/Image/PDFImageSizeFit_Spec.swift deleted file mode 100644 index 41aa2fae..00000000 --- a/Tests/TPPDFTests/Image/PDFImageSizeFit_Spec.swift +++ /dev/null @@ -1,23 +0,0 @@ -// -// PDFImageSizeFit_Spec.swift -// TPPDF -// -// Created by Philip Niedertscheider on 11.13.2017. -// Copyright © 2016-2026 techprimate GmbH. All rights reserved. -// - -import Nimble -import Quick -@testable import TPPDF - -class PDFImageSizeFit_Spec: QuickSpec { - override func spec() { - describe("PDFImageSizeFit") { - it("should have enum values") { - expect(PDFImageSizeFit.width).toNot(beNil()) - expect(PDFImageSizeFit.height).toNot(beNil()) - expect(PDFImageSizeFit.widthHeight).toNot(beNil()) - } - } - } -} diff --git a/Tests/TPPDFTests/Image/PDFImageTests.swift b/Tests/TPPDFTests/Image/PDFImageTests.swift new file mode 100644 index 00000000..dc30ba16 --- /dev/null +++ b/Tests/TPPDFTests/Image/PDFImageTests.swift @@ -0,0 +1,54 @@ +// +// PDFImageTests.swift +// TPPDF +// +// Created by Philip Niedertscheider on 11.12.2017. +// Copyright © 2016-2026 techprimate GmbH. All rights reserved. +// + +import CoreGraphics +import Foundation +import Testing +@testable import TPPDF + +struct PDFImageTests { + @Test func initializingWithOnlyImageUsesDefaultSettings() throws { + // Arrange + let url = try #require(Bundle.module.url(forResource: "image-fixture", withExtension: "jpg")) + let image = try #require(Image(data: Data(contentsOf: url))) + + // Act + let pdfImage = PDFImage(image: image) + + // Assert + #expect(pdfImage.image == image) + #expect(pdfImage.caption == nil) + #expect(pdfImage.sizeFit == .widthHeight) + #expect(pdfImage.quality == 0.85) + #expect(pdfImage.options == [.resize, .compress]) + } + + @Test func initializingWithCustomSettingsPreservesAllValues() throws { + // Arrange + let url = try #require(Bundle.module.url(forResource: "image-fixture", withExtension: "jpg")) + let image = try #require(Image(data: Data(contentsOf: url))) + let caption = PDFSimpleText(text: "EXAMPLE") + let size = CGSize(width: 100, height: 100) + let fittingMode = PDFImageSizeFit.height + let quality: CGFloat = 0.9 + let options: PDFImageOptions = [.resize] + + // Act + let pdfImage = PDFImage( + image: image, caption: caption, size: size, sizeFit: fittingMode, quality: quality, options: options + ) + + // Assert + #expect(pdfImage.image == image) + #expect(pdfImage.caption as? PDFSimpleText == caption) + #expect(pdfImage.size == size) + #expect(pdfImage.sizeFit == fittingMode) + #expect(pdfImage.quality == quality) + #expect(pdfImage.options == options) + } +} diff --git a/Tests/TPPDFTests/Image/PDFImage_Equatable_Spec.swift b/Tests/TPPDFTests/Image/PDFImage_Equatable_Spec.swift deleted file mode 100644 index ff7fab1b..00000000 --- a/Tests/TPPDFTests/Image/PDFImage_Equatable_Spec.swift +++ /dev/null @@ -1,103 +0,0 @@ -// -// PDFImage_Equatable_Spec.swift -// TPPDF -// -// Created by Philip Niedertscheider on 11.12.2017. -// Copyright © 2016-2026 techprimate GmbH. All rights reserved. -// - -import CoreGraphics -import Foundation -import Nimble -import Quick -@testable import TPPDF - -class PDFImage_Equatable_Spec: QuickSpec { - // swiftlint:disable closure_body_length function_body_length - override func spec() { - describe("PDFImage") { - // swiftlint:disable:next line_length - let base64String = Data("/9j/4AAQSkZJRgABAQAASABIAAD/4QBYRXhpZgAATU0AKgAAAAgAAgESAAMAAAABAAEAAIdpAAQAAAABAAAAJgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAAaADAAQAAAABAAAAAQAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgAAQABAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMABgYGBgYGCgYGCg4KCgoOEg4ODg4SFxISEhISFxwXFxcXFxccHBwcHBwcHCIiIiIiIicnJycnLCwsLCwsLCwsLP/bAEMBBwcHCwoLEwoKEy4fGh8uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLv/dAAQAAf/aAAwDAQACEQMRAD8A6+iiivxY/Sz/2Q==".utf8) - let data = Data(base64Encoded: base64String)! - let image = Image(data: data)! - - let caption = PDFSimpleText(text: "EXAMPLE") - let size = CGSize(width: 100, height: 100) - let fit = PDFImageSizeFit.height - let quality: CGFloat = 0.9 - - let pdfImage = PDFImage(image: image, caption: caption, size: size, sizeFit: fit, quality: quality) - - it("is equal") { - let otherPdfImage = PDFImage(image: image, - caption: caption, - size: size, - sizeFit: fit, - quality: quality) - - expect(pdfImage) == otherPdfImage - } - - it("is not equal with different image") { - let otherPdfImage = PDFImage(image: Image(), - caption: caption, - size: size, - sizeFit: fit, - quality: quality) - - expect(pdfImage) != otherPdfImage - } - - it("is not equal with different caption") { - let otherPdfImage = PDFImage(image: image, - caption: PDFSimpleText(text: "DIFFERENT"), - size: size, - sizeFit: fit, - quality: quality) - - expect(pdfImage) != otherPdfImage - } - - it("is not equal with one missing caption") { - let otherPdfImage = PDFImage(image: image, - caption: nil, - size: size, - sizeFit: fit, - quality: quality) - - expect(pdfImage) != otherPdfImage - } - - it("is not equal with different size") { - let otherPdfImage = PDFImage(image: image, - caption: caption, - size: CGSize(width: 20, height: 30), - sizeFit: fit, - quality: quality) - - expect(pdfImage) != otherPdfImage - } - - it("is not equal with different size fit") { - let otherPdfImage = PDFImage(image: image, - caption: caption, - size: size, - sizeFit: PDFImageSizeFit.width, - quality: quality) - - expect(pdfImage) != otherPdfImage - } - - it("is not equal with different quality") { - let otherPdfImage = PDFImage(image: image, - caption: caption, - size: size, - sizeFit: fit, - quality: 0.3) - - expect(pdfImage) != otherPdfImage - } - } - } - // swiftlint:enable closure_body_length function_body_length -} diff --git a/Tests/TPPDFTests/Image/PDFImage_Spec.swift b/Tests/TPPDFTests/Image/PDFImage_Spec.swift deleted file mode 100644 index 50a454c0..00000000 --- a/Tests/TPPDFTests/Image/PDFImage_Spec.swift +++ /dev/null @@ -1,75 +0,0 @@ -// -// PDFImage_Spec.swift -// TPPDF -// -// Created by Philip Niedertscheider on 11.12.2017. -// Copyright © 2016-2026 techprimate GmbH. All rights reserved. -// - -import CoreGraphics -import Foundation -import Nimble -import Quick -@testable import TPPDF - -class PDFImage_Spec: QuickSpec { - // swiftlint:disable closure_body_length - override func spec() { - describe("PDFImage") { - // swiftlint:disable:next line_length - let base64String = Data("/9j/4AAQSkZJRgABAQAASABIAAD/4QBYRXhpZgAATU0AKgAAAAgAAgESAAMAAAABAAEAAIdpAAQAAAABAAAAJgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAAaADAAQAAAABAAAAAQAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgAAQABAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMABgYGBgYGCgYGCg4KCgoOEg4ODg4SFxISEhISFxwXFxcXFxccHBwcHBwcHCIiIiIiIicnJycnLCwsLCwsLCwsLP/bAEMBBwcHCwoLEwoKEy4fGh8uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLv/dAAQAAf/aAAwDAQACEQMRAD8A6+iiivxY/Sz/2Q==".utf8) - let data = Data(base64Encoded: base64String)! - let image = Image(data: data)! - - let caption = PDFSimpleText(text: "EXAMPLE") - let size = CGSize(width: 100, height: 100) - let fit = PDFImageSizeFit.height - let quality: CGFloat = 0.9 - let options: PDFImageOptions = [.resize] - - var pdfImage: PDFImage! - - beforeEach { - pdfImage = PDFImage(image: image, caption: caption, size: size, sizeFit: fit, quality: quality, options: options) - } - - context("initializer") { - it("can be initialized with only an image") { - pdfImage = PDFImage(image: image) - expect(pdfImage.image) == image - expect(pdfImage.caption).to(beNil()) - expect(pdfImage.sizeFit) == PDFImageSizeFit.widthHeight - expect(pdfImage.quality) == 0.85 - expect(pdfImage.options) == [.resize, .compress] - } - } - - context("variables") { - it("has an image") { - expect(pdfImage.image) == image - } - - it("might have a caption") { - expect(pdfImage.caption as? PDFSimpleText) == caption - } - - it("has a size") { - expect(pdfImage.size) == size - } - - it("has a sizeFit") { - expect(pdfImage.sizeFit) == fit - } - - it("has a quality") { - expect(pdfImage.quality) == quality - } - - it("has options") { - expect(pdfImage.options) == options - } - } - } - } - // swiftlint:enable closure_body_length -} diff --git a/Tests/TPPDFTests/resources/image-fixture.jpg b/Tests/TPPDFTests/resources/image-fixture.jpg new file mode 100644 index 00000000..c3687cb9 Binary files /dev/null and b/Tests/TPPDFTests/resources/image-fixture.jpg differ