5
5
6
6
module Codec.Archive.Tar.Pack.Tests
7
7
( prop_roundtrip
8
+ , unit_roundtrip_unicode
8
9
, unit_roundtrip_symlink
9
10
, unit_roundtrip_long_symlink
10
11
, unit_roundtrip_long_filepath
@@ -17,6 +18,7 @@ import Data.Char
17
18
import Data.FileEmbed
18
19
import qualified Codec.Archive.Tar as Tar
19
20
import qualified Codec.Archive.Tar.Pack as Pack
21
+ import qualified Codec.Archive.Tar.Read as Read
20
22
import Codec.Archive.Tar.Types (GenEntries (.. ), Entries , simpleEntry , toTarPath , GenEntry (entryTarPath ))
21
23
import qualified Codec.Archive.Tar.Unpack as Unpack
22
24
import qualified Codec.Archive.Tar.Write as Write
@@ -153,3 +155,17 @@ unit_roundtrip_long_symlink =
153
155
let tar :: BL. ByteString = BL. fromStrict $ (embedFile " test/data/long-symlink.tar" )
154
156
entries = Tar. foldEntries (:) [] (const [] ) (Tar. read tar)
155
157
in Tar. write entries === tar
158
+
159
+ unit_roundtrip_unicode :: Property
160
+ unit_roundtrip_unicode = do
161
+ ioProperty $ withSystemTempDirectory " tar-test" $ \ baseDir -> do
162
+ let relFile = " TModula𐐀bA.hs"
163
+
164
+ canWriteFile <- try (writeFile (baseDir </> relFile) " foo" )
165
+ case canWriteFile of
166
+ Left (e :: IOException ) -> pure $ property True
167
+ Right () -> do
168
+ entries <- Pack. pack baseDir [relFile]
169
+ pure $ case Tar. foldlEntries (flip seq ) () (Read. read (Write. write entries)) of
170
+ Right {} -> property True
171
+ Left (err, _) -> counterexample (show err) $ property False
0 commit comments