Merge pull request #443 from tp-m/more-string-funcs

Add more string funcs: to_upper(), to_lower(), contains() and underscorify()
This commit is contained in:
Jussi Pakkanen 2016-03-12 16:42:40 +02:00
commit 2afc1dd497
3 changed files with 47 additions and 1 deletions

View File

@ -32,3 +32,4 @@ Nirbheek Chauhan
Nicolas Schneider
Luke Adams
Rogiel Sulzbach
Tim-Philipp Müller

View File

@ -2033,6 +2033,12 @@ class Interpreter():
return obj.strip()
elif method_name == 'format':
return self.format_string(obj, args)
elif method_name == 'to_upper':
return obj.upper()
elif method_name == 'to_lower':
return obj.lower()
elif method_name == 'underscorify':
return re.sub(r'[^a-zA-Z0-9]', '_', obj)
elif method_name == 'split':
if len(posargs) > 1:
raise InterpreterException('Split() must have at most one argument.')
@ -2043,12 +2049,14 @@ class Interpreter():
return obj.split(s)
else:
return obj.split()
elif method_name == 'startswith' or method_name == 'endswith':
elif method_name == 'startswith' or method_name == 'contains' or method_name == 'endswith':
s = posargs[0]
if not isinstance(s, str):
raise InterpreterException('Argument must be a string.')
if method_name == 'startswith':
return obj.startswith(s)
elif method_name == 'contains':
return obj.find(s) >= 0
return obj.endswith(s)
elif method_name == 'to_int':
try:

View File

@ -41,4 +41,41 @@ if long.endswith(prefix)
error('Not suffix.')
endif
if not long.contains(prefix)
error('Does not contain prefix')
endif
if not long.contains(suffix)
error('Does not contain suffix')
endif
if not long.contains('bcd')
error('Does not contain middle part')
endif
if long.contains('dc')
error('Broken contains')
endif
if long.to_upper() != 'ABCDE'
error('Broken to_upper')
endif
if long.to_upper().to_lower() != long
error('Broken to_lower')
endif
if 'struct stat.st_foo'.underscorify() != 'struct_stat_st_foo'
error('Broken underscorify')
endif
if '#include <foo/bar.h>'.underscorify() != '_include__foo_bar_h_'
error('Broken underscorify')
endif
# case should not change, space should be replaced, numbers are ok too
if 'Do SomeThing 09'.underscorify() != 'Do_SomeThing_09'
error('Broken underscorify')
endif
assert('3'.to_int() == 3, 'String int conversion does not work.')