test for index error on project map replacement regex groups
This commit is contained in:
parent
c4d6bb38a1
commit
8ef87d0393
2 changed files with 41 additions and 13 deletions
|
@ -13,6 +13,7 @@ import tempfile
|
|||
import time
|
||||
from testfixtures import log_capture
|
||||
from wakatime.compat import u
|
||||
from wakatime.constants import API_ERROR
|
||||
from wakatime.exceptions import NotYetImplemented
|
||||
from wakatime.projects.base import BaseProject
|
||||
from . import utils
|
||||
|
@ -354,3 +355,27 @@ class ProjectTestCase(utils.TestCase):
|
|||
if self.isPy35:
|
||||
expected = u('WakaTime WARNING Regex error (unterminated character set at position 7) for projectmap pattern: invalid[({regex')
|
||||
self.assertEquals(output[0], expected)
|
||||
|
||||
@log_capture()
|
||||
def test_project_map_with_replacement_group_index_error(self, logs):
|
||||
logging.disable(logging.NOTSET)
|
||||
|
||||
response = Response()
|
||||
response.status_code = 0
|
||||
self.patched['wakatime.packages.requests.adapters.HTTPAdapter.send'].return_value = response
|
||||
|
||||
now = u(int(time.time()))
|
||||
entity = 'tests/samples/projects/project_map42/emptyfile.txt'
|
||||
config = 'tests/samples/configs/project_map_malformed.cfg'
|
||||
|
||||
args = ['--file', entity, '--config', config, '--time', now]
|
||||
|
||||
retval = execute(args)
|
||||
|
||||
self.assertEquals(retval, API_ERROR)
|
||||
self.assertEquals(sys.stdout.getvalue(), '')
|
||||
self.assertEquals(sys.stderr.getvalue(), '')
|
||||
|
||||
log_output = "\n".join([u(' ').join(x) for x in logs.actual()])
|
||||
expected = u('WakaTime WARNING Regex error (tuple index out of range) for projectmap pattern: proj-map{3}')
|
||||
self.assertEquals(log_output, expected)
|
||||
|
|
|
@ -44,20 +44,23 @@ class ProjectMap(BaseProject):
|
|||
def _find_project(self, path):
|
||||
path = os.path.realpath(path)
|
||||
|
||||
try:
|
||||
for pattern, new_proj_name in self._configs.items():
|
||||
try:
|
||||
compiled = re.compile(pattern, re.IGNORECASE)
|
||||
match = compiled.search(path)
|
||||
if match:
|
||||
for pattern, new_proj_name in self._configs.items():
|
||||
try:
|
||||
compiled = re.compile(pattern, re.IGNORECASE)
|
||||
match = compiled.search(path)
|
||||
if match:
|
||||
try:
|
||||
return new_proj_name.format(*match.groups())
|
||||
except re.error as ex:
|
||||
log.warning(u('Regex error ({msg}) for projectmap pattern: {pattern}').format(
|
||||
msg=u(ex),
|
||||
pattern=u(pattern),
|
||||
))
|
||||
except TypeError:
|
||||
pass
|
||||
except IndexError as ex:
|
||||
log.warning(u('Regex error ({msg}) for projectmap pattern: {pattern}').format(
|
||||
msg=u(ex),
|
||||
pattern=u(new_proj_name),
|
||||
))
|
||||
except re.error as ex:
|
||||
log.warning(u('Regex error ({msg}) for projectmap pattern: {pattern}').format(
|
||||
msg=u(ex),
|
||||
pattern=u(pattern),
|
||||
))
|
||||
|
||||
return None
|
||||
|
||||
|
|
Loading…
Reference in a new issue