Commit 9c1c0360 authored by Loïc Chapron's avatar Loïc Chapron

more TSV testing

parent 05e98637
Pipeline #6341 failed with stages
in 32 minutes and 12 seconds
...@@ -23,7 +23,9 @@ tests = testGroup "TSV Parser" [ ...@@ -23,7 +23,9 @@ tests = testGroup "TSV Parser" [
, testProperty "Parses 'Valid Number'" testValidNumber , testProperty "Parses 'Valid Number'" testValidNumber
, testProperty "Parses 'Error Per Line On A File'" testTestErrorPerLine , testProperty "Parses 'Error Per Line On A File'" testTestErrorPerLine
, testProperty "Parses 'Correct File'" testTestCorrectFile , testProperty "Parses 'Correct File'" testTestCorrectFile
, testProperty "Parses 'Correct File With New Line In Last Header'" testTestCorrectFileWithNewLine] , testProperty "Parses 'Correct File With New Line In Last Header'" testTestCorrectFileWithNewLine
, testProperty "Parses 'Find Delimiter'" testFindDelimiter
, testProperty "Parses 'Get Headers'" testGetHeader]
...@@ -63,6 +65,11 @@ delimiterToText Tab = DT.pack "\t" ...@@ -63,6 +65,11 @@ delimiterToText Tab = DT.pack "\t"
delimiterToText Comma = DT.pack "," delimiterToText Comma = DT.pack ","
delimiterToText Line = DT.pack "\n" delimiterToText Line = DT.pack "\n"
delimiterToString :: Delimiter -> Char
delimiterToString Tab = '\t'
delimiterToString Comma = ','
delimiterToString Line = '\n'
textToBL :: Text -> BL.ByteString textToBL :: Text -> BL.ByteString
textToBL b = BL.fromChunks . return . DT.encodeUtf8 $ b textToBL b = BL.fromChunks . return . DT.encodeUtf8 $ b
...@@ -76,6 +83,12 @@ generateRandomCorpus = RandomCorpus ...@@ -76,6 +83,12 @@ generateRandomCorpus = RandomCorpus
<*> generateNumber <*> generateNumber
<*> generateNumber <*> generateNumber
generateFileDelimiter :: Gen File
generateFileDelimiter = do
del <- elements [Tab, Comma]
m <- choose (1,5)
corp <- vectorOf m (generateRandomCorpus)
return (File del corp)
generateFile :: Gen File generateFile :: Gen File
generateFile = arbitrary :: Gen File generateFile = arbitrary :: Gen File
...@@ -86,6 +99,11 @@ generateString = arbitrary :: Gen Text ...@@ -86,6 +99,11 @@ generateString = arbitrary :: Gen Text
generateNumber :: Gen Int generateNumber :: Gen Int
generateNumber = arbitrary :: Gen Int generateNumber = arbitrary :: Gen Int
randomHeaderList :: Gen [String]
randomHeaderList = frequency [
(1, return [])
, (7, (:) <$> (elements ["Publication Day", "Publication Month", "Publication Year", "Authors", "Title", "Source", "Abstract"]) <*> randomHeaderList)
]
--TODO add delimiter --TODO add delimiter
createLineFromCorpus :: RandomCorpus -> Delimiter -> BL.ByteString createLineFromCorpus :: RandomCorpus -> Delimiter -> BL.ByteString
...@@ -203,3 +221,29 @@ testTestCorrectFileWithNewLine = forAll generateFile (\file -> do ...@@ -203,3 +221,29 @@ testTestCorrectFileWithNewLine = forAll generateFile (\file -> do
case testErrorPerLine splitLine del headers 1 of case testErrorPerLine splitLine del headers 1 of
Right _ -> True Right _ -> True
Left _ -> validRandomCorpus x del) (allCorpus file)) Left _ -> validRandomCorpus x del) (allCorpus file))
testFindDelimiter :: Property
testFindDelimiter = forAll generateFileDelimiter (\file -> do
let tsv = createFile file
case findDelimiter tsv of
Right _ -> True
Left _ -> do
let line = Prelude.head $ allCorpus file
let del = delimiterToString $ fDelimiter file
let delLine = delimiterToString Line
del `DT.elem` (abstract line) || del `DT.elem` (authors line) || del `DT.elem` (title line) || del `DT.elem` (source line) || delLine `DT.elem` (abstract line) || delLine `DT.elem` (authors line) || delLine `DT.elem` (title line) || delLine `DT.elem` (source line))
testGetHeader :: Property
testGetHeader = forAll randomHeaderList (\headers -> do
let headersLines = (BL.intercalate (delimiterBS Tab) $ Prelude.map BLU.fromString headers):[]
case getHeaders headersLines Tab of
Right _ -> True
Left _ | not ("Publication Day" `Prelude.elem` headers) -> True
| not ("Publication Month" `Prelude.elem` headers) -> True
| not ("Publication Year" `Prelude.elem` headers) -> True
| not ("Authors" `Prelude.elem` headers) -> True
| not ("Source" `Prelude.elem` headers) -> True
| not ("Title" `Prelude.elem` headers) -> True
| not ("Abstract" `Prelude.elem` headers) -> True
| otherwise -> False
)
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment