Skip to content

Commit 041488f

Browse files
committed
Test serialising entries with Unicode filenames
1 parent f9c67e0 commit 041488f

File tree

2 files changed

+17
-0
lines changed

2 files changed

+17
-0
lines changed

test/Codec/Archive/Tar/Pack/Tests.hs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
module Codec.Archive.Tar.Pack.Tests
77
( prop_roundtrip
8+
, unit_roundtrip_unicode
89
, unit_roundtrip_symlink
910
, unit_roundtrip_long_symlink
1011
, unit_roundtrip_long_filepath
@@ -17,6 +18,7 @@ import Data.Char
1718
import Data.FileEmbed
1819
import qualified Codec.Archive.Tar as Tar
1920
import qualified Codec.Archive.Tar.Pack as Pack
21+
import qualified Codec.Archive.Tar.Read as Read
2022
import Codec.Archive.Tar.Types (GenEntries(..), Entries, simpleEntry, toTarPath, GenEntry (entryTarPath))
2123
import qualified Codec.Archive.Tar.Unpack as Unpack
2224
import qualified Codec.Archive.Tar.Write as Write
@@ -153,3 +155,17 @@ unit_roundtrip_long_symlink =
153155
let tar :: BL.ByteString = BL.fromStrict $(embedFile "test/data/long-symlink.tar")
154156
entries = Tar.foldEntries (:) [] (const []) (Tar.read tar)
155157
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

test/Properties.hs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ main =
6666
, testGroup "pack" [
6767
adjustOption (\(QuickCheckMaxRatio n) -> QuickCheckMaxRatio (max n 100)) $
6868
testProperty "roundtrip" Pack.prop_roundtrip,
69+
testProperty "unicode" Pack.unit_roundtrip_unicode,
6970
testProperty "symlink" Pack.unit_roundtrip_symlink,
7071
testProperty "long filepath" Pack.unit_roundtrip_long_filepath,
7172
testProperty "long symlink" Pack.unit_roundtrip_long_symlink

0 commit comments

Comments
 (0)