[gtk-doc/wip/smcv/mkhtml2-test] tests: Attempt to do an integration test for mkhtml2




commit cf52865fa92f2b4c7241bc04c13642f5434225f3
Author: Simon McVittie <smcv debian org>
Date:   Thu Aug 13 00:09:59 2020 +0100

    tests: Attempt to do an integration test for mkhtml2
    
    Signed-off-by: Simon McVittie <smcv debian org>

 configure.ac                                   |   2 +
 tests/Makefile.am                              |   4 +-
 tests/gobject-mkhtml2.sh                       |   6 ++
 tests/gobject-mkhtml2/Makefile.am              |  11 +++
 tests/gobject-mkhtml2/docs/Makefile.am         |   2 +
 tests/gobject-mkhtml2/docs/images/meson.build  |   3 +
 tests/gobject-mkhtml2/docs/images/object.png   | Bin 0 -> 4101 bytes
 tests/gobject-mkhtml2/docs/meson.build         | 113 +++++++++++++++++++++++
 tests/gobject-mkhtml2/docs/tester-docs.xml     | 119 +++++++++++++++++++++++++
 tests/gobject-mkhtml2/docs/tester-sections.txt |  81 +++++++++++++++++
 tests/gobject-mkhtml2/meson.build              |   1 +
 tests/gtk-doc.make                             |  23 +++--
 tests/helpers/gtkdoc_mkhtml2_runner.py         |  38 ++++++++
 tests/helpers/meson.build                      |   3 +-
 tests/meson.build                              |   1 +
 15 files changed, 397 insertions(+), 10 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index f242c80..f720b6d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -179,6 +179,8 @@ tests/fail/docs/Makefile
 tests/gobject/Makefile
 tests/gobject/src/Makefile
 tests/gobject/docs/Makefile
+tests/gobject-mkhtml2/Makefile
+tests/gobject-mkhtml2/docs/Makefile
 tests/program/Makefile
 tests/program/src/Makefile
 tests/program/docs/Makefile
diff --git a/tests/Makefile.am b/tests/Makefile.am
index d2d0b86..24bc904 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -8,8 +8,8 @@ TESTS = \
 if BUILD_TESTS
 # we need to run '.' last so that sanity processes the generated docs
 # maybe move it to a subdir?
-SUBDIRS += annotations bugs empty fail gobject program repro .
-TESTS += annotations.sh bugs.sh empty.sh fail.sh gobject.sh program.sh
+SUBDIRS += annotations bugs empty fail gobject gobject-mkhtml2 program repro .
+TESTS += annotations.sh bugs.sh empty.sh fail.sh gobject.sh gobject-mkhtml2.sh program.sh
 endif
 
 TESTS_ENVIRONMENT = \
diff --git a/tests/gobject-mkhtml2.sh b/tests/gobject-mkhtml2.sh
new file mode 100755
index 0000000..a9486b9
--- /dev/null
+++ b/tests/gobject-mkhtml2.sh
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+set -e
+
+gtkdoctest.sh gobject-mkhtml2
+sanity.sh gobject-mkhtml2
diff --git a/tests/gobject-mkhtml2/Makefile.am b/tests/gobject-mkhtml2/Makefile.am
new file mode 100644
index 0000000..a95a0bb
--- /dev/null
+++ b/tests/gobject-mkhtml2/Makefile.am
@@ -0,0 +1,11 @@
+## Process this file with automake to produce Makefile.in
+
+SUBDIRS = docs
+
+if BUILD_TESTS
+
+check-local: clean
+
+endif
+
+-include $(top_srcdir)/git.mk
diff --git a/tests/gobject-mkhtml2/docs/Makefile.am b/tests/gobject-mkhtml2/docs/Makefile.am
new file mode 100644
index 0000000..07a53c1
--- /dev/null
+++ b/tests/gobject-mkhtml2/docs/Makefile.am
@@ -0,0 +1,2 @@
+MKHTML2=1
+include $(top_srcdir)/tests/gobject/docs/Makefile.am
diff --git a/tests/gobject-mkhtml2/docs/images/meson.build b/tests/gobject-mkhtml2/docs/images/meson.build
new file mode 100644
index 0000000..ee2da70
--- /dev/null
+++ b/tests/gobject-mkhtml2/docs/images/meson.build
@@ -0,0 +1,3 @@
+gobject_test_html_data += [
+  join_paths(srcdir, 'tests', 'gobject', 'docs', 'images', 'object.png')
+]
\ No newline at end of file
diff --git a/tests/gobject-mkhtml2/docs/images/object.png b/tests/gobject-mkhtml2/docs/images/object.png
new file mode 100644
index 0000000..b7f4535
Binary files /dev/null and b/tests/gobject-mkhtml2/docs/images/object.png differ
diff --git a/tests/gobject-mkhtml2/docs/meson.build b/tests/gobject-mkhtml2/docs/meson.build
new file mode 100644
index 0000000..1613c5e
--- /dev/null
+++ b/tests/gobject-mkhtml2/docs/meson.build
@@ -0,0 +1,113 @@
+gobject_test_source_dir = join_paths(
+  srcdir,
+  'tests',
+  'gobject',
+  'src'
+)
+
+gobject_test_docs_dir = join_paths(
+  srcdir,
+  'tests',
+  'gobject-mkhtml2',
+  'docs'
+)
+
+gobject_test_output_dir = join_paths(
+  builddir,
+  'tests',
+  'gobject-mkhtml2',
+  'docs'
+)
+
+gobject_test_html_data = []
+
+test(
+  'test-gobject-scan',
+  python_prg,
+  workdir: gobject_test_docs_dir,
+  is_parallel: false,
+  args: [
+    gtkdoc_scan_runner_script,
+    '--binary-dir=@0@'.format(builddir),
+    '--change-dir=@0@'.format(gobject_test_output_dir),
+    '--module=@0@'.format('tester'),
+    '--source-dir=@0@'.format(gobject_test_source_dir),
+    '--ignore-headers=config.h',
+    '--deprecated-guards=GTKDOC_TESTER_DISABLE_DEPRECATED',
+    '--rebuild-types',
+  ],
+)
+
+test(
+  'test-gobject-scangobj',
+  python_prg,
+  workdir: gobject_test_output_dir,
+  is_parallel: false,
+  args: [
+    gtkdoc_scangobj_runner_script,
+    '--binary-dir=@0@'.format(builddir),
+    '--pkg-config=@0@'.format(pkgconfig_prg_path),
+    '--extra-pkg=@0@'.format('glib-2.0'),
+    '--extra-pkg=@0@'.format('gobject-2.0'),
+    '--extra-lib=@0@'.format(gobject_test_lib.full_path()),
+    '--module=@0@'.format('tester'),
+  ],
+)
+
+test(
+  'test-gobject-mkdb',
+  python_prg,
+  workdir: gobject_test_output_dir,
+  is_parallel: false,
+  args: [
+    gtkdoc_mkdb_runner_script,
+    '--binary-dir=@0@'.format(builddir),
+    '--module=@0@'.format('tester'),
+    '--source-dir=@0@'.format(gobject_test_source_dir),
+    '--main-sgml-file=@0@'.format('tester-docs.xml'),
+    '--output-format=xml',
+    '--xml-mode',
+  ],
+)
+
+foreach style_data: gtkdoc_style_data
+  gobject_test_html_data += join_paths(srcdir, 'style', style_data)
+endforeach
+
+subdir('images') # Appends to gobject_test_html_data
+
+test(
+  'test-gobject-mkhtml2',
+  python_prg,
+  workdir: gobject_test_output_dir,
+  is_parallel: false,
+  args: [
+    gtkdoc_mkhtml2_runner_script,
+    '--binary-dir=@0@'.format(builddir),
+    '--change-dir=@0@'.format(join_paths(gobject_test_output_dir, 'html')),
+    '--html-assets=@0@'.format('@@'.join(gobject_test_html_data)),
+    '@0@'.format('tester'),
+    '@0@'.format(join_paths('..', 'tester-docs.xml')),
+    '--uninstalled',
+    '--path=@0@'.format(':'.join([
+      gobject_test_docs_dir,
+      srcdir,
+      ])
+    ),
+    '--extra-dir=@0@'.format(glib_docpath),
+    '--extra-dir=@0@'.format(gobject_docpath),
+  ],
+)
+
+test(
+  'test-gobject-check',
+  python_prg,
+  workdir: gobject_test_docs_dir,
+  is_parallel: false,
+  args: [
+    gtkdoc_check_runner_script,
+    '--binary-dir=@0@'.format(builddir),
+    '--input-dir=@0@'.format(gobject_test_docs_dir),
+    '--output-dir=@0@'.format(gobject_test_output_dir),
+  ],
+)
diff --git a/tests/gobject-mkhtml2/docs/tester-docs.xml b/tests/gobject-mkhtml2/docs/tester-docs.xml
new file mode 100644
index 0000000..cb78ca8
--- /dev/null
+++ b/tests/gobject-mkhtml2/docs/tester-docs.xml
@@ -0,0 +1,119 @@
+<?xml version="1.0"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+               "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd";
+[
+  <!ENTITY % local.common.attrib "xmlns:xi  CDATA  #FIXED 'http://www.w3.org/2003/XInclude'">
+  <!ENTITY % gtkdocentities SYSTEM "xml/gtkdocentities.ent">
+  %gtkdocentities;
+]>
+<book id="index" xmlns:xi="http://www.w3.org/2003/XInclude";>
+  <bookinfo>
+    <title>&package_name; Reference Manual</title>
+    <corpauthor>
+      The <ulink url="http://www.gtk.org/gtk-doc";>gtk-doc team</ulink>.
+    </corpauthor>
+    <releaseinfo>
+      for &package_string;.
+      The latest version of this documentation can be found on-line at
+      <ulink role="online-location" url="http://[SERVER]/tester/index.html";>http://[SERVER]/tester/</ulink>.
+    </releaseinfo>
+    <legalnotice id="legal">
+      <para>
+        This manual is published as public domain.
+      </para>
+    </legalnotice>
+  </bookinfo>
+
+  <preface id="intro">
+    <title>Introduction</title>
+    <para>
+      This document is for testing purpose only.
+      It is generated from Docbook-<acronym>XML</acronym>.
+      <footnote id="intro.footnote-1">
+        <para>
+          Most of the actual text is quite non-sense. Don't pay attention.
+        </para>
+      </footnote>
+    </para>
+  </preface>
+
+  <part label="1" id="part.i">
+    <title>Overview</title>
+    <chapter id="Overview-building">
+      <title>How to build the library</title>
+      <para></para>
+    </chapter>
+  </part>
+
+  <reference label="2" id="part.ii">
+    <title>API Reference</title>
+    <chapter id="main-api">
+      <title>Tests</title>
+      <xi:include href="xml/object.xml"/>
+      <xi:include href="xml/object2.xml"/>
+      <xi:include href="xml/object3.xml"/>
+      <xi:include href="xml/iface.xml"/>
+      <xi:include href="xml/iface2.xml"/>
+      <xi:include href="xml/types.xml"/>
+    </chapter>
+  </reference>
+
+  <part label="3" id="part.iii">
+    <title>Appendix</title>
+
+    <chapter id="object-tree">
+      <title>Object Hierarchy</title>
+       <xi:include href="xml/tree_index.sgml"/>
+    </chapter>
+
+    <chapter id="object-index">
+      <title>Object Index</title>
+       <xi:include href="xml/object_index.sgml"/>
+    </chapter>
+
+    <index id="api-index-full">
+      <title>API Index</title>
+      <xi:include href="xml/api-index-full.xml"><xi:fallback /></xi:include>
+    </index>
+    <index id="api-index-deprecated" role="deprecated">
+      <title>Index of deprecated API</title>
+      <xi:include href="xml/api-index-deprecated.xml"><xi:fallback /></xi:include>
+    </index>
+    <index id="api-index-0-1" role="0.1">
+      <title>Index of new API in 0.1</title>
+      <xi:include href="xml/api-index-0.1.xml"><xi:fallback /></xi:include>
+    </index>
+    <index id="api-index-0-5" role="0.5">
+      <title>Index of new API in 0.5</title>
+      <xi:include href="xml/api-index-0.5.xml"><xi:fallback /></xi:include>
+    </index>
+
+    <glossary id="glossary">
+      <title>Glossary</title>
+      <glossdiv><title>A</title>
+        <glossentry>
+          <glossterm><anchor id="glossterm-API"/>API</glossterm>
+          <glossdef>
+            <para>Application Programming Interface</para>
+          </glossdef>
+        </glossentry>
+      </glossdiv>
+      <glossdiv><title>X</title>
+        <glossentry>
+          <glossterm><anchor id="glossterm-XML"/>XML</glossterm>
+          <glossdef>
+            <para>Extensible Markup Language</para>
+          </glossdef>
+        </glossentry>
+        <glossentry>
+          <glossterm><anchor id="glossterm-XSL"/>XSL</glossterm>
+          <glossdef>
+            <para>XML Stylesheet Language</para>
+          </glossdef>
+        </glossentry>
+      </glossdiv>
+    </glossary>
+
+    <xi:include href="xml/annotation-glossary.xml"><xi:fallback /></xi:include>
+  </part>
+</book>
diff --git a/tests/gobject-mkhtml2/docs/tester-sections.txt b/tests/gobject-mkhtml2/docs/tester-sections.txt
new file mode 100644
index 0000000..b1d5942
--- /dev/null
+++ b/tests/gobject-mkhtml2/docs/tester-sections.txt
@@ -0,0 +1,81 @@
+<SECTION>
+<FILE>object</FILE>
+GtkdocObject
+GtkdocObjectClass
+gtkdoc_object_new
+gtkdoc_object_set_otest
+gtkdoc_object_frobnicate
+gtkdoc_object_fooify
+gtkdoc_object_do_not_use
+GTKDOC_OBJECT_MACRO_DUMMY
+GTKDOC_OBJECT_MACRO_SUM
+<SUBSECTION Standard>
+GTKDOC_OBJECT
+GTKDOC_IS_OBJECT
+GTKDOC_TYPE_OBJECT
+gtkdoc_object_get_type
+GTKDOC_OBJECT_CLASS
+GTKDOC_IS_OBJECT_CLASS
+GTKDOC_OBJECT_GET_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>object2</FILE>
+GtkdocObject2
+GtkdocObject2Class
+<SUBSECTION Standard>
+GTKDOC_TYPE_OBJECT2
+gtkdoc_object2_get_type
+</SECTION>
+
+<SECTION>
+<FILE>object3</FILE>
+<SUBSECTION Standard>
+GtkdocObject3
+GtkdocObject3Class
+GTKDOC_TYPE_OBJECT3
+gtkdoc_object3_get_type
+</SECTION>
+
+<SECTION>
+<FILE>iface</FILE>
+GtkdocIface
+GtkdocIfaceInterface
+gtkdoc_iface_configure
+GTKDOC_IFACE_MACRO_DUMMY
+GTKDOC_IFACE_MACRO_SUM
+<SUBSECTION Standard>
+GTKDOC_IFACE
+GTKDOC_IS_IFACE
+GTKDOC_TYPE_IFACE
+gtkdoc_iface_get_type
+GTKDOC_IFACE_GET_INTERFACE
+</SECTION>
+
+<SECTION>
+<FILE>iface2</FILE>
+GtkdocIface2
+<SUBSECTION Standard>
+GTKDOC_TYPE_IFACE2
+gtkdoc_iface2_get_type
+</SECTION>
+
+<SECTION>
+<FILE>types</FILE>
+GtkdocEnum
+GtkdocEnum2
+GtkdocPlainOldData
+GtkdocBoxedPlainOldData
+GtkdocHelperEnum
+GtkdocHelperStruct
+<SUBSECTION Standard>
+GTKDOC_TYPE_ENUM
+GTKDOC_TYPE_ENUM2
+GTKDOC_TYPE_BOXED
+gtkdoc_enum_get_type
+gtkdoc_enum2_get_type
+gtkdoc_boxed_get_type
+GTKDOC_TYPE_BOXED_PLAIN_OLD_DATA
+gtkdoc_boxed_plain_old_data_get_type
+</SECTION>
+
diff --git a/tests/gobject-mkhtml2/meson.build b/tests/gobject-mkhtml2/meson.build
new file mode 100644
index 0000000..dd7c213
--- /dev/null
+++ b/tests/gobject-mkhtml2/meson.build
@@ -0,0 +1 @@
+subdir('docs')
diff --git a/tests/gtk-doc.make b/tests/gtk-doc.make
index 9235874..2c4d1d7 100644
--- a/tests/gtk-doc.make
+++ b/tests/gtk-doc.make
@@ -168,19 +168,28 @@ html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
        if test "x$(V)" = "x1"; then \
          mkhtml_options="$$mkhtml_options --verbose"; \
        fi; \
-       echo "gtkdoc-mkhtml --uninstalled --path="$(abs_srcdir)" $$mkhtml_options $(MKHTML_OPTIONS) 
$(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE)" >gtkdoc-mkhtml.log; \
+       if test -n "$(MKHTML2)"; then \
+         mkhtml="gtkdoc-mkhtml2"; \
+         mkhtml_fixxref_options="$(FIXXREF_OPTIONS)"; \
+       else \
+         mkhtml="gtkdoc-mkhtml"; \
+         mkhtml_fixxref_options=""; \
+       fi; \
+       echo "$$mkhtml --uninstalled --path="$(abs_srcdir)" $$mkhtml_options $(MKHTML_OPTIONS) 
$$mkhtml_fixxref_options $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE)" >$$mkhtml.log; \
        cd html && PATH=$(abs_top_builddir):$(PATH) 
PYTHONPATH=$(abs_top_builddir):$(abs_top_srcdir):$(PYTHONPATH) ABS_TOP_SRCDIR=$(abs_top_srcdir) \
-       gtkdoc-mkhtml --uninstalled --path="$(abs_srcdir)" $$mkhtml_options $(MKHTML_OPTIONS) $(DOC_MODULE) 
../$(DOC_MAIN_SGML_FILE) 2>&1 | tee -a ../gtkdoc-mkhtml.log
+       $$mkhtml --uninstalled --path="$(abs_srcdir)" $$mkhtml_options $(MKHTML_OPTIONS) 
$$mkhtml_fixxref_options $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE) 2>&1 | tee -a ../$$mkhtml.log
        -@test "x$(HTML_IMAGES)" = "x" || \
        for file in $(HTML_IMAGES) ; do \
          test -f $(abs_srcdir)/$$file && cp $(abs_srcdir)/$$file $(abs_builddir)/html; \
          test -f $(abs_builddir)/$$file && cp $(abs_builddir)/$$file $(abs_builddir)/html; \
        done;
-       @ts=`cat ts`;tsd=`date -d "now - $$ts seconds" $(TS_FMT)`; \
-       echo "  DOC   `$(DATE_FMT_CMD)$$tsd`: Fixing cross-references"
-       @echo "gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) 
$(FIXXREF_OPTIONS)" >gtkdoc-fixxref.log; \
-       PATH=$(abs_top_builddir):$(PATH) PYTHONPATH=$(abs_top_builddir):$(abs_top_srcdir):$(PYTHONPATH) \
-       gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS) 
2>&1 | tee -a gtkdoc-fixxref.log
+       @if test -z "$(MKHTML2)"; then \
+         ts=`cat ts`;tsd=`date -d "now - $$ts seconds" $(TS_FMT)`; \
+         echo "  DOC   `$(DATE_FMT_CMD)$$tsd`: Fixing cross-references"; \
+         echo "gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) 
$(FIXXREF_OPTIONS)" >gtkdoc-fixxref.log; \
+         PATH=$(abs_top_builddir):$(PATH) PYTHONPATH=$(abs_top_builddir):$(abs_top_srcdir):$(PYTHONPATH) \
+         gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS) 
2>&1 | tee -a gtkdoc-fixxref.log; \
+       fi
        @touch html-build.stamp
 
 #### pdf ####
diff --git a/tests/helpers/gtkdoc_mkhtml2_runner.py b/tests/helpers/gtkdoc_mkhtml2_runner.py
new file mode 100644
index 0000000..fc4dae8
--- /dev/null
+++ b/tests/helpers/gtkdoc_mkhtml2_runner.py
@@ -0,0 +1,38 @@
+# -*- python -*-
+
+from __future__ import print_function
+
+import argparse
+import os
+import shutil
+import sys
+
+from subprocess import call
+
+if __name__ == '__main__':
+    parser = argparse.ArgumentParser(description='gtkdoc-mkhtml2 runner.')
+
+    parser.add_argument("--binary-dir", type=str, required=True,
+                        help='Path to be used as a working directory')
+    parser.add_argument("--change-dir", type=str, default=None,
+                        help='Path to be used as a working directory')
+    parser.add_argument("--html-assets", type=str, default=None,
+                        help='List of HTML assets, seprated by "@@"')
+
+    options, arguments = parser.parse_known_args()
+
+    arguments.insert(0, os.path.join(options.binary_dir, 'gtkdoc-mkhtml2'))
+
+    if options.change_dir is not None:
+        if not os.path.exists(options.change_dir):
+            os.makedirs(options.change_dir)
+
+    if not options.html_assets is None:
+        for html_asset in options.html_assets.split('@@'):
+            if options.change_dir is not None:
+                html_target = os.path.join(options.change_dir, os.path.basename(html_asset))
+            else:
+                html_target = os.path.join(os.getcwd(), os.path.basename(html_asset))
+            shutil.copyfile(html_asset, html_target)
+
+    sys.exit(call(arguments, cwd=options.change_dir))
diff --git a/tests/helpers/meson.build b/tests/helpers/meson.build
index 7e0123e..42b6400 100644
--- a/tests/helpers/meson.build
+++ b/tests/helpers/meson.build
@@ -2,5 +2,6 @@ gtkdoc_scan_runner_script = files('gtkdoc_scan_runner.py')
 gtkdoc_scangobj_runner_script = files('gtkdoc_scangobj_runner.py')
 gtkdoc_mkdb_runner_script = files('gtkdoc_mkdb_runner.py')
 gtkdoc_mkhtml_runner_script = files('gtkdoc_mkhtml_runner.py')
+gtkdoc_mkhtml2_runner_script = files('gtkdoc_mkhtml2_runner.py')
 gtkdoc_fixxref_runner_script = files('gtkdoc_fixxref_runner.py')
-gtkdoc_check_runner_script = files('gtkdoc_check_runner.py')
\ No newline at end of file
+gtkdoc_check_runner_script = files('gtkdoc_check_runner.py')
diff --git a/tests/meson.build b/tests/meson.build
index 92add69..2d83673 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -42,4 +42,5 @@ subdir('bugs')
 subdir('empty')
 subdir('fail')
 subdir('gobject')
+subdir('gobject-mkhtml2')
 subdir('program')


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]