From a5ffaaa4136f11378c0c7741309edb9fd53e17d8 Mon Sep 17 00:00:00 2001 From: Albert Krewinkel Date: Mon, 10 Oct 2022 09:33:20 +0200 Subject: Lua: support custom bytestring readers. --- pandoc-lua-engine/test/Tests/Lua/Reader.hs | 34 ++++++++++++++++++++++++ pandoc-lua-engine/test/bytestring-reader.lua | 7 +++++ pandoc-lua-engine/test/test-pandoc-lua-engine.hs | 2 ++ 3 files changed, 43 insertions(+) create mode 100644 pandoc-lua-engine/test/Tests/Lua/Reader.hs create mode 100644 pandoc-lua-engine/test/bytestring-reader.lua (limited to 'pandoc-lua-engine/test') diff --git a/pandoc-lua-engine/test/Tests/Lua/Reader.hs b/pandoc-lua-engine/test/Tests/Lua/Reader.hs new file mode 100644 index 000000000..16474bd91 --- /dev/null +++ b/pandoc-lua-engine/test/Tests/Lua/Reader.hs @@ -0,0 +1,34 @@ +{-# LANGUAGE LambdaCase #-} +{- | +Module : Tests.Lua.Reader +Copyright : © 2022 Albert Krewinkel +License : GPL-2.0-or-later +Maintainer : Albert Krewinkel + +Tests for custom Lua readers. +-} +module Tests.Lua.Reader (tests) where + +import Data.Char (chr) +import Data.Default (Default (def)) +import Text.Pandoc.Class (runIOorExplode) +import Text.Pandoc.Lua (readCustom) +import Text.Pandoc.Readers (Reader (ByteStringReader, TextReader)) +import Test.Tasty (TestTree) +import Test.Tasty.HUnit ((@?=), testCase) + +import qualified Data.ByteString.Lazy as BL +import qualified Data.Text as T +import qualified Text.Pandoc.Builder as B + +tests :: [TestTree] +tests = + [ testCase "read binary to code block" $ do + input <- BL.readFile "bytestring.bin" + doc <- runIOorExplode $ + readCustom "bytestring-reader.lua" >>= \case + ByteStringReader f -> f def input + TextReader {} -> error "Expected a bytestring reader" + let bytes = mconcat $ map (B.str . T.singleton . chr) [0..255] + doc @?= B.doc (B.plain bytes) + ] diff --git a/pandoc-lua-engine/test/bytestring-reader.lua b/pandoc-lua-engine/test/bytestring-reader.lua new file mode 100644 index 000000000..7908479ec --- /dev/null +++ b/pandoc-lua-engine/test/bytestring-reader.lua @@ -0,0 +1,7 @@ +function ByteStringReader (input, opts) + local chars = pandoc.List{} + for i = 1, #input do + chars:insert(utf8.char(input:byte(i,i))) + end + return pandoc.Pandoc(pandoc.Plain(pandoc.Str(table.concat(chars)))) +end diff --git a/pandoc-lua-engine/test/test-pandoc-lua-engine.hs b/pandoc-lua-engine/test/test-pandoc-lua-engine.hs index 035d92812..21febddb5 100644 --- a/pandoc-lua-engine/test/test-pandoc-lua-engine.hs +++ b/pandoc-lua-engine/test/test-pandoc-lua-engine.hs @@ -2,6 +2,7 @@ module Main (main) where import Test.Tasty (TestTree, defaultMain, testGroup) import qualified Tests.Lua import qualified Tests.Lua.Module +import qualified Tests.Lua.Reader import qualified Tests.Lua.Writer import System.Directory (withCurrentDirectory) @@ -13,4 +14,5 @@ tests = testGroup "pandoc Lua engine" [ testGroup "Lua filters" Tests.Lua.tests , testGroup "Lua modules" Tests.Lua.Module.tests , testGroup "Custom writers" Tests.Lua.Writer.tests + , testGroup "Custom readers" Tests.Lua.Reader.tests ] -- cgit v1.2.3