2016-02-13 07:48:48 +00:00
|
|
|
|
|
|
|
from __future__ import absolute_import, division, print_function
|
|
|
|
|
|
|
|
import os
|
2016-02-16 05:32:35 +00:00
|
|
|
import errno
|
2016-02-13 20:32:05 +00:00
|
|
|
import random
|
2016-02-19 07:31:18 +00:00
|
|
|
import unittest
|
2016-02-13 20:32:05 +00:00
|
|
|
|
2016-02-26 21:22:58 +00:00
|
|
|
from cStringIO import StringIO
|
|
|
|
|
2016-02-13 20:32:05 +00:00
|
|
|
try:
|
|
|
|
from types import SimpleNamespace
|
|
|
|
except ImportError:
|
|
|
|
from utils import SimpleNamespace
|
2016-02-13 07:48:48 +00:00
|
|
|
|
2016-02-17 03:55:40 +00:00
|
|
|
from tldptesttools import TestToolsFilesystem
|
2016-02-16 18:57:44 +00:00
|
|
|
|
2016-02-13 07:48:48 +00:00
|
|
|
# -- Test Data
|
2016-02-16 19:11:37 +00:00
|
|
|
import example
|
2016-02-13 07:48:48 +00:00
|
|
|
|
|
|
|
# -- SUT
|
2016-03-02 03:49:28 +00:00
|
|
|
from tldp.sources import SourceCollection, SourceDocument
|
|
|
|
from tldp.sources import scansourcedirs, sourcedoc_fromdir
|
2016-02-13 07:48:48 +00:00
|
|
|
|
2016-02-26 20:49:09 +00:00
|
|
|
sampledocs = os.path.join(os.path.dirname(__file__), 'sample-documents')
|
2016-02-13 20:32:05 +00:00
|
|
|
|
2016-02-26 21:22:58 +00:00
|
|
|
widths = SimpleNamespace(status=20, stem=50)
|
2016-02-13 20:32:05 +00:00
|
|
|
|
2016-02-26 21:24:10 +00:00
|
|
|
|
2016-02-16 18:57:44 +00:00
|
|
|
class TestFileSourceCollectionMultiDir(TestToolsFilesystem):
|
2016-02-13 20:32:05 +00:00
|
|
|
|
|
|
|
def test_multidir_finding_singlefiles(self):
|
2016-02-16 19:11:37 +00:00
|
|
|
ex = random.choice(example.sources)
|
2016-02-16 18:44:05 +00:00
|
|
|
doc0 = SimpleNamespace(reldir='LDP/howto', stem="A-Unique-Stem")
|
|
|
|
doc1 = SimpleNamespace(reldir='LDP/guide', stem="A-Different-Stem")
|
2016-02-13 20:32:05 +00:00
|
|
|
documents = (doc0, doc1)
|
|
|
|
for d in documents:
|
2016-02-16 18:44:05 +00:00
|
|
|
d.reldir, d.absdir = self.adddir(d.reldir)
|
2016-02-17 03:55:40 +00:00
|
|
|
_, _ = self.addfile(d.reldir, ex.filename, stem=d.stem)
|
2016-02-19 07:31:18 +00:00
|
|
|
s = scansourcedirs([x.absdir for x in documents])
|
2016-02-16 05:51:56 +00:00
|
|
|
self.assertEquals(2, len(s))
|
2016-02-16 18:44:05 +00:00
|
|
|
expected = set([x.stem for x in documents])
|
|
|
|
found = set(s.keys())
|
|
|
|
self.assertEquals(expected, found)
|
|
|
|
|
|
|
|
def test_multidir_finding_namecollision(self):
|
2016-02-16 19:11:37 +00:00
|
|
|
ex = random.choice(example.sources)
|
2016-02-16 18:44:05 +00:00
|
|
|
doc0 = SimpleNamespace(reldir='LDP/howto', stem="A-Non-Unique-Stem")
|
|
|
|
doc1 = SimpleNamespace(reldir='LDP/guide', stem="A-Non-Unique-Stem")
|
|
|
|
documents = (doc0, doc1)
|
|
|
|
for d in documents:
|
|
|
|
d.reldir, d.absdir = self.adddir(d.reldir)
|
2016-02-17 03:55:40 +00:00
|
|
|
_, _ = self.addfile(d.reldir, ex.filename, stem=d.stem)
|
2016-02-19 07:31:18 +00:00
|
|
|
s = scansourcedirs([x.absdir for x in documents])
|
2016-02-16 18:44:05 +00:00
|
|
|
self.assertEquals(1, len(s))
|
|
|
|
expected = set([x.stem for x in documents])
|
|
|
|
found = set(s.keys())
|
|
|
|
self.assertEquals(expected, found)
|
2016-02-13 20:32:05 +00:00
|
|
|
|
|
|
|
|
2016-02-16 18:57:44 +00:00
|
|
|
class TestFileSourceCollectionOneDir(TestToolsFilesystem):
|
2016-02-13 20:32:05 +00:00
|
|
|
|
2016-02-16 18:44:05 +00:00
|
|
|
def test_finding_nonfile(self):
|
|
|
|
maindir = 'LDP/LDP/howto'
|
|
|
|
reldir, absdir = self.adddir(maindir)
|
2016-03-02 05:50:42 +00:00
|
|
|
os.mkfifo(os.path.join(absdir, 'non-dir-non-file.xml'))
|
2016-02-19 07:31:18 +00:00
|
|
|
s = scansourcedirs([absdir])
|
2016-02-16 18:44:05 +00:00
|
|
|
self.assertEquals(0, len(s))
|
|
|
|
|
2016-02-13 20:32:05 +00:00
|
|
|
def test_finding_singlefile(self):
|
2016-02-16 19:11:37 +00:00
|
|
|
ex = random.choice(example.sources)
|
2016-02-16 18:44:05 +00:00
|
|
|
maindir = 'LDP/LDP/howto'
|
|
|
|
reldir, absdir = self.adddir(maindir)
|
2016-02-16 22:15:46 +00:00
|
|
|
_, _ = self.addfile(reldir, ex.filename)
|
2016-02-19 07:31:18 +00:00
|
|
|
s = scansourcedirs([absdir])
|
2016-02-16 05:51:56 +00:00
|
|
|
self.assertEquals(1, len(s))
|
2016-02-13 20:32:05 +00:00
|
|
|
|
|
|
|
def test_skipping_misnamed_singlefile(self):
|
2016-02-16 19:11:37 +00:00
|
|
|
ex = random.choice(example.sources)
|
2016-02-16 18:44:05 +00:00
|
|
|
maindir = 'LDP/LDP/howto'
|
|
|
|
reldir, absdir = self.adddir(maindir)
|
2016-02-16 22:15:46 +00:00
|
|
|
self.addfile(reldir, ex.filename, ext=".mis")
|
2016-02-19 07:31:18 +00:00
|
|
|
s = scansourcedirs([absdir])
|
2016-02-16 05:51:56 +00:00
|
|
|
self.assertEquals(1, len(s))
|
2016-02-13 20:32:05 +00:00
|
|
|
|
2016-02-16 18:44:05 +00:00
|
|
|
def test_multiple_stems_of_different_extensions(self):
|
2016-02-16 19:11:37 +00:00
|
|
|
ex = random.choice(example.sources)
|
2016-02-16 18:44:05 +00:00
|
|
|
stem = 'A-Non-Unique-Stem'
|
|
|
|
maindir = os.path.join('LDP/LDP/howto', stem)
|
|
|
|
reldir, absdir = self.adddir(maindir)
|
2016-02-16 22:15:46 +00:00
|
|
|
self.addfile(reldir, ex.filename, stem=stem, ext=".xml")
|
|
|
|
self.addfile(reldir, ex.filename, stem=stem, ext=".md")
|
2016-02-19 07:31:18 +00:00
|
|
|
s = scansourcedirs([absdir])
|
2016-02-16 18:44:05 +00:00
|
|
|
self.assertEquals(1, len(s))
|
|
|
|
|
2016-02-13 20:32:05 +00:00
|
|
|
|
2016-02-19 07:31:18 +00:00
|
|
|
class TestNullSourceCollection(TestToolsFilesystem):
|
|
|
|
|
|
|
|
def test_SourceCollection_no_dirnames(self):
|
|
|
|
s = SourceCollection()
|
|
|
|
self.assertIsInstance(s, SourceCollection)
|
2016-03-01 02:04:44 +00:00
|
|
|
self.assertTrue('docs' in str(s))
|
2016-02-19 07:31:18 +00:00
|
|
|
|
|
|
|
|
2016-02-16 18:57:44 +00:00
|
|
|
class TestInvalidSourceCollection(TestToolsFilesystem):
|
2016-02-13 07:48:48 +00:00
|
|
|
|
|
|
|
def test_validateDirs_onebad(self):
|
|
|
|
invalid0 = os.path.join(self.tempdir, 'unique', 'rabbit')
|
2016-02-16 05:32:35 +00:00
|
|
|
with self.assertRaises(IOError) as ecm:
|
2016-02-19 07:31:18 +00:00
|
|
|
scansourcedirs([invalid0])
|
2016-02-13 07:48:48 +00:00
|
|
|
e = ecm.exception
|
2016-02-16 05:32:35 +00:00
|
|
|
self.assertTrue('unique/rabbit' in e.filename)
|
2016-02-13 07:48:48 +00:00
|
|
|
|
|
|
|
def test_validateDirs_multibad(self):
|
|
|
|
invalid0 = os.path.join(self.tempdir, 'unique', 'rabbit')
|
|
|
|
invalid1 = os.path.join(self.tempdir, 'affable', 'elephant')
|
2016-02-16 05:32:35 +00:00
|
|
|
with self.assertRaises(IOError) as ecm:
|
2016-02-19 07:31:18 +00:00
|
|
|
scansourcedirs([invalid0, invalid1])
|
2016-02-13 07:48:48 +00:00
|
|
|
e = ecm.exception
|
2016-02-16 05:32:35 +00:00
|
|
|
self.assertTrue('affable/elephant' in e.filename)
|
2016-02-13 07:48:48 +00:00
|
|
|
|
|
|
|
def testEmptyDir(self):
|
2016-02-19 07:31:18 +00:00
|
|
|
s = scansourcedirs([self.tempdir])
|
2016-02-16 05:51:56 +00:00
|
|
|
self.assertEquals(0, len(s))
|
2016-02-13 20:32:05 +00:00
|
|
|
|
2016-02-13 07:48:48 +00:00
|
|
|
|
2016-02-26 20:49:09 +00:00
|
|
|
class TestSourceDocument(unittest.TestCase):
|
2016-02-19 07:31:18 +00:00
|
|
|
|
2016-02-26 20:49:09 +00:00
|
|
|
def test_init(self):
|
|
|
|
for ex in example.sources:
|
|
|
|
fullpath = ex.filename
|
|
|
|
fn = os.path.basename(fullpath)
|
|
|
|
doc = SourceDocument(fullpath)
|
|
|
|
self.assertIsInstance(doc, SourceDocument)
|
|
|
|
self.assertTrue(fn in str(doc))
|
|
|
|
self.assertTrue(fn in doc.statinfo)
|
|
|
|
|
2016-02-26 21:22:58 +00:00
|
|
|
def test_sourcedoc_fromdir(self):
|
|
|
|
dirname = os.path.dirname(example.ex_linuxdoc_dir.filename)
|
|
|
|
doc = SourceDocument(dirname)
|
|
|
|
self.assertIsInstance(doc, SourceDocument)
|
2016-02-19 07:31:18 +00:00
|
|
|
|
2016-03-02 03:49:28 +00:00
|
|
|
def test_sourcedoc_fromdir_withdots(self):
|
|
|
|
dirname = os.path.dirname(example.ex_docbook4xml_dir.filename)
|
|
|
|
doc = sourcedoc_fromdir(dirname)
|
|
|
|
self.assertIsNotNone(doc)
|
|
|
|
|
2016-02-26 21:22:58 +00:00
|
|
|
def test_detail(self):
|
|
|
|
ex = example.ex_linuxdoc_dir
|
|
|
|
s = SourceDocument(ex.filename)
|
|
|
|
fout = StringIO()
|
|
|
|
s.detail(widths, False, file=fout)
|
|
|
|
fout.seek(0)
|
|
|
|
result = fout.read()
|
|
|
|
fout.close()
|
|
|
|
self.assertTrue(ex.stem in result)
|
|
|
|
self.assertTrue('source' in result)
|
|
|
|
|
|
|
|
def test_bad_dir_multiple_doctypes(self):
|
|
|
|
fullpath = os.path.join(sampledocs, 'Bad-Dir-Multiple-Doctypes')
|
|
|
|
with self.assertRaises(Exception) as ecm:
|
|
|
|
SourceDocument(fullpath)
|
|
|
|
e = ecm.exception
|
|
|
|
self.assertTrue('multiple document choices' in e.message)
|
2016-02-19 07:31:18 +00:00
|
|
|
|
2016-02-26 21:24:10 +00:00
|
|
|
|
2016-02-16 18:57:44 +00:00
|
|
|
class TestMissingSourceDocuments(TestToolsFilesystem):
|
2016-02-13 07:59:44 +00:00
|
|
|
|
|
|
|
def test_init_missing(self):
|
|
|
|
missing = os.path.join(self.tempdir, 'vanishing')
|
2016-02-16 05:32:35 +00:00
|
|
|
with self.assertRaises(IOError) as ecm:
|
2016-02-13 07:59:44 +00:00
|
|
|
SourceDocument(missing)
|
|
|
|
e = ecm.exception
|
2016-02-16 05:32:35 +00:00
|
|
|
self.assertEquals(errno.ENOENT, e.errno)
|
2016-02-13 07:59:44 +00:00
|
|
|
|
2016-02-26 21:22:58 +00:00
|
|
|
def test_init_wrongtype(self):
|
|
|
|
with self.assertRaises(ValueError) as ecm:
|
2016-02-13 07:59:44 +00:00
|
|
|
SourceDocument(self.tempdir)
|
|
|
|
e = ecm.exception
|
2016-02-26 21:22:58 +00:00
|
|
|
self.assertTrue('not identifiable' in e.message)
|
2016-02-13 07:59:44 +00:00
|
|
|
|
2016-02-13 07:48:48 +00:00
|
|
|
#
|
|
|
|
# -- end of file
|