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:
@@ -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())
|
||||
|
||||
@@ -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)'))
|
||||
|
||||
Reference in New Issue
Block a user