Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(642)

Side by Side Diff: recipe_engine/third_party/expect_tests/handle_test.py

Issue 2387763003: Add initial postprocess unit test thingy. (Closed)
Patch Set: Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 # Copyright 2014 The Chromium Authors. All rights reserved. 1 # Copyright 2014 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 import collections 5 import collections
6 import os 6 import os
7 import sys 7 import sys
8 import time 8 import time
9 import textwrap
martiniss 2016/10/03 19:14:19 unused
iannucci 2016/10/06 22:47:11 Done.
9 10
10 from cStringIO import StringIO 11 from cStringIO import StringIO
11 12
12 from .type_definitions import DirSeen, Handler, Failure 13 from .type_definitions import DirSeen, Handler, Failure
13 from .serialize import GetCurrentData, DiffData, NonExistant 14 from .serialize import GetCurrentData, DiffData, NonExistant
14 15
15 16
16 Missing = collections.namedtuple('Missing', 'test log_lines') 17 Missing = collections.namedtuple('Missing', 'test log_lines')
17 Fail = collections.namedtuple('Fail', 'test diff log_lines') 18 Fail = collections.namedtuple('Fail', 'test diff log_lines')
18 Pass = collections.namedtuple('Pass', 'test') 19 Pass = collections.namedtuple('Pass', 'test')
19 20
20 21
22 class FailChecks(collections.namedtuple('FailChecks', 'test checks')):
dnj 2016/10/04 16:42:35 nit: use a tuple of single strings instead of a sp
iannucci 2016/10/06 22:47:11 I usually do the space delimited string because na
23 def format(self, indent):
24 return (' '*indent+'\n').join([c.format(indent+2) for c in self.checks])
25
26
21 class TestHandler(Handler): 27 class TestHandler(Handler):
22 """Run the tests.""" 28 """Run the tests."""
23 29
24 @classmethod 30 @classmethod
25 def gen_stage_loop(cls, _opts, tests, put_next_stage, put_result_stage): 31 def gen_stage_loop(cls, _opts, tests, put_next_stage, put_result_stage):
26 dirs_seen = set() 32 dirs_seen = set()
27 for test in tests: 33 for test in tests:
28 subtests = test.tests 34 subtests = test.tests
29 for subtest in subtests: 35 for subtest in subtests:
30 if subtest.expect_dir not in dirs_seen: 36 if subtest.expect_dir not in dirs_seen:
31 put_result_stage(DirSeen(subtest.expect_dir)) 37 put_result_stage(DirSeen(subtest.expect_dir))
32 dirs_seen.add(subtest.expect_dir) 38 dirs_seen.add(subtest.expect_dir)
33 put_next_stage(test) 39 put_next_stage(test)
34 40
35 @classmethod 41 @classmethod
36 def run_stage_loop(cls, _opts, results, put_next_stage): 42 def run_stage_loop(cls, _opts, results, put_next_stage):
37 for test, result, log_lines in results: 43 for test, result, log_lines in results:
38 current, _ = GetCurrentData(test) 44 current, _ = GetCurrentData(test)
39 if current is NonExistant: 45 if current is NonExistant:
40 put_next_stage(Missing(test, log_lines)) 46 put_next_stage(Missing(test, log_lines))
41 else: 47 else:
42 diff = DiffData(current, result.data) 48 diff = DiffData(current, result.data)
43 if not diff: 49 if not diff:
44 put_next_stage(Pass(test)) 50 failed_checks = [check for check in result.checks if not check.passed]
51 if failed_checks:
52 put_next_stage(FailChecks(test, failed_checks))
53 else:
54 put_next_stage(Pass(test))
45 else: 55 else:
46 put_next_stage(Fail(test, diff, log_lines)) 56 put_next_stage(Fail(test, diff, log_lines))
47 57
48 class ResultStageHandler(Handler.ResultStageHandler): 58 class ResultStageHandler(Handler.ResultStageHandler):
49 def __init__(self, *args): 59 def __init__(self, *args):
50 super(TestHandler.ResultStageHandler, self).__init__(*args) 60 super(TestHandler.ResultStageHandler, self).__init__(*args)
51 self.dirs_seen = set() 61 self.dirs_seen = set()
52 self.files_expected = collections.defaultdict(set) 62 self.files_expected = collections.defaultdict(set)
53 self.err_out = StringIO() 63 self.err_out = StringIO()
54 self.start = time.time() 64 self.start = time.time()
(...skipping 25 matching lines...) Expand all
80 90
81 def handle_DirSeen(self, dirseen): 91 def handle_DirSeen(self, dirseen):
82 self.dirs_seen.add(dirseen.dir) 92 self.dirs_seen.add(dirseen.dir)
83 93
84 def _handle_record(self, test): 94 def _handle_record(self, test):
85 self.num_tests += 1 95 self.num_tests += 1
86 if test.expect_path() is not None: 96 if test.expect_path() is not None:
87 head, tail = os.path.split(test.expect_path()) 97 head, tail = os.path.split(test.expect_path())
88 self.files_expected[head].add(tail) 98 self.files_expected[head].add(tail)
89 99
100 def handle_FailChecks(self, fc):
101 self._handle_record(fc.test)
102 self._emit('C', fc.test, 'womba')
martiniss 2016/10/03 19:14:19 womba??
iannucci 2016/10/06 22:47:11 er, oops.
103 self._add_result(fc.format(2), fc.test, 'FAIL CHECK', 'failed checks')
104 return Failure()
105
90 def handle_Pass(self, p): 106 def handle_Pass(self, p):
91 self._handle_record(p.test) 107 self._handle_record(p.test)
92 if not self.opts.quiet: 108 if not self.opts.quiet:
93 self._emit('.', p.test, 'ok') 109 self._emit('.', p.test, 'ok')
94 110
95 def handle_Fail(self, fail): 111 def handle_Fail(self, fail):
96 self._handle_record(fail.test) 112 self._handle_record(fail.test)
97 self._emit('F', fail.test, 'FAIL') 113 self._emit('F', fail.test, 'FAIL')
98 self._add_result('\n'.join(fail.diff), fail.test, 'FAIL', 'failures', 114 self._add_result('\n'.join(fail.diff), fail.test, 'FAIL', 'failures',
99 fail.log_lines) 115 fail.log_lines)
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 self.num_tests, time.time() - self.start) 160 self.num_tests, time.time() - self.start)
145 print 161 print
146 if aborted: 162 if aborted:
147 print 'ABORTED' 163 print 'ABORTED'
148 elif self.errors: 164 elif self.errors:
149 print 'FAILED (%s)' % (', '.join('%s=%d' % i 165 print 'FAILED (%s)' % (', '.join('%s=%d' % i
150 for i in self.errors.iteritems())) 166 for i in self.errors.iteritems()))
151 elif not self.opts.quiet: 167 elif not self.opts.quiet:
152 print 'OK' 168 print 'OK'
153 169
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698