2015-06-09 21:28:11 +00:00
|
|
|
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
|
2015-06-09 21:28:11 +00:00
|
|
|
|
|
|
|
class GifuTests: XCTestCase {
|
2016-04-24 09:28:09 +00:00
|
|
|
var animator: Animator!
|
|
|
|
var originalFrameCount: Int!
|
2015-06-09 21:28:11 +00:00
|
|
|
|
|
|
|
override func setUp() {
|
|
|
|
super.setUp()
|
2016-04-24 09:28:09 +00:00
|
|
|
animator = Animator(data: imageData, size: CGSizeZero, contentMode: .ScaleToFill, framePreloadCount: preloadFrameCount)
|
|
|
|
originalFrameCount = Int(CGImageSourceGetCount(animator.imageSource))
|
2015-06-09 21:28:11 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func testIsAnimatable() {
|
2016-04-24 09:28:09 +00:00
|
|
|
XCTAssertTrue(animator.isAnimatable)
|
2015-06-09 21:28:11 +00:00
|
|
|
}
|
|
|
|
|
2016-05-27 03:07:25 +00:00
|
|
|
func testCurrentFrame() {
|
|
|
|
XCTAssertEqual(animator.currentFrameIndex, 0)
|
|
|
|
XCTAssertEqual(animator.currentFrameDuration, NSTimeInterval.infinity)
|
|
|
|
XCTAssertNil(animator.currentFrameImage)
|
|
|
|
}
|
|
|
|
|
2015-06-09 21:28:11 +00:00
|
|
|
func testFramePreload() {
|
2016-04-24 09:28:09 +00:00
|
|
|
let expectation = expectationWithDescription("frameDuration")
|
2015-06-09 21:28:11 +00:00
|
|
|
|
2016-04-24 09:28:09 +00:00
|
|
|
animator.prepareFrames {
|
|
|
|
let animatedFrameCount = self.animator.animatedFrames.count
|
|
|
|
XCTAssertEqual(animatedFrameCount, self.originalFrameCount)
|
|
|
|
XCTAssertNotNil(self.animator.frameAtIndex(preloadFrameCount - 1))
|
|
|
|
XCTAssertNil(self.animator.frameAtIndex(preloadFrameCount + 1)?.images)
|
|
|
|
XCTAssertEqual(self.animator.currentFrameIndex, 0)
|
2015-06-09 21:28:11 +00:00
|
|
|
|
2016-04-24 09:28:09 +00:00
|
|
|
self.animator.shouldChangeFrame(1.0) { hasNewFrame in
|
|
|
|
XCTAssertTrue(hasNewFrame)
|
|
|
|
XCTAssertEqual(self.animator.currentFrameIndex, 1)
|
|
|
|
expectation.fulfill()
|
|
|
|
}
|
|
|
|
}
|
2015-06-09 21:28:11 +00:00
|
|
|
|
2016-04-24 09:28:09 +00:00
|
|
|
waitForExpectationsWithTimeout(1.0) { error in
|
|
|
|
if let error = error {
|
|
|
|
print("Error: \(error.localizedDescription)")
|
|
|
|
}
|
|
|
|
}
|
2015-06-09 21:28:11 +00:00
|
|
|
}
|
|
|
|
|
2016-04-24 09:28:09 +00:00
|
|
|
func testFrameInfo() {
|
|
|
|
let expectation = expectationWithDescription("testFrameInfoIsAccurate")
|
|
|
|
|
|
|
|
animator.prepareFrames {
|
|
|
|
let frameDuration = self.animator.frameAtIndex(5)?.duration ?? 0
|
|
|
|
XCTAssertTrue((frameDuration - 0.05) < 0.00001)
|
|
|
|
|
|
|
|
let imageSize = self.animator.frameAtIndex(5)?.size ?? CGSizeZero
|
|
|
|
XCTAssertEqual(imageSize, staticImage.size)
|
|
|
|
|
|
|
|
expectation.fulfill()
|
|
|
|
}
|
2015-06-09 21:28:11 +00:00
|
|
|
|
2016-04-24 09:28:09 +00:00
|
|
|
waitForExpectationsWithTimeout(1.0) { error in
|
|
|
|
if let error = error {
|
|
|
|
print("Error: \(error.localizedDescription)")
|
|
|
|
}
|
2015-06-09 21:28:11 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-04-24 09:28:09 +00:00
|
|
|
private func testImageDataNamed(name: String) -> NSData {
|
2015-06-09 21:28:11 +00:00
|
|
|
let testBundle = NSBundle(forClass: GifuTests.self)
|
|
|
|
let imagePath = testBundle.bundleURL.URLByAppendingPathComponent(name)
|
2016-04-24 09:28:09 +00:00
|
|
|
return NSData(contentsOfURL: imagePath)!
|
2015-06-09 21:28:11 +00:00
|
|
|
}
|