----------------------------------------------------------------------- -- wiki-parsers-tests -- Unit tests for wiki parsing -- Copyright (C) 2011, 2012, 2013, 2015, 2016, 2017, 2021, 2022 Stephane Carrez -- Written by Stephane Carrez (Stephane.Carrez@gmail.com) -- -- 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 -- -- http://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. ----------------------------------------------------------------------- with Ada.Strings.UTF_Encoding.Wide_Wide_Strings; with Util.Test_Caller; with Wiki.Utils; with Wiki.Helpers; with Wiki.Streams.Builders; with Wiki.Render.Text; package body Wiki.Parsers.Tests is use Wiki.Helpers; package Caller is new Util.Test_Caller (Test, "Wikis.Parsers"); procedure Add_Tests (Suite : in Util.Tests.Access_Test_Suite) is begin Caller.Add_Test (Suite, "Test Wiki.Parsers.Parse (bold)", Test_Wiki_Bold'Access); Caller.Add_Test (Suite, "Test Wiki.Parsers.Parse (italic)", Test_Wiki_Italic'Access); Caller.Add_Test (Suite, "Test Wiki.Parsers.Parse (italic, bold)", Test_Wiki_Formats'Access); Caller.Add_Test (Suite, "Test Wiki.Parsers.Parse (headings)", Test_Wiki_Section'Access); Caller.Add_Test (Suite, "Test Wiki.Parsers.Parse (lists)", Test_Wiki_List'Access); Caller.Add_Test (Suite, "Test Wiki.Parsers.Parse (links)", Test_Wiki_Link'Access); Caller.Add_Test (Suite, "Test Wiki.Parsers.Parse (quote)", Test_Wiki_Quote'Access); Caller.Add_Test (Suite, "Test Wiki.Parsers.Parse (line break)", Test_Wiki_Line_Break'Access); Caller.Add_Test (Suite, "Test Wiki.Parsers.Parse (image)", Test_Wiki_Image'Access); Caller.Add_Test (Suite, "Test Wiki.Parsers.Parse (preformatted)", Test_Wiki_Preformatted'Access); Caller.Add_Test (Suite, "Test Wiki.Text.Renderer", Test_Wiki_Text_Renderer'Access); Caller.Add_Test (Suite, "Test Wiki.Parsers.Parse (String UTF-8)", Test_Wiki_UTF_8'Access); end Add_Tests; -- ------------------------------ -- Test bold rendering. -- ------------------------------ procedure Test_Wiki_Bold (T : in out Test) is begin Util.Tests.Assert_Equals (T, "
bold
", Wiki.Utils.To_Html ("*bold*", SYNTAX_GOOGLE), "Bold rendering invalid"); Util.Tests.Assert_Equals (T, "x bold y
", Wiki.Utils.To_Html ("x *bold* y", SYNTAX_GOOGLE), "Bold rendering invalid"); Util.Tests.Assert_Equals (T, "x bold y
", Wiki.Utils.To_Html ("x **bold y**", SYNTAX_CREOLE), "Bold rendering invalid (CREOLE)"); Util.Tests.Assert_Equals (T, "x item y p
", Wiki.Utils.To_Html ("x __item y__ p", SYNTAX_DOTCLEAR), "Bold rendering invalid"); Util.Tests.Assert_Equals (T, "x _item y_ p
", Wiki.Utils.To_Html ("x _item y_ p", SYNTAX_DOTCLEAR), "No bold rendering invalid"); Util.Tests.Assert_Equals (T, "x bold y
", Wiki.Utils.To_Html ("x '''bold''' y", SYNTAX_MEDIA_WIKI), "Bold rendering invalid (MediaWiki)"); end Test_Wiki_Bold; -- ------------------------------ -- Test italic rendering. -- ------------------------------ procedure Test_Wiki_Italic (T : in out Test) is begin Util.Tests.Assert_Equals (T, "item
", Wiki.Utils.To_Html ("_item_", SYNTAX_GOOGLE), "Italic rendering invalid"); Util.Tests.Assert_Equals (T, "x item y
", Wiki.Utils.To_Html ("x _item_ y", SYNTAX_GOOGLE), "Italic rendering invalid"); Util.Tests.Assert_Equals (T, "x item y
", Wiki.Utils.To_Html ("x //item y//", SYNTAX_CREOLE), "Italic rendering invalid"); Util.Tests.Assert_Equals (T, "x item y p
", Wiki.Utils.To_Html ("x ''item y'' p", SYNTAX_DOTCLEAR), "Italic rendering invalid"); Util.Tests.Assert_Equals (T, "x item y p
", Wiki.Utils.To_Html ("x ''item y'' p", SYNTAX_MEDIA_WIKI), "Italic rendering invalid"); Util.Tests.Assert_Equals (T, "x 'item y p
", Wiki.Utils.To_Html ("x 'item y'' p", SYNTAX_MEDIA_WIKI), "Italic rendering invalid"); end Test_Wiki_Italic; -- ------------------------------ -- Test various format rendering. -- ------------------------------ procedure Test_Wiki_Formats (T : in out Test) is begin Util.Tests.Assert_Equals (T, "itboldem
", Wiki.Utils.To_Html ("_it*bold*em_", SYNTAX_GOOGLE), "Italic+Bold rendering invalid"); Util.Tests.Assert_Equals (T, "x item y
", Wiki.Utils.To_Html ("x _item_ y", SYNTAX_GOOGLE), "Italic rendering invalid"); Util.Tests.Assert_Equals (T, "x item y
", Wiki.Utils.To_Html ("x _item y_", SYNTAX_GOOGLE), "Italic rendering invalid"); end Test_Wiki_Formats; -- ------------------------------ -- Test heading rendering. -- ------------------------------ procedure Test_Wiki_Section (T : in out Test) is begin Util.Tests.Assert_Equals (T, "[d
", Wiki.Utils.To_Html ("[d", SYNTAX_CREOLE), "No link rendering invalid"); Util.Tests.Assert_Equals (T, "", Wiki.Utils.To_Html ("[http://www.joe.com/item]", SYNTAX_DOTCLEAR), "Link rendering invalid"); Util.Tests.Assert_Equals (T, "", Wiki.Utils.To_Html ("[[name]]", SYNTAX_MEDIA_WIKI), "Link rendering invalid"); end Test_Wiki_Link; -- ------------------------------ -- Test quote rendering. -- ------------------------------ procedure Test_Wiki_Quote (T : in out Test) is begin Util.Tests.Assert_Equals (T, "quote
quote
quote
{quote}}
", Wiki.Utils.To_Html ("{quote}}", SYNTAX_DOTCLEAR), "No quote rendering invalid"); end Test_Wiki_Quote; -- ------------------------------ -- Test line break rendering. -- ------------------------------ procedure Test_Wiki_Line_Break (T : in out Test) is begin Util.Tests.Assert_Equals (T, "a
b
a
b
a%%b
", Wiki.Utils.To_Html ("a%%b", SYNTAX_DOTCLEAR), "No line break rendering invalid"); Util.Tests.Assert_Equals (T, "a%b
", Wiki.Utils.To_Html ("a%b", SYNTAX_DOTCLEAR), "No line break rendering invalid"); end Test_Wiki_Line_Break; -- ------------------------------ -- Test image rendering. -- ------------------------------ procedure Test_Wiki_Image (T : in out Test) is begin Util.Tests.Assert_Equals (T, "", Wiki.Utils.To_Html ("((/image/t.png))", SYNTAX_DOTCLEAR), "Image rendering invalid"); Util.Tests.Assert_Equals (T, "", Wiki.Utils.To_Html ("((/image/t.png|title))", SYNTAX_DOTCLEAR), "Image rendering invalid"); Util.Tests.Assert_Equals (T, "", Wiki.Utils.To_Html ("((/image/t.png|title|x|describe))", SYNTAX_DOTCLEAR), "Image rendering invalid"); end Test_Wiki_Image; -- ------------------------------ -- Test preformatted rendering. -- ------------------------------ procedure Test_Wiki_Preformatted (T : in out Test) is begin Util.Tests.Assert_Equals (T, "* code *" & ASCII.LF & "
",
Wiki.Utils.To_Html ("///" & LF & "* code *" & LF & "///",
SYNTAX_DOTCLEAR),
"Preformat rendering invalid");
Util.Tests.Assert_Equals (T, "item1 x" & ASCII.LF & "item2 x"
& ASCII.LF & "item3 x"
& "
",
Wiki.Utils.To_Html (" item1 x" & LF & " item2 x" & LF & " item3 x",
SYNTAX_DOTCLEAR),
"Preformat rendering invalid");
end Test_Wiki_Preformatted;
-- ------------------------------
-- Test the text renderer.
-- ------------------------------
procedure Test_Wiki_Text_Renderer (T : in out Test) is
begin
Util.Tests.Assert_Equals (T, ASCII.LF & "code" & ASCII.LF,
Wiki.Utils.To_Text ("`code`", SYNTAX_MARKDOWN),
"Preformat rendering invalid");
Util.Tests.Assert_Equals (T, ASCII.LF & "bold item my_title" & ASCII.LF,
Wiki.Utils.To_Text ("_bold_ __item__ [my_title]", SYNTAX_GOOGLE),
"Preformat rendering invalid");
end Test_Wiki_Text_Renderer;
-- ------------------------------
-- Test the string parser with UTF-8 support.
-- ------------------------------
procedure Test_Wiki_UTF_8 (T : in out Test) is
procedure Check (Text : in Wiki.Strings.WString);
Test_Chars : constant array (Natural range <>) of Wiki.Strings.WChar
:= (Wiki.Strings.WChar'Val (16#7f#),
Wiki.Strings.WChar'Val (16#80#),
Wiki.Strings.WChar'Val (16#AE#),
Wiki.Strings.WChar'Val (16#1ff#),
Wiki.Strings.WChar'Val (16#1fff#),
Wiki.Strings.WChar'Val (16#1ffff#),
Wiki.Strings.WChar'Val (16#0fffff#));
procedure Check (Text : in Wiki.Strings.WString) is
procedure Get (Value : in Wiki.Strings.WString);
Doc : Wiki.Documents.Document;
Engine : Wiki.Parsers.Parser;
Renderer : aliased Wiki.Render.Text.Text_Renderer;
Stream : aliased Wiki.Streams.Builders.Output_Builder_Stream;
Content : constant String :=
Ada.Strings.UTF_Encoding.Wide_Wide_Strings.Encode (Text);
procedure Get (Value : in Wiki.Strings.WString) is
begin
-- Verify that we got the expected characters.
T.Assert (Wiki.Helpers.LF & Text & Wiki.Helpers.LF = Value,
"Invalid parsing for [" & Content & "]");
end Get;
begin
Engine.Set_Syntax (SYNTAX_MEDIA_WIKI);
Engine.Parse (Content, Doc);
Renderer.Set_Output_Stream (Stream'Unchecked_Access);
Renderer.Set_No_Newline (Enable => False);
Renderer.Render (Doc);
Stream.Iterate (Get'Access);
end Check;
begin
for I in Test_Chars'Range loop
Check (Test_Chars (I) & "");
end loop;
for J in Test_Chars'Range loop
for I in Test_Chars'Range loop
Check (Test_Chars (I) & Test_Chars (J) & "");
end loop;
end loop;
end Test_Wiki_UTF_8;
end Wiki.Parsers.Tests;