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

GS *_*ica 18 haskell cabal

我有一些数据文件只属于我的测试程序,并且会混淆与主库分发.

不幸的是,.cabal data-files字段仅适用于整个cabal文件,而不是像test-suite.如果我尝试在测试套件节中使用它,我会得到:

Warning: ssh.cabal: Unknown fields: data-files (line 71)
Run Code Online (Sandbox Code Playgroud)

有没有一种自然的方法将这些文件与我的测试程序相关联,这样只有在--enable-tests指定的情况下才能复制它们?

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

Pet*_*ons 7

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

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

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