aboutsummaryrefslogtreecommitdiff
path: root/tests/BTLS/TestUtilities.hs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/BTLS/TestUtilities.hs')
-rw-r--r--tests/BTLS/TestUtilities.hs49
1 files changed, 49 insertions, 0 deletions
diff --git a/tests/BTLS/TestUtilities.hs b/tests/BTLS/TestUtilities.hs
new file mode 100644
index 0000000..01e57bb
--- /dev/null
+++ b/tests/BTLS/TestUtilities.hs
@@ -0,0 +1,49 @@
+-- Copyright 2018 Google LLC
+--
+-- Licensed under the Apache License, Version 2.0 (the "License"); you may not
+-- use this file except in compliance with the License. You may obtain a copy of
+-- the License at
+--
+-- https://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+-- WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+-- License for the specific language governing permissions and limitations under
+-- the License.
+
+{-# LANGUAGE OverloadedStrings #-}
+
+module BTLS.TestUtilities
+ ( abbreviate
+ , hex
+ ) where
+
+import qualified Data.ByteString.Base16 as Base16
+import qualified Data.ByteString.Base16.Lazy as L.Base16
+import Data.ByteString.Char8 (ByteString, unpack)
+import qualified Data.ByteString.Lazy.Char8 as Lazy (ByteString)
+import qualified Data.ByteString.Lazy.Char8 as L
+import Data.Char (isAscii, isPrint)
+import Data.Int (Int64)
+
+abbreviate :: Lazy.ByteString -> String
+abbreviate input =
+ let maxLen = 22 in
+ if L.all isShowable (L.take (maxLen - 2) input)
+ then show (addEllipsisIfNecessary (maxLen - 2) input)
+ else L.unpack (addEllipsisIfNecessary maxLen (L.Base16.encode input))
+ where isShowable c = isAscii c && isPrint c
+
+addEllipsisIfNecessary :: Int64 -> Lazy.ByteString -> Lazy.ByteString
+addEllipsisIfNecessary maxLen s =
+ let ellipsis = "..."
+ ellipsisLen = L.length ellipsis
+ (x, y) = L.splitAt (maxLen - ellipsisLen) s in
+ x `L.append` if L.length y <= ellipsisLen then y else ellipsis
+
+hex :: ByteString -> ByteString
+hex s =
+ case Base16.decode s of
+ (r, "") -> r
+ _ -> error $ "invalid hex string " ++ unpack s