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
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
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)
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'), )
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'), )
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'), )
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'), )
def test_new(): wg = weakget(None) assert wg._weakget__obj is None wg = weakget(5) assert wg._weakget__obj == 5
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