def write_to_file(): fakefile = FakeFile() staticdiffmodel = _make_static_diffmodel() old_static_lines = list( ln.clone() for ln in staticdiffmodel.get_lines() ) editable = EditableDiffModel( staticdiffmodel ) # Make several overlapping changes, including a deletion editable.edit_lines( 0, 2, directions.RIGHT, ( "edited 1a", "edited 2a", "edited 3a" ) ) editable.edit_lines( 1, 3, directions.RIGHT, ( "edited 2b", "edited 3b", "edited 4b" ) ) editable.delete_lines( 1, 1, directions.RIGHT ) editable.edit_lines( 2, 4, directions.RIGHT, ( "edited 3c", "edited 4c", "edited 5c" ) ) editable.write_to_file( fakefile, directions.RIGHT ) assert_strings_equal( fakefile.txt, "edited 1a\n" + "edited 3c\n" + "edited 4c\n" + "edited 5c\n" + "line 6 here\n" + "line 7 here\n" + "line 8 here\n" + "line 9 here\n" + "line 10 here\n" ) assert_lines_lists_equal( old_static_lines, staticdiffmodel.get_lines() )
def add_then_delete(): """If we add some lines and then delete some of them later we get the right result.""" staticdiffmodel = _make_static_diffmodel() editable = EditableDiffModel( staticdiffmodel ) editable.add_lines( 1, directions.RIGHT, [ "Added line 1a", "Added line 1b", "Added line 1c" ] ) editable.delete_lines( 2, 2, directions.RIGHT ) # Get some lines containing the add lines = editable.get_lines( 0, 5 ) assert( len( lines ) == 5 ) ln = lines[0] assert_strings_equal( ln.left, "line 1 here" ) assert_strings_equal( ln.right, "line 1 here" ) ln = lines[1] assert_strings_equal( ln.left, None ) assert_strings_equal( ln.right, "Added line 1a" ) ln = lines[2] assert_strings_equal( ln.left, None ) assert_strings_equal( ln.right, None ) ln = lines[3] assert_strings_equal( ln.left, None ) assert_strings_equal( ln.right, "Added line 1c" ) ln = lines[4] assert_strings_equal( ln.left, "line 2 here" ) assert_strings_equal( ln.right, "line 2 here" )
def delete_line_plus_edits(): staticdiffmodel = _make_static_diffmodel() old_static_lines = list( ln.clone() for ln in staticdiffmodel.get_lines() ) editable = EditableDiffModel( staticdiffmodel ) # Make several overlapping changes, including a deletion editable.edit_lines( 0, 2, directions.RIGHT, ( "edited 1a", "edited 2a", "edited 3a" ) ) editable.edit_lines( 1, 3, directions.RIGHT, ( "edited 2b", "edited 3b", "edited 4b" ) ) editable.delete_lines( 1, 1, directions.RIGHT ) editable.edit_lines( 2, 4, directions.RIGHT, ( "edited 3c", "edited 4c", "edited 5c" ) ) # Ask for lines 1 to 3 lines = editable.get_lines( 0, 3 ) assert( len( lines ) == 3 ) ln = lines[0] assert_strings_equal( ln.left, "line 1 here" ) assert_strings_equal( ln.right, "edited 1a" ) assert( ln.status == difflinetypes.DIFFERENT ) assert( ln.left_edited == False ) assert( ln.right_edited == True ) ln = lines[1] assert_strings_equal( ln.left, "line 2 here" ) assert_strings_equal( ln.right, None ) assert( ln.status == difflinetypes.DIFFERENT ) assert( ln.left_edited == False ) assert( ln.right_edited == True ) ln = lines[2] assert_strings_equal( ln.left, "line 3 here" ) assert_strings_equal( ln.right, "edited 3c" ) assert( ln.status == difflinetypes.DIFFERENT ) assert( ln.left_edited == False ) assert( ln.right_edited == True ) assert_lines_lists_equal( old_static_lines, staticdiffmodel.get_lines() )
def delete_lines_backwards(): staticdiffmodel = _make_static_diffmodel() old_static_lines = list( ln.clone() for ln in staticdiffmodel.get_lines() ) editable = EditableDiffModel( staticdiffmodel ) editable.delete_lines( 2, 1, directions.RIGHT ) # Ask for lines 1 to 4 lines = editable.get_lines( 0, 4 ) assert( len( lines ) == 4 ) ln = lines[0] assert_strings_equal( ln.left, "line 1 here" ) assert_strings_equal( ln.right, "line 1 here" ) assert( ln.status == difflinetypes.IDENTICAL ) assert( ln.left_edited == False ) assert( ln.right_edited == False ) ln = lines[1] assert_strings_equal( ln.left, "line 2 here" ) assert_strings_equal( ln.right, None ) assert( ln.status == difflinetypes.DIFFERENT ) assert( ln.left_edited == False ) assert( ln.right_edited == True ) ln = lines[2] assert_strings_equal( ln.left, "line 3 here" ) assert_strings_equal( ln.right, None ) assert( ln.status == difflinetypes.DIFFERENT ) assert( ln.left_edited == False ) assert( ln.right_edited == True ) ln = lines[3] assert_strings_equal( ln.left, "line 4 here" ) assert_strings_equal( ln.right, "line 4 here" ) assert( ln.status == difflinetypes.IDENTICAL ) assert( ln.left_edited == False ) assert( ln.right_edited == False ) assert_lines_lists_equal( old_static_lines, staticdiffmodel.get_lines() )
def has_edit_affecting_side(): staticdiffmodel = _make_static_diffmodel() editable = EditableDiffModel( staticdiffmodel ) assert( not editable.has_edit_affecting_side( directions.RIGHT ) ) assert( not editable.has_edit_affecting_side( directions.LEFT ) ) editable.edit_lines( 0, 2, directions.RIGHT, ( "edited 1a", "edited 2a", "edited 3a" ) ) editable.edit_lines( 1, 3, directions.RIGHT, ( "edited 2b", "edited 3b", "edited 4b" ) ) assert( editable.has_edit_affecting_side( directions.RIGHT ) ) assert( not editable.has_edit_affecting_side( directions.LEFT ) ) editable.delete_lines( 1, 1, directions.LEFT ) assert( editable.has_edit_affecting_side( directions.RIGHT ) ) assert( editable.has_edit_affecting_side( directions.LEFT ) )
def edit_after_delete(): staticdiffmodel = _make_static_diffmodel() old_static_lines = list( ln.clone() for ln in staticdiffmodel.get_lines() ) editable = EditableDiffModel( staticdiffmodel ) # Delete then edit editable.delete_lines( 1, 1, directions.RIGHT ) editable.edit_lines( 2, 4, directions.RIGHT, ( "edited 3c", "edited 4c", "edited 5c" ) ) # Ask for lines 1 to 3 lines = editable.get_lines( 0, 3 ) assert( len( lines ) == 3 ) ln = lines[0] assert_strings_equal( ln.left, "line 1 here" ) assert_strings_equal( ln.right, "line 1 here" ) assert( ln.status == difflinetypes.IDENTICAL ) assert( ln.left_edited == False ) assert( ln.right_edited == False ) ln = lines[1] assert_strings_equal( ln.left, "line 2 here" ) assert_strings_equal( ln.right, None ) assert( ln.status == difflinetypes.DIFFERENT ) assert( ln.left_edited == False ) assert( ln.right_edited == True ) ln = lines[2] assert_strings_equal( ln.left, "line 3 here" ) assert_strings_equal( ln.right, "edited 3c" ) assert( ln.status == difflinetypes.DIFFERENT ) assert( ln.left_edited == False ) assert( ln.right_edited == True ) assert_lines_lists_equal( old_static_lines, staticdiffmodel.get_lines() )