diff options
Diffstat (limited to 'tests/functional/i/invalid_slice_index.py')
| -rw-r--r-- | tests/functional/i/invalid_slice_index.py | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/tests/functional/i/invalid_slice_index.py b/tests/functional/i/invalid_slice_index.py new file mode 100644 index 000000000..1eb2fda9c --- /dev/null +++ b/tests/functional/i/invalid_slice_index.py @@ -0,0 +1,71 @@ +"""Errors for invalid slice indices""" +# pylint: disable=too-few-public-methods, no-self-use,missing-docstring,expression-not-assigned, useless-object-inheritance, unnecessary-pass + + +TESTLIST = [1, 2, 3] + +# Invalid indices +def function1(): + """functions used as indices""" + return TESTLIST[id:id:] # [invalid-slice-index,invalid-slice-index] + +def function2(): + """strings used as indices""" + return TESTLIST['0':'1':] # [invalid-slice-index,invalid-slice-index] + +def function3(): + """class without __index__ used as index""" + + class NoIndexTest(object): + """Class with no __index__ method""" + pass + + return TESTLIST[NoIndexTest()::] # [invalid-slice-index] + +# Valid indices +def function4(): + """integers used as indices""" + return TESTLIST[0:0:0] # no error + +def function5(): + """None used as indices""" + return TESTLIST[None:None:None] # no error + +def function6(): + """class with __index__ used as index""" + class IndexTest(object): + """Class with __index__ method""" + def __index__(self): + """Allow objects of this class to be used as slice indices""" + return 0 + + return TESTLIST[IndexTest():None:None] # no error + +def function7(): + """class with __index__ in superclass used as index""" + class IndexType(object): + """Class with __index__ method""" + def __index__(self): + """Allow objects of this class to be used as slice indices""" + return 0 + + class IndexSubType(IndexType): + """Class with __index__ in parent""" + pass + + return TESTLIST[IndexSubType():None:None] # no error + +def function8(): + """slice object used as index""" + return TESTLIST[slice(1, 2, 3)] # no error + + +def function9(): + """Use a custom class that knows how to handle string slices""" + class StringSlice: + def __getitem__(self, item): + return item + + StringSlice()["a":"b":"c"] + StringSlice()["a":"b":"c", "a":"b"] + StringSlice()[slice("a", "b", "c")] |
