示例#1
0
def ReplaceChunk_SingleToMultipleLinesReplace_2_test():
    result_buffer = ["aAa", "aBa", "aCa"]
    start, end = _BuildLocations(1, 2, 1, 4)
    (line_offset,
     char_offset) = vimsupport.ReplaceChunk(start, end, 'Eb\nbFb\nbGb', 0, 0,
                                            result_buffer)
    expected_buffer = ["aEb", "bFb", "bGb", "aBa", "aCa"]
    eq_(expected_buffer, result_buffer)
    eq_(line_offset, 2)
    eq_(char_offset, 0)

    # now do a subsequent change (insert at end of line "1")
    start, end = _BuildLocations(1, 4, 1, 4)
    (new_line_offset,
     new_char_offset) = vimsupport.ReplaceChunk(start, end, 'cccc',
                                                line_offset, char_offset,
                                                result_buffer)

    line_offset += new_line_offset
    char_offset += new_char_offset

    eq_(["aEb", "bFb", "bGbcccc", "aBa", "aCa"], result_buffer)

    eq_(line_offset, 2)
    eq_(char_offset, 4)
示例#2
0
def ReplaceChunk_SingleToMultipleLines_test():
  result_buffer = [ ToBytes( "aAa" ),
                    ToBytes( "aBa" ),
                    ToBytes( "aCa" ) ]
  start, end = _BuildLocations( 2, 2, 2, 2 )
  ( line_offset, char_offset ) = vimsupport.ReplaceChunk( start, end, 'Eb\nbF',
                                                          0, 0, result_buffer )
  expected_buffer = [ ToBytes( "aAa" ),
                      ToBytes( "aEb" ),
                      ToBytes( "bFBa" ),
                      ToBytes( "aCa" ) ]
  eq_( expected_buffer, result_buffer )
  eq_( line_offset, 1 )
  eq_( char_offset, 1 )

  # now make another change to the "2nd" line
  start, end = _BuildLocations( 2, 3, 2, 4 )
  ( new_line_offset, new_char_offset ) = vimsupport.ReplaceChunk(
                                                           start,
                                                           end,
                                                           'cccc',
                                                           line_offset,
                                                           char_offset,
                                                           result_buffer )

  line_offset += new_line_offset
  char_offset += new_char_offset

  eq_( [ ToBytes( "aAa" ),
         ToBytes( "aEb" ),
         ToBytes( "bFBcccc" ),
         ToBytes( "aCa" ) ], result_buffer )
  eq_( line_offset, 1 )
  eq_( char_offset, 4 )
示例#3
0
def ReplaceChunk_SingleLine_Repl_1_test():
  # Replace with longer range
  #                  12345678901234567
  result_buffer = [ "This is a string" ]
  start, end = _BuildLocations( 1, 1, 1, 5 )
  ( line_offset, char_offset ) = vimsupport.ReplaceChunk( start,
                                                          end,
                                                          'How long',
                                                          0,
                                                          0,
                                                          result_buffer )

  eq_( [ "How long is a string" ], result_buffer )
  eq_( line_offset, 0 )
  eq_( char_offset, 4 )

  # and replace again, using delta
  start, end = _BuildLocations( 1, 10, 1, 11 )
  ( new_line_offset, new_char_offset ) = vimsupport.ReplaceChunk(
                                                          start,
                                                          end,
                                                          ' piece of ',
                                                          line_offset,
                                                          char_offset,
                                                          result_buffer )

  line_offset += new_line_offset
  char_offset += new_char_offset

  eq_( [ 'How long is a piece of string' ], result_buffer )
  eq_( new_line_offset, 0 )
  eq_( new_char_offset, 9 )
  eq_( line_offset, 0 )
  eq_( char_offset, 13 )

  # and once more, for luck
  start, end = _BuildLocations( 1, 11, 1, 17 )

  ( new_line_offset, new_char_offset ) = vimsupport.ReplaceChunk(
                                                          start,
                                                          end,
                                                          'pie',
                                                          line_offset,
                                                          char_offset,
                                                          result_buffer )

  line_offset += new_line_offset
  char_offset += new_char_offset

  eq_( ['How long is a piece of pie' ], result_buffer )
  eq_( new_line_offset, 0 )
  eq_( new_char_offset, -3 )
  eq_( line_offset, 0 )
  eq_( char_offset, 10 )
示例#4
0
def ReplaceChunk_MultipleLinesToSingleLine_test():
  result_buffer = [ ToBytes( "aAa" ), ToBytes( "aBa" ), ToBytes( "aCaaaa" ) ]
  start, end = _BuildLocations( 2, 2, 3, 2 )
  ( line_offset, char_offset ) = vimsupport.ReplaceChunk( start, end, 'E',
                                                          0, 0, result_buffer )
  expected_buffer = [ ToBytes( "aAa" ), ToBytes( "aECaaaa" ) ]
  eq_( expected_buffer, result_buffer )
  eq_( line_offset, -1 )
  eq_( char_offset, 1 )

  # make another modification applying offsets
  start, end = _BuildLocations( 3, 3, 3, 4 )
  ( new_line_offset, new_char_offset ) = vimsupport.ReplaceChunk(
                                                          start,
                                                          end,
                                                          'cccc',
                                                          line_offset,
                                                          char_offset,
                                                          result_buffer )

  line_offset += new_line_offset
  char_offset += new_char_offset

  eq_( [ ToBytes( "aAa" ),
         ToBytes( "aECccccaaa" ) ], result_buffer )
  eq_( line_offset, -1 )
  eq_( char_offset, 4 )

  # and another, for luck
  start, end = _BuildLocations( 3, 4, 3, 5 )
  ( new_line_offset, new_char_offset ) = vimsupport.ReplaceChunk(
                                                          start,
                                                          end,
                                                          'dd\ndd',
                                                          line_offset,
                                                          char_offset,
                                                          result_buffer )

  line_offset += new_line_offset
  char_offset += new_char_offset

  eq_( [ ToBytes( "aAa" ),
         ToBytes( "aECccccdd" ),
         ToBytes( "ddaa" ) ],
       result_buffer )
  eq_( line_offset, 0 )
  eq_( char_offset, -2 )
示例#5
0
def ReplaceChunk_MultipleLinesToSingleLineOffsetWorks_test():
  result_buffer = [ "aAa", "aBa", "aCa" ]
  start, end = _BuildLocations( 1, 1, 2, 2 )
  ( line_offset, char_offset ) = vimsupport.ReplaceChunk( start, end, 'bDb',
                                                          1, 1, result_buffer )
  expected_buffer = [ "aAa", "abDbCa" ]
  eq_( expected_buffer, result_buffer )
  eq_( line_offset, -1 )
  eq_( char_offset, 3 )
示例#6
0
def ReplaceChunk_SingleLineToMultipleLinesOffsetWorks_test():
  result_buffer = [ "aAa", "aBa", "aCa" ]
  start, end = _BuildLocations( 1, 1, 1, 2 )
  ( line_offset, char_offset ) = vimsupport.ReplaceChunk( start, end, 'Db\nE',
                                                          1, 1, result_buffer )
  expected_buffer = [ "aAa", "aDb", "Ea", "aCa" ]
  eq_( expected_buffer, result_buffer )
  eq_( line_offset, 1 )
  eq_( char_offset, -1 )
示例#7
0
def ReplaceChunk_ReplaceTextInLine_test():
  result_buffer = [ "aAa", "aBa", "aCa" ]
  start, end = _BuildLocations( 2, 2, 2, 3 )
  ( line_offset, char_offset ) = vimsupport.ReplaceChunk( start, end, 'bDb',
                                                          0, 0, result_buffer )
  expected_buffer = [ "aAa", "abDba", "aCa" ]
  eq_( expected_buffer, result_buffer )
  eq_( line_offset, 0 )
  eq_( char_offset, 2 )
示例#8
0
def ReplaceChunk_SpanBufferEdge_test():
  result_buffer = [ "aAa", "aBa", "aCa" ]
  start, end = _BuildLocations( 1, 1, 1, 3 )
  ( line_offset, char_offset ) = vimsupport.ReplaceChunk( start, end, 'bDb',
                                                          0, 0, result_buffer )
  expected_buffer = [ "bDba", "aBa", "aCa" ]
  eq_( expected_buffer, result_buffer )
  eq_( line_offset, 0 )
  eq_( char_offset, 1 )
示例#9
0
def ReplaceChunk_MultipleLinesToEvenLessMultipleLines_test():
  result_buffer = [ "aAa", "aBa", "aCa", "aDe" ]
  start, end = _BuildLocations( 1, 2, 4, 2 )
  ( line_offset, char_offset ) = vimsupport.ReplaceChunk( start, end, 'Eb\nbF',
                                                          0, 0, result_buffer )
  expected_buffer = [ "aEb", "bFDe" ]
  eq_( expected_buffer, result_buffer )
  eq_( line_offset, -2 )
  eq_( char_offset, 1 )
示例#10
0
def ReplaceChunk_RemoveSingleLine_test():
  result_buffer = [ "aAa", "aBa", "aCa" ]
  start, end = _BuildLocations( 2, 1, 3, 1 )
  ( line_offset, char_offset ) = vimsupport.ReplaceChunk( start, end, '',
                                                          0, 0, result_buffer )
  expected_buffer = [ "aAa", "aCa" ]
  eq_( expected_buffer, result_buffer )
  eq_( line_offset, -1 )
  eq_( char_offset, 0 )
示例#11
0
def ReplaceChunk_SingleToMultipleLinesReplace_test():
    result_buffer = ["aAa", "aBa", "aCa"]
    start, end = _BuildLocations(1, 2, 1, 4)
    (line_offset,
     char_offset) = vimsupport.ReplaceChunk(start, end, 'Eb\nbFb\nbGb', 0, 0,
                                            result_buffer)
    expected_buffer = ["aEb", "bFb", "bGb", "aBa", "aCa"]
    eq_(expected_buffer, result_buffer)
    eq_(line_offset, 2)
    eq_(char_offset, 0)
示例#12
0
def ReplaceChunk_MultipleLinesToMoreMultipleLines_test():
    result_buffer = ["aAa", "aBa", "aCa", "aDe"]
    start, end = _BuildLocations(2, 2, 3, 2)
    (line_offset,
     char_offset) = vimsupport.ReplaceChunk(start, end, 'Eb\nbFb\nbG', 0, 0,
                                            result_buffer)
    expected_buffer = ["aAa", "aEb", "bFb", "bGCa", "aDe"]
    eq_(expected_buffer, result_buffer)
    eq_(line_offset, 1)
    eq_(char_offset, 1)
示例#13
0
def ReplaceChunk_MultipleLineOffsetWorks_test():
    result_buffer = ["aAa", "aBa", "aCa"]
    start, end = _BuildLocations(3, 1, 4, 3)
    (line_offset,
     char_offset) = vimsupport.ReplaceChunk(start, end, 'bDb\nbEb\nbFb', -1, 1,
                                            result_buffer)
    expected_buffer = ["aAa", "abDb", "bEb", "bFba"]
    eq_(expected_buffer, result_buffer)
    eq_(line_offset, 1)
    eq_(char_offset, 1)
示例#14
0
def ReplaceChunk_SingleLine_Add_1_test():
    # Insert at start
    result_buffer = ["is a string"]
    start, end = _BuildLocations(1, 1, 1, 1)
    (line_offset,
     char_offset) = vimsupport.ReplaceChunk(start, end, 'This ', 0, 0,
                                            result_buffer)

    eq_(["This is a string"], result_buffer)
    eq_(line_offset, 0)
    eq_(char_offset, 5)
示例#15
0
def ReplaceChunk_SingleLine_Del_3_test():
    # Delete from middle
    result_buffer = ["This is not a string"]
    start, end = _BuildLocations(1, 9, 1, 13)
    (line_offset,
     char_offset) = vimsupport.ReplaceChunk(start, end, '', 0, 0,
                                            result_buffer)

    eq_(["This is a string"], result_buffer)
    eq_(line_offset, 0)
    eq_(char_offset, -4)
示例#16
0
def ReplaceChunk_SingleLine_Add_3_test():
    # Insert in the middle
    result_buffer = ["This is a string"]
    start, end = _BuildLocations(1, 8, 1, 8)
    (line_offset,
     char_offset) = vimsupport.ReplaceChunk(start, end, ' not', 0, 0,
                                            result_buffer)

    eq_(["This is not a string"], result_buffer)
    eq_(line_offset, 0)
    eq_(char_offset, 4)
示例#17
0
def ReplaceChunk_SingleLine_Del_2_test():
    # Delete from end
    result_buffer = ["This is a string"]
    start, end = _BuildLocations(1, 10, 1, 18)
    (line_offset,
     char_offset) = vimsupport.ReplaceChunk(start, end, '', 0, 0,
                                            result_buffer)

    eq_(["This is a"], result_buffer)
    eq_(line_offset, 0)
    eq_(char_offset, -8)
示例#18
0
def ReplaceChunk_SingleLine_Repl_3_test():
    # Replace with equal range
    #                  12345678901234567
    result_buffer = ["This is a string"]
    start, end = _BuildLocations(1, 6, 1, 8)
    (line_offset,
     char_offset) = vimsupport.ReplaceChunk(start, end, 'be', 0, 0,
                                            result_buffer)

    eq_(["This be a string"], result_buffer)
    eq_(line_offset, 0)
    eq_(char_offset, 0)
示例#19
0
def ReplaceChunk_SingleLine_Repl_2_test():
    # Replace with shorter range
    #                  12345678901234567
    result_buffer = ["This is a string"]
    start, end = _BuildLocations(1, 11, 1, 17)
    (line_offset,
     char_offset) = vimsupport.ReplaceChunk(start, end, 'test', 0, 0,
                                            result_buffer)

    eq_(["This is a test"], result_buffer)
    eq_(line_offset, 0)
    eq_(char_offset, -2)
示例#20
0
def ReplaceChunk_MultipleLinesToLessMultipleLines_test():
  result_buffer = [ ToBytes( "aAa" ),
                    ToBytes( "aBa" ),
                    ToBytes( "aCa" ),
                    ToBytes( "aDe" ) ]
  start, end = _BuildLocations( 1, 2, 3, 2 )
  ( line_offset, char_offset ) = vimsupport.ReplaceChunk( start, end, 'Eb\nbF',
                                                          0, 0, result_buffer )
  expected_buffer = [ ToBytes( "aEb" ), ToBytes( "bFCa" ), ToBytes( "aDe" ) ]
  eq_( expected_buffer, result_buffer )
  eq_( line_offset, -1 )
  eq_( char_offset, 1 )
示例#21
0
def ReplaceChunk_SingleLineOffsetWorks_test():
  result_buffer = [ ToBytes( "aAa" ),
                    ToBytes( "aBa" ),
                    ToBytes( "aCa" ) ]
  start, end = _BuildLocations( 1, 1, 1, 2 )
  ( line_offset, char_offset ) = vimsupport.ReplaceChunk( start, end, 'bDb',
                                                          1, 1, result_buffer )
  expected_buffer = [ ToBytes( "aAa" ),
                      ToBytes( "abDba" ),
                      ToBytes( "aCa" ) ]
  eq_( expected_buffer, result_buffer )
  eq_( line_offset, 0 )
  eq_( char_offset, 2 )
示例#22
0
def ReplaceChunk_AddTextInLine_test():
  result_buffer = [ ToBytes( "aAa" ),
                    ToBytes( "aBa" ),
                    ToBytes( "aCa" ) ]
  start, end = _BuildLocations( 2, 2, 2, 2 )
  ( line_offset, char_offset ) = vimsupport.ReplaceChunk( start, end, 'bDb',
                                                          0, 0, result_buffer )
  expected_buffer = [ ToBytes( "aAa" ),
                      ToBytes( "abDbBa" ),
                      ToBytes( "aCa" ) ]
  eq_( expected_buffer, result_buffer )
  eq_( line_offset, 0 )
  eq_( char_offset, 3 )
示例#23
0
def ReplaceChunk_SingleLine_Add_2_test():
  # Insert at end
  result_buffer = [ ToBytes( "This is a " ) ]
  start, end = _BuildLocations( 1, 11, 1, 11 )
  ( line_offset, char_offset ) = vimsupport.ReplaceChunk( start,
                                                          end,
                                                          'string',
                                                          0,
                                                          0,
                                                          result_buffer )

  eq_( [ ToBytes( "This is a string" ) ], result_buffer )
  eq_( line_offset, 0 )
  eq_( char_offset, 6 )
示例#24
0
def ReplaceChunk_SingleLine_Del_1_test():
  # Delete from start
  result_buffer = [ ToBytes( "This is a string" ) ]
  start, end = _BuildLocations( 1, 1, 1, 6 )
  ( line_offset, char_offset ) = vimsupport.ReplaceChunk( start,
                                                          end,
                                                          '',
                                                          0,
                                                          0,
                                                          result_buffer )

  eq_( [ ToBytes( "is a string" ) ], result_buffer )
  eq_( line_offset, 0 )
  eq_( char_offset, -5 )
示例#25
0
def ReplaceChunk_SingleLine_Unicode_ReplaceUnicodeChars_test():
  # Replace Unicode characters.
  result_buffer = [ ToBytes( "This Uniçø∂‰ string is in the middle" ) ]
  start, end = _BuildLocations( 1, 6, 1, 20 )
  ( line_offset, char_offset ) = vimsupport.ReplaceChunk( start,
                                                          end,
                                                          'Unicode ',
                                                          0,
                                                          0,
                                                          result_buffer )

  eq_( [ ToBytes( "This Unicode string is in the middle" ) ], result_buffer )
  eq_( line_offset, 0 )
  eq_( char_offset, -6 )
示例#26
0
def ReplaceChunk_SingleLine_Unicode_ReplaceAfterUnicode_test():
  # Replace ASCII characters after Unicode characters in the line.
  result_buffer = [ ToBytes( "This Uniçø∂‰ string is in the middle" ) ]
  start, end = _BuildLocations( 1, 30, 1, 43 )
  ( line_offset, char_offset ) = vimsupport.ReplaceChunk( start,
                                                          end,
                                                          'fåke',
                                                          0,
                                                          0,
                                                          result_buffer )

  eq_( [ ToBytes( "This Uniçø∂‰ string is fåke" ) ], result_buffer )
  eq_( line_offset, 0 )
  eq_( char_offset, -8 )
示例#27
0
def ReplaceChunk_SingleLine_Unicode_Grown_test():
  # Replace ASCII characters after Unicode characters in the line.
  result_buffer = [ ToBytes( "a" ) ]
  start, end = _BuildLocations( 1, 1, 1, 2 )
  ( line_offset, char_offset ) = vimsupport.ReplaceChunk( start,
                                                          end,
                                                          'å',
                                                          0,
                                                          0,
                                                          result_buffer )

  eq_( [ ToBytes( "å" ) ], result_buffer )
  eq_( line_offset, 0 )
  eq_( char_offset, 1 ) # Note: byte difference (a = 1 byte, å = 2 bytes)
示例#28
0
def ReplaceChunk_SingleToMultipleLines3_test():
  result_buffer = [ ToBytes( "aAa" ), ToBytes( "aBa" ), ToBytes( "aCa" ) ]
  start, end = _BuildLocations( 2, 2, 2, 2 )
  ( line_offset, char_offset ) = vimsupport.ReplaceChunk( start,
                                                          end,
                                                          'Eb\nbFb\nbGb',
                                                          0,
                                                          0,
                                                          result_buffer )
  expected_buffer = [ ToBytes( "aAa" ),
                      ToBytes( "aEb" ),
                      ToBytes( "bFb" ),
                      ToBytes( "bGbBa" ),
                      ToBytes( "aCa" ) ]
  eq_( expected_buffer, result_buffer )
  eq_( line_offset, 2 )
  eq_( char_offset, 2 )
示例#29
0
    def _HandleFixitResponse(self):
        if not len(self._response['fixits']):
            vimsupport.EchoText("No fixits found for current line")
        else:
            fixit = self._response['fixits'][0]

            # We need to track the difference in length, but ensuring we apply fixes
            # in ascending order of insertion point.
            fixit['chunks'].sort(key=lambda chunk: (str(chunk['range'][
                'start']['line_num']) + ',' + str(chunk['range']['start'][
                    'column_num'])))

            # Remember the line number we're processing. Negative line number means we
            # haven't processed any lines yet (by nature of being not equal to any
            # real line number).
            last_line = -1

            # Counter of changes applied, so the user has a mental picture of the
            # undo history this change is creating.
            num_fixed = 0
            line_delta = 0
            for chunk in fixit['chunks']:
                if chunk['range']['start']['line_num'] != last_line:
                    # If this chunk is on a different line than the previous chunk,
                    # then ignore previous deltas (as offsets won't have changed).
                    last_line = chunk['range']['end']['line_num']
                    char_delta = 0

                (new_line_delta, new_char_delta) = vimsupport.ReplaceChunk(
                    chunk['range']['start'], chunk['range']['end'],
                    chunk['replacement_text'], line_delta, char_delta)
                line_delta += new_line_delta
                char_delta += new_char_delta

                num_fixed = num_fixed + 1

            vimsupport.EchoTextVimWidth("FixIt applied " + str(num_fixed) +
                                        " changes")