Проверка того, что конкретное изображение было скопировано в картон

Я пишу тест для проверки функции, которая копирует изображение в монтажный картон.

Вот тест, как я бы предпочел написать:

// reset the paste board
UIPasteboard.generalPasteboard.image = nil; //<-- this explodes
XCTAssertNil(UIPasteboard.generalPasteboard.image);

// Grab some random existing image
UIImage *image = [UIImage imageNamed:@"some-image"];
MJKMyClass *myInstance = [[myInstance alloc] initWithImage:image];
[myInstance doSomethingThatCopiesImageToPasteboard]

XCTAssertNotNil(UIPasteboard.generalPasteboard.image);

Это не с:

failed: caught "NSInvalidArgumentException", "-[UIPasteboard setImage:]: Argument is not an object of type UIImage [(null)]"

Что удивительно, потому что, согласно заголовку UIPasteboard, изображение является пустым полем.

@interface UIPasteboard(UIPasteboardDataExtensions)
<...>    
@property(nullable,nonatomic,copy) UIImage *image __TVOS_PROHIBITED;
<...>
@end

Я предполагаю, что это означает, что они выполняют проверку аргумента во время выполнения, даже если он обнуляем.

Вещи, которые я пробовал:

  • Сравнение объектов по идентификатору не работает, потому что UIImage копируются generalPastboard.image (каждый раз, когда вы вызываете UIPasteboard.generalPasteboard.image, вы можете использовать другой экземпляр)
  • Сравнение по представлению PNG может работать, но кажется корявым.
  • Сравнение по размеру изображения было моей самой близкой ставкой, но также кажется окольным.

1 ответ

Решение

Вы можете очистить картон без необходимости проходить nil используя items имущество:

UIPasteboard.generalPasteboard.items = @[];

Или в Свифте:

UIPasteboard.generalPasteboard().items = []

Для сравнения UIImages вы можете посмотреть на некоторые другие вопросы:

Другие вопросы по тегам