Sun, 12 Apr 2009 11:21:51 -0400
Start printing results ASAP with -l or -t.
Doing -l on a large archive was painful because dtrx would wait until it
had all the listings before it displayed any. It did this to make sure
that the listing would be successful.
On reconsidering, though, I think it's really unlikely that there'll be a
case where a lister process provides *some* good output for a given file in
the wrong format. So, now -l will try to get one good line out of the
lister. If it gets that, then it will immediately start displaying results
as they come in. On the off chance that it detects an error later on, it
will display an error about that, and then try again with a different
extractor if appropriate.
1 | 1 | #!/usr/bin/env python |
2 | # | |
42 | 3 | # compare.py -- High-level tests for dtrx. |
54 | 4 | # Copyright (c) 2006, 2007, 2008 Brett Smith <brettcsmith@brettcsmith.org>. |
1 | 5 | # |
6 | # This program is free software; you can redistribute it and/or modify it | |
7 | # under the terms of the GNU General Public License as published by the | |
28
4d88f2231d33
[svn] Change all the license notices from GPLv2 to GPLv3.
brett
parents:
20
diff
changeset
|
8 | # Free Software Foundation; either version 3 of the License, or (at your |
1 | 9 | # option) any later version. |
10 | # | |
11 | # This program is distributed in the hope that it will be useful, but | |
12 | # WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General | |
14 | # Public License for more details. | |
15 | # | |
16 | # You should have received a copy of the GNU General Public License along | |
42 | 17 | # with this program; if not, see <http://www.gnu.org/licenses/>. |
1 | 18 | |
19 | import os | |
17
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
20 | import re |
1 | 21 | import subprocess |
14
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
22 | import syck |
1 | 23 | import sys |
17
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
24 | import tempfile |
1 | 25 | |
26 | from sets import Set as set | |
27 | ||
19 | 28 | if os.path.exists('scripts/dtrx') and os.path.exists('tests'): |
1 | 29 | os.chdir('tests') |
19 | 30 | elif os.path.exists('../scripts/dtrx') and os.path.exists('../tests'): |
1 | 31 | pass |
32 | else: | |
33 | print "ERROR: Can't run tests in this directory!" | |
34 | sys.exit(2) | |
35 | ||
19 | 36 | X_SCRIPT = os.path.realpath('../scripts/dtrx') |
14
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
37 | ROOT_DIR = os.path.realpath(os.curdir) |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
38 | OUTCOMES = ['error', 'failed', 'passed'] |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
39 | TESTSCRIPT_NAME = 'testscript.sh' |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
40 | SCRIPT_PROLOGUE = """#!/bin/sh |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
41 | set -e |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
42 | """ |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
43 | |
20
69c93c3e6972
[svn] If the archive contains one directory with the "wrong" name, ask the user
brett
parents:
19
diff
changeset
|
44 | input_buffer = tempfile.TemporaryFile() |
17
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
45 | output_buffer = tempfile.TemporaryFile() |
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
46 | |
1 | 47 | class ExtractorTestError(Exception): |
48 | pass | |
49 | ||
50 | ||
51 | class ExtractorTest(object): | |
14
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
52 | def __init__(self, **kwargs): |
20
69c93c3e6972
[svn] If the archive contains one directory with the "wrong" name, ask the user
brett
parents:
19
diff
changeset
|
53 | setattr(self, 'name', kwargs['name']) |
69c93c3e6972
[svn] If the archive contains one directory with the "wrong" name, ask the user
brett
parents:
19
diff
changeset
|
54 | setattr(self, 'options', kwargs.get('options', '-n').split()) |
69c93c3e6972
[svn] If the archive contains one directory with the "wrong" name, ask the user
brett
parents:
19
diff
changeset
|
55 | setattr(self, 'filenames', kwargs.get('filenames', '').split()) |
17
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
56 | for key in ('directory', 'prerun', 'posttest', 'baseline', 'error', |
29
5fad99c17221
[svn] Add support for Ruby Gems, and extracting metadata from .deb/.gem files.
brett
parents:
28
diff
changeset
|
57 | 'grep', 'antigrep', 'input', 'output', 'cleanup'): |
14
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
58 | setattr(self, key, kwargs.get(key, None)) |
1 | 59 | |
20
69c93c3e6972
[svn] If the archive contains one directory with the "wrong" name, ask the user
brett
parents:
19
diff
changeset
|
60 | def get_results(self, commands, stdin=None): |
17
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
61 | print >>output_buffer, "Output from %s:" % (' '.join(commands),) |
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
62 | output_buffer.flush() |
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
63 | status = subprocess.call(commands, stdout=output_buffer, |
20
69c93c3e6972
[svn] If the archive contains one directory with the "wrong" name, ask the user
brett
parents:
19
diff
changeset
|
64 | stderr=output_buffer, stdin=stdin) |
17
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
65 | process = subprocess.Popen(['find', '!', '-name', TESTSCRIPT_NAME], |
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
66 | stdout=subprocess.PIPE) |
1 | 67 | process.wait() |
68 | output = process.stdout.read(-1) | |
69 | process.stdout.close() | |
17
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
70 | return status, set(output.split('\n')) |
1 | 71 | |
7
1f3cb3845dfd
[svn] Add a test for recursive extraction which also makes sure that we fix
brett
parents:
1
diff
changeset
|
72 | def write_script(self, commands): |
1 | 73 | script = open(TESTSCRIPT_NAME, 'w') |
14
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
74 | script.write("%s%s\n" % (SCRIPT_PROLOGUE, commands)) |
1 | 75 | script.close() |
76 | subprocess.call(['chmod', 'u+w', TESTSCRIPT_NAME]) | |
7
1f3cb3845dfd
[svn] Add a test for recursive extraction which also makes sure that we fix
brett
parents:
1
diff
changeset
|
77 | |
30
1015bbd6dc5e
[svn] If we can't figure out what the file is by mimetype, try using the file
brett
parents:
29
diff
changeset
|
78 | def run_script(self, key): |
1015bbd6dc5e
[svn] If we can't figure out what the file is by mimetype, try using the file
brett
parents:
29
diff
changeset
|
79 | commands = getattr(self, key) |
1015bbd6dc5e
[svn] If we can't figure out what the file is by mimetype, try using the file
brett
parents:
29
diff
changeset
|
80 | if commands is not None: |
1015bbd6dc5e
[svn] If we can't figure out what the file is by mimetype, try using the file
brett
parents:
29
diff
changeset
|
81 | if self.directory: |
1015bbd6dc5e
[svn] If we can't figure out what the file is by mimetype, try using the file
brett
parents:
29
diff
changeset
|
82 | directory_hint = '../' |
1015bbd6dc5e
[svn] If we can't figure out what the file is by mimetype, try using the file
brett
parents:
29
diff
changeset
|
83 | else: |
1015bbd6dc5e
[svn] If we can't figure out what the file is by mimetype, try using the file
brett
parents:
29
diff
changeset
|
84 | directory_hint = '' |
1015bbd6dc5e
[svn] If we can't figure out what the file is by mimetype, try using the file
brett
parents:
29
diff
changeset
|
85 | self.write_script(commands) |
1015bbd6dc5e
[svn] If we can't figure out what the file is by mimetype, try using the file
brett
parents:
29
diff
changeset
|
86 | subprocess.call(['sh', TESTSCRIPT_NAME, directory_hint]) |
1015bbd6dc5e
[svn] If we can't figure out what the file is by mimetype, try using the file
brett
parents:
29
diff
changeset
|
87 | |
7
1f3cb3845dfd
[svn] Add a test for recursive extraction which also makes sure that we fix
brett
parents:
1
diff
changeset
|
88 | def get_shell_results(self): |
30
1015bbd6dc5e
[svn] If we can't figure out what the file is by mimetype, try using the file
brett
parents:
29
diff
changeset
|
89 | self.run_script('prerun') |
14
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
90 | self.write_script(self.baseline) |
17
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
91 | return self.get_results(['sh', TESTSCRIPT_NAME] + self.filenames) |
1 | 92 | |
93 | def get_extractor_results(self): | |
30
1015bbd6dc5e
[svn] If we can't figure out what the file is by mimetype, try using the file
brett
parents:
29
diff
changeset
|
94 | self.run_script('prerun') |
20
69c93c3e6972
[svn] If the archive contains one directory with the "wrong" name, ask the user
brett
parents:
19
diff
changeset
|
95 | input_buffer.seek(0, 0) |
69c93c3e6972
[svn] If the archive contains one directory with the "wrong" name, ask the user
brett
parents:
19
diff
changeset
|
96 | input_buffer.truncate() |
69c93c3e6972
[svn] If the archive contains one directory with the "wrong" name, ask the user
brett
parents:
19
diff
changeset
|
97 | if self.input: |
69c93c3e6972
[svn] If the archive contains one directory with the "wrong" name, ask the user
brett
parents:
19
diff
changeset
|
98 | input_buffer.write(self.input) |
69c93c3e6972
[svn] If the archive contains one directory with the "wrong" name, ask the user
brett
parents:
19
diff
changeset
|
99 | if not self.input.endswith('\n'): |
69c93c3e6972
[svn] If the archive contains one directory with the "wrong" name, ask the user
brett
parents:
19
diff
changeset
|
100 | input_buffer.write('\n') |
69c93c3e6972
[svn] If the archive contains one directory with the "wrong" name, ask the user
brett
parents:
19
diff
changeset
|
101 | input_buffer.seek(0, 0) |
69c93c3e6972
[svn] If the archive contains one directory with the "wrong" name, ask the user
brett
parents:
19
diff
changeset
|
102 | input_buffer.flush() |
69c93c3e6972
[svn] If the archive contains one directory with the "wrong" name, ask the user
brett
parents:
19
diff
changeset
|
103 | return self.get_results([X_SCRIPT] + self.options + self.filenames, |
69c93c3e6972
[svn] If the archive contains one directory with the "wrong" name, ask the user
brett
parents:
19
diff
changeset
|
104 | input_buffer) |
1 | 105 | |
7
1f3cb3845dfd
[svn] Add a test for recursive extraction which also makes sure that we fix
brett
parents:
1
diff
changeset
|
106 | def get_posttest_result(self): |
14
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
107 | if not self.posttest: |
7
1f3cb3845dfd
[svn] Add a test for recursive extraction which also makes sure that we fix
brett
parents:
1
diff
changeset
|
108 | return 0 |
14
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
109 | self.write_script(self.posttest) |
7
1f3cb3845dfd
[svn] Add a test for recursive extraction which also makes sure that we fix
brett
parents:
1
diff
changeset
|
110 | return subprocess.call(['sh', TESTSCRIPT_NAME]) |
1f3cb3845dfd
[svn] Add a test for recursive extraction which also makes sure that we fix
brett
parents:
1
diff
changeset
|
111 | |
1 | 112 | def clean(self): |
30
1015bbd6dc5e
[svn] If we can't figure out what the file is by mimetype, try using the file
brett
parents:
29
diff
changeset
|
113 | self.run_script('cleanup') |
14
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
114 | if self.directory: |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
115 | target = os.path.join(ROOT_DIR, self.directory) |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
116 | extra_options = ['!', '-name', TESTSCRIPT_NAME] |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
117 | else: |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
118 | target = ROOT_DIR |
38
f637b9d24c21
[svn] Some more tests to make sure we always do the right thing in the
brett
parents:
30
diff
changeset
|
119 | extra_options = ['(', '(', '-type', 'd', |
14
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
120 | '!', '-name', 'CVS', |
38
f637b9d24c21
[svn] Some more tests to make sure we always do the right thing in the
brett
parents:
30
diff
changeset
|
121 | '!', '-name', '.svn', ')', |
f637b9d24c21
[svn] Some more tests to make sure we always do the right thing in the
brett
parents:
30
diff
changeset
|
122 | '-or', '-name', 'test-text', |
f637b9d24c21
[svn] Some more tests to make sure we always do the right thing in the
brett
parents:
30
diff
changeset
|
123 | '-or', '-name', 'test-onefile', ')'] |
14
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
124 | status = subprocess.call(['find', target, |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
125 | '-mindepth', '1', '-maxdepth', '1'] + |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
126 | extra_options + |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
127 | ['-exec', 'rm', '-rf', '{}', ';']) |
1 | 128 | if status != 0: |
129 | raise ExtractorTestError("cleanup exited with status code %s" % | |
130 | (status,)) | |
131 | ||
14
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
132 | def show_status(self, status, message=None): |
17
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
133 | raw_status = status.lower() |
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
134 | if raw_status != 'passed': |
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
135 | output_buffer.seek(0, 0) |
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
136 | sys.stdout.write(output_buffer.read(-1)) |
14
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
137 | if message is None: |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
138 | last_part = '' |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
139 | else: |
17
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
140 | last_part = ': %s' % (message,) |
14
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
141 | print "%7s: %s%s" % (status, self.name, last_part) |
17
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
142 | return raw_status |
14
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
143 | |
17
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
144 | def compare_results(self, actual): |
7
1f3cb3845dfd
[svn] Add a test for recursive extraction which also makes sure that we fix
brett
parents:
1
diff
changeset
|
145 | posttest_result = self.get_posttest_result() |
1 | 146 | self.clean() |
17
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
147 | status, expected = self.get_shell_results() |
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
148 | self.clean() |
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
149 | if expected != actual: |
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
150 | print >>output_buffer, "Only in baseline results:" |
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
151 | print >>output_buffer, '\n'.join(expected.difference(actual)) |
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
152 | print >>output_buffer, "Only in actual results:" |
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
153 | print >>output_buffer, '\n'.join(actual.difference(expected)) |
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
154 | return self.show_status('FAILED') |
7
1f3cb3845dfd
[svn] Add a test for recursive extraction which also makes sure that we fix
brett
parents:
1
diff
changeset
|
155 | elif posttest_result != 0: |
17
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
156 | print >>output_buffer, "Posttest gave status code", posttest_result |
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
157 | return self.show_status('FAILED') |
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
158 | return self.show_status('Passed') |
14
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
159 | |
17
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
160 | def have_error_mismatch(self, status): |
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
161 | if self.error and (status == 0): |
20
69c93c3e6972
[svn] If the archive contains one directory with the "wrong" name, ask the user
brett
parents:
19
diff
changeset
|
162 | return "dtrx did not return expected error" |
17
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
163 | elif (not self.error) and (status != 0): |
20
69c93c3e6972
[svn] If the archive contains one directory with the "wrong" name, ask the user
brett
parents:
19
diff
changeset
|
164 | return "dtrx returned error code %s" % (status,) |
17
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
165 | return None |
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
166 | |
19 | 167 | def grep_output(self, output): |
69
35a2f45cdd3b
Count files in the archive and report that in the recursion prompt.
Brett Smith <brett@brettcsmith.org>
parents:
54
diff
changeset
|
168 | if self.grep and (not re.search(self.grep.replace(' ', '\\s+'), |
35a2f45cdd3b
Count files in the archive and report that in the recursion prompt.
Brett Smith <brett@brettcsmith.org>
parents:
54
diff
changeset
|
169 | output, re.MULTILINE)): |
17
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
170 | return "output did not match %s" % (self.grep) |
69
35a2f45cdd3b
Count files in the archive and report that in the recursion prompt.
Brett Smith <brett@brettcsmith.org>
parents:
54
diff
changeset
|
171 | elif self.antigrep and re.search(self.antigrep.replace(' ', '\\s+'), |
35a2f45cdd3b
Count files in the archive and report that in the recursion prompt.
Brett Smith <brett@brettcsmith.org>
parents:
54
diff
changeset
|
172 | output, re.MULTILINE): |
17
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
173 | return "output matched antigrep %s" % (self.antigrep) |
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
174 | return None |
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
175 | |
19 | 176 | def check_output(self, output): |
177 | if ((self.output is not None) and | |
178 | (self.output.strip() != output.strip())): | |
179 | return "output did not match provided text" | |
180 | return None | |
181 | ||
17
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
182 | def check_results(self): |
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
183 | output_buffer.seek(0, 0) |
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
184 | output_buffer.truncate() |
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
185 | self.clean() |
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
186 | status, actual = self.get_extractor_results() |
19 | 187 | output_buffer.seek(0, 0) |
188 | output_buffer.readline() | |
189 | output = output_buffer.read(-1) | |
190 | problem = (self.have_error_mismatch(status) or | |
191 | self.check_output(output) or self.grep_output(output)) | |
17
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
192 | if problem: |
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
193 | return self.show_status('FAILED', problem) |
19 | 194 | if self.baseline: |
195 | return self.compare_results(actual) | |
196 | else: | |
50
71bdbc1148af
[svn] Run the cleanup script after the test even if there's no more comparing to do.
brett
parents:
42
diff
changeset
|
197 | self.clean() |
19 | 198 | return self.show_status('Passed') |
17
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
199 | |
14
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
200 | def run(self): |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
201 | if self.directory: |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
202 | os.mkdir(self.directory) |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
203 | os.chdir(self.directory) |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
204 | try: |
17
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
205 | result = self.check_results() |
14
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
206 | except ExtractorTestError, error: |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
207 | result = self.show_status('ERROR', error) |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
208 | if self.directory: |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
209 | os.chdir(ROOT_DIR) |
17
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
210 | subprocess.call(['chmod', '-R', '700', self.directory]) |
14
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
211 | subprocess.call(['rm', '-rf', self.directory]) |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
212 | return result |
1 | 213 | |
214 | ||
14
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
215 | test_db = open('tests.yml') |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
216 | test_data = syck.load(test_db.read(-1)) |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
217 | test_db.close() |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
218 | tests = [ExtractorTest(**data) for data in test_data] |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
219 | for original_data in test_data: |
17
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
220 | if (original_data.has_key('directory') or |
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
221 | (not original_data.has_key('baseline'))): |
14
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
222 | continue |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
223 | data = original_data.copy() |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
224 | data['name'] += ' in ..' |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
225 | data['directory'] = 'inside-dir' |
17
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
226 | data['filenames'] = ' '.join(['../%s' % filename for filename in |
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
227 | data.get('filenames', '').split()]) |
14
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
228 | tests.append(ExtractorTest(**data)) |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
229 | results = [test.run() for test in tests] |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
230 | counts = {} |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
231 | for outcome in OUTCOMES: |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
232 | counts[outcome] = 0 |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
233 | for result in results: |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
234 | counts[result] += 1 |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
235 | print " Totals:", ', '.join(["%s %s" % (counts[key], key) for key in OUTCOMES]) |
20
69c93c3e6972
[svn] If the archive contains one directory with the "wrong" name, ask the user
brett
parents:
19
diff
changeset
|
236 | input_buffer.close() |
17
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
237 | output_buffer.close() |