From 6208d4e7fcf1792203b3069d0002ad5cb1ec05dd Mon Sep 17 00:00:00 2001
From: Albert Krewinkel <albert@zeitkraut.de>
Date: Mon, 20 May 2019 18:52:28 +0200
Subject: Improve output of Lua tests (#5499)

This makes use of tasty-lua, a package to write tests in Lua
and integrate the results into Tasty output. Test output becomes
more informative: individual tests and test groups become visible
in test output. Failures are reported with helpful error messages.
---
 test/lua/module/pandoc.lua       | 58 ++++++++++++++++++++++++
 test/lua/module/pandoc.utils.lua | 96 ++++++++++++++++++++++++++++++++++++++++
 2 files changed, 154 insertions(+)
 create mode 100644 test/lua/module/pandoc.lua
 create mode 100644 test/lua/module/pandoc.utils.lua

(limited to 'test/lua/module')

diff --git a/test/lua/module/pandoc.lua b/test/lua/module/pandoc.lua
new file mode 100644
index 000000000..b9509cdb6
--- /dev/null
+++ b/test/lua/module/pandoc.lua
@@ -0,0 +1,58 @@
+local tasty = require 'tasty'
+
+local test = tasty.test_case
+local group = tasty.test_group
+local assert = tasty.assert
+
+function os_is_windows ()
+  return package.config:sub(1,1) == '\\'
+end
+
+return {
+  group 'pipe' {
+    test('external string processing', function ()
+      if os_is_windows() then
+        local pipe_result = pandoc.pipe('find', {'hi'}, 'hi')
+        assert.are_equal('hi', pipe_result:match '%a+')
+      else
+        local pipe_result = pandoc.pipe('tr', {'a', 'b'}, 'abc')
+        assert.are_equal('bbc', pipe_result:match '%a+')
+      end
+    end),
+    test('failing pipe', function ()
+      if os_is_windows() then
+        local success, err = pcall(pandoc.pipe, 'find', {'/a'}, 'hi')
+        assert.is_falsy(success)
+        assert.are_equal('find', err.command)
+        assert.is_truthy(err.error_code ~= 0)
+      else
+        local success, err = pcall(pandoc.pipe, 'false', {}, 'abc')
+        assert.is_falsy(success)
+        assert.are_equal('false', err.command)
+        assert.are_equal(1, err.error_code)
+        assert.are_equal('', err.output)
+      end
+    end)
+  },
+
+  group 'read' {
+    test('Markdown', function ()
+      local valid_markdown = '*Hello*, World!\n'
+      local expected = pandoc.Pandoc({
+          pandoc.Para {
+            pandoc.Emph { pandoc.Str 'Hello' },
+            pandoc.Str ',',
+            pandoc.Space(),
+            pandoc.Str 'World!'
+          }
+      })
+      assert.are_same(expected, pandoc.read(valid_markdown))
+    end),
+    test('failing read', function ()
+      assert.error_matches(
+        function () pandoc.read('foo', 'nosuchreader') end,
+        'Unknown reader: nosuchreader'
+      )
+    end)
+  },
+}
diff --git a/test/lua/module/pandoc.utils.lua b/test/lua/module/pandoc.utils.lua
new file mode 100644
index 000000000..dc37ec354
--- /dev/null
+++ b/test/lua/module/pandoc.utils.lua
@@ -0,0 +1,96 @@
+local tasty = require 'tasty'
+local utils = require 'pandoc.utils'
+
+local assert = tasty.assert
+local test = tasty.test_case
+local group = tasty.test_group
+
+return {
+  group 'blocks_to_inlines' {
+    test('default separator', function ()
+      local blocks = {
+        pandoc.Para { pandoc.Str 'Paragraph1' },
+        pandoc.Para { pandoc.Emph { pandoc.Str 'Paragraph2' } }
+      }
+      local expected = {
+        pandoc.Str 'Paragraph1',
+        pandoc.Space(), pandoc.Str 'ΒΆ', pandoc.Space(),
+        pandoc.Emph { pandoc.Str 'Paragraph2' }
+      }
+      assert.are_same(
+        expected,
+        utils.blocks_to_inlines(blocks)
+      )
+    end),
+    test('custom separator', function ()
+      local blocks = {
+        pandoc.Para{ pandoc.Str 'Paragraph1' },
+        pandoc.Para{ pandoc.Emph 'Paragraph2' }
+      }
+      local expected = {
+        pandoc.Str 'Paragraph1',
+        pandoc.LineBreak(),
+        pandoc.Emph { pandoc.Str 'Paragraph2' }
+      }
+      assert.are_same(
+        expected,
+        utils.blocks_to_inlines(blocks, { pandoc.LineBreak() })
+      )
+    end)
+  },
+
+  group 'hierarchicalize' {
+    test('sanity check', function ()
+      local blks = {
+        pandoc.Header(1, {pandoc.Str 'First'}),
+        pandoc.Header(2, {pandoc.Str 'Second'}),
+        pandoc.Header(2, {pandoc.Str 'Third'}),
+      }
+      local hblks = utils.hierarchicalize(blks)
+      -- cannot create Elements directly; performing only an approximate
+      -- sanity checking instead of a full equality comparison.
+      assert.are_equal('Sec', hblks[1].t)
+      assert.are_equal('Sec', hblks[1].contents[1].t)
+      assert.are_equal(1, hblks[1].contents[2].numbering[1])
+      assert.are_equal(2, hblks[1].contents[2].numbering[2])
+    end)
+  },
+
+  group 'normalize_date' {
+    test('09 Nov 1989', function ()
+      assert.are_equal('1989-11-09', utils.normalize_date '09 Nov 1989')
+    end),
+    test('12/31/2017', function ()
+      assert.are_equal('2017-12-31', utils.normalize_date '12/31/2017')
+    end),
+  },
+
+  group 'sha1' {
+    test('hashing', function ()
+      local ref_hash = '0a0a9f2a6772942557ab5355d76af442f8f65e01'
+      assert.are_equal(ref_hash, utils.sha1 'Hello, World!')
+    end)
+  },
+
+  group 'stringify' {
+    test('inlines', function ()
+      local inline = pandoc.Emph{
+        pandoc.Str 'Cogito',
+        pandoc.Space(),
+        pandoc.Str 'ergo',
+        pandoc.Space(),
+        pandoc.Str 'sum.',
+      }
+      assert.are_equal('Cogito ergo sum.', utils.stringify(inline))
+    end)
+  },
+
+  group 'to_roman_numeral' {
+    test('convertes number', function ()
+      assert.are_equal('MDCCCLXXXVIII', utils.to_roman_numeral(1888))
+    end),
+    test('fails on non-convertible argument', function ()
+      assert.is_falsy(pcall(utils.to_roman_numeral, 'not a number'))
+    end)
+  },
+}
-- 
cgit v1.2.3