|
@@ -0,0 +1,462 @@
|
|
|
+//
|
|
|
+// PDFGeneratorTests.swift
|
|
|
+// PDFGeneratorTests
|
|
|
+//
|
|
|
+// Created by Suguru Kishimoto on 2016/02/04.
|
|
|
+//
|
|
|
+//
|
|
|
+
|
|
|
+import XCTest
|
|
|
+@testable import PDFGenerator
|
|
|
+
|
|
|
+class Mock {
|
|
|
+ struct ImageName {
|
|
|
+ static let testImage1 = "test_image1"
|
|
|
+ }
|
|
|
+
|
|
|
+ class func view(_ size: CGSize) -> UIView {
|
|
|
+ return UIView(frame: CGRect(origin: CGPoint.zero, size: size))
|
|
|
+ }
|
|
|
+
|
|
|
+ class func scrollView(_ size: CGSize) -> UIScrollView {
|
|
|
+ return { () -> UIScrollView in
|
|
|
+ let v = UIScrollView(frame: CGRect(origin: CGPoint.zero, size: size))
|
|
|
+ v.contentSize = v.frame.size
|
|
|
+ return v
|
|
|
+ }()
|
|
|
+ }
|
|
|
+
|
|
|
+ class func imagePath(_ name: String) -> String{
|
|
|
+ return Bundle(for: self).path(forResource: name, ofType: "png")!
|
|
|
+ }
|
|
|
+
|
|
|
+ class func image(_ name: String) -> UIImage {
|
|
|
+ return UIImage(contentsOfFile: imagePath(name))!
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+class PDFGeneratorTests: XCTestCase {
|
|
|
+
|
|
|
+ func isExistPDF(_ path: String) -> Bool {
|
|
|
+ return FileManager.default.fileExists(atPath: path)
|
|
|
+ }
|
|
|
+
|
|
|
+ func PDFDirectoryPath() -> String {
|
|
|
+ return NSHomeDirectory() + "/test/"
|
|
|
+ }
|
|
|
+
|
|
|
+ func PDFfilePath(_ fileName: String) -> String {
|
|
|
+ return PDFDirectoryPath() + "/\(fileName)"
|
|
|
+ }
|
|
|
+
|
|
|
+ override func setUp() {
|
|
|
+ super.setUp()
|
|
|
+ try! FileManager.default.createDirectory(
|
|
|
+ atPath: PDFDirectoryPath(),
|
|
|
+ withIntermediateDirectories: true,
|
|
|
+ attributes: nil
|
|
|
+ )
|
|
|
+ }
|
|
|
+
|
|
|
+ override func tearDown() {
|
|
|
+ _ = try? FileManager.default.removeItem(atPath: PDFDirectoryPath())
|
|
|
+ super.tearDown()
|
|
|
+ }
|
|
|
+
|
|
|
+ // MARK: UIView -> PDF
|
|
|
+ func testViewToPDF() {
|
|
|
+ let view = Mock.view(CGSize(width: 100, height: 100))
|
|
|
+ let view2 = Mock.scrollView(CGSize(width: 100, height: 100))
|
|
|
+
|
|
|
+ let path1 = PDFfilePath("test_sample1.pdf")
|
|
|
+ _ = try? PDFGenerator.generate(view, to: path1)
|
|
|
+ XCTAssertTrue(isExistPDF(path1))
|
|
|
+
|
|
|
+ let path2 = PDFfilePath("hoge/test_sample2.pdf")
|
|
|
+ _ = try? PDFGenerator.generate(view, to: path2)
|
|
|
+ XCTAssertFalse(isExistPDF(path2))
|
|
|
+
|
|
|
+ let path3 = PDFfilePath("test_sample3.pdf")
|
|
|
+ _ = try? PDFGenerator.generate(view, to: path3)
|
|
|
+ XCTAssertTrue(isExistPDF(path3))
|
|
|
+
|
|
|
+ XCTAssertNotNil(try? PDFGenerator.generated(by: view))
|
|
|
+ XCTAssertNotNil(try? PDFGenerator.generated(by: [view]))
|
|
|
+ XCTAssertNotNil(try? PDFGenerator.generated(by: [view, view2]))
|
|
|
+ }
|
|
|
+
|
|
|
+ // MARK: UIImage -> PDF
|
|
|
+ func testImageToPDF() {
|
|
|
+ let image1 = Mock.image("test_image1")
|
|
|
+ let image2 = Mock.image("test_image1")
|
|
|
+
|
|
|
+ let path1 = PDFfilePath("test_sample1.pdf")
|
|
|
+ _ = try? PDFGenerator.generate(image1, to: path1)
|
|
|
+ XCTAssertTrue(isExistPDF(path1))
|
|
|
+
|
|
|
+ let path2 = PDFfilePath("hoge/test_sample2.pdf")
|
|
|
+ _ = try? PDFGenerator.generate(image1, to: path2)
|
|
|
+ XCTAssertFalse(isExistPDF(path2))
|
|
|
+
|
|
|
+ let path3 = PDFfilePath("test_sample3.pdf")
|
|
|
+ _ = try? PDFGenerator.generate([image1, image2], to: path3)
|
|
|
+ XCTAssertTrue(isExistPDF(path3))
|
|
|
+
|
|
|
+ XCTAssertNotNil(try? PDFGenerator.generated(by: image1))
|
|
|
+ XCTAssertNotNil(try? PDFGenerator.generated(by: [image1]))
|
|
|
+ XCTAssertNotNil(try? PDFGenerator.generated(by: [image1, image2]))
|
|
|
+ }
|
|
|
+
|
|
|
+ // MARK: ImagePath(String) -> PDF
|
|
|
+ func testImagePathToPDF() {
|
|
|
+ let image1 = Mock.imagePath("test_image1")
|
|
|
+ let image2 = Mock.imagePath("test_image1")
|
|
|
+
|
|
|
+ let path1 = PDFfilePath("test_sample1.pdf")
|
|
|
+ _ = try? PDFGenerator.generate(image1, to: path1)
|
|
|
+ XCTAssertTrue(isExistPDF(path1))
|
|
|
+
|
|
|
+ let path2 = PDFfilePath("hoge/test_sample2.pdf")
|
|
|
+ _ = try? PDFGenerator.generate(image1, to: path2)
|
|
|
+ XCTAssertFalse(isExistPDF(path2))
|
|
|
+
|
|
|
+ let path3 = PDFfilePath("test_sample3.pdf")
|
|
|
+ _ = try? PDFGenerator.generate([image1, image2], to: path3)
|
|
|
+ XCTAssertTrue(isExistPDF(path3))
|
|
|
+
|
|
|
+ XCTAssertNotNil(try? PDFGenerator.generated(by: image1))
|
|
|
+ XCTAssertNotNil(try? PDFGenerator.generated(by: [image1]))
|
|
|
+ XCTAssertNotNil(try? PDFGenerator.generated(by: [image1, image2]))
|
|
|
+ }
|
|
|
+
|
|
|
+ // MARK: PDFPage -> PDF
|
|
|
+ func testMixedPageToPDF() {
|
|
|
+ let p1 = PDFPage.view(Mock.view(CGSize(width: 100, height: 100)))
|
|
|
+ let p2 = PDFPage.image(Mock.image(Mock.ImageName.testImage1))
|
|
|
+ let p3 = PDFPage.imagePath(Mock.imagePath(Mock.ImageName.testImage1))
|
|
|
+ let p4 = PDFPage.whitePage(CGSize(width: 100, height: 100))
|
|
|
+ let p5 = PDFPage.imageRef(Mock.image(Mock.ImageName.testImage1).cgImage!)
|
|
|
+ let p6 = PDFPage.binary(UIImagePNGRepresentation(Mock.image(Mock.ImageName.testImage1))!)
|
|
|
+
|
|
|
+ let path1 = PDFfilePath("test_sample1.pdf")
|
|
|
+ _ = try? PDFGenerator.generate(p1, to: path1)
|
|
|
+ XCTAssertTrue(isExistPDF(path1))
|
|
|
+
|
|
|
+ let path2 = PDFfilePath("hoge/test_sample2.pdf")
|
|
|
+ _ = try? PDFGenerator.generate(p2, to: path2)
|
|
|
+ XCTAssertFalse(isExistPDF(path2))
|
|
|
+
|
|
|
+ let path3 = PDFfilePath("test_sample3.pdf")
|
|
|
+ _ = try? PDFGenerator.generate([p1, p2, p3, p4], to: path3)
|
|
|
+ XCTAssertTrue(isExistPDF(path3))
|
|
|
+
|
|
|
+ XCTAssertNotNil(try? PDFGenerator.generated(by: p1))
|
|
|
+ XCTAssertNotNil(try? PDFGenerator.generated(by: [p2]))
|
|
|
+ XCTAssertNotNil(try? PDFGenerator.generated(by: [p3, p4]))
|
|
|
+ XCTAssertNotNil(try? PDFGenerator.generated(by: [p5, p6]))
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ // swiftlint:disable function_body_length
|
|
|
+ func testErrors() {
|
|
|
+ let view = Mock.view(CGSize(width: 100, height: 100))
|
|
|
+ let image = Mock.image(Mock.ImageName.testImage1)
|
|
|
+ let imagePath = Mock.imagePath(Mock.ImageName.testImage1)
|
|
|
+ let viewPage = PDFPage.view(Mock.view(CGSize(width: 100, height: 100)))
|
|
|
+ let imagePage = PDFPage.image(Mock.image(Mock.ImageName.testImage1))
|
|
|
+ let imagePathPage = PDFPage.imagePath(Mock.imagePath(Mock.ImageName.testImage1))
|
|
|
+ let whitePage = PDFPage.whitePage(CGSize(width: 100, height: 100))
|
|
|
+ let views = [
|
|
|
+ Mock.view(CGSize(width: 100, height: 100)),
|
|
|
+ Mock.view(CGSize(width: 100, height: 100))
|
|
|
+ ]
|
|
|
+ let images = [
|
|
|
+ Mock.image(Mock.ImageName.testImage1),
|
|
|
+ Mock.image(Mock.ImageName.testImage1)
|
|
|
+ ]
|
|
|
+ let imagePaths = [
|
|
|
+ Mock.imagePath(Mock.ImageName.testImage1),
|
|
|
+ Mock.imagePath(Mock.ImageName.testImage1)
|
|
|
+ ]
|
|
|
+
|
|
|
+ let pages = [
|
|
|
+ PDFPage.view(Mock.view(CGSize(width: 100, height: 100))),
|
|
|
+ PDFPage.image(Mock.image(Mock.ImageName.testImage1)),
|
|
|
+ PDFPage.imagePath(Mock.imagePath(Mock.ImageName.testImage1)),
|
|
|
+ PDFPage.whitePage(CGSize(width: 100, height: 100))
|
|
|
+ ]
|
|
|
+
|
|
|
+ let mocks: [Any] = [
|
|
|
+ view,
|
|
|
+ image,
|
|
|
+ imagePath,
|
|
|
+ viewPage,
|
|
|
+ imagePage,
|
|
|
+ imagePathPage,
|
|
|
+ whitePage,
|
|
|
+ views,
|
|
|
+ images,
|
|
|
+ imagePaths,
|
|
|
+ pages
|
|
|
+ ]
|
|
|
+
|
|
|
+ let emptyMocks: [Any] = [
|
|
|
+ [UIView](),
|
|
|
+ [UIImage](),
|
|
|
+ [String](),
|
|
|
+ [PDFPage]()
|
|
|
+ ]
|
|
|
+
|
|
|
+ // MARK: check EmptyOutputPath
|
|
|
+ mocks.forEach {
|
|
|
+ do {
|
|
|
+ if let page = $0 as? UIView {
|
|
|
+ try PDFGenerator.generate(page, to: "")
|
|
|
+ } else if let page = $0 as? UIImage {
|
|
|
+ try PDFGenerator.generate(page, to: "")
|
|
|
+ } else if let page = $0 as? String {
|
|
|
+ try PDFGenerator.generate(page, to: "")
|
|
|
+ } else if let page = $0 as? PDFPage {
|
|
|
+ try PDFGenerator.generate(page, to: "")
|
|
|
+ } else if let pages = $0 as? [UIView] {
|
|
|
+ try PDFGenerator.generate(pages, to: "")
|
|
|
+ } else if let pages = $0 as? [UIImage] {
|
|
|
+ try PDFGenerator.generate(pages, to: "")
|
|
|
+ } else if let pages = $0 as? [String] {
|
|
|
+ try PDFGenerator.generate(pages, to: "")
|
|
|
+ } else if let pages = $0 as? [PDFPage] {
|
|
|
+ try PDFGenerator.generate(pages, to: "")
|
|
|
+ } else {
|
|
|
+ XCTFail("invalid page(s) type found.")
|
|
|
+ }
|
|
|
+ XCTFail("[\($0)] No create PDF from empty name image path.")
|
|
|
+ } catch PDFGenerateError.emptyOutputPath {
|
|
|
+ // Right Error
|
|
|
+ } catch (let e) {
|
|
|
+ XCTFail("[\($0)] Unknown or wrong error occurred.\(e)")
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // MARK: check EmptyPage
|
|
|
+ emptyMocks.forEach {
|
|
|
+ do {
|
|
|
+ let path = PDFfilePath("test_sample1.pdf")
|
|
|
+ if let pages = $0 as? [UIView] {
|
|
|
+ try PDFGenerator.generate(pages, to: path)
|
|
|
+ } else if let pages = $0 as? [UIImage] {
|
|
|
+ try PDFGenerator.generate(pages, to: path)
|
|
|
+ } else if let pages = $0 as? [String] {
|
|
|
+ try PDFGenerator.generate(pages, to: path)
|
|
|
+ } else if let pages = $0 as? [PDFPage] {
|
|
|
+ try PDFGenerator.generate(pages, to: path)
|
|
|
+ } else {
|
|
|
+ XCTFail("invalid pages type found.")
|
|
|
+ }
|
|
|
+ XCTFail("[\($0)] No create PDF from empty name image path.")
|
|
|
+ } catch PDFGenerateError.emptyPage {
|
|
|
+ // Right Error
|
|
|
+ } catch (let e) {
|
|
|
+ XCTFail("[\($0)] Unknown or wrong error occurred.\(e)")
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // MARK: check EmptyPage
|
|
|
+ emptyMocks.forEach {
|
|
|
+ do {
|
|
|
+ if let pages = $0 as? [UIView] {
|
|
|
+ _ = try PDFGenerator.generated(by: pages)
|
|
|
+ } else if let pages = $0 as? [UIImage] {
|
|
|
+ _ = try PDFGenerator.generated(by: pages)
|
|
|
+ } else if let pages = $0 as? [String] {
|
|
|
+ _ = try PDFGenerator.generated(by: pages)
|
|
|
+ } else if let pages = $0 as? [PDFPage] {
|
|
|
+ _ = try PDFGenerator.generated(by: pages)
|
|
|
+ } else {
|
|
|
+ XCTFail("invalid pages type found.")
|
|
|
+ }
|
|
|
+ XCTFail("[\($0)] No create PDF from empty name image path.")
|
|
|
+ } catch PDFGenerateError.emptyPage {
|
|
|
+ // Right Error
|
|
|
+ } catch (let e) {
|
|
|
+ XCTFail("[\($0)] Unknown or wrong error occurred.\(e)")
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // MARK: check ZeroSizeView
|
|
|
+ let emptyView = Mock.view(CGSize.zero)
|
|
|
+ do {
|
|
|
+ let path = PDFfilePath("test_sample2.pdf")
|
|
|
+ try PDFGenerator.generate(emptyView, to: path)
|
|
|
+ } catch PDFGenerateError.zeroSizeView(let v) {
|
|
|
+ XCTAssertEqual(emptyView, v)
|
|
|
+ } catch (let e) {
|
|
|
+ XCTFail("Unknown or wrong error occurred.\(e)")
|
|
|
+ }
|
|
|
+ do {
|
|
|
+ _ = try PDFGenerator.generated(by: emptyView)
|
|
|
+ } catch PDFGenerateError.zeroSizeView(let v) {
|
|
|
+ XCTAssertEqual(emptyView, v)
|
|
|
+ } catch (let e) {
|
|
|
+ XCTFail("Unknown or wrong error occurred.\(e)")
|
|
|
+ }
|
|
|
+ do {
|
|
|
+ _ = try PDFGenerator.generated(by: [emptyView])
|
|
|
+ } catch PDFGenerateError.zeroSizeView(let v) {
|
|
|
+ XCTAssertEqual(emptyView, v)
|
|
|
+ } catch (let e) {
|
|
|
+ XCTFail("Unknown or wrong error occurred.\(e)")
|
|
|
+ }
|
|
|
+
|
|
|
+ let emptyViewPage = PDFPage.view(emptyView)
|
|
|
+ do {
|
|
|
+ let path = PDFfilePath("test_sample3.pdf")
|
|
|
+ try PDFGenerator.generate(emptyViewPage, to: path)
|
|
|
+ } catch PDFGenerateError.zeroSizeView(let v) {
|
|
|
+ XCTAssertEqual(emptyView, v)
|
|
|
+ } catch (let e) {
|
|
|
+ XCTFail("Unknown or wrong error occurred.\(e)")
|
|
|
+ }
|
|
|
+ do {
|
|
|
+ _ = try PDFGenerator.generated(by: emptyViewPage)
|
|
|
+ } catch PDFGenerateError.zeroSizeView(let v) {
|
|
|
+ XCTAssertEqual(emptyView, v)
|
|
|
+ } catch (let e) {
|
|
|
+ XCTFail("Unknown or wrong error occurred.\(e)")
|
|
|
+ }
|
|
|
+ do {
|
|
|
+ _ = try PDFGenerator.generated(by: [emptyViewPage])
|
|
|
+ } catch PDFGenerateError.zeroSizeView(let v) {
|
|
|
+ XCTAssertEqual(emptyView, v)
|
|
|
+ } catch (let e) {
|
|
|
+ XCTFail("Unknown or wrong error occurred.\(e)")
|
|
|
+ }
|
|
|
+
|
|
|
+ // MARK: check ImageLoadFailed
|
|
|
+ let wrongImagePath = "wrong/image.png"
|
|
|
+ do {
|
|
|
+ let path = PDFfilePath("test_sample4.pdf")
|
|
|
+ try PDFGenerator.generate(wrongImagePath, to: path)
|
|
|
+ } catch PDFGenerateError.imageLoadFailed(let ip) {
|
|
|
+ XCTAssertEqual(wrongImagePath, ip as? String)
|
|
|
+ } catch (let e) {
|
|
|
+ XCTFail("Unknown or wrong error occurred.\(e)")
|
|
|
+ }
|
|
|
+ do {
|
|
|
+ _ = try PDFGenerator.generated(by: wrongImagePath)
|
|
|
+ } catch PDFGenerateError.imageLoadFailed(let ip) {
|
|
|
+ XCTAssertEqual(wrongImagePath, ip as? String)
|
|
|
+ } catch (let e) {
|
|
|
+ XCTFail("Unknown or wrong error occurred.\(e)")
|
|
|
+ }
|
|
|
+ do {
|
|
|
+ _ = try PDFGenerator.generated(by: [wrongImagePath])
|
|
|
+ } catch PDFGenerateError.imageLoadFailed(let ip) {
|
|
|
+ XCTAssertEqual(wrongImagePath, ip as? String)
|
|
|
+ } catch (let e) {
|
|
|
+ XCTFail("Unknown or wrong error occurred.\(e)")
|
|
|
+ }
|
|
|
+
|
|
|
+ let wrongImagePathPage = PDFPage.imagePath(wrongImagePath)
|
|
|
+ do {
|
|
|
+ let path = PDFfilePath("test_sample5.pdf")
|
|
|
+ try PDFGenerator.generate(wrongImagePathPage, to: path)
|
|
|
+ } catch PDFGenerateError.imageLoadFailed(let ip) {
|
|
|
+ XCTAssertEqual(wrongImagePath, ip as? String)
|
|
|
+ } catch (let e) {
|
|
|
+ XCTFail("Unknown or wrong error occurred.\(e)")
|
|
|
+ }
|
|
|
+ do {
|
|
|
+ _ = try PDFGenerator.generated(by: wrongImagePathPage)
|
|
|
+ } catch PDFGenerateError.imageLoadFailed(let ip) {
|
|
|
+ XCTAssertEqual(wrongImagePath, ip as? String)
|
|
|
+ } catch (let e) {
|
|
|
+ XCTFail("Unknown or wrong error occurred.\(e)")
|
|
|
+ }
|
|
|
+ do {
|
|
|
+ _ = try PDFGenerator.generated(by: [wrongImagePathPage])
|
|
|
+ } catch PDFGenerateError.imageLoadFailed(let ip) {
|
|
|
+ XCTAssertEqual(wrongImagePath, ip as? String)
|
|
|
+ } catch (let e) {
|
|
|
+ XCTFail("Unknown or wrong error occurred.\(e)")
|
|
|
+ }
|
|
|
+
|
|
|
+ let wrongData = Data()
|
|
|
+
|
|
|
+ do {
|
|
|
+ _ = try PDFGenerator.generated(by: PDFPage.binary(wrongData))
|
|
|
+ } catch PDFGenerateError.imageLoadFailed(let data) {
|
|
|
+ XCTAssertEqual(wrongData, data as? Data)
|
|
|
+ } catch (let e) {
|
|
|
+ XCTFail("Unknown or wrong error occurred.\(e)")
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ // swiftlint:enable function_body_length
|
|
|
+
|
|
|
+ func testPDFPassword() {
|
|
|
+ let view = Mock.view(CGSize(width: 100, height: 100))
|
|
|
+ let view2 = Mock.view(CGSize(width: 100, height: 100))
|
|
|
+
|
|
|
+ let path1 = PDFfilePath("test_sample1.pdf")
|
|
|
+ _ = try? PDFGenerator.generate(view, to: path1, password: "abcdef")
|
|
|
+ XCTAssertTrue(isExistPDF(path1))
|
|
|
+
|
|
|
+ let path2 = PDFfilePath("test_sample2.pdf")
|
|
|
+ _ = try? PDFGenerator.generate(view, to: path2, password: "⌘123456")
|
|
|
+ XCTAssertFalse(isExistPDF(path2))
|
|
|
+
|
|
|
+ let path3 = PDFfilePath("test_sample3.pdf")
|
|
|
+ do {
|
|
|
+ try PDFGenerator.generate([view, view2], to: path3, password: "123456")
|
|
|
+ } catch {
|
|
|
+ XCTFail()
|
|
|
+ }
|
|
|
+
|
|
|
+ let path4 = PDFfilePath("test_sample4.pdf")
|
|
|
+ do {
|
|
|
+ try PDFGenerator.generate([view, view2], to: path4, password: "⌘123456")
|
|
|
+ XCTFail()
|
|
|
+ } catch PDFGenerateError.invalidPassword(let password) {
|
|
|
+ XCTAssertEqual(password, "⌘123456")
|
|
|
+ } catch {
|
|
|
+ XCTFail()
|
|
|
+ }
|
|
|
+
|
|
|
+ let path5 = PDFfilePath("test_sample5.pdf")
|
|
|
+ do {
|
|
|
+ try PDFGenerator.generate([view, view2], to: path5, password: "0123456789abcdef0123456789abcdefA")
|
|
|
+ XCTFail()
|
|
|
+ } catch PDFGenerateError.tooLongPassword(let length) {
|
|
|
+ XCTAssertEqual(length, 33)
|
|
|
+ } catch {
|
|
|
+ XCTFail()
|
|
|
+ }
|
|
|
+
|
|
|
+ XCTAssertNotNil(try? PDFGenerator.generated(by: view, password: "abcdef"))
|
|
|
+ XCTAssertNil(try? PDFGenerator.generated(by: [view], password: "⌘123456"))
|
|
|
+
|
|
|
+ do {
|
|
|
+ _ = try PDFGenerator.generated(by: [view], password: "123456")
|
|
|
+ } catch {
|
|
|
+ XCTFail()
|
|
|
+ }
|
|
|
+
|
|
|
+ do {
|
|
|
+ _ = try PDFGenerator.generated(by: [view], password: "⌘123456")
|
|
|
+ } catch PDFGenerateError.invalidPassword(let password) {
|
|
|
+ XCTAssertEqual(password, "⌘123456")
|
|
|
+ } catch {
|
|
|
+ XCTFail()
|
|
|
+ }
|
|
|
+
|
|
|
+ do {
|
|
|
+ _ = try PDFGenerator.generated(by: [view], password: "0123456789abcdef0123456789abcdefA")
|
|
|
+ XCTFail()
|
|
|
+ } catch PDFGenerateError.tooLongPassword(let length) {
|
|
|
+ XCTAssertEqual(length, 33)
|
|
|
+ } catch {
|
|
|
+ XCTFail()
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|