2015-03-31 13 views
18

Mam niektóre pliki danych, które należą tylko do mojego programu testowego i byłyby mylące w dystrybucji z główną biblioteką.W tym pliki danych tylko w kablowym zestawie testów

Niestety, kod .cabal data-files field dotyczy tylko całego pliku cabal, a nie pojedynczej sekcji, takiej jak test-suite. Jeśli próbuję użyć go w strofie test-Suite I po prostu:

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

Czy istnieje naturalny sposób skojarzyć te pliki z mojego programu testowego tak, że kopiowane wokół tylko jeśli --enable-tests jest określona?

Jeśli nie ma lepszego sposobu, prawdopodobnie użyję szablonu Haskella do osadzenia ich w pliku wykonywalnym, a następnie wypiszę je ponownie w czasie wykonywania lub coś w tym stylu, ale wydaje się to dość brzydkie.

Odpowiedz

3

Nie ma atrybutu Cabal, który umożliwia skojarzenie plików danych z zestawem testów (lub z inną nieglobalną wersją kompilacji).

Typowym rozwiązaniem tego problemu jest zadeklarowanie tych plików w atrybucie extra-source-files. Ten atrybut również jest globalny i gwarantuje, że wymienione pliki są zawarte w archiwum wydania, dzięki czemu zestaw testów może je znaleźć po uruchomieniu. Jednak w przeciwieństwie do data-files, extra-source-files nie są zainstalowane —, co jest prawdopodobnie tym, czego potrzebujesz, ponieważ twój pakiet testowy również nie jest zainstalowany. Pliki są więc dostępne podczas kompilacji (i uruchamiania zestawu testów), ale nie zajmą miejsca w instalacji.

Wykonuje sterowniki, takie jak cabal-install i stack, wykona pakiet testowy z bieżącym katalogiem roboczym wskazującym na katalog najwyższego poziomu projektu, tj. W katalogu zawierającym plik Cabal projektu. Tak więc, jeśli masz plik danych pod numerem test/my-data-file.txt, to twój pakiet testowy może uzyskać dostęp do pliku, używając dokładnie tej ścieżki.

+0

Czy to nie oznacza, że ​​pakiet binarny zestawu testów musi odgadnąć, gdzie znajduje się kod źródłowy? –

+0

Ganesh, Edytowałem moją odpowiedź na lokalizacje plików danych testu adresu. –