123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462 |
- //
- // 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()
- }
- }
- }
|