Fix "indexOf", "lastIndexOf" methods length parameter usage

Previously this parameter was processed as if it was "end" parameter.
This patch fixes it and adds appropriate tests.

Change-Id: I2094ea63c760342df68c7a6090d48ee8e89bae4d
Closes-Bug: #1601843
This commit is contained in:
Omar Shykhkerimov
2016-07-11 17:53:43 +03:00
parent 9a5c03a90c
commit 85780fbcb9
2 changed files with 10 additions and 9 deletions

View File

@@ -234,11 +234,11 @@ def index_of(string, sub, start=0):
@specs.parameter('length', int)
@specs.method
def index_of_(string, sub, start, length):
if length < 0:
length = len(string)
if start < 0:
start += len(string)
return string.find(sub, start, length)
if length < 0:
length = len(string) - start
return string.find(sub, start, start + length)
@specs.parameter('string', yaqltypes.String())
@@ -255,11 +255,11 @@ def last_index_of(string, sub, start=0):
@specs.parameter('length', int)
@specs.method
def last_index_of_(string, sub, start, length):
if length < 0:
length = len(string)
if start < 0:
start += len(string)
return string.rfind(sub, start, length)
if length < 0:
length = len(string) - start
return string.rfind(sub, start, start + length)
@specs.parameter('string', yaqltypes.String())

View File

@@ -153,15 +153,16 @@ class TestStrings(yaql.tests.TestCase):
self.assertEqual(2, self.eval('$.indexOf(c, 2)', data=data))
self.assertEqual(-1, self.eval('$.indexOf(x)', data=data))
self.assertEqual(5, self.eval('$.indexOf(f, 3)', data=data))
self.assertEqual(2, self.eval('$.indexOf(c, 0, 3)', data=data))
self.assertEqual(-1, self.eval('$.indexOf(c, 0, 2)', data=data))
self.assertEqual(9, self.eval('$.indexOf(b, 2, -1)', data=data))
self.assertEqual(7, self.eval('$.indexOf(dcb, -4, 3)', data=data))
self.assertEqual(7, self.eval('$.indexOf(dcb, -4, 100)', data=data))
self.assertEqual(-1, self.eval('$.indexOf(dcb, 0, 5)', data=data))
def test_last_index_of(self):
data = 'abcdefedcbabc'
self.assertEqual(12, self.eval('$.lastIndexOf(c)', data=data))
self.assertEqual(2, self.eval('$.lastIndexOf(c, 0, 4)', data=data))
self.assertEqual(-1, self.eval('$.lastIndexOf(c, 3, 4)', data=data))
self.assertEqual(12, self.eval('$.lastIndexOf(c, -1, 1)', data=data))
def test_max(self):
self.assertEqual('z', self.eval('max(a, z)'))