71 lines
2.3 KiB
C++
71 lines
2.3 KiB
C++
// Smoke-тест Фазы 0: проверяет, что третьест-сторонние библиотеки
|
|
// (cmark-gfm, libgit2) собраны, слинкованы и работают.
|
|
#include <cmark-gfm.h>
|
|
#include <cmark-gfm-extension_api.h>
|
|
#include <cmark-gfm-core-extensions.h>
|
|
|
|
#include <git2.h>
|
|
|
|
#include <cstdio>
|
|
#include <cstdlib>
|
|
#include <cstring>
|
|
#include <string>
|
|
|
|
static std::string render_md(const std::string &markdown)
|
|
{
|
|
cmark_gfm_core_extensions_ensure_registered();
|
|
|
|
cmark_parser *parser = cmark_parser_new(CMARK_OPT_DEFAULT);
|
|
for (const char *name : {"table", "strikethrough", "autolink", "tasklist"}) {
|
|
if (cmark_syntax_extension *ext = cmark_find_syntax_extension(name))
|
|
cmark_parser_attach_syntax_extension(parser, ext);
|
|
}
|
|
|
|
cmark_parser_feed(parser, markdown.data(), markdown.size());
|
|
cmark_node *doc = cmark_parser_finish(parser);
|
|
|
|
char *html = cmark_render_html(doc, CMARK_OPT_DEFAULT,
|
|
cmark_parser_get_syntax_extensions(parser));
|
|
std::string out = html ? html : "";
|
|
free(html);
|
|
|
|
cmark_node_free(doc);
|
|
cmark_parser_free(parser);
|
|
return out;
|
|
}
|
|
|
|
int main()
|
|
{
|
|
// --- libgit2 ---
|
|
int maj = 0, min = 0, rev = 0;
|
|
git_libgit2_version(&maj, &min, &rev);
|
|
std::printf("libgit2 %d.%d.%d\n", maj, min, rev);
|
|
if (maj == 0 && min == 0) {
|
|
std::fprintf(stderr, "FAIL: libgit2 не подключен\n");
|
|
return 1;
|
|
}
|
|
|
|
// --- cmark-gfm ---
|
|
std::printf("cmark-gfm %s\n", cmark_version_string());
|
|
if (std::strlen(cmark_version_string()) == 0) {
|
|
std::fprintf(stderr, "FAIL: cmark-gfm не подключен\n");
|
|
return 1;
|
|
}
|
|
|
|
// --- рендер Markdown (CommonMark + GFM: таблица, задача, заголовок) ---
|
|
const char *md
|
|
= "# Заголовок\n\n| A | B |\n|---|---|\n| 1 | 2 |\n\n- [ ] задача";
|
|
std::string html = render_md(md);
|
|
std::printf("html: %s\n", html.c_str());
|
|
|
|
bool ok = html.find("<h1>") != std::string::npos
|
|
&& html.find("<table") != std::string::npos
|
|
&& html.find("<input") != std::string::npos;
|
|
if (!ok) {
|
|
std::fprintf(stderr, "FAIL: GFM-рендер (заголовок/таблица/задача)\n");
|
|
return 1;
|
|
}
|
|
|
|
std::printf("SMOKE TEST OK\n");
|
|
return 0;
|
|
} |