This is a test list for the navigator view.

Edit Actions
	Verify that enablement of Copy, Delete, Add Bookmark is consistent with that of the Navigator view's context menu, and that 
		the same behaviour occurs.

Presentation
	Verify that appropriate strings appear in all menu items and text fields.
	Verify icons for file, folder and project.
	Verify that the view shows appropriate scrollbars when its contents extends beyond its client area.

Standard Object Actions
	Verify menu items: Copy, Move, Rename, Delete for all resouces.
	Verify that the DELETE key maps to the Delete action.
	Verify Delete on a read-only resource.
	Verify Properties for projects, folders, files, and combinations of the same. 
	Verify that when the view is active, the status bar shows the full path of the selected resource.

Actions on Multiselected Items
	If two or more resources are multiselected, Rename is disabled.
	If a project and its resource(s) are multiselected, Copy and Move are disabled.
	If a folder and its child resource(s) are multiselected, Copy and Move are disabled. 
	Verify Delete on multiselected resources.
	Verify Copy and Move on multiselected files in the same project.

File Specific Actions
	Verify menu content when file selected.	 	 
	Verify Add Bookmark only appears on files and the bookmark is created when invoked.

Folder Specific Actions
	Verify the copy to the same folder and the different folder.

Project Specific Actions
	Menu includes group with Build, Refresh, Close Project and Open Project
	Close Project appears only on an open project
	Open Project appears only on a closed project
	Both Open Project and Close Project appear when selection includes both an open and a closed project
	For a closed project, Rename is disabled and Go Into, Build, Refresh, Close Project do not appear

New Object Actions
	Invoke File New .. projects, items, other.	
	Verify that the view's New menu is the same as File | New in the Window.

View Actions
	Invoke Sort | by Name, | by Type in the pulldown menu. Avoid using only a.java and b.txt for a testing case since the result is the same
		regardless of the sort key.
	Invoke Filters... with Select All, Deselect All options.
	
Navigation Actions
	The view keeps track of navigation history. Go Into and Go Up add an item. Back and Forward change the cursor in the history list.
	Select a project or folder, invoke Go Into, Go to | Back, Go to | Forward, and Go to | Up.
	Verify enablement of Go xx actions reflect selection and navigation history.
		- Go Into is enabled when an open, non-empty project or a non-empty folder is selected 		
		- Go Up is enabled when the input has a parent .  
		- Go Forward is enabled when there are following items in the list, Go Back enabled when there are previous items.
	Verify that the view's titlebar displays the simple name of its input, and that its tooltip displays the full path of its input.
	Verify that the enablement and the actions of the navigation buttons in the local toolbar are consistent with the Navigate main menu.
	Verify that when a navigation button in the local toolbar is enabled, the fullpath of where the button leads to is appended to the button's tooltip.
		e.g If the path of the view's input is Project/Folder/MyFolder, the 'Up' button has the tooltip that says 'Up to Project/Folder'

Persistence
	Verify that the sort type remains the same after closing and reopening the Navigator view
	Verify that the input is persistent between sessions.