// Copyright 2019 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #import "ImagePickerTestImages.h" @import image_picker; @import XCTest; @interface PhotoAssetUtilTests : XCTestCase @end @implementation PhotoAssetUtilTests - (void)getAssetFromImagePickerInfoShouldReturnNilIfNotAvailable { NSDictionary *mockData = @{}; XCTAssertNil([FLTImagePickerPhotoAssetUtil getAssetFromImagePickerInfo:mockData]); } - (void)testSaveImageWithOriginalImageData_ShouldSaveWithTheCorrectExtentionAndMetaData { // test jpg NSData *dataJPG = ImagePickerTestImages.JPGTestData; UIImage *imageJPG = [UIImage imageWithData:dataJPG]; NSString *savedPathJPG = [FLTImagePickerPhotoAssetUtil saveImageWithOriginalImageData:dataJPG image:imageJPG maxWidth:nil maxHeight:nil imageQuality:nil]; XCTAssertNotNil(savedPathJPG); XCTAssertEqualObjects([savedPathJPG substringFromIndex:savedPathJPG.length - 4], @".jpg"); NSDictionary *originalMetaDataJPG = [FLTImagePickerMetaDataUtil getMetaDataFromImageData:dataJPG]; NSData *newDataJPG = [NSData dataWithContentsOfFile:savedPathJPG]; NSDictionary *newMetaDataJPG = [FLTImagePickerMetaDataUtil getMetaDataFromImageData:newDataJPG]; XCTAssertEqualObjects(originalMetaDataJPG[@"ProfileName"], newMetaDataJPG[@"ProfileName"]); // test png NSData *dataPNG = ImagePickerTestImages.PNGTestData; UIImage *imagePNG = [UIImage imageWithData:dataPNG]; NSString *savedPathPNG = [FLTImagePickerPhotoAssetUtil saveImageWithOriginalImageData:dataPNG image:imagePNG maxWidth:nil maxHeight:nil imageQuality:nil]; XCTAssertNotNil(savedPathPNG); XCTAssertEqualObjects([savedPathPNG substringFromIndex:savedPathPNG.length - 4], @".png"); NSDictionary *originalMetaDataPNG = [FLTImagePickerMetaDataUtil getMetaDataFromImageData:dataPNG]; NSData *newDataPNG = [NSData dataWithContentsOfFile:savedPathPNG]; NSDictionary *newMetaDataPNG = [FLTImagePickerMetaDataUtil getMetaDataFromImageData:newDataPNG]; XCTAssertEqualObjects(originalMetaDataPNG[@"ProfileName"], newMetaDataPNG[@"ProfileName"]); } - (void)testSaveImageWithPickerInfo_ShouldSaveWithDefaultExtention { UIImage *imageJPG = [UIImage imageWithData:ImagePickerTestImages.JPGTestData]; NSString *savedPathJPG = [FLTImagePickerPhotoAssetUtil saveImageWithPickerInfo:nil image:imageJPG imageQuality:nil]; XCTAssertNotNil(savedPathJPG); // should be saved as XCTAssertEqualObjects([savedPathJPG substringFromIndex:savedPathJPG.length - 4], kFLTImagePickerDefaultSuffix); } - (void)testSaveImageWithPickerInfo_ShouldSaveWithTheCorrectExtentionAndMetaData { NSDictionary *dummyInfo = @{ UIImagePickerControllerMediaMetadata : @{ (__bridge NSString *)kCGImagePropertyExifDictionary : @{(__bridge NSString *)kCGImagePropertyExifMakerNote : @"aNote"} } }; UIImage *imageJPG = [UIImage imageWithData:ImagePickerTestImages.JPGTestData]; NSString *savedPathJPG = [FLTImagePickerPhotoAssetUtil saveImageWithPickerInfo:dummyInfo image:imageJPG imageQuality:nil]; NSData *data = [NSData dataWithContentsOfFile:savedPathJPG]; NSDictionary *meta = [FLTImagePickerMetaDataUtil getMetaDataFromImageData:data]; XCTAssertEqualObjects(meta[(__bridge NSString *)kCGImagePropertyExifDictionary] [(__bridge NSString *)kCGImagePropertyExifMakerNote], @"aNote"); } - (void)testSaveImageWithOriginalImageData_ShouldSaveAsGifAnimation { // test gif NSData *dataGIF = ImagePickerTestImages.GIFTestData; UIImage *imageGIF = [UIImage imageWithData:dataGIF]; CGImageSourceRef imageSource = CGImageSourceCreateWithData((CFDataRef)dataGIF, nil); size_t numberOfFrames = CGImageSourceGetCount(imageSource); NSNumber *nilSize = (NSNumber *)[NSNull null]; NSString *savedPathGIF = [FLTImagePickerPhotoAssetUtil saveImageWithOriginalImageData:dataGIF image:imageGIF maxWidth:nilSize maxHeight:nilSize imageQuality:nil]; XCTAssertNotNil(savedPathGIF); XCTAssertEqualObjects([savedPathGIF substringFromIndex:savedPathGIF.length - 4], @".gif"); NSData *newDataGIF = [NSData dataWithContentsOfFile:savedPathGIF]; CGImageSourceRef newImageSource = CGImageSourceCreateWithData((CFDataRef)newDataGIF, nil); size_t newNumberOfFrames = CGImageSourceGetCount(newImageSource); XCTAssertEqual(numberOfFrames, newNumberOfFrames); } - (void)testSaveImageWithOriginalImageData_ShouldSaveAsScalledGifAnimation { // test gif NSData *dataGIF = ImagePickerTestImages.GIFTestData; UIImage *imageGIF = [UIImage imageWithData:dataGIF]; CGImageSourceRef imageSource = CGImageSourceCreateWithData((CFDataRef)dataGIF, nil); size_t numberOfFrames = CGImageSourceGetCount(imageSource); NSString *savedPathGIF = [FLTImagePickerPhotoAssetUtil saveImageWithOriginalImageData:dataGIF image:imageGIF maxWidth:@3 maxHeight:@2 imageQuality:nil]; NSData *newDataGIF = [NSData dataWithContentsOfFile:savedPathGIF]; UIImage *newImage = [[UIImage alloc] initWithData:newDataGIF]; XCTAssertEqual(newImage.size.width, 3); XCTAssertEqual(newImage.size.height, 2); CGImageSourceRef newImageSource = CGImageSourceCreateWithData((CFDataRef)newDataGIF, nil); size_t newNumberOfFrames = CGImageSourceGetCount(newImageSource); XCTAssertEqual(numberOfFrames, newNumberOfFrames); } @end