python-tldp/tests/test_driver.py

397 lines
14 KiB
Python
Raw Normal View History

2016-03-01 05:31:55 +00:00
from __future__ import absolute_import, division, print_function
import os
2016-03-08 06:13:38 +00:00
import uuid
import errno
import random
import unittest
2016-03-08 06:13:38 +00:00
from tempfile import NamedTemporaryFile as ntf
2016-03-01 05:31:55 +00:00
from cStringIO import StringIO
from argparse import Namespace
2016-03-08 06:13:38 +00:00
from tldptesttools import TestInventoryBase, TestToolsFilesystem
from tldp.typeguesser import knowndoctypes
from tldp.inventory import stypes, status_types
from tldp.sources import SourceDocument
2016-03-01 05:31:55 +00:00
# -- Test Data
import example
# -- SUT
import tldp.config
import tldp.driver
2016-03-08 06:13:38 +00:00
# -- variables
opj = os.path.join
opd = os.path.dirname
opa = os.path.abspath
extras = opa(opj(opd(opd(__file__)), 'extras'))
2016-03-08 06:13:38 +00:00
sampledocs = opj(opd(__file__), 'sample-documents')
2016-03-01 05:31:55 +00:00
widths = Namespace(status=20, stem=50)
class TestDriverDetail(TestInventoryBase):
def test_stale_detail_verbosity(self):
c = self.config
2016-03-08 04:01:26 +00:00
self.add_stale('Stale-HOWTO', example.ex_docbook4xml)
c.verbose = True,
inv = tldp.inventory.Inventory(c.pubdir, c.sourcedir)
2016-03-01 21:32:38 +00:00
docs = inv.all.values()
2016-03-01 05:31:55 +00:00
stdout = StringIO()
tldp.driver.detail(c, docs, file=stdout)
2016-03-01 05:31:55 +00:00
stdout.seek(0)
2016-03-02 04:12:01 +00:00
self.assertTrue('newer source' in stdout.read())
2016-03-01 05:31:55 +00:00
def test_broken_detail_verbosity(self):
c = self.config
2016-03-08 04:01:26 +00:00
self.add_broken('Broken-HOWTO', example.ex_docbook4xml)
c.verbose = True,
inv = tldp.inventory.Inventory(c.pubdir, c.sourcedir)
2016-03-01 21:32:38 +00:00
docs = inv.all.values()
2016-03-01 05:31:55 +00:00
stdout = StringIO()
tldp.driver.detail(c, docs, file=stdout)
2016-03-01 05:31:55 +00:00
stdout.seek(0)
2016-03-02 04:12:01 +00:00
self.assertTrue('missing output' in stdout.read())
2016-03-01 05:31:55 +00:00
2016-03-08 04:01:26 +00:00
def test_orphan_verbosity(self):
c = self.config
self.add_orphan('Orphan-HOWTO', example.ex_docbook4xml)
c.verbose = True,
inv = tldp.inventory.Inventory(c.pubdir, c.sourcedir)
docs = inv.all.values()
stdout = StringIO()
tldp.driver.detail(c, docs, file=stdout)
stdout.seek(0)
self.assertTrue('missing source' in stdout.read())
2016-03-01 05:31:55 +00:00
2016-03-08 06:13:38 +00:00
class TestDriverShowDoctypes(TestToolsFilesystem):
def test_show_doctypes(self):
f = ntf(dir=self.tempdir, prefix='doctypes-', delete=False)
result = tldp.driver.show_doctypes(Namespace(), file=f)
self.assertEquals(result, os.EX_OK)
f.close()
with open(f.name) as x:
stdout = x.read()
for doctype in knowndoctypes:
self.assertTrue(doctype.formatname in stdout)
def test_show_doctypes_extraargs(self):
result = tldp.driver.show_doctypes(Namespace(), 'bogus')
self.assertTrue('Extra arguments' in result)
class TestDriverShowStatustypes(TestToolsFilesystem):
def test_show_statustypes(self):
stdout = StringIO()
result = tldp.driver.show_statustypes(Namespace(), file=stdout)
self.assertEquals(result, os.EX_OK)
stdout.seek(0)
data = stdout.read()
for status in status_types:
self.assertTrue(stypes[status] in data)
def test_show_statustypes_extraargs(self):
result = tldp.driver.show_statustypes(Namespace(), 'bogus')
self.assertTrue('Extra arguments' in result)
2016-03-01 05:31:55 +00:00
class TestDriverSummary(TestInventoryBase):
2016-03-08 06:13:38 +00:00
def test_summary_extraargs(self):
result = tldp.driver.summary(Namespace(), 'bogus')
self.assertTrue('Extra arguments' in result)
def test_summary_pubdir(self):
self.config.pubdir = None
result = tldp.driver.summary(self.config)
self.assertTrue('Option --pubdir' in result)
def test_summary_sourcedir(self):
self.config.sourcedir = None
result = tldp.driver.summary(self.config)
self.assertTrue('Option --sourcedir' in result)
def publishDocumentsWithLongNames(self, count):
names = list()
for _ in range(count):
x = str(uuid.uuid4())
names.append(x)
self.add_published(x, random.choice(example.sources))
return names
def test_summary_longnames(self):
c = self.config
2016-03-08 06:13:38 +00:00
names = self.publishDocumentsWithLongNames(5)
2016-03-01 05:31:55 +00:00
stdout = StringIO()
2016-03-08 06:13:38 +00:00
result = tldp.driver.summary(c, file=stdout)
self.assertEquals(result, os.EX_OK)
2016-03-01 05:31:55 +00:00
stdout.seek(0)
2016-03-08 06:13:38 +00:00
data = stdout.read()
self.assertTrue('and 4 more' in data)
c.verbose = True
stdout = StringIO()
result = tldp.driver.summary(c, file=stdout)
self.assertEquals(result, os.EX_OK)
stdout.seek(0)
data = stdout.read()
for name in names:
self.assertTrue(name in data)
def publishDocumentsWithShortNames(self, count):
names = list()
for _ in range(count):
x = hex(random.randint(0, 2**32))
names.append(x)
self.add_published(x, random.choice(example.sources))
return names
def test_summary_short(self):
c = self.config
names = self.publishDocumentsWithShortNames(20)
stdout = StringIO()
result = tldp.driver.summary(c, file=stdout)
self.assertEquals(result, os.EX_OK)
stdout.seek(0)
data = stdout.read()
self.assertTrue('and 16 more' in data)
c.verbose = True
stdout = StringIO()
result = tldp.driver.summary(c, file=stdout)
self.assertEquals(result, os.EX_OK)
stdout.seek(0)
data = stdout.read()
for name in names:
self.assertTrue(name in data)
class TestcreateBuildDirectory(TestToolsFilesystem):
def test_createBuildDirectory(self):
d = os.path.join(self.tempdir, 'child', 'grandchild')
ready, error = tldp.driver.createBuildDirectory(d)
self.assertFalse(ready)
self.assertEquals(error, errno.ENOENT)
class Testbuilddir_setup(TestToolsFilesystem):
def test_builddir_setup_default(self):
config = Namespace()
_, config.pubdir = self.adddir('pubdir')
config.builddir = None
ready, error = tldp.driver.builddir_setup(config)
self.assertTrue(ready)
def test_builddir_setup_specified(self):
config = Namespace()
_, config.pubdir = self.adddir('pubdir')
_, config.builddir = self.adddir('builddir')
ready, error = tldp.driver.builddir_setup(config)
self.assertTrue(ready)
class TestremoveUnknownDoctypes(TestToolsFilesystem):
def test_removeUnknownDoctypes(self):
docs = list()
docs.append(SourceDocument(opj(sampledocs, 'Unknown-Doctype.xqf')))
docs.append(SourceDocument(opj(sampledocs, 'linuxdoc-simple.sgml')))
result = tldp.driver.removeUnknownDoctypes(docs)
self.assertEqual(1, len(result))
2016-03-01 05:31:55 +00:00
class TestDriverRun(TestInventoryBase):
def test_run(self):
c = self.config
2016-03-01 05:31:55 +00:00
ex = example.ex_linuxdoc
self.add_published('Published-HOWTO', ex)
self.add_new('New-HOWTO', ex)
self.add_stale('Stale-HOWTO', ex)
self.add_orphan('Orphan-HOWTO', ex)
self.add_broken('Broken-HOWTO', ex)
argv = ['--pubdir', c.pubdir, '--sourcedir', c.sourcedir[0]]
2016-03-03 19:20:57 +00:00
fullpath = opj(self.tempdir, 'sources', 'New-HOWTO.sgml')
argv.extend(['--publish', 'stale', 'Orphan-HOWTO', fullpath])
2016-03-01 05:31:55 +00:00
tldp.driver.run(argv)
inv = tldp.inventory.Inventory(c.pubdir, c.sourcedir)
self.assertEquals(4, len(inv.published.keys()))
self.assertEquals(1, len(inv.broken.keys()))
def test_run_extra_args(self):
c = self.config
self.add_new('New-HOWTO', example.ex_linuxdoc)
argv = ['--pubdir', c.pubdir, '--sourcedir', c.sourcedir[0]]
2016-03-03 19:20:57 +00:00
fullpath = opj(self.tempdir, 'sources', 'New-HOWTO.sgml')
argv.extend(['--build', 'stale', 'Orphan-HOWTO', fullpath, 'extra'])
val = tldp.driver.run(argv)
self.assertTrue('Unknown arguments' in val)
2016-03-01 05:31:55 +00:00
def test_run_no_action(self):
c = self.config
ex = example.ex_linuxdoc
self.add_new('New-HOWTO', ex)
argv = ['--builddir', c.builddir, ]
argv.extend(['--pubdir', c.pubdir, ])
argv.extend(['--sourcedir', c.sourcedir[0]])
tldp.driver.run(argv)
docbuilddir = opj(c.builddir, ex.doctype.__name__)
inv = tldp.inventory.Inventory(docbuilddir, c.sourcedir)
self.assertEquals(1, len(inv.published.keys()))
def test_run_oops_no_sourcedir(self):
c = self.config
ex = example.ex_linuxdoc
self.add_new('New-HOWTO', ex)
argv = ['--pubdir', c.pubdir]
exit = tldp.driver.run(argv)
self.assertTrue('required for inventory' in exit)
def test_run_oops_no_pubdir(self):
c = self.config
ex = example.ex_linuxdoc
self.add_new('New-HOWTO', ex)
argv = ['--sourcedir', c.sourcedir[0]]
exit = tldp.driver.run(argv)
self.assertTrue('required for inventory' in exit)
2016-03-01 21:32:38 +00:00
class TestDriverProcessSkips(TestInventoryBase):
def test_skipDocuments_status(self):
c = self.config
ex = example.ex_linuxdoc
self.add_new('New-HOWTO', ex)
self.add_stale('Stale-HOWTO', ex)
c.skip = ['stale']
inv = tldp.inventory.Inventory(c.pubdir, c.sourcedir)
docs = inv.all.values()
inc, exc = tldp.driver.processSkips(c, docs)
self.assertTrue(1, len(exc))
excluded = exc.pop()
self.assertEquals(excluded.stem, 'Stale-HOWTO')
self.assertEquals(len(inc) + 1, len(inv.all.keys()))
def test_skipDocuments_stem(self):
c = self.config
ex = example.ex_linuxdoc
self.add_published('Published-HOWTO', ex)
self.add_new('New-HOWTO', ex)
c.skip = ['Published-HOWTO']
inv = tldp.inventory.Inventory(c.pubdir, c.sourcedir)
docs = inv.all.values()
inc, exc = tldp.driver.processSkips(c, docs)
self.assertTrue(1, len(exc))
excluded = exc.pop()
self.assertEquals(excluded.stem, 'Published-HOWTO')
self.assertEquals(len(inc) + 1, len(inv.all.keys()))
2016-03-01 21:32:38 +00:00
def test_skipDocuments_doctype(self):
c = self.config
self.add_published('Linuxdoc-HOWTO', example.ex_linuxdoc)
self.add_new('Docbook4XML-HOWTO', example.ex_docbook4xml)
c.skip = ['Docbook4XML']
inv = tldp.inventory.Inventory(c.pubdir, c.sourcedir)
docs = inv.all.values()
inc, exc = tldp.driver.processSkips(c, docs)
self.assertTrue(1, len(exc))
excluded = exc.pop()
self.assertEquals(excluded.stem, 'Docbook4XML-HOWTO')
self.assertEquals(len(inc) + 1, len(inv.all.keys()))
# @unittest.skip("Except when you want to spend time....")
class TestDriverBuild(TestInventoryBase):
def test_build_asciidoc(self):
self.add_docbook4xml_xsl_to_config()
c = self.config
c.build = True
self.add_new('Frobnitz-Asciidoc-HOWTO', example.ex_asciidoc)
inv = tldp.inventory.Inventory(c.pubdir, c.sourcedir)
self.assertEquals(1, len(inv.all.keys()))
docs = inv.all.values()
c.skip = []
tldp.driver.publish(c, docs)
doc = docs.pop(0)
self.assertTrue(doc.output.iscomplete)
def test_build_linuxdoc(self):
c = self.config
2016-03-03 19:20:57 +00:00
c.build = True
self.add_new('Frobnitz-Linuxdoc-HOWTO', example.ex_linuxdoc)
inv = tldp.inventory.Inventory(c.pubdir, c.sourcedir)
self.assertEquals(1, len(inv.all.keys()))
docs = inv.all.values()
c.skip = []
tldp.driver.publish(c, docs)
doc = docs.pop(0)
self.assertTrue(doc.output.iscomplete)
def test_build_docbooksgml(self):
c = self.config
2016-03-03 19:20:57 +00:00
c.build = True
self.add_new('Frobnitz-DocBook-SGML-HOWTO', example.ex_docbooksgml)
2016-03-03 19:20:57 +00:00
c.docbooksgml_collateindex = opj(extras, 'collateindex.pl')
c.docbooksgml_ldpdsl = opj(extras, 'dsssl', 'ldp.dsl')
inv = tldp.inventory.Inventory(c.pubdir, c.sourcedir)
self.assertEquals(1, len(inv.all.keys()))
docs = inv.all.values()
tldp.driver.publish(c, docs)
doc = docs.pop(0)
self.assertTrue(doc.output.iscomplete)
2016-03-03 19:20:57 +00:00
def add_docbook4xml_xsl_to_config(self):
c = self.config
c.docbook4xml_xslprint = opj(extras, 'xsl', 'tldp-print.xsl')
c.docbook4xml_xslsingle = opj(extras, 'xsl', 'tldp-one-page.xsl')
c.docbook4xml_xslchunk = opj(extras, 'xsl', 'tldp-chapters.xsl')
def test_build_docbook4xml(self):
2016-03-03 19:20:57 +00:00
self.add_docbook4xml_xsl_to_config()
c = self.config
2016-03-03 19:20:57 +00:00
c.build = True
self.add_new('Frobnitz-DocBook-XML-4-HOWTO', example.ex_docbook4xml)
inv = tldp.inventory.Inventory(c.pubdir, c.sourcedir)
self.assertEquals(1, len(inv.all.keys()))
docs = inv.all.values()
tldp.driver.publish(c, docs)
doc = docs.pop(0)
self.assertTrue(doc.output.iscomplete)
def test_build_one_broken(self):
2016-03-03 19:20:57 +00:00
self.add_docbook4xml_xsl_to_config()
c = self.config
2016-03-03 19:20:57 +00:00
c.build = True
self.add_new('Frobnitz-DocBook-XML-4-HOWTO', example.ex_docbook4xml)
# -- mangle the content of a valid DocBook XML file
borked = example.ex_docbook4xml.content[:-12]
self.add_new('Frobnitz-Borked-XML-4-HOWTO',
example.ex_docbook4xml, content=borked)
inv = tldp.inventory.Inventory(c.pubdir, c.sourcedir)
self.assertEquals(2, len(inv.all.keys()))
docs = inv.all.values()
result = tldp.driver.build(c, docs)
2016-03-07 21:54:55 +00:00
self.assertTrue('Build failed' in result)
def test_build_only_requested_stem(self):
c = self.config
ex = example.ex_linuxdoc
self.add_published('Published-HOWTO', ex)
self.add_new('New-HOWTO', ex)
argv = ['--pubdir', c.pubdir, '--sourcedir', c.sourcedir[0]]
argv.extend(['--build', 'Published-HOWTO'])
tldp.driver.run(argv)
inv = tldp.inventory.Inventory(c.pubdir, c.sourcedir)
self.assertEquals(1, len(inv.published.keys()))
self.assertEquals(1, len(inv.work.keys()))
2016-03-01 05:31:55 +00:00
#
# -- end of file