def testSimpleAddresses(self): values = ( '%', '$', '.', '1', '10', '100', '+100', '-100', ) for v in values: self.assertTrue(EX_STANDALONE_RANGE.match(v)) self.assertFalse(EX_STANDALONE_RANGE.match('a'))
def partition_raw_range(range): """takes a text range and breaks it up into its constituents: /foo/+10;$-15 ...would yield... left: /foo/ left_offset: +10 separator: ; right: $ right_offset: -15 """ # At this point we can be sure that ``range`` is a valid prefix range. # ``EX_PREFIX_RANGE`` won't match correctly here because the suffixed # command has been stripped, so we use ``EX_STANDALONE_RANGE`` instead. # parts = EX_PREFIX_RANGE.search(range).groupdict() parts = EX_STANDALONE_RANGE.search(range).groupdict() if parts['incomplete']: return EX_RANGE( left=parts['inc_laddress'] or '.', left_offset=parts['inc_loffset'] or '0', separator=parts['suf_alt_separator'] or parts['pref_alt_separator'], right=parts['inc_raddress'] or '.', right_offset=parts['inc_loffset'] or '0', ) return EX_RANGE(left=parts['laddress'], left_offset=parts['loffset'] or '0', separator=parts['separator'], right=parts['raddress'], right_offset=parts['roffset'] or '0')
def partition_raw_only_range(range): parts = EX_STANDALONE_RANGE.search(range).groupdict() if parts['openended']: return EX_RANGE( left=parts['openended'], left_offset='0', separator='', right='', right_offset='0' ) elif parts['incomplete']: return EX_RANGE( left=parts['inc_laddress'] or '.', left_offset=parts['inc_loffset'] or '0', separator=parts['suf_alt_separator'] or parts['pref_alt_separator'], right=parts['inc_raddress'] or '.', right_offset=parts['inc_loffset'] or '0', ) else: return EX_RANGE( left=parts['laddress'], left_offset=parts['loffset'] or '0', separator=parts['separator'], right=parts['raddress'], right_offset=parts['roffset'] or '0', )
def partition_raw_only_range(range): parts = EX_STANDALONE_RANGE.search(range).groupdict() if parts['openended']: return EX_RANGE(left=parts['openended'], left_offset='0', separator='', right='', right_offset='0') elif parts['incomplete']: return EX_RANGE( left=parts['inc_laddress'] or '.', left_offset=parts['inc_loffset'] or '0', separator=parts['suf_alt_separator'] or parts['pref_alt_separator'], right=parts['inc_raddress'] or '.', right_offset=parts['inc_loffset'] or '0', ) else: return EX_RANGE( left=parts['laddress'], left_offset=parts['loffset'] or '0', separator=parts['separator'], right=parts['raddress'], right_offset=parts['roffset'] or '0', )
def partition_raw_range(range): """takes a text range and breaks it up into its constituents: /foo/+10;$-15 ...would yield... left: /foo/ left_offset: +10 separator: ; right: $ right_offset: -15 """ # At this point we can be sure that ``range`` is a valid prefix range. # ``EX_PREFIX_RANGE`` won't match correctly here because the suffixed # command has been stripped, so we use ``EX_STANDALONE_RANGE`` instead. # parts = EX_PREFIX_RANGE.search(range).groupdict() parts = EX_STANDALONE_RANGE.search(range).groupdict() if parts['incomplete']: return EX_RANGE( left=parts['inc_laddress'] or '.', left_offset=parts['inc_loffset'] or '0', separator=parts['suf_alt_separator'] or parts['pref_alt_separator'], right=parts['inc_raddress'] or '.', right_offset=parts['inc_loffset'] or '0', ) return EX_RANGE( left=parts['laddress'], left_offset=parts['loffset'] or '0', separator=parts['separator'], right=parts['raddress'], right_offset=parts['roffset'] or '0' )
def testSimpleRanges(self): values = ('.,$', '$,.', '%,.', '.,%', '$,%', '%,$', # FIXME: This one is legal in Vim, but I don't what it does. '.,', ',.', '100,1',) for v in values: self.assertTrue(EX_STANDALONE_RANGE.match(v)) self.assertFalse(EX_STANDALONE_RANGE.match('a,$')) self.assertFalse(EX_STANDALONE_RANGE.match('$,qwertyzt'))
def testSimpleRangesWithOffsets(self): values = ('.,$-10', '$-10,.+1', '.+10,%+1', '100+100,1-100', '+100,-100', # According to Vim, this should be illegal (command error). '%-10,.-10',) for v in values: self.assertTrue(EX_STANDALONE_RANGE.match(v)) values = ( # FIXME: This should be illegal. '$+a,%',) for v in values: self.assertFalse(EX_STANDALONE_RANGE.match(v))
def testComplexRanges(self): values = ('/foo/,?bar?', '/foo/,/bar/', '?foo?,?bar?', '/foo/,$', '$,/foo/', '$,/foo/',) for v in values: self.assertTrue(EX_STANDALONE_RANGE.match(v))
def testAddressWithOffsets(self): values = ('/foo/+10', '/bar/-100', '/100/+100', '?foo?-10', '?bar?+10+10', '?100?+10-10',) for v in values: self.assertTrue(EX_STANDALONE_RANGE.match(v))
def testAddressBySearchOnly(self): values = ('/foo/', '/bar/', '/100/', '?foo?', '?bar?', '?100?',) for v in values: self.assertTrue(EX_STANDALONE_RANGE.match(v))
def testSimpleRanges(self): values = ( '.,$', '$,.', '%,.', '.,%', '$,%', '%,$', # FIXME: This one is legal in Vim, but I don't what it does. '.,', ',.', '100,1', ) for v in values: self.assertTrue(EX_STANDALONE_RANGE.match(v)) self.assertFalse(EX_STANDALONE_RANGE.match('a,$')) self.assertFalse(EX_STANDALONE_RANGE.match('$,qwertyzt'))
def testSimpleRangesWithOffsets(self): values = ( '.,$-10', '$-10,.+1', '.+10,%+1', '100+100,1-100', '+100,-100', # According to Vim, this should be illegal (command error). '%-10,.-10', ) for v in values: self.assertTrue(EX_STANDALONE_RANGE.match(v)) values = ( # FIXME: This should be illegal. '$+a,%', ) for v in values: self.assertFalse(EX_STANDALONE_RANGE.match(v))
def testComplexRanges(self): values = ( '/foo/,?bar?', '/foo/,/bar/', '?foo?,?bar?', '/foo/,$', '$,/foo/', '$,/foo/', ) for v in values: self.assertTrue(EX_STANDALONE_RANGE.match(v))
def testAddressWithOffsets(self): values = ( '/foo/+10', '/bar/-100', '/100/+100', '?foo?-10', '?bar?+10+10', '?100?+10-10', ) for v in values: self.assertTrue(EX_STANDALONE_RANGE.match(v))
def testAddressBySearchOnly(self): values = ( '/foo/', '/bar/', '/100/', '?foo?', '?bar?', '?100?', ) for v in values: self.assertTrue(EX_STANDALONE_RANGE.match(v))
def testIncompleteRanges(self): values = ( '100,', '+100,', '-100,', ',100', ',+100', ',-100', '100+100,', ',100+100', ',/foo/+100', '/foo/+100,', ) for v in values: self.assertTrue(EX_STANDALONE_RANGE.match(v))