Подтвердить что ты не робот

Включение файлов данных только в тестовые комплекты cabal

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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