def test_source(self, source, *args, **kwargs): """ Test a Python script given as source code. The source will be written into a file named like the test-function. This file will then be passed to `test_script`. If you need other related file, e.g. as `.toc`-file for testing the content, put it at at the normal place. Just mind to take the basnename from the test-function's name. :param script: Source code to create executable from. This will be saved into a temporary file which is then passed on to `test_script`. :param test_id: Test-id for parametrized tests. If given, it will be appended to the script filename, separated by two underscores. All other arguments are passed straight on to `test_script`. Ensure that the caller of `test_source` is in a UTF-8 encoded file with the correct '# -*- coding: utf-8 -*-' marker. """ __tracebackhide__ = True # For parametrized test append the test-id. scriptfile = gen_sourcefile(self._tmpdir, source, kwargs.setdefault('test_id')) del kwargs['test_id'] return self.test_script(str(scriptfile), *args, **kwargs)
def test_graph_collects_script_dependencies(fresh_pyi_modgraph, tmpdir): mg = fresh_pyi_modgraph # self-test 1: uuid is not included in the graph by default src1 = gen_sourcefile(tmpdir, """print""", test_id="1") node = mg.run_script(str(src1)) assert node is not None assert not mg.findNode("uuid") # self-test # Add script importing uuid src2 = gen_sourcefile(tmpdir, """import uuid""", test_id="2") mg.run_script(str(src2)) assert mg.findNode("uuid") # self-test # The acutal test: uuid is (indirectly) linked to the first script names = [n.identifier for n in mg.flatten(start=node)] assert str(src2) in names assert "uuid" in names
def test_cached_graph_is_not_leaking_hidden_imports(fresh_pyi_modgraph, tmpdir): """ Ensure cached PyiModulegraph can separate hidden imports between scripts. """ mg = fresh_pyi_modgraph # self-test 1: skipped here, see test_cached_graph_is_not_leaking # self-test 2: uuid is included when hidden imported src = gen_sourcefile(tmpdir, """print""", test_id="2") node = mg.run_script(str(src)) assert node is not None mg.add_hiddenimports(["uuid"]) names = [n.identifier for n in mg.flatten(start=node)] assert "uuid" in names # the acutal test: uuid is not leaking to the other script src = gen_sourcefile(tmpdir, """print""", test_id="3") node = mg.run_script(str(src)) assert node is not None names = [n.identifier for n in mg.flatten(start=node)] assert "uuid" not in names
def test_cached_graph_is_not_leaking(fresh_pyi_modgraph, monkeypatch, tmpdir): """ Ensure cached PyiModulegraph can separate imports between scripts. """ mg = fresh_pyi_modgraph # self-test 1: uuid is not included in the graph by default src = gen_sourcefile(tmpdir, """print""", test_id="1") mg.run_script(str(src)) assert not mg.findNode("uuid") # self-test # self-test 2: uuid is available and included when imported src = gen_sourcefile(tmpdir, """import uuid""", test_id="2") node = mg.run_script(str(src)) assert node is not None names = [n.identifier for n in mg.flatten(start=node)] assert "uuid" in names # the acutal test: uuid is not leaking to the other script src = gen_sourcefile(tmpdir, """print""", test_id="3") node = mg.run_script(str(src)) assert node is not None names = [n.identifier for n in mg.flatten(start=node)] assert "uuid" not in names