This is a test list for the Filtered Resources Selection Dialog.

Presentation
	Verify that appropriate resources appear in dialog. Duplicates should have additional information about container.
	Verify icons for resources.
	Verify that icons are appropriate decorated eg by CVS label decorator.
	Verify that separator appear in properly place between history resources and other.
	Verify that resources appear in right order: 
		1) history items in alphabetical order
		2) separator
		3) rest of resources in alphabetical order
	Verify that correct container details are shown for selected resource. 
		In multiselection details not appear.
	Verify that different patterns return expected list of resources (partly overlapped by SearchPatternAuto JUnit test, this section will be removed when unit test covers all cases): 
		Eg: - "XY "	- pattern exact match should found resources named "XY" with case insensitive
			- "XY<" - pattern exact match should found resources named "XY" with case insensitive
			- "XY"  - pattern camel case match resource in similar way to regexp pattern "X[^A-Z]*Y.*" or "XY.*"
			- "X*Y" - pattern match resource name in similar way to regexp "X.*Y"
			- ""	- blank test should return only history elements if any
			- other: feel free to type anything
	
Actions
	Verify that all selected elements are added to history after being clicked ("OK" button has been pressed or item has beed double-clicked).
	Verify that all selected elements are opened in a right editor after being clicked.
	Verify that you can remove all selected history resources. 
	verify that you can remove only history elements, you shouldn't be able to remove separator nor non-historical resources. 
	Verify that multiselection works properly. You should select more than one elements and perform all above actions.
	Verify that mark/unmark show derived resource action caused appear/disappear derived resources.
	Verify that mark/unmark show status line action caused appear/disappear show status line.
	Verify that marking working set makes only resources from selected working set to appear.
	Verify that after selecting text in an editor opened dialog will have selected text set as initial pattern (with full selection on it).
	
	
Persistance 
	Verify that all settings of the dialog are persisted between sessions:
		- window size, 
		- window position, 
		- show derived tick, 
		- show status line tick, 
		- selected working set,
		- history of selected resources
		
	Verify that all history elements are persisted between session. 
	Verify the consistency synchronization of history elements with workspace.