You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucy.apache.org by nw...@apache.org on 2015/01/18 19:44:48 UTC
[12/12] lucy-clownfish git commit: Improve documentation generator
tests
Improve documentation generator tests
- Move tests from CFCTestCMan to CFCTestDocuComment.
- Add tests for POD and HTML.
- Add CFCCHtml_create_html_body to simplify testing.
Project: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/commit/aa82267a
Tree: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/tree/aa82267a
Diff: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/diff/aa82267a
Branch: refs/heads/master
Commit: aa82267a9f85bd72c852e27ca094641f8add2d21
Parents: 73efb7c
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Sat Jan 10 23:35:39 2015 +0100
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Sun Jan 18 19:38:29 2015 +0100
----------------------------------------------------------------------
compiler/src/CFCCHtml.c | 32 ++++--
compiler/src/CFCCHtml.h | 3 +
compiler/src/CFCTest.c | 1 -
compiler/src/CFCTest.h | 1 -
compiler/src/CFCTestCMan.c | 107 ------------------
compiler/src/CFCTestDocuComment.c | 197 ++++++++++++++++++++++++++++++++-
6 files changed, 218 insertions(+), 123 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/aa82267a/compiler/src/CFCCHtml.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCCHtml.c b/compiler/src/CFCCHtml.c
index 9252624..542a6ff 100644
--- a/compiler/src/CFCCHtml.c
+++ b/compiler/src/CFCCHtml.c
@@ -325,6 +325,22 @@ CFCCHtml_create_index_doc(CFCCHtml *self, CFCParcel *parcel,
char*
CFCCHtml_create_html_doc(CFCCHtml *self, CFCClass *klass) {
+ const char *class_name = CFCClass_get_class_name(klass);
+ char *title
+ = CFCUtil_sprintf("%s " UTF8_NDASH " C API Documentation", class_name);
+ char *header = CFCUtil_global_replace(self->header, "{title}", title);
+ char *body = CFCCHtml_create_html_body(klass);
+
+ char *html_doc = CFCUtil_sprintf("%s%s%s", header, body, self->footer);
+
+ FREEMEM(body);
+ FREEMEM(header);
+ FREEMEM(title);
+ return html_doc;
+}
+
+char*
+CFCCHtml_create_html_body(CFCClass *klass) {
CFCParcel *parcel = CFCClass_get_parcel(klass);
const char *parcel_name = CFCParcel_get_name(parcel);
const char *class_name = CFCClass_get_class_name(klass);
@@ -350,14 +366,10 @@ CFCCHtml_create_html_doc(CFCCHtml *self, CFCClass *klass) {
// Build an INHERITANCE section describing class ancestry.
char *inheritance = S_html_create_inheritance(klass);
- char *title
- = CFCUtil_sprintf("%s " UTF8_NDASH " C API Documentation", class_name);
- char *header = CFCUtil_global_replace(self->header, "{title}", title);
char *index_filename = S_index_filename(parcel);
// Put it all together.
const char pattern[] =
- "%s"
"<h1>%s</h1>\n"
"<table>\n"
"<tr>\n"
@@ -386,18 +398,14 @@ CFCCHtml_create_html_doc(CFCCHtml *self, CFCClass *klass) {
"%s"
"%s"
"%s"
- "%s"
"%s";
- char *html_doc
- = CFCUtil_sprintf(pattern, header, class_name, index_filename,
+ char *html_body
+ = CFCUtil_sprintf(pattern, class_name, index_filename,
parcel_name, class_name, class_nickname, class_var,
struct_sym, name, synopsis, description,
- functions_html, methods_html, inheritance,
- self->footer);
+ functions_html, methods_html, inheritance);
FREEMEM(index_filename);
- FREEMEM(header);
- FREEMEM(title);
FREEMEM(name);
FREEMEM(synopsis);
FREEMEM(description);
@@ -405,7 +413,7 @@ CFCCHtml_create_html_doc(CFCCHtml *self, CFCClass *klass) {
FREEMEM(methods_html);
FREEMEM(inheritance);
- return html_doc;
+ return html_body;
}
static int
http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/aa82267a/compiler/src/CFCCHtml.h
----------------------------------------------------------------------
diff --git a/compiler/src/CFCCHtml.h b/compiler/src/CFCCHtml.h
index dc5a5f7..41f46fc 100644
--- a/compiler/src/CFCCHtml.h
+++ b/compiler/src/CFCCHtml.h
@@ -63,6 +63,9 @@ CFCCHtml_create_index_doc(CFCCHtml *self, struct CFCParcel *parcel,
char*
CFCCHtml_create_html_doc(CFCCHtml *self, struct CFCClass *klass);
+char*
+CFCCHtml_create_html_body(struct CFCClass *klass);
+
#ifdef __cplusplus
}
#endif
http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/aa82267a/compiler/src/CFCTest.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCTest.c b/compiler/src/CFCTest.c
index 1692f58..21cff48 100644
--- a/compiler/src/CFCTest.c
+++ b/compiler/src/CFCTest.c
@@ -128,7 +128,6 @@ static const CFCTestBatch *const S_batches[] = {
&CFCTEST_BATCH_FILE,
&CFCTEST_BATCH_HIERARCHY,
&CFCTEST_BATCH_PARSER,
- &CFCTEST_BATCH_C_MAN,
NULL
};
http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/aa82267a/compiler/src/CFCTest.h
----------------------------------------------------------------------
diff --git a/compiler/src/CFCTest.h b/compiler/src/CFCTest.h
index f78e07f..dbb3a17 100644
--- a/compiler/src/CFCTest.h
+++ b/compiler/src/CFCTest.h
@@ -155,7 +155,6 @@ CFCTest_set_file_times(const char *path, time_t time);
extern const CFCTestBatch CFCTEST_BATCH_CLASS;
extern const CFCTestBatch CFCTEST_BATCH_C_BLOCK;
-extern const CFCTestBatch CFCTEST_BATCH_C_MAN;
extern const CFCTestBatch CFCTEST_BATCH_DOCU_COMMENT;
extern const CFCTestBatch CFCTEST_BATCH_FILE;
extern const CFCTestBatch CFCTEST_BATCH_FILE_SPEC;
http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/aa82267a/compiler/src/CFCTestCMan.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCTestCMan.c b/compiler/src/CFCTestCMan.c
deleted file mode 100644
index 6544d01..0000000
--- a/compiler/src/CFCTestCMan.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/* Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-#include <string.h>
-
-#define CFC_USE_TEST_MACROS
-#include "CFCBase.h"
-#include "CFCClass.h"
-#include "CFCCMan.h"
-#include "CFCDocuComment.h"
-#include "CFCParcel.h"
-#include "CFCTest.h"
-#include "CFCUtil.h"
-
-#ifndef true
- #define true 1
- #define false 0
-#endif
-
-static void
-S_run_tests(CFCTest *test);
-
-const CFCTestBatch CFCTEST_BATCH_C_MAN = {
- "Clownfish::CFC::Binding::C::Man",
- 1,
- S_run_tests
-};
-
-static void
-S_run_tests(CFCTest *test) {
- CFCParcel *parcel = CFCParcel_new("Neato", NULL, NULL, NULL);
- CFCDocuComment *docu = CFCDocuComment_parse(
- "/** Test man page creator.\n"
- " * \n"
- " * # Heading 1\n"
- " * \n"
- " * Paragraph: *emphasized*, **strong**, `code`.\n"
- " * \n"
- " * Paragraph: [link](http://example.com/).\n"
- " * \n"
- " * Code 1\n"
- " * Code 2\n"
- " * \n"
- " * * List item 1\n"
- " * * List item 1.1\n"
- " * \n"
- " * Paragraph in list\n"
- " * \n"
- " * Paragraph after list\n"
- " */\n"
- );
- CFCClass *klass
- = CFCClass_create(parcel, "public", "Neato::Object", NULL, NULL,
- docu, NULL, NULL, 0, 0);
- char *man_page = CFCCMan_create_man_page(klass);
- const char *expected_output =
- ".TH Neato::Object 3\n"
- ".SH NAME\n"
- "Neato::Object \\- Test man page creator.\n"
- ".SH DESCRIPTION\n"
- ".SS\n"
- "Heading 1\n"
- "Paragraph: \\fIemphasized\\f[], \\fBstrong\\f[], \\FCcode\\F[]\\&.\n"
- "\n"
- "Paragraph: \n"
- ".UR http://example.com/\n"
- "link\n"
- ".UE\n"
- "\\&.\n"
- ".IP\n"
- ".nf\n"
- ".fam C\n"
- "Code 1\n"
- "Code 2\n"
- ".fam\n"
- ".fi\n"
- ".IP \\(bu\n"
- "List item 1\n"
- ".RS\n"
- ".IP \\(bu\n"
- "List item 1.1\n"
- ".RE\n"
- ".IP\n"
- "Paragraph in list\n"
- ".P\n"
- "Paragraph after list\n";
- STR_EQ(test, man_page, expected_output, "create man page");
-
- FREEMEM(man_page);
- CFCBase_decref((CFCBase*)klass);
- CFCBase_decref((CFCBase*)docu);
- CFCBase_decref((CFCBase*)parcel);
-}
-
http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/aa82267a/compiler/src/CFCTestDocuComment.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCTestDocuComment.c b/compiler/src/CFCTestDocuComment.c
index dba5f3c..3e78e38 100644
--- a/compiler/src/CFCTestDocuComment.c
+++ b/compiler/src/CFCTestDocuComment.c
@@ -17,21 +17,32 @@
#define CFC_USE_TEST_MACROS
#include "CFCBase.h"
#include "CFCDocuComment.h"
+#include "CFCCHtml.h"
+#include "CFCCMan.h"
+#include "CFCClass.h"
+#include "CFCParcel.h"
#include "CFCParser.h"
+#include "CFCPerlClass.h"
+#include "CFCPerlPod.h"
#include "CFCTest.h"
#include "CFCUtil.h"
+#ifndef true
+ #define true 1
+ #define false 0
+#endif
+
static void
S_run_tests(CFCTest *test);
const CFCTestBatch CFCTEST_BATCH_DOCU_COMMENT = {
"Clownfish::CFC::Model::DocuComment",
- 15,
+ 18,
S_run_tests
};
static void
-S_run_tests(CFCTest *test) {
+S_test_parser(CFCTest *test) {
CFCDocuComment *docucomment;
docucomment = CFCDocuComment_parse("/** foo. */");
@@ -105,3 +116,185 @@ S_run_tests(CFCTest *test) {
CFCBase_decref((CFCBase*)parser);
}
+static void
+S_test_generator(CFCTest *test) {
+ CFCParcel *parcel = CFCParcel_new("Neato", NULL, NULL, NULL);
+ CFCDocuComment *docu = CFCDocuComment_parse(
+ "/** Test documentation generator.\n"
+ " * \n"
+ " * # Heading 1\n"
+ " * \n"
+ " * Paragraph: *emphasized*, **strong**, `code`.\n"
+ " * \n"
+ " * Paragraph: [link](http://example.com/).\n"
+ " * \n"
+ " * Code 1\n"
+ " * Code 2\n"
+ " * \n"
+ " * * List item 1\n"
+ " * * List item 1.1\n"
+ " * > Blockquote\n"
+ " * \n"
+ " * Paragraph in list\n"
+ " * \n"
+ " * Paragraph after list\n"
+ " */\n"
+ );
+ CFCClass *klass
+ = CFCClass_create(parcel, "public", "Neato::Object", NULL, NULL,
+ docu, NULL, NULL, 0, 0);
+
+ char *man_page = CFCCMan_create_man_page(klass);
+ const char *expected_man =
+ ".TH Neato::Object 3\n"
+ ".SH NAME\n"
+ "Neato::Object \\- Test documentation generator.\n"
+ ".SH DESCRIPTION\n"
+ ".SS\n"
+ "Heading 1\n"
+ "Paragraph: \\fIemphasized\\f[], \\fBstrong\\f[], \\FCcode\\F[]\\&.\n"
+ "\n"
+ "Paragraph: \n"
+ ".UR http://example.com/\n"
+ "link\n"
+ ".UE\n"
+ "\\&.\n"
+ ".IP\n"
+ ".nf\n"
+ ".fam C\n"
+ "Code 1\n"
+ "Code 2\n"
+ ".fam\n"
+ ".fi\n"
+ ".IP \\(bu\n"
+ "List item 1\n"
+ ".RS\n"
+ ".IP \\(bu\n"
+ "List item 1.1\n"
+ ".RS\n"
+ ".IP\n"
+ "Blockquote\n"
+ ".RE\n"
+ ".RE\n"
+ ".IP\n"
+ "Paragraph in list\n"
+ ".P\n"
+ "Paragraph after list\n";
+ STR_EQ(test, man_page, expected_man, "create man page");
+
+ char *html = CFCCHtml_create_html_body(klass);
+ const char *expected_html =
+ "<h1>Neato::Object</h1>\n"
+ "<table>\n"
+ "<tr>\n"
+ "<td class=\"label\">parcel</td>\n"
+ "<td><a href=\"neato.html\">Neato</a></td>\n"
+ "</tr>\n"
+ "<tr>\n"
+ "<td class=\"label\">class name</td>\n"
+ "<td>Neato::Object</td>\n"
+ "</tr>\n"
+ "<tr>\n"
+ "<td class=\"label\">class nickname</td>\n"
+ "<td>Object</td>\n"
+ "</tr>\n"
+ "<tr>\n"
+ "<td class=\"label\">class variable</td>\n"
+ "<td><code>NEATO_OBJECT</code></td>\n"
+ "</tr>\n"
+ "<tr>\n"
+ "<td class=\"label\">struct symbol</td>\n"
+ "<td><code>neato_Object</code></td>\n"
+ "</tr>\n"
+ "</table>\n"
+ "<h2>Name</h2>\n"
+ "<p>Neato::Object – Test documentation generator.</p>\n"
+ "<h2>Description</h2>\n"
+ "<h1>Heading 1</h1>\n"
+ "<p>Paragraph: <em>emphasized</em>, <strong>strong</strong>, <code>code</code>.</p>\n"
+ "<p>Paragraph: <a href=\"http://example.com/\">link</a>.</p>\n"
+ "<pre><code>Code 1\n"
+ "Code 2\n"
+ "</code></pre>\n"
+ "<ul>\n"
+ "<li>\n"
+ "<p>List item 1</p>\n"
+ "<ul>\n"
+ "<li>List item 1.1\n"
+ "<blockquote>\n"
+ "<p>Blockquote</p>\n"
+ "</blockquote>\n"
+ "</li>\n"
+ "</ul>\n"
+ "<p>Paragraph in list</p>\n"
+ "</li>\n"
+ "</ul>\n"
+ "<p>Paragraph after list</p>\n";
+ STR_EQ(test, html, expected_html, "create HTML");
+
+ CFCPerlClass *perl_class = CFCPerlClass_new(parcel, "Neato::Object");
+ CFCPerlPod *perl_pod = CFCPerlPod_new();
+ CFCPerlClass_set_pod_spec(perl_class, perl_pod);
+ char *pod = CFCPerlClass_create_pod(perl_class);
+ const char *expected_pod =
+ "=head1 NAME\n"
+ "\n"
+ "Neato::Object - Test documentation generator.\n"
+ "\n"
+ "=head1 DESCRIPTION\n"
+ "\n"
+ "=head3 Heading 1\n"
+ "\n"
+ "Paragraph: I<emphasized>, B<strong>, C<code>.\n"
+ "\n"
+ "Paragraph: L<link|http://example.com/>.\n"
+ "\n"
+ " Code 1\n"
+ " Code 2\n"
+ "\n"
+ "=over\n"
+ "\n"
+ "=item *\n"
+ "\n"
+ "List item 1\n"
+ "\n"
+ "=over\n"
+ "\n"
+ "=item *\n"
+ "\n"
+ "List item 1.1\n"
+ "\n"
+ "=over\n"
+ "\n"
+ "Blockquote\n"
+ "\n"
+ "=back\n"
+ "\n"
+ "=back\n"
+ "\n"
+ "Paragraph in list\n"
+ "\n"
+ "=back\n"
+ "\n"
+ "Paragraph after list\n"
+ "\n"
+ "=cut\n"
+ "\n";
+ STR_EQ(test, pod, expected_pod, "create POD");
+
+ FREEMEM(pod);
+ CFCBase_decref((CFCBase*)perl_pod);
+ CFCBase_decref((CFCBase*)perl_class);
+ FREEMEM(html);
+ FREEMEM(man_page);
+ CFCBase_decref((CFCBase*)klass);
+ CFCBase_decref((CFCBase*)docu);
+ CFCBase_decref((CFCBase*)parcel);
+}
+
+static void
+S_run_tests(CFCTest *test) {
+ S_test_parser(test);
+ S_test_generator(test);
+}
+