--- RCPTT testcase ---
Format-Version: 1.0
Context-Type: org.eclipse.rcptt.ctx.ecl
Element-Name: MergingLibrary
Element-Type: context
Element-Version: 2.0
Id: _SM1VQVPAEeSorJcpi4oQKA
Runtime-Version: 2.0.0.201506120617
Save-Time: 10/8/15 4:28 PM

------=_.description-216f885c-d591-38ce-8ea2-e4f8cb4d6ffa
Content-Type: text/plain
Entry-Name: .description

Provides procedures to merge items and checks that those items has been merge correctly.
------=_.description-216f885c-d591-38ce-8ea2-e4f8cb4d6ffa--
------=_.ecl.context-718f04b4-ed39-33e3-af62-0995e4561998
Content-Type: text/ecl
Entry-Name: .ecl.context

// Asserts that an item has been merged to left.
//  Checks that the decorating icon is correct.
//  Checks that the data has the state set to MERGE.
// Input:
//		itemPath: Path to the item to test
proc "assertMergedToLeft" [val itemPath] {
	get-item $itemPath
		| get-property "image.decorations[0].path" -raw
        | eq "org.eclipse.emf.compare.edit/icons/full/ovr16/merged_left_ov.gif" | assert-true -message "Should be the merge to left overlay"
    get-item $itemPath
        | get-property "getData().getTarget().getData().getState().getLiteral()" | equals "MERGED" | verify-true
}

// Asserts that an item has been merged to right.
//  Checks that the decorating icon is correct.
//  Checks that the data has the state set to MERGE.
// Input:
//		itemPath: Path to the item to test
proc "assertMergedToRight" [val itemPath] {
	get-item $itemPath
		| get-property "image.decorations[0].path" -raw
        | eq "org.eclipse.emf.compare.edit/icons/full/ovr16/merged_right_ov.gif" | assert-true -message "Should be the merge to right overlay"
    get-item $itemPath
        | get-property "getData().getTarget().getData().getState().getLiteral()" | equals "MERGED" | verify-true
}


// Asserts that an item has not been merged
//  Checks that the icon is either an added/removed/change icon.
//  Checks that the data has the state set to UNRESOLVED.
// Input:
//		itemPath: Path to the item to test
proc "assertNotMerged" [val itemPath] {
	get-item $itemPath
        | or
        	[get-property "image.decorations[0].path" -raw| eq "org.eclipse.emf.compare.edit/icons/full/ovr16/chg_ov.gif"]
        	[get-property "image.decorations[0].path" -raw| eq "org.eclipse.emf.compare.edit/icons/full/ovr16/add_ov.gif"]
        	[get-property "image.decorations[0].path" -raw| eq "org.eclipse.emf.compare.edit/icons/full/ovr16/del_ov.gif"]
        | assert-true -message "Should be the added/removed/changed overlay"
    get-item $itemPath
        | get-property "getData().getTarget().getData().getState().getLiteral()" | equals "UNRESOLVED" | verify-true
}
// Undo the previous action
proc "undo" {
	get-menu "Edit/Undo Merge" | click
}
// Redo the previous action
proc "redo" {
	get-menu "Edit/Redo Merge" | click
}
// Merges an item right to left.
// Input:
//		editor: -input current editor
//		itemPath: Path to the item to test
proc "mergeRightToLeft" [val editor -input] [val itemPath]{
	with $editor{
	    get-tree 
	    	|select $itemPath
	    get-button -after [get-button "Show consequences of merging from right to left"] -index 1 | click
	}
}

// Merges an item left to right.
// Input:
//		editor: -input current editor
//		itemPath: Path to the item to test
proc "mergeLeftToRight" [val editor -input] [val itemPath]{
	with $editor{
	    get-tree 
	    	|select $itemPath
	    get-button -after [get-button "Show consequences of merging from right to left"] | click
	}
}



// Checks that an item can be merged, that the merge can be undone and then that the merge can be redone.
// Inputs:
//		editor: -input current editor
//		itemPath: Path of item to merge
//		itemPathAfterMerge: Path of the item after the merge
proc "assertUndoRedoRightToLeft" [val editor -input] [val itemPath] [val itemPathAfterMerge] {
	with $editor{
		mergeRightToLeft $itemPath
	}
	with [$editor | get-tree] {
		assertMergedToLeft $itemPathAfterMerge
	}
	undo
	with [$editor | get-tree]{
		assertNotMerged $itemPath
	}
	redo
	with [$editor | get-tree]{
		assertMergedToLeft $itemPathAfterMerge
	}
}

// Checks that an item can be merged, that the merge can be undone and then that the merge can be redone.
// Inputs:
//		editor: -input current editor
//		itemPath: Path of item to merge
//		itemPathAfterMerge: Path of the item after the merge
proc "assertUndoRedoLeftToRight" [val editor -input] [val itemPath] [val itemPathAfterMerge] {
	with $editor{
		mergeLeftToRight $itemPath
	}
	with [$editor | get-tree] {
		assertMergedToRight $itemPathAfterMerge
	}
	undo
	with [$editor | get-tree]{
		assertNotMerged $itemPath
	}
	redo
	with [$editor | get-tree]{
		assertMergedToRight $itemPathAfterMerge
	}
}

// Helper to call assertUndoRedoRightToLeft with one or two parameters depending of the use case.
// 	If only one parameter is provided then the path should not change after merging.
// 	If two parameters are used then the second parameter represents the expected path of the item after merging.
proc "assertMergeRightToLeft" [val editor -input] [val itemPath] [val itemPathAfterMerge ""]{
if[$itemPathAfterMerge | eq ""] {
		// If $itemPathAfterMerge is not specified the path of the item should not change after merging
		with $editor{
				assertUndoRedoRightToLeft $itemPath $itemPath
			}
	} -else {
		// If $itemPathAfterMerge is specified then path of the item should change when the merge is done
		with $editor{
				assertUndoRedoRightToLeft $itemPath $itemPathAfterMerge
			}
		}
}

// Helper to call assertUndoRedoLeftToRight with one or two parameters depending of the use case.
//  If only one parameter is provided then the path should not change after merging.
//  If two parameters are used then the second parameter represents the expected of the item after merging.
proc "assertMergeLeftToRight" [val editor -input] [val itemPath] [val itemPathAfterMerge ""]{
if[$itemPathAfterMerge | eq ""] {
		// If $itemPathAfterMerge is not specified the path of the item should not change after the merge
		with $editor{
				assertUndoRedoLeftToRight $itemPath $itemPath
			}
	} -else {
		// If $itemPathAfterMerge is specified then path of the item should change when the merge is done
		with $editor{
				assertUndoRedoLeftToRight $itemPath $itemPathAfterMerge
			}
		}
}


------=_.ecl.context-718f04b4-ed39-33e3-af62-0995e4561998--
