2016-02-16 18:57:44 +00:00
|
|
|
|
|
|
|
from __future__ import absolute_import, division, print_function
|
2016-03-27 09:11:30 +00:00
|
|
|
from __future__ import unicode_literals
|
2016-02-16 18:57:44 +00:00
|
|
|
|
|
|
|
import os
|
2016-02-29 18:46:36 +00:00
|
|
|
import time
|
2016-03-15 04:18:33 +00:00
|
|
|
import codecs
|
2016-02-29 18:46:36 +00:00
|
|
|
import random
|
|
|
|
import shutil
|
2016-02-16 18:57:44 +00:00
|
|
|
import unittest
|
2016-02-17 03:55:40 +00:00
|
|
|
from tempfile import mkdtemp
|
2016-02-29 18:46:36 +00:00
|
|
|
from tempfile import NamedTemporaryFile as ntf
|
|
|
|
|
2016-03-10 16:27:07 +00:00
|
|
|
import tldp.config
|
2016-02-29 18:46:36 +00:00
|
|
|
from tldp.outputs import OutputNamingConvention
|
2016-02-16 18:57:44 +00:00
|
|
|
|
2016-03-10 02:11:04 +00:00
|
|
|
# -- short names
|
|
|
|
#
|
|
|
|
opa = os.path.abspath
|
|
|
|
opb = os.path.basename
|
|
|
|
opd = os.path.dirname
|
|
|
|
opj = os.path.join
|
|
|
|
|
|
|
|
extras = opa(opj(opd(opd(__file__)), 'extras'))
|
|
|
|
|
2016-02-17 03:55:40 +00:00
|
|
|
|
2016-02-16 18:57:44 +00:00
|
|
|
def stem_and_ext(name):
|
|
|
|
stem, ext = os.path.splitext(os.path.basename(name))
|
|
|
|
assert ext != ''
|
|
|
|
return stem, ext
|
|
|
|
|
2016-02-17 03:55:40 +00:00
|
|
|
|
2016-02-16 18:57:44 +00:00
|
|
|
def dir_to_components(reldir):
|
2016-02-16 22:12:42 +00:00
|
|
|
reldir, basename = os.path.split(os.path.normpath(reldir))
|
|
|
|
components = [basename]
|
2016-02-16 18:57:44 +00:00
|
|
|
while reldir != '':
|
|
|
|
reldir, basename = os.path.split(reldir)
|
|
|
|
components.append(basename)
|
|
|
|
assert len(components) >= 1
|
|
|
|
components.reverse()
|
|
|
|
return components
|
|
|
|
|
|
|
|
|
|
|
|
class TestToolsFilesystem(unittest.TestCase):
|
|
|
|
|
|
|
|
def setUp(self):
|
2016-02-29 18:46:36 +00:00
|
|
|
self.makeTempdir()
|
2016-02-16 18:57:44 +00:00
|
|
|
|
|
|
|
def tearDown(self):
|
2016-02-29 18:46:36 +00:00
|
|
|
self.removeTempdir()
|
|
|
|
|
|
|
|
def makeTempdir(self):
|
|
|
|
self.tempdir = mkdtemp(prefix='tldp-test-')
|
|
|
|
|
|
|
|
def removeTempdir(self):
|
2016-02-16 18:57:44 +00:00
|
|
|
shutil.rmtree(self.tempdir)
|
|
|
|
|
|
|
|
def adddir(self, reldir):
|
|
|
|
components = dir_to_components(reldir)
|
|
|
|
absdir = self.tempdir
|
|
|
|
while components:
|
|
|
|
absdir = os.path.join(absdir, components.pop(0))
|
|
|
|
if not os.path.isdir(absdir):
|
|
|
|
os.mkdir(absdir)
|
|
|
|
self.assertTrue(os.path.isdir(absdir))
|
|
|
|
relpath = os.path.relpath(absdir, self.tempdir)
|
|
|
|
return relpath, absdir
|
|
|
|
|
2016-02-17 18:19:23 +00:00
|
|
|
def addfile(self, reldir, filename, stem=None, ext=None):
|
2016-03-02 03:53:33 +00:00
|
|
|
dirname = os.path.join(self.tempdir, reldir)
|
|
|
|
assert os.path.isdir(dirname)
|
2016-02-16 18:57:44 +00:00
|
|
|
if stem is None:
|
2016-02-16 22:12:42 +00:00
|
|
|
stem, _ = stem_and_ext(filename)
|
2016-02-16 18:57:44 +00:00
|
|
|
if ext is None:
|
2016-02-16 22:12:42 +00:00
|
|
|
_, ext = stem_and_ext(filename)
|
2016-03-02 03:53:33 +00:00
|
|
|
newname = os.path.join(dirname, stem + ext)
|
2016-02-16 22:12:42 +00:00
|
|
|
if os.path.isfile(filename):
|
|
|
|
shutil.copy(filename, newname)
|
|
|
|
else:
|
2016-03-02 06:47:15 +00:00
|
|
|
with open(newname, 'w'):
|
2016-02-17 18:19:23 +00:00
|
|
|
pass
|
2016-02-16 18:57:44 +00:00
|
|
|
relname = os.path.relpath(newname, self.tempdir)
|
|
|
|
return relname, newname
|
|
|
|
|
2016-02-29 18:46:36 +00:00
|
|
|
|
|
|
|
class CCTestTools(unittest.TestCase):
|
|
|
|
|
|
|
|
def setUp(self):
|
|
|
|
self.makeTempdir()
|
|
|
|
|
|
|
|
def tearDown(self):
|
|
|
|
self.removeTempdir()
|
|
|
|
|
|
|
|
def makeTempdir(self):
|
|
|
|
self.tempdir = mkdtemp(prefix='tldp-test-')
|
|
|
|
|
|
|
|
def removeTempdir(self):
|
|
|
|
shutil.rmtree(self.tempdir)
|
|
|
|
|
|
|
|
def writeconfig(self, case):
|
2016-03-15 04:47:48 +00:00
|
|
|
tf = ntf(prefix=case.tag, suffix='.cfg', dir=self.tempdir, delete=False)
|
|
|
|
tf.close()
|
|
|
|
with codecs.open(tf.name, 'w', encoding='utf-8') as f:
|
|
|
|
f.write(case.cfg)
|
|
|
|
case.configfile = tf.name
|
2016-02-29 18:46:36 +00:00
|
|
|
|
|
|
|
|
|
|
|
class TestOutputDirSkeleton(OutputNamingConvention):
|
|
|
|
|
|
|
|
def mkdir(self):
|
|
|
|
if not os.path.isdir(self.dirname):
|
|
|
|
os.mkdir(self.dirname)
|
|
|
|
|
2016-03-10 04:52:45 +00:00
|
|
|
def create_expected_docs(self, func=None):
|
2016-02-29 18:46:36 +00:00
|
|
|
for name in self.expected:
|
|
|
|
fname = getattr(self, name)
|
|
|
|
with open(fname, 'w'):
|
|
|
|
pass
|
2016-03-10 04:52:45 +00:00
|
|
|
if func:
|
|
|
|
func(fname)
|
|
|
|
|
|
|
|
def create_stale_expected_docs(self):
|
|
|
|
def thirtysecondsago(fname):
|
|
|
|
os.utime(fname, (time.time() - 30, time.time() - 30))
|
|
|
|
self.create_expected_docs(func=thirtysecondsago)
|
2016-02-29 18:46:36 +00:00
|
|
|
|
|
|
|
|
|
|
|
class TestSourceDocSkeleton(object):
|
|
|
|
|
|
|
|
def __init__(self, dirname):
|
2016-03-02 03:53:33 +00:00
|
|
|
if isinstance(dirname, list):
|
|
|
|
dirname = dirname[0]
|
2016-02-29 18:46:36 +00:00
|
|
|
if not os.path.abspath(dirname):
|
|
|
|
raise Exception("Please use absolute path in unit tests....")
|
|
|
|
self.dirname = dirname
|
|
|
|
if not os.path.isdir(self.dirname):
|
|
|
|
os.mkdir(self.dirname)
|
|
|
|
|
|
|
|
def addsourcefile(self, filename, content):
|
|
|
|
fname = os.path.join(self.dirname, filename)
|
|
|
|
if os.path.isfile(content):
|
|
|
|
shutil.copy(content, fname)
|
|
|
|
else:
|
2016-03-15 22:49:01 +00:00
|
|
|
with codecs.open(fname, 'w', encoding='utf-8') as f:
|
2016-02-29 18:46:36 +00:00
|
|
|
f.write(content)
|
|
|
|
|
|
|
|
|
2016-03-02 03:53:33 +00:00
|
|
|
class TestInventoryBase(unittest.TestCase):
|
2016-02-29 18:46:36 +00:00
|
|
|
|
2016-03-02 03:53:33 +00:00
|
|
|
def setUp(self):
|
|
|
|
self.makeTempdir()
|
2016-03-10 16:27:07 +00:00
|
|
|
tldp.config.DEFAULT_CONFIGFILE = None
|
|
|
|
self.config, _ = tldp.config.collectconfiguration('ldptool', [])
|
2016-03-02 03:53:33 +00:00
|
|
|
c = self.config
|
|
|
|
c.pubdir = os.path.join(self.tempdir, 'outputs')
|
2016-03-08 04:00:22 +00:00
|
|
|
c.builddir = os.path.join(self.tempdir, 'builddir')
|
2016-03-02 03:53:33 +00:00
|
|
|
c.sourcedir = os.path.join(self.tempdir, 'sources')
|
2016-03-10 04:52:45 +00:00
|
|
|
argv = list()
|
|
|
|
argv.extend(['--builddir', c.builddir])
|
|
|
|
argv.extend(['--pubdir', c.pubdir])
|
|
|
|
argv.extend(['--sourcedir', c.sourcedir])
|
|
|
|
self.argv = argv
|
|
|
|
# -- and make some directories
|
2016-03-08 04:00:22 +00:00
|
|
|
for d in (c.sourcedir, c.pubdir, c.builddir):
|
2016-02-29 18:46:36 +00:00
|
|
|
if not os.path.isdir(d):
|
|
|
|
os.mkdir(d)
|
2016-03-02 03:53:33 +00:00
|
|
|
c.sourcedir = [c.sourcedir]
|
|
|
|
|
|
|
|
def tearDown(self):
|
|
|
|
self.removeTempdir()
|
|
|
|
|
|
|
|
def makeTempdir(self):
|
|
|
|
self.tempdir = mkdtemp(prefix='tldp-test-')
|
|
|
|
|
|
|
|
def removeTempdir(self):
|
|
|
|
shutil.rmtree(self.tempdir)
|
2016-02-29 18:46:36 +00:00
|
|
|
|
|
|
|
def add_stale(self, stem, ex):
|
2016-03-02 03:53:33 +00:00
|
|
|
c = self.config
|
|
|
|
myoutput = TestOutputDirSkeleton(os.path.join(c.pubdir, stem), stem)
|
2016-02-29 18:46:36 +00:00
|
|
|
myoutput.mkdir()
|
2016-03-10 04:52:45 +00:00
|
|
|
myoutput.create_stale_expected_docs()
|
2016-03-02 03:53:33 +00:00
|
|
|
mysource = TestSourceDocSkeleton(c.sourcedir)
|
2016-02-29 18:46:36 +00:00
|
|
|
mysource.addsourcefile(stem + ex.ext, ex.filename)
|
|
|
|
|
|
|
|
def add_broken(self, stem, ex):
|
2016-03-02 03:53:33 +00:00
|
|
|
c = self.config
|
|
|
|
mysource = TestSourceDocSkeleton(c.sourcedir)
|
2016-02-29 18:46:36 +00:00
|
|
|
mysource.addsourcefile(stem + ex.ext, ex.filename)
|
2016-03-02 03:53:33 +00:00
|
|
|
myoutput = TestOutputDirSkeleton(os.path.join(c.pubdir, stem), stem)
|
2016-02-29 18:46:36 +00:00
|
|
|
myoutput.mkdir()
|
|
|
|
myoutput.create_expected_docs()
|
|
|
|
prop = random.choice(myoutput.expected)
|
|
|
|
fname = getattr(myoutput, prop, None)
|
|
|
|
assert fname is not None
|
|
|
|
os.unlink(fname)
|
|
|
|
|
2016-03-02 06:21:29 +00:00
|
|
|
def add_new(self, stem, ex, content=None):
|
2016-03-02 03:53:33 +00:00
|
|
|
c = self.config
|
|
|
|
mysource = TestSourceDocSkeleton(c.sourcedir)
|
2016-03-02 06:21:29 +00:00
|
|
|
if content:
|
|
|
|
mysource.addsourcefile(stem + ex.ext, content)
|
|
|
|
else:
|
|
|
|
mysource.addsourcefile(stem + ex.ext, ex.filename)
|
2016-02-29 18:46:36 +00:00
|
|
|
|
2016-03-08 06:13:38 +00:00
|
|
|
def add_unknown(self, stem, ext, content=None):
|
|
|
|
c = self.config
|
|
|
|
mysource = TestSourceDocSkeleton(c.sourcedir)
|
|
|
|
if content:
|
|
|
|
mysource.addsourcefile(stem + ext, content)
|
|
|
|
else:
|
|
|
|
mysource.addsourcefile(stem + ext, '')
|
|
|
|
|
2016-02-29 18:46:36 +00:00
|
|
|
def add_orphan(self, stem, ex):
|
2016-03-02 03:53:33 +00:00
|
|
|
c = self.config
|
|
|
|
myoutput = TestOutputDirSkeleton(os.path.join(c.pubdir, stem), stem)
|
2016-02-29 18:46:36 +00:00
|
|
|
myoutput.mkdir()
|
|
|
|
myoutput.create_expected_docs()
|
|
|
|
|
|
|
|
def add_published(self, stem, ex):
|
2016-03-02 03:53:33 +00:00
|
|
|
c = self.config
|
|
|
|
mysource = TestSourceDocSkeleton(c.sourcedir)
|
2016-02-29 18:46:36 +00:00
|
|
|
mysource.addsourcefile(stem + ex.ext, ex.filename)
|
2016-03-02 03:53:33 +00:00
|
|
|
myoutput = TestOutputDirSkeleton(os.path.join(c.pubdir, stem), stem)
|
2016-02-29 18:46:36 +00:00
|
|
|
myoutput.mkdir()
|
|
|
|
myoutput.create_expected_docs()
|
|
|
|
|
2016-03-10 02:11:04 +00:00
|
|
|
def add_docbooksgml_support_to_config(self):
|
|
|
|
c = self.config
|
|
|
|
c.docbooksgml_collateindex = opj(extras, 'collateindex.pl')
|
|
|
|
c.docbooksgml_ldpdsl = opj(extras, 'dsssl', 'ldp.dsl')
|
|
|
|
|
|
|
|
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')
|
|
|
|
|
2016-02-16 18:57:44 +00:00
|
|
|
#
|
|
|
|
# -- end of file
|