fix test suite fail in LANG=C

This was caused by 23e9d3bb77

an Arbitrary String is not necessarily encoded using the filesystem
encoding, and in a non-utf8 locale, encodeBS throws an exception on such a
string. All I could think to do is limit test data to ascii.

This shouldn't be a problem in practice, because the all Strings in
git-annex that are not generated by Arbitrary should be loaded in a way
that does apply the filesystem encoding.
This commit is contained in:
Joey Hess 2015-08-12 10:36:51 -04:00
parent f7b57c5f6b
commit 4e4e11849a
3 changed files with 20 additions and 4 deletions

View file

@ -270,10 +270,16 @@ instance Arbitrary MetaData where
legal k _v = legalField $ fromMetaField k
instance Arbitrary MetaValue where
arbitrary = MetaValue <$> arbitrary <*> arbitrary
arbitrary = MetaValue
<$> arbitrary
-- Avoid non-ascii metavalues because fully arbitrary
-- strings may not be encoded using the filesystem
-- encoding, which is norally applied to all input.
<*> arbitrary `suchThat` all isAscii
instance Arbitrary MetaField where
arbitrary = MetaField . CI.mk <$> arbitrary `suchThat` legalField
arbitrary = MetaField . CI.mk
<$> arbitrary `suchThat` legalField
prop_metadata_sane :: MetaData -> MetaField -> MetaValue -> Bool
prop_metadata_sane m f v = and

View file

@ -10,11 +10,13 @@
module Utility.Base64 (toB64, fromB64Maybe, fromB64, prop_b64_roundtrips) where
import Utility.FileSystemEncoding
import qualified "sandi" Codec.Binary.Base64 as B64
import Data.Maybe
import qualified Data.ByteString.Lazy as L
import Data.ByteString.UTF8 (fromString, toString)
import Utility.FileSystemEncoding
import Data.Char
toB64 :: String -> String
toB64 = toString . B64.encode . L.toStrict . encodeBS
@ -28,5 +30,9 @@ fromB64 = fromMaybe bad . fromB64Maybe
where
bad = error "bad base64 encoded data"
-- Only ascii strings are tested, because an arbitrary string may contain
-- characters not encoded using the FileSystemEncoding.
prop_b64_roundtrips :: String -> Bool
prop_b64_roundtrips s = s == fromB64 (toB64 s)
prop_b64_roundtrips s
| all (isAscii) s = s == fromB64 (toB64 s)
| otherwise = True

View file

@ -68,6 +68,10 @@ withFilePath fp f = Encoding.getFileSystemEncoding
- only allows doing this conversion with CStrings, and the CString buffer
- is allocated, used, and deallocated within the call, with no side
- effects.
-
- If the FilePath contains a value that is not legal in the filesystem
- encoding, this may throw an exception. For example, "\226" is not valid
- in the C locale, but is in utf locales.
-}
{-# NOINLINE _encodeFilePath #-}
_encodeFilePath :: FilePath -> String