sources for local.py [rev. unknown]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
""" local-only operations
"""
import py
from py.__.test.rsession.executor import BoxExecutor, RunExecutor,\
     ApigenExecutor
from py.__.test.rsession import repevent
from py.__.test.rsession.outcome import ReprOutcome
# XXX copied from session.py
def startcapture(session):
    if not session.config.option.nocapture:
        session._capture = py.io.StdCapture()
def finishcapture(session): 
    if hasattr(session, '_capture'): 
        capture = session._capture 
        del session._capture
        return capture.reset()
    return "", ""
def box_runner(item, session, reporter):
    r = BoxExecutor(item, config=session.config)
    return ReprOutcome(r.execute())
def plain_runner(item, session, reporter):
    r = RunExecutor(item, usepdb=session.config.option.usepdb, reporter=reporter, config=session.config)
    outcome = r.execute()
    outcome = ReprOutcome(outcome.make_repr(session.config.option.tbstyle))
    return outcome
def benchmark_runner(item, session, reporter):
    raise NotImplementedError()
def apigen_runner(item, session, reporter):
    #retval = plain_runner(item, session, reporter)
    startcapture(session)
    r = ApigenExecutor(item, reporter=reporter, config=session.config)
    outcome = r.execute(session.tracer)
    outcome = ReprOutcome(outcome.make_repr(session.config.option.tbstyle))
    outcome.stdout, outcome.stderr = finishcapture(session)
    return outcome
def exec_runner(item, session, reporter):
    raise NotImplementedError()
# runner interface is here to perform several different types of run
#+1. box_runner - for running normal boxed tests
#+2. plain_runner - for performing running without boxing (necessary for pdb)
#    XXX: really?
#-3. exec_runner - for running under different interpreter
#-4. benchmark_runner - for running with benchmarking
#-5. apigen_runner - for running under apigen to generate api out of it.
def local_loop(session, reporter, itemgenerator, shouldstop, config, runner=None):
    assert runner is not None
    #if runner is None:
    #    if session.config.option.apigen:
    #        runner = apigen_runner
    #    else:
    #    runner = box_runner
    while 1:
        try:
            item = itemgenerator.next()
            if shouldstop():
                return
            outcome = runner(item, session, reporter)
            reporter(repevent.ReceivedItemOutcome(None, item, outcome))
        except StopIteration:
            break