Example #1
0
def test_getattr():
    result = weakget(range(5)).stop % default
    assert result == 5

    result = weakget(slice(5)).start % default
    assert result is None

    result = weakget(None).missingattr % default
    assert result is default

    result = weakget(range(5)).missingattr % default
    assert result is default
Example #2
0
def test_call():
    result = weakget('abc').upper() % default
    assert result == 'ABC'

    result = weakget(None).upper() % default
    assert result is default

    result = weakget(5).upper() % default
    assert result is default

    result = weakget({}).pop('b', None) % default
    assert result is None
Example #3
0
def test_new_convert():
    # Ensure we don't create a weakget wrapping a pep505 wrapping a weakget wrapping...
    from weakget import weakget, _weakget__nothing

    with pytest.raises(TypeError):
        pep505(weakget(None))

    with pytest.raises(TypeError):
        pep505(weakget(5))

    with pytest.raises(TypeError):
        pep505(pep505(None))

    with pytest.raises(TypeError):
        pep505(pep505(5))

    with pytest.raises(TypeError):
        pep505(_weakget__nothing)
Example #4
0
def number_constructors():
    """A decorator for parametrized tests that test particular number operations.
    """
    return pytest.mark.parametrize(
        "newobj",
        [
            lambda: weakget(0),
            lambda: pep505(0),
            lambda: _weakget__nothing,  # a singleton
        ],
        ids=('weakget', 'pep505', '_weakget__nothing'),
    )
Example #5
0
def mapping_constructors():
    """A decorator for parametrized tests that test particular (mutable) mapping operations.
    """
    return pytest.mark.parametrize(
        "newobj",
        [
            lambda: weakget({'item': 0}),
            lambda: pep505({'item': 0}),
            lambda: _weakget__nothing,  # a singleton
        ],
        ids=('weakget', 'pep505', '_weakget__nothing'),
    )
Example #6
0
def sequence_constructors():
    """A decorator for parametrized tests that test particular (mutable) sequence operations.
    """
    return pytest.mark.parametrize(
        "newobj",
        [
            lambda: weakget([0, 1, 2]),
            lambda: pep505([0, 1, 2]),
            lambda: _weakget__nothing,  # a singleton
        ],
        ids=('weakget', 'pep505', '_weakget__nothing'),
    )
Example #7
0
def attr_constructors():
    """A decorator for parametrized tests that test particular (mutable) attribute accesses.
    """
    return pytest.mark.parametrize(
        "newobj",
        [
            lambda: weakget(attrs()),
            lambda: pep505(attrs()),
            lambda: _weakget__nothing,  # a singleton
        ],
        ids=('weakget', 'pep505', '_weakget__nothing'),
    )
Example #8
0
def test_new():
    wg = weakget(None)
    assert wg._weakget__obj is None

    wg = weakget(5)
    assert wg._weakget__obj == 5
Example #9
0
def test_getitem():
    result = weakget('abc')[1] % default
    assert result == 'b'

    result = weakget('abc')[-1] % default
    assert result == 'c'

    result = weakget('abc')[1:3] % default
    assert result == 'bc'

    result = weakget([None])[0] % default
    assert result is None

    result = weakget(dict(a=1, b=2))['b'] % default
    assert result == 2

    result = weakget(dict(a=None))['a'] % default
    assert result is None

    with pytest.raises(TypeError):
        weakget(None)[1]

    with pytest.raises(TypeError):
        weakget(None)[-1]

    with pytest.raises(TypeError):
        weakget(None)[1:3]

    with pytest.raises(TypeError):
        weakget(None)['b']

    result = weakget('abc')[99] % default
    assert result is default

    result = weakget('abc')[-99] % default
    assert result is default

    result = weakget('abc')[99:999] % default
    assert result == ''

    with pytest.raises(TypeError):
        weakget('abc')['b']

    result = weakget(dict(a=1, b=2))['z'] % default
    assert result is default