|
@@ -1,462 +0,0 @@
|
|
|
-//
|
|
|
-// 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()
|
|
|
- }
|
|
|
- }
|
|
|
-}
|