2015-03-24 3 views
1

Я работаю над модульными тестами для кода, который имеет дело с API-интерфейсом файловой системы. Он создает дерево каталогов со случайными данными в файлах и подкаталогах, а затем выполняет несколько изменений в этих файлах и проверяет правильность обработки изменений.OSX File System Events - модульное тестирование

Однако это работает только тогда, когда файлы создаются в некотором каталоге пользовательского пространства, например на моем рабочем столе. Когда я пытаюсь помещать тестовые файлы где-то вроде /tmp или в местоположение NSTemporaryDirectory(), слушатель не получает никаких событий. Являются ли изменения в каталогах, таких как /var и /tmp, которые вообще не записываются API-интерфейсом файловой системы? Или это проблема с разрешениями в этих каталогах? Я не использую Sandbox для этой части моего приложения.

Update

Вопрос был в другом месте в моем коде, File System Events действительно применяются ко всей файловой системе. См. Ниже ответ на мое несколько несвязанное исправление.

+0

Из моих коротких тестов происходят события, когда я касаюсь вещей в/tmp и в/var/tmp. Как вы создаете файлы в модульном тесте? Как настроить FSEventStream? –

+0

Вы правы, что события правильно запускаются для каталога '/ tmp'. На самом деле проблема заключалась в том, что мой код конвертировал 'NSArray'' NSString'' в 'CFArrayRef' из' CFStringRef' для отслеживания путей. Я могу поместить код для этого в ответ, хотя он несколько не связан с исходным вопросом. – Aaron

ответ

0

Проблема заключалась в том, что мой код настраивал каталоги для моего прослушивателя файловой системы. Для справок в будущем синтаксис, который работал для меня, выглядит следующим образом. Переменная каталогов может быть передана в другом месте.

NSArray* directories = @[@"/Users/name/Documents", @"/tmp"]; 
CFArrayRef pathsToWatch = (__bridge CFArrayRef)(directories); 

pathsToWatch переменная затем передается в FSEventStreamCreate вызова.

+0

CFArray является «бесплатным мостом» с его коллегой Фонда Какао, NSArray. Таким образом, в функции, где вы видите параметр CFArrayRef, вы можете передать экземпляр NSArray. –

+0

Действительно, вы правы. Я обновляю упрощенный ответ – Aaron

Смежные вопросы