/core/externals/google-toolbox-for-mac/iPhone/GTMUIImage+ResizeTest.m

http://macfuse.googlecode.com/ · Objective C · 284 lines · 209 code · 37 blank · 38 comment · 0 complexity · afba4d5a189577a11f17db73a3c19560 MD5 · raw file

  1. //
  2. // GTMUIImage+ResizeTest.m
  3. //
  4. // Copyright 2009 Google Inc.
  5. //
  6. // Licensed under the Apache License, Version 2.0 (the "License"); you may not
  7. // use this file except in compliance with the License. You may obtain a copy
  8. // of the License at
  9. //
  10. // http://www.apache.org/licenses/LICENSE-2.0
  11. //
  12. // Unless required by applicable law or agreed to in writing, software
  13. // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  14. // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
  15. // License for the specific language governing permissions and limitations under
  16. // the License.
  17. //
  18. #import "GTMSenTestCase.h"
  19. #import "GTMNSObject+UnitTesting.h"
  20. #import "GTMUIImage+Resize.h"
  21. #define GTMUIImageResizeAssertImageEqual(imageObject, imageSuffix) \
  22. GTMAssertObjectImageEqualToImageNamed(imageObject, \
  23. @"GTMUIImage+Resize_" imageSuffix,\
  24. @"Resized image mismatched.")
  25. @interface GTMUIImage_ResizeTest : GTMTestCase
  26. - (UIImage *)testImageNamed:(NSString *)imageName;
  27. @end
  28. @implementation GTMUIImage_ResizeTest
  29. - (UIImage *)testImageNamed:(NSString *)imageName {
  30. NSBundle *myBundle = [NSBundle bundleForClass:[self class]];
  31. NSString *imagePath = [myBundle pathForResource:imageName ofType:@"png"];
  32. UIImage *result = [UIImage imageWithContentsOfFile:imagePath];
  33. return result;
  34. }
  35. - (void)testNilImage {
  36. UIImage *image = [[UIImage alloc] init];
  37. UIImage *actual = [image gtm_imageByResizingToSize:CGSizeMake(100, 100)
  38. preserveAspectRatio:YES
  39. trimToFit:NO];
  40. STAssertNil(actual, @"Invalid inputs should return nil");
  41. }
  42. - (void)testInvalidInput {
  43. UIImage *actual;
  44. UIImage *image
  45. = [UIImage imageNamed:@"GTMUIImage+Resize_100x50.png"];
  46. actual = [image gtm_imageByResizingToSize:CGSizeZero
  47. preserveAspectRatio:YES
  48. trimToFit:NO];
  49. STAssertNil(actual, @"CGSizeZero resize should be ignored.");
  50. actual = [image gtm_imageByResizingToSize:CGSizeMake(0.1, 0.1)
  51. preserveAspectRatio:YES
  52. trimToFit:NO];
  53. STAssertNil(actual, @"Invalid size should be ignored.");
  54. actual = [image gtm_imageByResizingToSize:CGSizeMake(-100, -100)
  55. preserveAspectRatio:YES
  56. trimToFit:NO];
  57. STAssertNil(actual, @"Invalid size should be ignored.");
  58. }
  59. - (void)testImageByResizingWithoutPreservingAspectRatio {
  60. UIImage *actual = nil;
  61. // Square image.
  62. UIImage *originalImage = [self testImageNamed:@"GTMUIImage+Resize_100x100"];
  63. STAssertNotNil(originalImage, @"Unable to read image.");
  64. // Resize with same aspect ratio.
  65. CGSize size50x50 = CGSizeMake(50, 50);
  66. actual = [originalImage gtm_imageByResizingToSize:size50x50
  67. preserveAspectRatio:NO
  68. trimToFit:NO];
  69. STAssertTrue(CGSizeEqualToSize([actual size], size50x50),
  70. @"Resized image should equal size: %@ actual: %@",
  71. NSStringFromCGSize(size50x50),
  72. NSStringFromCGSize([actual size]));
  73. GTMUIImageResizeAssertImageEqual(actual, @"100x100_to_50x50");
  74. // Resize with different aspect ratio
  75. CGSize size60x40 = CGSizeMake(60, 40);
  76. actual = [originalImage gtm_imageByResizingToSize:size60x40
  77. preserveAspectRatio:NO
  78. trimToFit:NO];
  79. STAssertTrue(CGSizeEqualToSize([actual size], size60x40),
  80. @"Resized image should equal size: %@ actual: %@",
  81. NSStringFromCGSize(size60x40),
  82. NSStringFromCGSize([actual size]));
  83. GTMUIImageResizeAssertImageEqual(actual, @"100x100_to_60x40");
  84. CGSize size40x60 = CGSizeMake(40, 60);
  85. actual = [originalImage gtm_imageByResizingToSize:size40x60
  86. preserveAspectRatio:NO
  87. trimToFit:NO];
  88. STAssertTrue(CGSizeEqualToSize([actual size], size40x60),
  89. @"Resized image should equal size: %@ actual: %@",
  90. NSStringFromCGSize(size40x60),
  91. NSStringFromCGSize([actual size]));
  92. GTMUIImageResizeAssertImageEqual(actual, @"100x100_to_40x60");
  93. }
  94. - (void)testImageByResizingPreservingAspectRatioWithoutClip {
  95. UIImage *actual = nil;
  96. UIImage *landscapeImage = [self testImageNamed:@"GTMUIImage+Resize_100x50"];
  97. STAssertNotNil(landscapeImage, @"Unable to read image.");
  98. // Landscape resize to 50x50, but clipped to 50x25.
  99. CGSize size50x50 = CGSizeMake(50, 50);
  100. CGSize expected50x25 = CGSizeMake(50, 25);
  101. actual = [landscapeImage gtm_imageByResizingToSize:size50x50
  102. preserveAspectRatio:YES
  103. trimToFit:NO];
  104. STAssertTrue(CGSizeEqualToSize([actual size], expected50x25),
  105. @"Resized image should equal size: %@ actual: %@",
  106. NSStringFromCGSize(expected50x25),
  107. NSStringFromCGSize([actual size]));
  108. GTMUIImageResizeAssertImageEqual(actual, @"100x50_to_50x50_noclip");
  109. // Landscape resize to 60x40, but clipped to 60x30.
  110. CGSize size60x40 = CGSizeMake(60, 40);
  111. CGSize expected60x30 = CGSizeMake(60, 30);
  112. actual = [landscapeImage gtm_imageByResizingToSize:size60x40
  113. preserveAspectRatio:YES
  114. trimToFit:NO];
  115. STAssertTrue(CGSizeEqualToSize([actual size], expected60x30),
  116. @"Resized image should equal size: %@ actual: %@",
  117. NSStringFromCGSize(expected60x30),
  118. NSStringFromCGSize([actual size]));
  119. GTMUIImageResizeAssertImageEqual(actual, @"100x50_to_60x40_noclip");
  120. // Landscape resize to 40x60, but clipped to 40x20.
  121. CGSize expected40x20 = CGSizeMake(40, 20);
  122. CGSize size40x60 = CGSizeMake(40, 60);
  123. actual = [landscapeImage gtm_imageByResizingToSize:size40x60
  124. preserveAspectRatio:YES
  125. trimToFit:NO];
  126. STAssertTrue(CGSizeEqualToSize([actual size], expected40x20),
  127. @"Resized image should equal size: %@ actual: %@",
  128. NSStringFromCGSize(expected40x20),
  129. NSStringFromCGSize([actual size]));
  130. GTMUIImageResizeAssertImageEqual(actual, @"100x50_to_40x60_noclip");
  131. // Portrait Image
  132. UIImage *portraitImage = [self testImageNamed:@"GTMUIImage+Resize_50x100"];
  133. // Portrait resize to 50x50, but clipped to 25x50.
  134. CGSize expected25x50 = CGSizeMake(25, 50);
  135. actual = [portraitImage gtm_imageByResizingToSize:size50x50
  136. preserveAspectRatio:YES
  137. trimToFit:NO];
  138. STAssertTrue(CGSizeEqualToSize([actual size], expected25x50),
  139. @"Resized image should equal size: %@ actual: %@",
  140. NSStringFromCGSize(expected25x50),
  141. NSStringFromCGSize([actual size]));
  142. GTMUIImageResizeAssertImageEqual(actual, @"50x100_to_50x50_noclip");
  143. // Portrait resize to 60x40, but clipped to 20x40.
  144. CGSize expected20x40 = CGSizeMake(20, 40);
  145. actual = [portraitImage gtm_imageByResizingToSize:size60x40
  146. preserveAspectRatio:YES
  147. trimToFit:NO];
  148. STAssertTrue(CGSizeEqualToSize([actual size], expected20x40),
  149. @"Resized image should equal size: %@ actual: %@",
  150. NSStringFromCGSize(expected20x40),
  151. NSStringFromCGSize([actual size]));
  152. GTMUIImageResizeAssertImageEqual(actual, @"50x100_to_60x40_noclip");
  153. // Portrait resize to 40x60, but clipped to 30x60.
  154. CGSize expected30x60 = CGSizeMake(30, 60);
  155. actual = [portraitImage gtm_imageByResizingToSize:size40x60
  156. preserveAspectRatio:YES
  157. trimToFit:NO];
  158. STAssertTrue(CGSizeEqualToSize([actual size], expected30x60),
  159. @"Resized image should equal size: %@ actual: %@",
  160. NSStringFromCGSize(expected30x60),
  161. NSStringFromCGSize([actual size]));
  162. GTMUIImageResizeAssertImageEqual(actual, @"50x100_to_40x60_noclip");
  163. }
  164. - (void)testImageByResizingPreservingAspectRatioWithClip {
  165. UIImage *actual = nil;
  166. UIImage *landscapeImage = [self testImageNamed:@"GTMUIImage+Resize_100x50"];
  167. STAssertNotNil(landscapeImage, @"Unable to read image.");
  168. // Landscape resize to 50x50
  169. CGSize size50x50 = CGSizeMake(50, 50);
  170. actual = [landscapeImage gtm_imageByResizingToSize:size50x50
  171. preserveAspectRatio:YES
  172. trimToFit:YES];
  173. STAssertTrue(CGSizeEqualToSize([actual size], size50x50),
  174. @"Resized image should equal size: %@ actual: %@",
  175. NSStringFromCGSize(size50x50),
  176. NSStringFromCGSize([actual size]));
  177. GTMUIImageResizeAssertImageEqual(actual, @"100x50_to_50x50_clip");
  178. // Landscape resize to 60x40
  179. CGSize size60x40 = CGSizeMake(60, 40);
  180. actual = [landscapeImage gtm_imageByResizingToSize:size60x40
  181. preserveAspectRatio:YES
  182. trimToFit:YES];
  183. STAssertTrue(CGSizeEqualToSize([actual size], size60x40),
  184. @"Resized image should equal size: %@ actual: %@",
  185. NSStringFromCGSize(size60x40),
  186. NSStringFromCGSize([actual size]));
  187. GTMUIImageResizeAssertImageEqual(actual, @"100x50_to_60x40_clip");
  188. // Landscape resize to 40x60
  189. CGSize size40x60 = CGSizeMake(40, 60);
  190. actual = [landscapeImage gtm_imageByResizingToSize:size40x60
  191. preserveAspectRatio:YES
  192. trimToFit:YES];
  193. STAssertTrue(CGSizeEqualToSize([actual size], size40x60),
  194. @"Resized image should equal size: %@ actual: %@",
  195. NSStringFromCGSize(size40x60),
  196. NSStringFromCGSize([actual size]));
  197. GTMUIImageResizeAssertImageEqual(actual, @"100x50_to_40x60_clip");
  198. // Portrait Image.
  199. UIImage *portraitImage = [self testImageNamed:@"GTMUIImage+Resize_50x100"];
  200. // Portrait resize to 50x50
  201. actual = [portraitImage gtm_imageByResizingToSize:size50x50
  202. preserveAspectRatio:YES
  203. trimToFit:YES];
  204. STAssertTrue(CGSizeEqualToSize([actual size], size50x50),
  205. @"Resized image should equal size: %@ actual: %@",
  206. NSStringFromCGSize(size50x50),
  207. NSStringFromCGSize([actual size]));
  208. GTMUIImageResizeAssertImageEqual(actual, @"50x100_to_50x50_clip");
  209. // Portrait resize to 60x40
  210. actual = [portraitImage gtm_imageByResizingToSize:size60x40
  211. preserveAspectRatio:YES
  212. trimToFit:YES];
  213. STAssertTrue(CGSizeEqualToSize([actual size], size60x40),
  214. @"Resized image should equal size: %@ actual: %@",
  215. NSStringFromCGSize(size60x40),
  216. NSStringFromCGSize([actual size]));
  217. GTMUIImageResizeAssertImageEqual(actual, @"50x100_to_60x40_clip");
  218. // Portrait resize to 40x60.
  219. actual = [portraitImage gtm_imageByResizingToSize:size40x60
  220. preserveAspectRatio:YES
  221. trimToFit:YES];
  222. STAssertTrue(CGSizeEqualToSize([actual size], size40x60),
  223. @"Resized image should equal size: %@ actual: %@",
  224. NSStringFromCGSize(size40x60),
  225. NSStringFromCGSize([actual size]));
  226. GTMUIImageResizeAssertImageEqual(actual, @"50x100_to_40x60_clip");
  227. }
  228. - (void)testImageByRotating {
  229. UIImage *actual = nil;
  230. UIImage *landscapeImage = [self testImageNamed:@"GTMUIImage+Resize_100x50"];
  231. STAssertNotNil(landscapeImage, @"Unable to read image.");
  232. // Rotate 90 degrees.
  233. actual = [landscapeImage gtm_imageByRotating:UIImageOrientationRight];
  234. GTMUIImageResizeAssertImageEqual(actual, @"50x100");
  235. // Rotate 180 degrees.
  236. actual = [landscapeImage gtm_imageByRotating:UIImageOrientationDown];
  237. GTMUIImageResizeAssertImageEqual(actual,
  238. @"100x50_flipped");
  239. // Rotate 270 degrees.
  240. actual = [landscapeImage gtm_imageByRotating:UIImageOrientationLeft];
  241. GTMUIImageResizeAssertImageEqual(actual,
  242. @"50x100_flipped");
  243. // Rotate 360 degrees.
  244. actual = [landscapeImage gtm_imageByRotating:UIImageOrientationUp];
  245. GTMUIImageResizeAssertImageEqual(actual, @"100x50");
  246. }
  247. @end