Ejemplo n.º 1
0
def edit_line():
	staticdiffmodel = _make_static_diffmodel()
	old_static_lines = list( ln.clone() for ln in staticdiffmodel.get_lines() )

	editable = EditableDiffModel( staticdiffmodel )

	# Change one line
	editable.edit_lines( 3, 3, directions.RIGHT, ( "edited", ) )

	# The line before is unchanged
	ln = editable.get_line( 2 )
	assert_strings_equal( ln.left, "line 3 here" )
	assert_strings_equal( ln.right, "line 3 here" )
	assert( ln.status == difflinetypes.IDENTICAL )
	assert( ln.left_edited == False )
	assert( ln.right_edited == False )

	# The line itself is changed, and marked as EDITED
	ln = editable.get_line( 3 )
	assert_strings_equal( ln.left, "line 4 here" )
	assert_strings_equal( ln.right, "edited" )
	assert( ln.status == difflinetypes.DIFFERENT )
	assert( ln.left_edited == False )
	assert( ln.right_edited == True )

	# The line after is unchanged
	ln = editable.get_line( 4 )
	assert_strings_equal( ln.left, "line 5 here" )
	assert_strings_equal( ln.right, "line 5 here different" )
	assert( ln.status == difflinetypes.DIFFERENT )
	assert( ln.left_edited == False )
	assert( ln.right_edited == False )

	# The underlying diffmodel has not been altered
	assert_lines_lists_equal( old_static_lines, staticdiffmodel.get_lines() )
Ejemplo n.º 2
0
def add_lines_spanning():
	"""If an add overlaps the entire region we asking for,
	we still calculate the right answer."""

	staticdiffmodel = _make_static_diffmodel()
	editable = EditableDiffModel( staticdiffmodel )

	editable.add_lines( 1, directions.RIGHT,
		[
		"new line 1a",
		"new line 1b",
		"new line 1c",
		"new line 1d",
		] )

	# Get some lines containing the add
	lines = editable.get_lines( 2, 4 )
	assert( len( lines ) == 2 )

	ln = lines[0]
	assert_strings_equal( ln.left, None )
	assert_strings_equal( ln.right, "new line 1b" )
	assert( ln.status == difflinetypes.DIFFERENT )
	assert( ln.left_edited == False )
	assert( ln.right_edited == True )
	assert( ln == editable.get_line( 2 ) ) # Sanity for get_line

	ln = lines[1]
	assert_strings_equal( ln.left, None )
	assert_strings_equal( ln.right, "new line 1c" )
	assert( ln.status == difflinetypes.DIFFERENT )
	assert( ln.left_edited == False )
	assert( ln.right_edited == True )
	assert( ln == editable.get_line( 3 ) ) # Sanity for get_line
Ejemplo n.º 3
0
def add_lines_after_overlapping():
	"""The lines after an add are shifted down, even when the adds are overlapping."""

	staticdiffmodel = _make_static_diffmodel()
	editable = EditableDiffModel( staticdiffmodel )

	editable.add_lines( 2, directions.LEFT, ["new line 2a", "new line 2c"] )
	editable.add_lines( 3, directions.LEFT, ["new line 2b"] )

	# Get some lines after the add
	lines = editable.get_lines( 6, 8 )

	assert( len( lines ) == 2 )

	ln = lines[0]
	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( ln == editable.get_line( 6 ) ) # Sanity for get_line

	ln = lines[1]
	assert_strings_equal( ln.left, "line 5 here" )
	assert_strings_equal( ln.right, "line 5 here different" )
	assert( ln.status == difflinetypes.DIFFERENT )
	assert( ln.left_edited == False )
	assert( ln.right_edited == False )
	assert( ln == editable.get_line( 7 ) ) # Sanity for get_line
Ejemplo n.º 4
0
def get_line_before_start():
	staticdiffmodel = _make_static_diffmodel()
	editable = EditableDiffModel( staticdiffmodel )

	editable.edit_lines( 2, 4, directions.RIGHT,
		( "edited 3b", "edited 3b", "edited 3c" ) )

	line = editable.get_line( 1 )
	assert( line is not None )

	# We ask for a line out of range and get None
	line = editable.get_line( -1 )
	assert( line is None )
Ejemplo n.º 5
0
def get_line_beyond_end():
	staticdiffmodel = _make_static_diffmodel()
	editable = EditableDiffModel( staticdiffmodel )

	editable.edit_lines( 0, 2, directions.RIGHT,
		( "edited 1b", "edited 2b", "edited 3b" ) )

	line = editable.get_line( 9 )
	assert( line is not None )

	# We ask for a line out of range and get None
	line = editable.get_line( 10 )
	assert( line is None )
Ejemplo n.º 6
0
def add_lines_containing():
	"""The lines containing an add are calculated correctly."""

	staticdiffmodel = _make_static_diffmodel()
	editable = EditableDiffModel( staticdiffmodel )

	editable.add_lines( 3, directions.LEFT, ["new line 3a", "new line 3b"] )

	# Get some lines containing the add
	lines = editable.get_lines( 1, 6 )
	assert( len( lines ) == 5 )

	ln = lines[0]
	assert_strings_equal( ln.left, "line 2 here" )
	assert_strings_equal( ln.right, "line 2 here" )
	assert( ln.status == difflinetypes.IDENTICAL )
	assert( ln.left_edited == False )
	assert( ln.right_edited == False )
	assert( ln == editable.get_line( 1 ) ) # Sanity for get_line

	ln = lines[1]
	assert_strings_equal( ln.left, "line 3 here" )
	assert_strings_equal( ln.right, "line 3 here" )
	assert( ln.status == difflinetypes.IDENTICAL )
	assert( ln.left_edited == False )
	assert( ln.right_edited == False )
	assert( ln == editable.get_line( 2 ) ) # Sanity for get_line

	ln = lines[2]
	assert_strings_equal( ln.left, "new line 3a" )
	assert_strings_equal( ln.right, None )
	assert( ln.status == difflinetypes.DIFFERENT )
	assert( ln.left_edited == True )
	assert( ln.right_edited == False )
	assert( ln == editable.get_line( 3 ) ) # Sanity for get_line

	ln = lines[3]
	assert_strings_equal( ln.left, "new line 3b" )
	assert_strings_equal( ln.right, None )
	assert( ln.status == difflinetypes.DIFFERENT )
	assert( ln.left_edited == True )
	assert( ln.right_edited == False )
	assert( ln == editable.get_line( 4 ) ) # Sanity for get_line

	ln = lines[4]
	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( ln == editable.get_line( 5 ) ) # Sanity for get_line
Ejemplo n.º 7
0
def edit_doesnt_touch():
	staticdiffmodel = _make_static_diffmodel()

	editable = EditableDiffModel( staticdiffmodel )

	# Change 3 lines
	editable.edit_lines( 1, 3, directions.RIGHT,
		( "edited 2", "edited 3", "edited 4" ) )

	# Just ask for line 9
	lines = editable.get_lines( 9, 10 )
	assert( len( lines ) == 1 )

	assert_strings_equal( lines[0].left, "previous 10" )
	assert_strings_equal( lines[0].right, "line 10 here" )
	assert( lines[0].status == difflinetypes.DIFFERENT )
	assert( lines[0].left_edited == False )
	assert( lines[0].right_edited == False )

	ln = editable.get_line( 8 )
	assert_strings_equal( ln.left, "line 9 here" )
	assert_strings_equal( ln.right, "line 9 here" )
	assert( ln.status == difflinetypes.IDENTICAL )
	assert( ln.left_edited == False )
	assert( ln.right_edited == False )
Ejemplo n.º 8
0
def add_lines_overlapping_left():
	"""If an add overlaps the region we are asking for on the left,
	we still calculate the right answer."""

	staticdiffmodel = _make_static_diffmodel()
	editable = EditableDiffModel( staticdiffmodel )

	editable.add_lines( 3, directions.RIGHT,
		[
		"new line 3a",
		"new line 3b",
		"new line 3c",
		"new line 3d",
		] )

	# Get some lines containing the add
	lines = editable.get_lines( 5, 8 )
	assert( len( lines ) == 3 )

	ln = lines[0]
	assert_strings_equal( ln.left, None )
	assert_strings_equal( ln.right, "new line 3c" )
	assert( ln.status == difflinetypes.DIFFERENT )
	assert( ln.left_edited == False )
	assert( ln.right_edited == True )
	assert( ln == editable.get_line( 5 ) ) # Sanity for get_line

	ln = editable.get_line( 6 )
	assert_strings_equal( ln.left, None )
	assert_strings_equal( ln.right, "new line 3d" )
	assert( ln.status == difflinetypes.DIFFERENT )
	assert( ln.left_edited == False )
	assert( ln.right_edited == True )
	assert( ln == lines[1] ) # Sanity - get_lines gives same answer as get_line

	ln = lines[2]
	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( ln == editable.get_line( 7 ) ) # Sanity for get_line
Ejemplo n.º 9
0
def add_lines_before():
	"""The lines before an add are unaffected by it."""

	staticdiffmodel = _make_static_diffmodel()
	editable = EditableDiffModel( staticdiffmodel )

	editable.add_lines( 3, directions.LEFT, ["new line 3a", "new line 3b"] )
	editable.add_lines( 6, directions.LEFT, ["new line 4a", "new line 4b"] )

	# Get some lines before the add
	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 )
	assert( ln == editable.get_line( 0 ) ) # Sanity for get_line

	ln = lines[1]
	assert_strings_equal( ln.left, "line 2 here" )
	assert_strings_equal( ln.right, "line 2 here" )
	assert( ln.status == difflinetypes.IDENTICAL )
	assert( ln.left_edited == False )
	assert( ln.right_edited == False )
	assert( ln == editable.get_line( 1 ) ) # Sanity for get_line

	ln = lines[2]
	assert_strings_equal( ln.left, "line 3 here" )
	assert_strings_equal( ln.right, "line 3 here" )
	assert( ln.status == difflinetypes.IDENTICAL )
	assert( ln.left_edited == False )
	assert( ln.right_edited == False )
	assert( ln == editable.get_line( 2 ) ) # Sanity for get_line
Ejemplo n.º 10
0
def edit_spans_before_and_after():
	staticdiffmodel = _make_static_diffmodel()

	editable = EditableDiffModel( staticdiffmodel )

	# Change all 10 lines
	editable.edit_lines( 0, 9, directions.RIGHT,
		( "edited 1", "edited 2", "edited 3", "edited 4", "edited 5",
		  "edited 6", "edited 7", "edited 8", "edited 9", "edited 10" ) )

	# Just ask for lines 7, 8 and 9
	lines = editable.get_lines( 6, 10 )
	assert( len( lines ) == 4 )

	assert_strings_equal( lines[0].left, "line 7 here" )
	assert_strings_equal( lines[0].right, "edited 7" )
	assert( lines[0].status == difflinetypes.DIFFERENT )
	assert( lines[0].left_edited == False )
	assert( lines[0].right_edited == True )

	assert_strings_equal( lines[1].left, "line 8 here" )
	assert_strings_equal( lines[1].right, "edited 8" )
	assert( lines[1].status == difflinetypes.DIFFERENT )
	assert( lines[1].left_edited == False )
	assert( lines[1].right_edited == True )

	assert_strings_equal( lines[2].left, "line 9 here" )
	assert_strings_equal( lines[2].right, "edited 9" )
	assert( lines[2].status == difflinetypes.DIFFERENT )
	assert( lines[2].left_edited == False )
	assert( lines[2].right_edited == True )

	ln = editable.get_line( 0 )
	assert_strings_equal( ln.left, "line 1 here" )
	assert_strings_equal( ln.right, "edited 1" )
	assert( ln.status == difflinetypes.DIFFERENT )
	assert( ln.left_edited == False )
	assert( ln.right_edited == True )
Ejemplo n.º 11
0
def add_inside_another_add():
	"""If an add lands inside another add,
	we still calculate the right answer."""

	staticdiffmodel = _make_static_diffmodel()
	editable = EditableDiffModel( staticdiffmodel )

	editable.add_lines( 1, directions.RIGHT,
		[
		"new line 1a",
		"new line 1b",
		"new line 1c",
		"new line 1d",
		] )

	editable.add_lines( 3, directions.LEFT,
		[
		"new line 1bi",
		"new line 1bii",
		] )

	# Get some lines containing the add
	lines = editable.get_lines( 0 , 8 )
	assert( len( lines ) == 8 )

	ln = lines[0]
	assert_strings_equal( ln.left, "line 1 here" )
	assert_strings_equal( ln.right, "line 1 here" )
	assert( ln == editable.get_line( 0 ) ) # Sanity for get_line

	ln = lines[1]
	assert_strings_equal( ln.left, None )
	assert_strings_equal( ln.right, "new line 1a" )
	assert( ln.status == difflinetypes.DIFFERENT )
	assert( ln.left_edited == False )
	assert( ln.right_edited == True )
	assert( ln == editable.get_line( 1 ) ) # Sanity for get_line

	ln = lines[2]
	assert_strings_equal( ln.left, None )
	assert_strings_equal( ln.right, "new line 1b" )
	assert( ln == editable.get_line( 2 ) ) # Sanity for get_line

	ln = lines[3]
	assert_strings_equal( ln.left, "new line 1bi" )
	assert_strings_equal( ln.right, None )
	assert( ln.status == difflinetypes.DIFFERENT )
	assert( ln.left_edited == True )
	assert( ln.right_edited == False )
	assert( ln == editable.get_line( 3 ) ) # Sanity for get_line

	ln = lines[4]
	assert_strings_equal( ln.left, "new line 1bii" )
	assert_strings_equal( ln.right, None )
	assert( ln == editable.get_line( 4 ) ) # Sanity for get_line

	ln = lines[5]
	assert_strings_equal( ln.left, None )
	assert_strings_equal( ln.right, "new line 1c" )
	assert( ln.status == difflinetypes.DIFFERENT )
	assert( ln.left_edited == False )
	assert( ln.right_edited == True )
	assert( ln == editable.get_line( 5 ) ) # Sanity for get_line

	ln = lines[6]
	assert_strings_equal( ln.left, None )
	assert_strings_equal( ln.right, "new line 1d" )
	assert( ln == editable.get_line( 6 ) ) # Sanity for get_line

	ln = lines[7]
	assert_strings_equal( ln.left, "line 2 here" )
	assert_strings_equal( ln.right, "line 2 here" )
	assert( ln == editable.get_line( 7 ) ) # Sanity for get_line