Gifu/GifuTests/GifuTests.swift

79 lines
2.4 KiB
Swift
Raw Normal View History

import XCTest
import ImageIO
@testable import Gifu
private let imageData = testImageDataNamed("mugen.gif")
2016-04-24 09:28:09 +00:00
private let staticImage = UIImage(data: imageData)!
private let preloadFrameCount = 20
class GifuTests: XCTestCase {
2016-04-24 09:28:09 +00:00
var animator: Animator!
var originalFrameCount: Int!
override func setUp() {
super.setUp()
animator = Animator(data: imageData, size: CGSize.zero, contentMode: .scaleToFill, framePreloadCount: preloadFrameCount)
2016-04-24 09:28:09 +00:00
originalFrameCount = Int(CGImageSourceGetCount(animator.imageSource))
}
func testIsAnimatable() {
2016-04-24 09:28:09 +00:00
XCTAssertTrue(animator.isAnimatable)
}
func testCurrentFrame() {
XCTAssertEqual(animator.currentFrameIndex, 0)
XCTAssertEqual(animator.currentFrameDuration, TimeInterval.infinity)
XCTAssertNil(animator.currentFrameImage)
}
func testFramePreload() {
let expectation = self.expectation(description: "frameDuration")
2016-04-24 09:28:09 +00:00
animator.prepareFrames {
let animatedFrameCount = self.animator.animatedFrames.count
XCTAssertEqual(animatedFrameCount, self.originalFrameCount)
XCTAssertNotNil(self.animator.frame(at: preloadFrameCount - 1))
XCTAssertNil(self.animator.frame(at: preloadFrameCount + 1)?.images)
2016-04-24 09:28:09 +00:00
XCTAssertEqual(self.animator.currentFrameIndex, 0)
self.animator.shouldChangeFrame(with: 1.0) { hasNewFrame in
2016-04-24 09:28:09 +00:00
XCTAssertTrue(hasNewFrame)
XCTAssertEqual(self.animator.currentFrameIndex, 1)
expectation.fulfill()
}
}
waitForExpectations(timeout: 1.0) { error in
2016-04-24 09:28:09 +00:00
if let error = error {
print("Error: \(error.localizedDescription)")
}
}
}
2016-04-24 09:28:09 +00:00
func testFrameInfo() {
let expectation = self.expectation(description: "testFrameInfoIsAccurate")
2016-04-24 09:28:09 +00:00
animator.prepareFrames {
let frameDuration = self.animator.frame(at: 5)?.duration ?? 0
2016-04-24 09:28:09 +00:00
XCTAssertTrue((frameDuration - 0.05) < 0.00001)
let imageSize = self.animator.frame(at: 5)?.size ?? CGSize.zero
2016-04-24 09:28:09 +00:00
XCTAssertEqual(imageSize, staticImage.size)
expectation.fulfill()
}
waitForExpectations(timeout: 1.0) { error in
2016-04-24 09:28:09 +00:00
if let error = error {
print("Error: \(error.localizedDescription)")
}
}
}
}
private func testImageDataNamed(_ name: String) -> Data {
let testBundle = Bundle(for: GifuTests.self)
let imagePath = testBundle.bundleURL.appendingPathComponent(name)
return (try! Data(contentsOf: imagePath))
}