2015-03-31 1 views
18

У меня есть файлы с данными, которые принадлежат только моей тестовой программе, и будет путать с основной библиотекой.Включая файлы данных только в тестовых наборах cabal

К сожалению, .cabal data-files field применим только к целому файлу камеры, а не к одной секции, такой как test-suite. Если я пытаюсь использовать его в тест-люкс строфе я просто получаю:

Warning: ssh.cabal: Unknown fields: data-files (line 71) 

Есть естественный способ связать эти файлы с моей тестовой программы, так что они копируются вокруг, только если --enable-tests указано?

Если нет лучшего способа, я, вероятно, воспользуюсь Template Haskell, чтобы вставить их в исполняемый файл, а затем записать их снова во время выполнения или что-то в этом роде, но он выглядит довольно уродливым.

ответ

3

Не существует атрибута Cabal, который позволяет связывать файлы данных с набором тестов (или любой неглобальной строфой вашей сборки).

Общим решением этой проблемы является объявление этих файлов в атрибуте extra-source-files. Этот атрибут также является глобальным, и он гарантирует, что перечисленные файлы включены в деблокирующий архив, чтобы набор тестов мог найти их при запуске. В отличие от data-files, однако extra-source-files не установлены —, что, вероятно, вам нужно, так как ваш набор тестов также не установлен. Таким образом, файлы доступны во время сборки (и запуска тестового набора), но они не занимают места в установке.

Создайте драйверы, такие как cabal-install и stack, выполнит набор тестов с текущим рабочим каталогом, указывающим в каталог верхнего уровня вашего проекта, то есть в каталоге, который содержит файл Cabal вашего проекта. Таким образом, если у вас есть файл данных на test/my-data-file.txt, то ваш тестовый набор может получить доступ к файлу, используя именно этот путь.

+0

Не означает ли это, что биты набора тестов должны угадывать, где живет исходный код? –

+0

Ganesh, я отредактировал свой ответ на адрес файла данных тестовых данных. –