PhotoAssetUtilTests.m 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. // Copyright 2019 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #import "ImagePickerTestImages.h"
  5. @import image_picker;
  6. @import XCTest;
  7. @interface PhotoAssetUtilTests : XCTestCase
  8. @end
  9. @implementation PhotoAssetUtilTests
  10. - (void)getAssetFromImagePickerInfoShouldReturnNilIfNotAvailable {
  11. NSDictionary *mockData = @{};
  12. XCTAssertNil([FLTImagePickerPhotoAssetUtil getAssetFromImagePickerInfo:mockData]);
  13. }
  14. - (void)testSaveImageWithOriginalImageData_ShouldSaveWithTheCorrectExtentionAndMetaData {
  15. // test jpg
  16. NSData *dataJPG = ImagePickerTestImages.JPGTestData;
  17. UIImage *imageJPG = [UIImage imageWithData:dataJPG];
  18. NSString *savedPathJPG = [FLTImagePickerPhotoAssetUtil saveImageWithOriginalImageData:dataJPG
  19. image:imageJPG
  20. maxWidth:nil
  21. maxHeight:nil
  22. imageQuality:nil];
  23. XCTAssertNotNil(savedPathJPG);
  24. XCTAssertEqualObjects([savedPathJPG substringFromIndex:savedPathJPG.length - 4], @".jpg");
  25. NSDictionary *originalMetaDataJPG = [FLTImagePickerMetaDataUtil getMetaDataFromImageData:dataJPG];
  26. NSData *newDataJPG = [NSData dataWithContentsOfFile:savedPathJPG];
  27. NSDictionary *newMetaDataJPG = [FLTImagePickerMetaDataUtil getMetaDataFromImageData:newDataJPG];
  28. XCTAssertEqualObjects(originalMetaDataJPG[@"ProfileName"], newMetaDataJPG[@"ProfileName"]);
  29. // test png
  30. NSData *dataPNG = ImagePickerTestImages.PNGTestData;
  31. UIImage *imagePNG = [UIImage imageWithData:dataPNG];
  32. NSString *savedPathPNG = [FLTImagePickerPhotoAssetUtil saveImageWithOriginalImageData:dataPNG
  33. image:imagePNG
  34. maxWidth:nil
  35. maxHeight:nil
  36. imageQuality:nil];
  37. XCTAssertNotNil(savedPathPNG);
  38. XCTAssertEqualObjects([savedPathPNG substringFromIndex:savedPathPNG.length - 4], @".png");
  39. NSDictionary *originalMetaDataPNG = [FLTImagePickerMetaDataUtil getMetaDataFromImageData:dataPNG];
  40. NSData *newDataPNG = [NSData dataWithContentsOfFile:savedPathPNG];
  41. NSDictionary *newMetaDataPNG = [FLTImagePickerMetaDataUtil getMetaDataFromImageData:newDataPNG];
  42. XCTAssertEqualObjects(originalMetaDataPNG[@"ProfileName"], newMetaDataPNG[@"ProfileName"]);
  43. }
  44. - (void)testSaveImageWithPickerInfo_ShouldSaveWithDefaultExtention {
  45. UIImage *imageJPG = [UIImage imageWithData:ImagePickerTestImages.JPGTestData];
  46. NSString *savedPathJPG = [FLTImagePickerPhotoAssetUtil saveImageWithPickerInfo:nil
  47. image:imageJPG
  48. imageQuality:nil];
  49. XCTAssertNotNil(savedPathJPG);
  50. // should be saved as
  51. XCTAssertEqualObjects([savedPathJPG substringFromIndex:savedPathJPG.length - 4],
  52. kFLTImagePickerDefaultSuffix);
  53. }
  54. - (void)testSaveImageWithPickerInfo_ShouldSaveWithTheCorrectExtentionAndMetaData {
  55. NSDictionary *dummyInfo = @{
  56. UIImagePickerControllerMediaMetadata : @{
  57. (__bridge NSString *)kCGImagePropertyExifDictionary :
  58. @{(__bridge NSString *)kCGImagePropertyExifMakerNote : @"aNote"}
  59. }
  60. };
  61. UIImage *imageJPG = [UIImage imageWithData:ImagePickerTestImages.JPGTestData];
  62. NSString *savedPathJPG = [FLTImagePickerPhotoAssetUtil saveImageWithPickerInfo:dummyInfo
  63. image:imageJPG
  64. imageQuality:nil];
  65. NSData *data = [NSData dataWithContentsOfFile:savedPathJPG];
  66. NSDictionary *meta = [FLTImagePickerMetaDataUtil getMetaDataFromImageData:data];
  67. XCTAssertEqualObjects(meta[(__bridge NSString *)kCGImagePropertyExifDictionary]
  68. [(__bridge NSString *)kCGImagePropertyExifMakerNote],
  69. @"aNote");
  70. }
  71. - (void)testSaveImageWithOriginalImageData_ShouldSaveAsGifAnimation {
  72. // test gif
  73. NSData *dataGIF = ImagePickerTestImages.GIFTestData;
  74. UIImage *imageGIF = [UIImage imageWithData:dataGIF];
  75. CGImageSourceRef imageSource = CGImageSourceCreateWithData((CFDataRef)dataGIF, nil);
  76. size_t numberOfFrames = CGImageSourceGetCount(imageSource);
  77. NSNumber *nilSize = (NSNumber *)[NSNull null];
  78. NSString *savedPathGIF = [FLTImagePickerPhotoAssetUtil saveImageWithOriginalImageData:dataGIF
  79. image:imageGIF
  80. maxWidth:nilSize
  81. maxHeight:nilSize
  82. imageQuality:nil];
  83. XCTAssertNotNil(savedPathGIF);
  84. XCTAssertEqualObjects([savedPathGIF substringFromIndex:savedPathGIF.length - 4], @".gif");
  85. NSData *newDataGIF = [NSData dataWithContentsOfFile:savedPathGIF];
  86. CGImageSourceRef newImageSource = CGImageSourceCreateWithData((CFDataRef)newDataGIF, nil);
  87. size_t newNumberOfFrames = CGImageSourceGetCount(newImageSource);
  88. XCTAssertEqual(numberOfFrames, newNumberOfFrames);
  89. }
  90. - (void)testSaveImageWithOriginalImageData_ShouldSaveAsScalledGifAnimation {
  91. // test gif
  92. NSData *dataGIF = ImagePickerTestImages.GIFTestData;
  93. UIImage *imageGIF = [UIImage imageWithData:dataGIF];
  94. CGImageSourceRef imageSource = CGImageSourceCreateWithData((CFDataRef)dataGIF, nil);
  95. size_t numberOfFrames = CGImageSourceGetCount(imageSource);
  96. NSString *savedPathGIF = [FLTImagePickerPhotoAssetUtil saveImageWithOriginalImageData:dataGIF
  97. image:imageGIF
  98. maxWidth:@3
  99. maxHeight:@2
  100. imageQuality:nil];
  101. NSData *newDataGIF = [NSData dataWithContentsOfFile:savedPathGIF];
  102. UIImage *newImage = [[UIImage alloc] initWithData:newDataGIF];
  103. XCTAssertEqual(newImage.size.width, 3);
  104. XCTAssertEqual(newImage.size.height, 2);
  105. CGImageSourceRef newImageSource = CGImageSourceCreateWithData((CFDataRef)newDataGIF, nil);
  106. size_t newNumberOfFrames = CGImageSourceGetCount(newImageSource);
  107. XCTAssertEqual(numberOfFrames, newNumberOfFrames);
  108. }
  109. @end