Example #1
0
def test_generate_stub(store_data, stdout, stderr):
    store, db_file = store_data
    traces = [
        CallTrace(func, {
            'a': int,
            'b': str
        }, NoneType),
        CallTrace(func2, {
            'a': int,
            'b': int
        }, NoneType),
    ]
    store.add(traces)
    with mock.patch.dict(os.environ,
                         {DefaultConfig.DB_PATH_VAR: db_file.name}):
        ret = cli.main(['stub', func.__module__], stdout, stderr)
    expected = """def func(a: int, b: str) -> None: ...


def func2(a: int, b: int) -> None: ...
"""
    assert stdout.getvalue() == expected
    assert stderr.getvalue() == ''
    assert ret == 0
Example #2
0
def test_retype_failure(store_data, stdout, stderr):
    store, db_file = store_data
    traces = [
        CallTrace(func, {
            'a': int,
            'b': str
        }, NoneType),
        CallTrace(func2, {
            'a': int,
            'b': int
        }, NoneType),
    ]
    store.add(traces)
    msg = "this is a test"
    err = subprocess.CalledProcessError(returncode=100, cmd='retype')
    err.stdout = msg.encode()
    with mock.patch.dict(os.environ,
                         {DefaultConfig.DB_PATH_VAR: db_file.name}):
        with mock.patch('subprocess.run', side_effect=err):
            ret = cli.main(['apply', func.__module__], stdout, stderr)
    assert stdout.getvalue() == ""
    assert stderr.getvalue(
    ) == f"ERROR: Failed applying stub with retype:\n{msg}\n"
    assert ret == 1
Example #3
0
def test_get_diff(store_data, stdout, stderr):
    store, db_file = store_data
    traces = [
        CallTrace(func_anno, {
            'a': int,
            'b': int
        }, int),
        CallTrace(func_anno2, {
            'a': str,
            'b': str
        }, None),
    ]
    store.add(traces)
    with mock.patch.dict(os.environ,
                         {DefaultConfig.DB_PATH_VAR: db_file.name}):
        ret = cli.main(['stub', func.__module__, '--diff'], stdout, stderr)
    expected = """- def func_anno(a: int, b: str) -> None: ...
?                          ^ -     ^^ ^
+ def func_anno(a: int, b: int) -> int: ...
?                          ^^      ^ ^
"""
    assert stdout.getvalue() == expected
    assert stderr.getvalue() == ''
    assert ret == 0
Example #4
0
def test_cli_context_manager_activated(capsys, stdout, stderr):
    ret = cli.main(['-c', f'{__name__}:LoudContextConfig()', 'stub', 'some.module'], stdout, stderr)
    out, err = capsys.readouterr()
    assert out == "IN SETUP: stub\nIN TEARDOWN: stub\n"
    assert err == ""
    assert ret == 0
Example #5
0
def test_pathlike_parameter(store, db_file, capsys, stdout, stderr):
    with mock.patch.dict(os.environ, {DefaultConfig.DB_PATH_VAR: db_file.name}):
        with pytest.raises(SystemExit):
            cli.main(['stub', 'test/foo.py:bar'], stdout, stderr)
        out, err = capsys.readouterr()
        assert "test/foo.py does not look like a valid Python import path" in err
Example #6
0
def test_no_traces(store, db_file, stdout, stderr, arg, error):
    with mock.patch.dict(os.environ, {DefaultConfig.DB_PATH_VAR: db_file.name}):
        ret = cli.main(['stub', arg], stdout, stderr)
    assert stderr.getvalue() == error
    assert stdout.getvalue() == ''
    assert ret == 0