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 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
|
# -*- coding: UTF-8 -*-
"""
Test support functionality for other tests.
"""
# -- IMPORTS:
from __future__ import absolute_import
from behave.step_registry import StepRegistry
from behave.matchers import ParseMatcher, CFParseMatcher, RegexMatcher
import time
# -----------------------------------------------------------------------------
# TEST SUPPORT:
# -----------------------------------------------------------------------------
class StopWatch(object):
def __init__(self):
self.start_time = None
self.duration = None
def start(self):
self.start_time = self.now()
self.duration = None
def stop(self):
self.duration = self.now() - self.start_time
@staticmethod
def now():
return time.time()
@property
def elapsed(self):
assert self.start_time is not None
return self.now() - self.start_time
def __enter__(self):
self.start()
return self
def __exit__(self, exc_type, exc_val, exc_tb):
self.stop()
# -- NEEDED-UNTIL: stepimport functionality is completly provided.
class MatcherFactory(object):
matcher_mapping = {
"parse": ParseMatcher,
"cfparse": CFParseMatcher,
"re": RegexMatcher,
}
default_matcher = ParseMatcher
def __init__(self, matcher_mapping=None, default_matcher=None):
self.matcher_mapping = matcher_mapping or self.matcher_mapping
self.default_matcher = default_matcher or self.default_matcher
self.current_matcher = self.default_matcher
self.type_registry = {}
# self.type_registry = ParseMatcher.custom_types.copy()
def register_type(self, **kwargs):
self.type_registry.update(**kwargs)
def use_step_matcher(self, name):
self.current_matcher = self.matcher_mapping[name]
def use_default_step_matcher(self, name=None):
if name:
self.default_matcher = self.matcher_mapping[name]
self.current_matcher = self.default_matcher
def make_matcher(self, func, step_text, step_type=None):
return self.current_matcher(func, step_text, step_type=step_type,
custom_types=self.type_registry)
def step_matcher(self, name):
"""
DEPRECATED, use :method:`~MatcherFactory.use_step_matcher()` instead.
"""
# -- BACKWARD-COMPATIBLE NAME: Mark as deprecated.
import warnings
warnings.warn("Use 'use_step_matcher()' instead",
PendingDeprecationWarning, stacklevel=2)
self.use_step_matcher(name)
class SimpleStepContainer(object):
def __init__(self, step_registry=None):
if step_registry is None:
step_registry = StepRegistry()
matcher_factory = MatcherFactory()
self.step_registry = step_registry
self.step_registry.matcher_factory = matcher_factory
self.matcher_factory = matcher_factory
|