Ejemplo n.º 1
0
 def load_module(name, fh, pathname, description):
     log.debug("load_module name=%r fh=%r, pathname=%r description=%r",
               name, fh, pathname, description)
     if not any([re.match(target, name) for target in targets]):
         log.debug('load_module: not a target: %r', name)
         return _imp_load_module(name, fh, pathname, description)
     elif any([re.match(ignore, name) for ignore in ignores]):
         log.debug('load_module: ignored: %r', name)
         return _imp_load_module(name, fh, pathname, description)
     else:
         log.debug('load_module: instrumenting %r', name)
         suffix, mode, type = description
         ispkg = type == imp.PKG_DIRECTORY
         if ispkg:
             source = open(os.path.join(pathname, '__init__.py'),
                           'r').read()
         else:
             source = fh.read()
         visitor = visitor_factory.create(name, source)
         code_tree = ast.parse(source)
         new_code_tree = visitor.visit(code_tree)
         code = compile(new_code_tree, pathname, 'exec')
         mod = sys.modules.setdefault(name, imp.new_module(name))
         if ispkg:
             mod.__file__ = os.path.join(pathname, '__init__.py')
             mod.__path__ = [pathname]
         else:
             mod.__file__ = pathname
         mod.__loader__ = None
         exec_f(code, mod.__dict__)
         return mod
Ejemplo n.º 2
0
 def load_module(self, fullname):
     log.debug("load_module(%r, path=%r)", fullname, self.fullpath)
     ispkg, code = self._get_code(fullname)
     mod = sys.modules.setdefault(fullname, imp.new_module(fullname))
     mod.__file__ = self.fullpath
     mod.__loader__ = self
     if ispkg:
         mod.__path__ = [os.path.dirname(self.fullpath)]
     exec_f(code, mod.__dict__)
     return mod
Ejemplo n.º 3
0
    def test_instrument_ifexp_false(self):
        def test_module():
            a = 3
            result = 1 if a != 3 else 4

        code = self._load_and_compile_module(test_module)
        exec_f(code, globals())
        assert result is 4

        self._verify_conditions(test_module, '2.1', [True, False])
Ejemplo n.º 4
0
    def test_two_pin_or_t_t(self):
        def test_module():
            a = True
            b = True
            result = a or b

        code = self._load_and_compile_module(test_module)
        exec_f(code, globals())
        assert True == result

        self._verify_conditions(test_module, '3.2', [True, False, False])
Ejemplo n.º 5
0
    def test_two_pin_and_f_f(self):
        def test_module():
            a = False
            b = False
            result = a and b

        code = self._load_and_compile_module(test_module)
        exec_f(code, globals())
        assert False == result

        self._verify_conditions(test_module, '3.2', [False, True, False])
Ejemplo n.º 6
0
    def test_instrument_ifexp_with_boolop(self):
        def test_module():
            def test_func(a, b):
                return 1 if a and b else 4

            test_func(True, False)

        code = self._load_and_compile_module(test_module)
        exec_f(code, globals())

        self._verify_conditions(test_module, '2.2', [False, False, True])
Ejemplo n.º 7
0
    def test_instrument_ifexp_true_and_false(self):
        def test_module():
            def test_func(arg):
                return 1 if arg == 3 else 4

            test_func(3)
            test_func(2)

        code = self._load_and_compile_module(test_module)
        exec_f(code, globals())

        self._verify_conditions(test_module, '2.1', [True, True])
Ejemplo n.º 8
0
    def test_instrument_while_with_loop_result(self):
        def test_module():
            a = 3
            result = 0
            while a:
                a -= 1
                result += 1

        code = self._load_and_compile_module(test_module)
        exec_f(code, globals())
        assert result is 3

        self._verify_conditions(test_module, '3.1', [True, True])
Ejemplo n.º 9
0
    def test_instrument_if_false_result(self):
        def test_module():
            a = False
            if a:
                result = 1
            else:
                result = 7

        code = self._load_and_compile_module(test_module)
        exec_f(code, globals())
        assert result is 7

        self._verify_conditions(test_module, '2.1', [True, False])
Ejemplo n.º 10
0
    def test_three_pin_and_t_t_f(self):
        def test_module():
            a = True
            b = True
            c = False
            result = a and b and c

        code = self._load_and_compile_module(test_module)
        exec_f(code, globals())
        assert False == result

        self._verify_conditions(test_module, '4.2',
                                [False, False, False, True])
Ejemplo n.º 11
0
    def test_roundtrip_with_expression_selector(self):
        def dummy_module():
            a = True
            b = False
            c = False
            e = a and b or c  # pragma: no cond[.3](F *)

        mod = self._instrument_module(dummy_module)
        code = compile(mod, '<string>', 'exec')
        exec_f(code, globals())
        assert not e

        construct = self.recorder.metadata['dummy_module'].constructs['4.3']
        assert construct.source == '(a and b)'
        assert construct.conditions_missed(False)
        assert construct.conditions[0] == set([])  # T T
        assert construct.conditions[1] == set(['P'])  # F *
        assert construct.conditions[2] == set([self.recorder.DEFAULT_TAG
                                               ])  # T F