You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
120 lines
3.7 KiB
120 lines
3.7 KiB
7 years ago
|
#!/usr/bin/env python
|
||
|
|
||
|
# $Id: test_buildhtml.py 7505 2012-09-03 09:17:15Z milde $
|
||
|
# Author: engelbert gruber <grubert@users.sourceforge.net>
|
||
|
# Copyright: This module has been placed in the public domain.
|
||
|
|
||
|
"""
|
||
|
test buildhtml options, because ``--local`` is broken.
|
||
|
|
||
|
Build-HTML Options
|
||
|
------------------
|
||
|
--recurse Recursively scan subdirectories for files to process.
|
||
|
This is the default.
|
||
|
--local Do not scan subdirectories for files to process.
|
||
|
--prune=<directory> Do not process files in <directory>. This option may
|
||
|
be used more than once to specify multiple
|
||
|
directories.
|
||
|
--ignore=<patterns> Recursively ignore files or directories matching any
|
||
|
of the given wildcard (shell globbing) patterns
|
||
|
(separated by colons). Default: ".svn:CVS"
|
||
|
--silent Work silently (no progress messages). Independent of
|
||
|
"--quiet".
|
||
|
"""
|
||
|
|
||
|
import unittest
|
||
|
import os
|
||
|
import re
|
||
|
try:
|
||
|
import tempfile
|
||
|
except ImportError:
|
||
|
pass
|
||
|
try:
|
||
|
from subprocess import Popen, PIPE, STDOUT
|
||
|
except ImportError:
|
||
|
pass
|
||
|
|
||
|
|
||
|
buildhtml_path = os.path.abspath(os.path.join(
|
||
|
os.path.dirname(__file__) or os.curdir,
|
||
|
'..', 'buildhtml.py'))
|
||
|
|
||
|
def process_and_return_filelist(options):
|
||
|
dirs = []
|
||
|
files = []
|
||
|
try:
|
||
|
p = Popen(buildhtml_path+" "+options, shell=True,
|
||
|
stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True)
|
||
|
(cin, cout) = (p.stdin, p.stdout)
|
||
|
except NameError:
|
||
|
cin, cout = os.popen4(buildhtml_path+" "+options)
|
||
|
while 1:
|
||
|
line = cout.readline()
|
||
|
if not line:
|
||
|
break
|
||
|
# in Py 3x, cout.readline() returns `bytes` and the processing fails
|
||
|
line = line.decode('ascii', 'replace')
|
||
|
# BUG no colon in filename/path allowed
|
||
|
item = line.split(": ")[-1].strip()
|
||
|
if line.startswith(" "):
|
||
|
files.append(item)
|
||
|
else:
|
||
|
dirs.append(item)
|
||
|
cin.close()
|
||
|
cout.close()
|
||
|
return (dirs, files)
|
||
|
|
||
|
class BuildHtmlTests(unittest.TestCase):
|
||
|
tree = ( "_tmp_test_tree",
|
||
|
"_tmp_test_tree/one.txt",
|
||
|
"_tmp_test_tree/two.txt",
|
||
|
"_tmp_test_tree/dir1",
|
||
|
"_tmp_test_tree/dir1/one.txt",
|
||
|
"_tmp_test_tree/dir1/two.txt",
|
||
|
"_tmp_test_tree/dir2",
|
||
|
"_tmp_test_tree/dir2/one.txt",
|
||
|
"_tmp_test_tree/dir2/two.txt",
|
||
|
"_tmp_test_tree/dir2/sub",
|
||
|
"_tmp_test_tree/dir2/sub/one.txt",
|
||
|
"_tmp_test_tree/dir2/sub/two.txt",
|
||
|
)
|
||
|
|
||
|
def setUp(self):
|
||
|
try:
|
||
|
self.root = tempfile.mkdtemp()
|
||
|
except NameError:
|
||
|
self.root = os.tempnam()
|
||
|
os.mkdir(self.root)
|
||
|
|
||
|
for s in self.tree:
|
||
|
s = os.path.join(self.root, s)
|
||
|
if not "." in s:
|
||
|
os.mkdir(s)
|
||
|
else:
|
||
|
fd_s = open(s, "w")
|
||
|
fd_s.write("dummy")
|
||
|
fd_s.close()
|
||
|
|
||
|
def tearDown(self):
|
||
|
for i in range(len(self.tree) - 1, -1, -1):
|
||
|
s = os.path.join(self.root, self.tree[i])
|
||
|
if not "." in s:
|
||
|
os.rmdir(s)
|
||
|
else:
|
||
|
os.remove(s)
|
||
|
os.rmdir(self.root)
|
||
|
|
||
|
def test_1(self):
|
||
|
opts = "--dry-run "+ self.root
|
||
|
dirs, files = process_and_return_filelist( opts )
|
||
|
self.assertEqual(files.count("one.txt"), 4)
|
||
|
|
||
|
def test_local(self):
|
||
|
opts = "--dry-run --local "+ self.root
|
||
|
dirs, files = process_and_return_filelist( opts )
|
||
|
self.assertEqual( len(dirs), 1)
|
||
|
self.assertEqual( files, [])
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
unittest.main()
|