仅在cabal测试套件中包含数据文件

时间:2015-03-31 05:47:10

标签: haskell cabal

我有一些只属于我的测试程序的数据文件,并且很难与主库一起分发。

不幸的是,.cabal data-files field仅适用于整个cabal文件,而不适用于test-suite这样的单个部分。如果我尝试在测试套件节中使用它,我会得到:

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

是否有一种自然的方法可以将这些文件与我的测试程序相关联,这样只有在指定了--enable-tests时才能复制它们?

如果没有更好的方法,我可能会使用模板Haskell将它们嵌入到可执行文件中,然后在运行时或类似的东西中再次将它们写出来,但感觉非常难看。

1 个答案:

答案 0 :(得分:3)

没有Cabal属性允许您将数据文件与测试套件(或构建的任何非全局节)相关联。

此问题的常见解决方案是在extra-source-files属性中声明这些文件。该属性也是全局的,它确保列出的文件包含在发行版tarball中,以便测试套件在运行时可以找到它们。但是,与data-files不同,extra-source-files未安装 - 这可能是您想要的,因为您的测试套件也未安装。因此,这些文件在构建(和测试套件运行)期间可用,但它们不会占用安装空间。

构建cabal-installstack等驱动程序将执行测试套件,当前工作目录指向项目的顶级目录,即包含项目的Cabal文件的目录。因此,如果您有test/my-data-file.txt的数据文件,那么您的测试套件可以使用该路径访问该文件。