diff options
author | Peter Elliott <pelliott@ualberta.ca> | 2021-08-29 13:19:12 -0700 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2021-08-31 16:53:51 +0200 |
commit | 8d2c04821ff751fd6971154fe062392ae5116c33 (patch) | |
tree | 9b34f672a6961b4f1e0f64167ea876a15dcd577a /Tests/LibMarkdown/TestCommonmark.cpp | |
parent | 57ec19f963868402571f6dfaaf8b2e71a47e0db7 (diff) | |
download | serenity-8d2c04821ff751fd6971154fe062392ae5116c33.zip |
Tests: Test LibMarkdown against commonmark test suite
TestCommonmark runs the CommonMark test suite
(https://spec.commonmark.org/0.30/spec.json) against LibMarkdown.
Currently 44/652 tests pass.
Diffstat (limited to 'Tests/LibMarkdown/TestCommonmark.cpp')
-rw-r--r-- | Tests/LibMarkdown/TestCommonmark.cpp | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/Tests/LibMarkdown/TestCommonmark.cpp b/Tests/LibMarkdown/TestCommonmark.cpp new file mode 100644 index 0000000000..764d206672 --- /dev/null +++ b/Tests/LibMarkdown/TestCommonmark.cpp @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2021, Peter Elliott <pelliott@ualberta.ca> + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include <AK/JsonArray.h> +#include <AK/JsonObject.h> +#include <AK/JsonParser.h> +#include <AK/String.h> +#include <LibCore/File.h> +#include <LibMarkdown/Document.h> +#include <LibTest/TestCase.h> +#include <LibTest/TestSuite.h> + +TEST_SETUP +{ + auto file = Core::File::construct("/home/anon/commonmark.spec.json"); + if (!file->open(Core::OpenMode::ReadOnly)) { + file = Core::File::construct("./commonmark.spec.json"); + VERIFY(file->open(Core::OpenMode::ReadOnly)); + } + + String test_data(file->read_all(), AK::ShouldChomp::NoChomp); + + auto tests = JsonParser(test_data).parse().value().as_array(); + for (size_t i = 0; i < tests.size(); ++i) { + auto testcase = tests[i].as_object(); + + auto name = String::formatted("{}_ex{}_{}..{}", + testcase.get("section"), + testcase.get("example"), + testcase.get("start_line"), + testcase.get("end_line")); + + String markdown = testcase.get("markdown").as_string(); + String html = testcase.get("html").as_string(); + + Test::TestSuite::the().add_case(adopt_ref(*new Test::TestCase( + name, [markdown, html]() { + auto document = Markdown::Document::parse(markdown); + EXPECT_EQ(document->render_to_inline_html(), html); + }, + false))); + } +} |