Sat, 28 Apr 2007 23:52:36 -0400
[svn] If an archive contains other archives, and the user didn't specify that
they wanted recursion, prompt them to find out what they want to do.
This required some changes in the way prompting for one-item archives works
too, because if an archive inside another archive is itself a one-item
archive, things get really weird. I'm still not really sure what the right
policy is for that.
I'm not wild about this code. It feels like programming a bunch of special
cases. I need to figure out a better way to abstract it. I'm thinking
some kind of Policy class....
1 | 1 | #!/usr/bin/env python |
2 | # | |
3 | # compare.py -- High-level tests for x. | |
4 | # Copyright (c) 2006 Brett Smith <brettcsmith@brettcsmith.org>. | |
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 | |
8 | # Free Software Foundation; either version 2 of the License, or (at your | |
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 | |
17 | # with this program; if not, write to the Free Software Foundation, Inc., | |
18 | # 51 Franklin Street, 5th Floor, Boston, MA, 02111. | |
19 | ||
20 | import os | |
17
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
21 | import re |
1 | 22 | import subprocess |
14
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
23 | import syck |
1 | 24 | import sys |
17
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
25 | import tempfile |
1 | 26 | |
27 | from sets import Set as set | |
28 | ||
19 | 29 | if os.path.exists('scripts/dtrx') and os.path.exists('tests'): |
1 | 30 | os.chdir('tests') |
19 | 31 | elif os.path.exists('../scripts/dtrx') and os.path.exists('../tests'): |
1 | 32 | pass |
33 | else: | |
34 | print "ERROR: Can't run tests in this directory!" | |
35 | sys.exit(2) | |
36 | ||
19 | 37 | 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
|
38 | 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
|
39 | OUTCOMES = ['error', 'failed', 'passed'] |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
40 | TESTSCRIPT_NAME = 'testscript.sh' |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
41 | SCRIPT_PROLOGUE = """#!/bin/sh |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
42 | set -e |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
43 | """ |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
44 | |
20
69c93c3e6972
[svn] If the archive contains one directory with the "wrong" name, ask the user
brett
parents:
19
diff
changeset
|
45 | input_buffer = tempfile.TemporaryFile() |
17
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
46 | output_buffer = tempfile.TemporaryFile() |
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
47 | |
1 | 48 | class ExtractorTestError(Exception): |
49 | pass | |
50 | ||
51 | ||
52 | class ExtractorTest(object): | |
14
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
53 | 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
|
54 | 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
|
55 | 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
|
56 | 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
|
57 | for key in ('directory', 'prerun', 'posttest', 'baseline', 'error', |
20
69c93c3e6972
[svn] If the archive contains one directory with the "wrong" name, ask the user
brett
parents:
19
diff
changeset
|
58 | 'grep', 'antigrep', 'input', 'output'): |
14
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
59 | setattr(self, key, kwargs.get(key, None)) |
1 | 60 | |
20
69c93c3e6972
[svn] If the archive contains one directory with the "wrong" name, ask the user
brett
parents:
19
diff
changeset
|
61 | 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
|
62 | 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
|
63 | output_buffer.flush() |
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
64 | 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
|
65 | 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
|
66 | 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
|
67 | stdout=subprocess.PIPE) |
1 | 68 | process.wait() |
69 | output = process.stdout.read(-1) | |
70 | process.stdout.close() | |
17
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
71 | return status, set(output.split('\n')) |
1 | 72 | |
7
1f3cb3845dfd
[svn] Add a test for recursive extraction which also makes sure that we fix
brett
parents:
1
diff
changeset
|
73 | def write_script(self, commands): |
1 | 74 | 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
|
75 | script.write("%s%s\n" % (SCRIPT_PROLOGUE, commands)) |
1 | 76 | script.close() |
77 | 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
|
78 | |
1f3cb3845dfd
[svn] Add a test for recursive extraction which also makes sure that we fix
brett
parents:
1
diff
changeset
|
79 | def get_shell_results(self): |
14
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
80 | 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
|
81 | return self.get_results(['sh', TESTSCRIPT_NAME] + self.filenames) |
1 | 82 | |
83 | def get_extractor_results(self): | |
14
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
84 | if self.prerun: |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
85 | self.write_script(self.prerun) |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
86 | subprocess.call(['sh', TESTSCRIPT_NAME]) |
20
69c93c3e6972
[svn] If the archive contains one directory with the "wrong" name, ask the user
brett
parents:
19
diff
changeset
|
87 | 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
|
88 | input_buffer.truncate() |
69c93c3e6972
[svn] If the archive contains one directory with the "wrong" name, ask the user
brett
parents:
19
diff
changeset
|
89 | if self.input: |
69c93c3e6972
[svn] If the archive contains one directory with the "wrong" name, ask the user
brett
parents:
19
diff
changeset
|
90 | 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
|
91 | 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
|
92 | input_buffer.write('\n') |
69c93c3e6972
[svn] If the archive contains one directory with the "wrong" name, ask the user
brett
parents:
19
diff
changeset
|
93 | 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
|
94 | input_buffer.flush() |
69c93c3e6972
[svn] If the archive contains one directory with the "wrong" name, ask the user
brett
parents:
19
diff
changeset
|
95 | 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
|
96 | input_buffer) |
1 | 97 | |
7
1f3cb3845dfd
[svn] Add a test for recursive extraction which also makes sure that we fix
brett
parents:
1
diff
changeset
|
98 | 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
|
99 | 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
|
100 | return 0 |
14
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
101 | 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
|
102 | 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
|
103 | |
1 | 104 | def clean(self): |
14
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
105 | if self.directory: |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
106 | 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
|
107 | extra_options = ['!', '-name', TESTSCRIPT_NAME] |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
108 | else: |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
109 | target = ROOT_DIR |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
110 | extra_options = ['-type', 'd', |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
111 | '!', '-name', 'CVS', |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
112 | '!', '-name', '.svn'] |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
113 | status = subprocess.call(['find', target, |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
114 | '-mindepth', '1', '-maxdepth', '1'] + |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
115 | extra_options + |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
116 | ['-exec', 'rm', '-rf', '{}', ';']) |
1 | 117 | if status != 0: |
118 | raise ExtractorTestError("cleanup exited with status code %s" % | |
119 | (status,)) | |
120 | ||
14
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
121 | 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
|
122 | raw_status = status.lower() |
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
123 | if raw_status != 'passed': |
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
124 | output_buffer.seek(0, 0) |
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
125 | 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
|
126 | if message is None: |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
127 | last_part = '' |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
128 | else: |
17
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
129 | last_part = ': %s' % (message,) |
14
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
130 | 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
|
131 | return raw_status |
14
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
132 | |
17
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
133 | 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
|
134 | posttest_result = self.get_posttest_result() |
1 | 135 | self.clean() |
17
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
136 | 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
|
137 | self.clean() |
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
138 | if expected != actual: |
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
139 | 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
|
140 | 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
|
141 | 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
|
142 | 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
|
143 | 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
|
144 | elif posttest_result != 0: |
17
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
145 | 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
|
146 | return self.show_status('FAILED') |
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
147 | 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
|
148 | |
17
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
149 | 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
|
150 | 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
|
151 | 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
|
152 | 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
|
153 | 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
|
154 | return None |
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
155 | |
19 | 156 | def grep_output(self, output): |
17
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
157 | if self.grep and (not re.search(self.grep, output)): |
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
158 | return "output did not match %s" % (self.grep) |
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
159 | elif self.antigrep and re.search(self.antigrep, output): |
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
160 | 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
|
161 | return None |
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
162 | |
19 | 163 | def check_output(self, output): |
164 | if ((self.output is not None) and | |
165 | (self.output.strip() != output.strip())): | |
166 | return "output did not match provided text" | |
167 | return None | |
168 | ||
17
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
169 | def check_results(self): |
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
170 | output_buffer.seek(0, 0) |
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
171 | output_buffer.truncate() |
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
172 | self.clean() |
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
173 | status, actual = self.get_extractor_results() |
19 | 174 | output_buffer.seek(0, 0) |
175 | output_buffer.readline() | |
176 | output = output_buffer.read(-1) | |
177 | problem = (self.have_error_mismatch(status) or | |
178 | 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
|
179 | if problem: |
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
180 | return self.show_status('FAILED', problem) |
19 | 181 | if self.baseline: |
182 | return self.compare_results(actual) | |
183 | else: | |
184 | 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
|
185 | |
14
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
186 | def run(self): |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
187 | if self.directory: |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
188 | os.mkdir(self.directory) |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
189 | os.chdir(self.directory) |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
190 | try: |
17
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
191 | result = self.check_results() |
14
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
192 | except ExtractorTestError, error: |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
193 | 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
|
194 | if self.directory: |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
195 | os.chdir(ROOT_DIR) |
17
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
196 | 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
|
197 | 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
|
198 | return result |
1 | 199 | |
200 | ||
14
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
201 | test_db = open('tests.yml') |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
202 | 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
|
203 | test_db.close() |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
204 | 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
|
205 | 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
|
206 | 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
|
207 | (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
|
208 | continue |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
209 | data = original_data.copy() |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
210 | data['name'] += ' in ..' |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
211 | data['directory'] = 'inside-dir' |
17
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
212 | 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
|
213 | data.get('filenames', '').split()]) |
14
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
214 | tests.append(ExtractorTest(**data)) |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
215 | 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
|
216 | counts = {} |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
217 | for outcome in OUTCOMES: |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
218 | counts[outcome] = 0 |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
219 | for result in results: |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
220 | counts[result] += 1 |
6f9e1bb59719
[svn] Add support for just decompressing files that are compressed. So, if you
brett
parents:
10
diff
changeset
|
221 | 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
|
222 | input_buffer.close() |
17
481a2b4be471
[svn] Lots of tests for various boundary cases, and slightly better handling for
brett
parents:
15
diff
changeset
|
223 | output_buffer.close() |