PixelFormatDecodingTests.swift 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import Foundation
  2. import XCTest
  3. @testable import Kingfisher
  4. final class PixelFormatDecodingTests: XCTestCase {
  5. private struct Sample {
  6. let fileName: String
  7. let expectedBitsAfterDecoding: Int
  8. let expectedColorSpaceName: String?
  9. }
  10. private let samples: [Sample] = [
  11. Sample(fileName: "gradient-8b-srgb-opaque.png", expectedBitsAfterDecoding: 8, expectedColorSpaceName: CGColorSpace.sRGB as String),
  12. Sample(fileName: "gradient-8b-srgb-alpha.png", expectedBitsAfterDecoding: 8, expectedColorSpaceName: CGColorSpace.sRGB as String),
  13. Sample(fileName: "gradient-8b-displayp3-alpha.png", expectedBitsAfterDecoding: 8, expectedColorSpaceName: CGColorSpace.displayP3 as String),
  14. Sample(fileName: "gradient-8b-gray.png", expectedBitsAfterDecoding: 8, expectedColorSpaceName: CGColorSpace.genericGrayGamma2_2 as String),
  15. Sample(fileName: "gradient-10b-srgb-opaque.heic", expectedBitsAfterDecoding: 16, expectedColorSpaceName: CGColorSpace.sRGB as String),
  16. Sample(fileName: "gradient-10b-srgb-alpha.heic", expectedBitsAfterDecoding: 16, expectedColorSpaceName: CGColorSpace.sRGB as String),
  17. Sample(fileName: "gradient-10b-displayp3-alpha.heic", expectedBitsAfterDecoding: 16, expectedColorSpaceName: CGColorSpace.displayP3 as String),
  18. Sample(fileName: "gradient-16b-srgb-alpha.png", expectedBitsAfterDecoding: 16, expectedColorSpaceName: CGColorSpace.sRGB as String),
  19. Sample(fileName: "gradient-16b-gray.png", expectedBitsAfterDecoding: 16, expectedColorSpaceName: CGColorSpace.genericGrayGamma2_2 as String)
  20. ]
  21. func testDecodingSupportsVariousPixelFormats() {
  22. for sample in samples {
  23. let data = Data(fileName: sample.fileName)
  24. let options = ImageCreatingOptions()
  25. guard let image = KingfisherWrapper<KFCrossPlatformImage>.image(data: data, options: options) else {
  26. XCTFail("Failed to construct image for \(sample.fileName)")
  27. continue
  28. }
  29. let decoded = image.kf.decoded
  30. guard let cgImage = decoded.kf.cgImage else {
  31. XCTFail("Decoded image lost CGImage for \(sample.fileName)")
  32. continue
  33. }
  34. #if os(macOS)
  35. if sample.expectedBitsAfterDecoding > 8 {
  36. XCTAssertNotIdentical(decoded, image, "Decoding should redraw \(sample.fileName)")
  37. }
  38. XCTAssertEqual(cgImage.bitsPerComponent, sample.expectedBitsAfterDecoding, "Unexpected bitsPerComponent for \(sample.fileName)")
  39. if let expectedColorSpaceName = sample.expectedColorSpaceName {
  40. XCTAssertEqual(cgImage.colorSpace?.name as String?, expectedColorSpaceName, "Unexpected color space for \(sample.fileName)")
  41. } else {
  42. XCTFail("expectedColorSpaceName not existing, but needed for \(sample.fileName)")
  43. }
  44. #else
  45. XCTAssertEqual(
  46. cgImage.bitsPerComponent,
  47. sample.expectedBitsAfterDecoding,
  48. "Unexpected bitsPerComponent for \(sample.fileName)"
  49. )
  50. #endif
  51. }
  52. }
  53. }