From 64b6ead0d1e157701f8569743eda496bc71b8351 Mon Sep 17 00:00:00 2001 From: Gregor Kleen Date: Mon, 23 Jan 2017 16:09:05 +0100 Subject: Add support for ESC/POS text decoration --- .../test/Thermoprint/Server/Printer/GenericSpec.hs | 69 ++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 server/test/Thermoprint/Server/Printer/GenericSpec.hs (limited to 'server/test/Thermoprint/Server/Printer/GenericSpec.hs') diff --git a/server/test/Thermoprint/Server/Printer/GenericSpec.hs b/server/test/Thermoprint/Server/Printer/GenericSpec.hs new file mode 100644 index 0000000..80096b0 --- /dev/null +++ b/server/test/Thermoprint/Server/Printer/GenericSpec.hs @@ -0,0 +1,69 @@ +{-# LANGUAGE OverloadedStrings, OverloadedLists #-} +{-# LANGUAGE StandaloneDeriving #-} +{-# LANGUAGE ViewPatterns #-} + +module Thermoprint.Server.Printer.GenericSpec (spec) where + +import Test.Hspec +import Test.Hspec.QuickCheck (prop) +import Test.QuickCheck (Property, Discard(..), property) +import Test.QuickCheck.Instances + +import Thermoprint.Server.Printer.Generic +import Thermoprint.Printout + +import Data.Text (Text) +import qualified Data.Text.Lazy as TL (pack) + +import qualified Data.ByteString.Lazy as L (ByteString) +import qualified Data.ByteString.Lazy as L.BS + +import Data.String (IsString(..)) + +import Control.Monad (zipWithM_, join) +import Data.Monoid ((<>)) +import Data.Function (on) + +import Data.Word + +import Data.Sequence (Seq) +import qualified Data.Sequence as Seq + +import Debug.Trace + +instance IsString Line where + fromString = (\(Right l) -> l) . text . TL.pack + +spec :: Spec +spec = do + describe "example printouts" $ + zipWithM_ example [1..] examples + where + example n (s, ts) = let str = show s + in specify str $ traceDump (mkPrintout . Printout . fmap (Paragraph . Seq.singleton) . fmap Cooked $ s) == ts + +final, initial :: L.ByteString +initial = esc [64] <> esc [64] +final = "\n\n\n \n" + +esc :: [Word8] -> L.ByteString +esc = L.BS.pack . (27:) + +p :: L.ByteString -> L.ByteString +p = (<> final) . (initial <>) + +traceDump :: L.ByteString -> L.ByteString +traceDump bs = traceShow (map (\b -> (b, (toEnum $ fromEnum b) :: Char)) $ L.BS.unpack bs) bs + +examples :: [(Seq Block, L.ByteString)] +examples = [ ( [Line (JuxtaPos ["Hello", HSpace 1, "World!"])] + , p "Hello World!") + , ( [Line (JuxtaPos ["Hello", HSpace 4, "World!"])] + , p "Hello World!") + , ( [Line ("Par1"), Line ("Par2"), Line (JuxtaPos ["Par3", HSpace 1, "Word2"])] + , p "Par1\n\nPar2\n\nPar3 Word2") + , ( [Line (JuxtaPos ["Par1", HSpace 4]), NewlSep [VSpace 2, Line ("Par2")], Line (JuxtaPos ["Par3", HSpace 1, "Word2"])] + , p "Par1 \n\n\n\n\nPar2\n\nPar3 Word2") + , ( [Line (JuxtaPos [Markup [Bold] (JuxtaPos ["B",HSpace 1,Markup [Underline] "BM"]),HSpace 1,Markup [Bold,Underline] "BM"])] + , p $ esc [33, 8] <> "B " <> esc [33, 128 + 8] <> "BM" <> esc [33, 8] <> esc [33, 0] <> " " <> esc [33, 128 + 8] <> "BM" <> esc [33, 0]) + ] -- cgit v1.2.3