2016-09-03 3 views
1

Я попытался следовать this guide, чтобы написать несколько тестов для пакета Haskell с использованием типа теста detailed-0.9. Интрига файлПолучение ошибки «Prelude.read: no parse» при использовании подробных тестов 0,9 с помощью cabal

Name:   bar 
Version:  1.0 
License:  BSD3 
Cabal-Version: >= 1.10 
Build-Type:  Simple 

Library 
    exposed-modules:  Foo 
    build-depends:  base >=4.9 && <4.10 
    default-language: Haskell2010 

Test-Suite test-bar 
    type:  detailed-0.9 
    test-module: Bar 
    build-depends: base, Cabal >= 1.9.2 
    default-language: Haskell2010 

и Bar.hs является

module Bar (tests) where 

import Distribution.TestSuite 

tests :: IO [Test] 
tests = return [ Test succeeds, Test fails ] 
    where 
    succeeds = TestInstance 
     { run = return $ Finished Pass 
     , name = "succeeds" 
     , tags = [] 
     , options = [] 
     , setOption = \_ _ -> Right succeeds 
     } 
    fails = TestInstance 
     { run = return $ Finished $ Fail "Always fails!" 
     , name = "fails" 
     , tags = [] 
     , options = [] 
     , setOption = \_ _ -> Right fails 
     } 

Однако, когда я запускаю тесты с

cabal configure --enable-tests 
cabal build 
cabal test 

Я получаю

Preprocessing test suite 'test-bar' for bar-1.0... 
[1 of 1] Compiling Main    (dist/build/test-barStub/test-barStub-tmp/test-barStub.hs, dist/build/test-barStub/test-barStub-tmp/Main.dyn_o) 
Linking dist/build/test-barStub/test-barStub ... 
Running 1 test suites... 
Test suite test-bar: RUNNING... 
Prelude.read: no parse 

Это также происходит с кодом от this repository.

Использование strace cabal test Мне удалось увидеть, что последний файл, который пытается открыть cabal, равен dist/test/cabal-test-1804289383846930886.log, которого не существует. Создание файла не помогает.

Является ли тестовый тип detailed-0.9 экспериментальным? Должен ли я использовать exitcode-stdio-1.0 вместо этого?

GHC версия: 8.0.1
междусобойчик Версия: 1.24.0.0

EDIT: ошибка сохраняется, даже если я устанавливаю tests = return [] в Bar.hs.

+0

Ваш код (плюс заглушка Foo.hs) работает для меня. Я видел, что эта ошибка возникает при сбое тестовой программы. – NovaDenizen

+0

Я тоже не могу воспроизвести это. – redneb

+0

Это отлично работает для меня, используя те же ghc и cabal. Вы попробовали «cabal clean» перед зданием? – Michael

ответ

0

Проблема, похоже, связана с динамической связью. Кабал не смог найти .so теста. В моем случае, добавив ссылку на dist/build/bar-1.0-1l0Xa8pRO0dDWU0quwEdrS-test-bar.test/libHSbar-1.0-1l0Xa8pRO0dDWU0quwEdrS-test-bar.test-ghc8.0.1.so, эта проблема решила проблему, но имя файла, вероятно, изменится.

Альтернатива заключается в использовании cabal configure --enable-tests --disable-shared при настройке пакета (я использую --enable-shared неявно в моей конфигурации кэша). Или я могу взломать скрипт, который устанавливает LD_LIBRARY_PATH в правильное значение перед вызовом cabal test.

EDIT: уже есть pull request on github.