2015-03-31 7 views
18

Ich habe einige Dateien, die nur mit meinem Testprogramm gehören und wäre verwirrend mit der Hauptbibliothek zu verteilen.Einschließlich Datendateien nur in Cabal Test Suites

Leider gilt die .cabal data-files field nur für eine gesamte Cabal-Datei, nicht ein einzelner Abschnitt wie die test-suite. Wenn ich versuche, es in einer Testsuite Strophe zu verwenden, bekomme ich nur:

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

Gibt es eine natürliche Art und Weise, diese Dateien mit meinem Testprogramm zu verknüpfen, so dass sie um nur kopiert werden, wenn --enable-tests angegeben ist?

Wenn es keinen besseren Weg gibt, werde ich wahrscheinlich Template Haskell verwenden, um sie in die ausführbare Datei einzubetten und sie dann zur Laufzeit oder so wieder zu schreiben, aber es fühlt sich ziemlich hässlich an.

Antwort

3

Es gibt kein Cabal-Attribut, mit dem Sie Datendateien mit einer Testsuite (oder einer nicht globalen Stenza Ihres Builds) verknüpfen können. Die gemeinsame Lösung für dieses Problem besteht darin, diese Dateien im Attribut extra-source-files zu deklarieren. Dieses Attribut ist ebenfalls global und stellt sicher, dass die aufgelisteten Dateien im Release-Tarball enthalten sind, damit die Testsuite sie bei der Ausführung finden kann. Im Gegensatz zu data-files sind jedoch extra-source-files — nicht installiert, was wahrscheinlich ist, was Sie wollen, da Ihre Testsuite auch nicht installiert ist. Daher sind die Dateien während des Builds (und der Testsuite) verfügbar, benötigen jedoch keinen Platz in der Installation.

Build-Treiber wie cabal-install und stack führen die Testsuite mit dem aktuellen Arbeitsverzeichnis aus, das in das oberste Verzeichnis Ihres Projekts zeigt, d. H. In das Verzeichnis, das die Cabal-Datei Ihres Projekts enthält. Wenn Sie also eine Datendatei unter test/my-data-file.txt haben, kann Ihre Testsuite unter genau diesem Pfad auf die Datei zugreifen.

+0

Bedeutet das nicht, dass die Testsuite-Binärdatei erraten muss, wo der Quellcode lebt? –

+0

Ganesh, Ich habe meine Antwort bearbeitet, um die Speicherorte der Testdaten zu adressieren. –