changeset 27383:b1160299a175

tests: add coverage to ensure Wix tracks 'help' and 'templates' files This would have caught the problem fixed by 65d2538ac993. There are other *.wxs files that can be checked, but they appear to be more complicated. For example, locale.wxs has what appears to be foreach loop support, as well as variable substitution. By checking `hg files` to determine tracked file, this is able to avoid false failures when other junk is present in the filesystem, like *.orig files. I can't tell if the map-cmdline.status file is not included on purpose, but I don't see the purpose of excluding it. The missing help files seem reasonable for Windows.
author Matt Harbison <matt_harbison@yahoo.com>
date Sun, 13 Sep 2015 22:54:51 -0400
parents de7bcbc68042
children 2f63ae140c93
files tests/test-install.t
diffstat 1 files changed, 68 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/tests/test-install.t	Sun Dec 13 18:13:44 2015 -0500
+++ b/tests/test-install.t	Sun Sep 13 22:54:51 2015 -0400
@@ -41,3 +41,71 @@
   checking commit editor...
   checking username...
   no problems detected
+
+  $ cat >> wixxml.py << EOF
+  > import os, subprocess, sys
+  > import xml.etree.ElementTree as ET
+  > 
+  > # MSYS mangles the path if it expands $TESTDIR
+  > testdir = os.environ['TESTDIR']
+  > ns = {'wix' : 'http://schemas.microsoft.com/wix/2006/wi'}
+  > 
+  > def directory(node, relpath):
+  >     '''generator of files in the xml node, rooted at relpath'''
+  >     dirs = node.findall('./wix:Directory', ns)
+  > 
+  >     for d in dirs:
+  >         for subfile in directory(d, relpath + d.attrib['Name'] + '/'):
+  >             yield subfile
+  > 
+  >     files = node.findall('./wix:Component/wix:File', ns)
+  > 
+  >     for f in files:
+  >         yield relpath + f.attrib['Name']
+  > 
+  > def hgdirectory(relpath):
+  >     '''generator of tracked files, rooted at relpath'''
+  >     hgdir = "%s/../mercurial" % (testdir)
+  >     args = ['hg', '--cwd', hgdir, 'files', '--rev', '.', relpath]
+  >     proc = subprocess.Popen(args, stdout=subprocess.PIPE,
+  >                             stderr=subprocess.PIPE)
+  >     output = proc.communicate()[0]
+  > 
+  >     slash = '/'
+  >     for line in output.splitlines():
+  >         if os.name == 'nt':
+  >             yield line.replace(os.sep, slash)
+  >         else:
+  >             yield line
+  > 
+  > tracked = [f for f in hgdirectory(sys.argv[1])]
+  > 
+  > xml = ET.parse("%s/../contrib/wix/%s.wxs" % (testdir, sys.argv[1]))
+  > root = xml.getroot()
+  > dir = root.find('.//wix:DirectoryRef', ns)
+  > 
+  > installed = [f for f in directory(dir, '')]
+  > 
+  > print('Not installed:')
+  > for f in sorted(set(tracked) - set(installed)):
+  >     print('  %s' % f)
+  > 
+  > print('Not tracked:')
+  > for f in sorted(set(installed) - set(tracked)):
+  >     print('  %s' % f)
+  > EOF
+
+  $ python wixxml.py help
+  Not installed:
+    help/common.txt
+    help/hg.1.txt
+    help/hgignore.5.txt
+    help/hgrc.5.txt
+    help/internals/bundles.txt
+    help/internals/changegroups.txt
+  Not tracked:
+
+  $ python wixxml.py templates
+  Not installed:
+    templates/map-cmdline.status
+  Not tracked: