Exemple #1
0
    def run(source_code_or_function, rewrite_assertions=True):
        """
        Create module object, execute it and return
        Can be used as a decorator of the function from the source code of which the module will be constructed

        :param source_code_or_function string or function with body as a source code for created module
        :param rewrite_assertions: whether to rewrite assertions in module or not

        """
        if isinstance(source_code_or_function, FunctionType):
            source_code = _extract_source_code_from_function(source_code_or_function)
        else:
            source_code = source_code_or_function

        module_name, filename = _create_module_file(source_code, tmp_path, request.node.name)

        if rewrite_assertions:
            loader = AssertionRewritingHook(config=request.config)
            loader.mark_rewrite(module_name)
        else:
            loader = None

        spec = importlib.util.spec_from_file_location(module_name, filename, loader=loader)
        sys.modules[module_name] = module = importlib.util.module_from_spec(spec)
        spec.loader.exec_module(module)
        return module
Exemple #2
0
    def _import_execute(module_name: str,
                        source: str,
                        rewrite_assertions: bool = False):
        if rewrite_assertions:
            loader = AssertionRewritingHook(config=request.config)
            loader.mark_rewrite(module_name)
        else:
            loader = None

        example_bash_file = tmp_work_path / 'example.sh'
        example_bash_file.write_text('#!/bin/sh\necho testing')
        example_bash_file.chmod(0o755)
        (tmp_work_path / 'first/path').mkdir(parents=True, exist_ok=True)
        (tmp_work_path / 'second/path').mkdir(parents=True, exist_ok=True)

        module_path = tmp_work_path / f'{module_name}.py'
        module_path.write_text(source)
        spec = importlib.util.spec_from_file_location('__main__',
                                                      str(module_path),
                                                      loader=loader)
        module = importlib.util.module_from_spec(spec)
        try:
            spec.loader.exec_module(module)
        except KeyboardInterrupt:
            print('KeyboardInterrupt')
Exemple #3
0
 def test_rewrite_warning(self, pytestconfig, monkeypatch):
     hook = AssertionRewritingHook(pytestconfig)
     warnings = []
     def mywarn(code, msg):
         warnings.append((code, msg))
     monkeypatch.setattr(hook.config, 'warn', mywarn)
     hook.mark_rewrite('_pytest')
     assert '_pytest' in warnings[0][1]
Exemple #4
0
    def test_rewrite_warning(self, pytestconfig, monkeypatch):
        hook = AssertionRewritingHook(pytestconfig)
        warnings = []

        def mywarn(code, msg):
            warnings.append((code, msg))

        monkeypatch.setattr(hook.config, 'warn', mywarn)
        hook.mark_rewrite('_pytest')
        assert '_pytest' in warnings[0][1]
Exemple #5
0
 def test_remember_rewritten_modules(self, pytestconfig, testdir, monkeypatch):
     """
     AssertionRewriteHook should remember rewritten modules so it
     doesn't give false positives (#2005).
     """
     monkeypatch.syspath_prepend(testdir.tmpdir)
     testdir.makepyfile(test_remember_rewritten_modules='')
     warnings = []
     hook = AssertionRewritingHook(pytestconfig)
     monkeypatch.setattr(hook.config, 'warn', lambda code, msg: warnings.append(msg))
     hook.find_module('test_remember_rewritten_modules')
     hook.load_module('test_remember_rewritten_modules')
     hook.mark_rewrite('test_remember_rewritten_modules')
     hook.mark_rewrite('test_remember_rewritten_modules')
     assert warnings == []
 def test_remember_rewritten_modules(self, pytestconfig, testdir, monkeypatch):
     """
     AssertionRewriteHook should remember rewritten modules so it
     doesn't give false positives (#2005).
     """
     monkeypatch.syspath_prepend(testdir.tmpdir)
     testdir.makepyfile(test_remember_rewritten_modules='')
     warnings = []
     hook = AssertionRewritingHook(pytestconfig)
     monkeypatch.setattr(hook.config, 'warn', lambda code, msg: warnings.append(msg))
     hook.find_module('test_remember_rewritten_modules')
     hook.load_module('test_remember_rewritten_modules')
     hook.mark_rewrite('test_remember_rewritten_modules')
     hook.mark_rewrite('test_remember_rewritten_modules')
     assert warnings == []
 def test_remember_rewritten_modules(self, pytestconfig, testdir, monkeypatch):
     """`AssertionRewriteHook` should remember rewritten modules so it
     doesn't give false positives (#2005)."""
     monkeypatch.syspath_prepend(testdir.tmpdir)
     testdir.makepyfile(test_remember_rewritten_modules="")
     warnings = []
     hook = AssertionRewritingHook(pytestconfig)
     monkeypatch.setattr(
         hook, "_warn_already_imported", lambda code, msg: warnings.append(msg)
     )
     spec = hook.find_spec("test_remember_rewritten_modules")
     assert spec is not None
     module = importlib.util.module_from_spec(spec)
     hook.exec_module(module)
     hook.mark_rewrite("test_remember_rewritten_modules")
     hook.mark_rewrite("test_remember_rewritten_modules")
     assert warnings == []
Exemple #8
0
    def test_remember_rewritten_modules_warnings_stack_level(
            self, pytestconfig, testdir, monkeypatch):
        """
        AssertionRewriteHook should raise warning with expected stack level
        """
        def mock__issue_warning_captured(warning, hook, stacklevel=0):
            assert 5 == stacklevel

        monkeypatch.syspath_prepend(testdir.tmpdir)
        monkeypatch.setattr(_pytest.warnings, "_issue_warning_captured",
                            mock__issue_warning_captured)

        testdir.makepyfile(test_remember_rewritten_modules="")
        hook = AssertionRewritingHook(pytestconfig)
        spec = hook.find_spec("test_remember_rewritten_modules")
        module = importlib.util.module_from_spec(spec)
        hook.exec_module(module)

        hook.mark_rewrite(*{"builtins": "<module 'builtins' (built-in)>"})