<?xml version="1.0" encoding="utf-8"?>
<!--

  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.

-->
<UnitTester testDir="apollo/FileList/properties/"  xmlns:mx="http://www.adobe.com/2006/mxml" xmlns="*" testSWF="FileList_main.mxml">

	<!-- this set of lines form a template that must be in each unit test -->
	<mx:Script>
	<![CDATA[
	public static function init(o:DisplayObject):void
	{
	}					
	]]>
	</mx:Script>
	<mx:Metadata>
	<![CDATA[
		[Mixin]
	]]>
	</mx:Metadata>	
	<!-- end of set of lines that must be in each unit test -->

	<mx:Script>
	<![CDATA[
	
		import flash.system.Capabilities;
		import mx.controls.FileSystemList;
		import flash.filesystem.File;
		import mx.collections.ArrayCollection;
		public var myAC:ArrayCollection = new ArrayCollection();

		[Bindable]
		public var myOS:String;
		[Bindable]
		public var newDirectory:File;

		private function whichOS():void
	 	{
			if (Capabilities.os.indexOf("Windows") != -1){
				myOS="windows";
				newDirectory = new File("c:\\windows");
			}

			else if (Capabilities.os.indexOf("Mac") != -1){
				myOS="System";
				newDirectory = new File("/System/");
			}
		}

		private function setDir(): void
		{
			application.myFileSystemList.directory=newDirectory;	

		}

		private function setVal(): void
		{
			application.myFileSystemList.directory=newDirectory;
			application.myFileSystemList.extensions=[".txt"];	
		}

		private function updateBackHis():String{
			myAC.source = application.myFileSystemList.backHistory;
			return String(myAC.source.length);

		}

		private function checkcurrentpath():String{

		return String(application.myFileSystemList.directory.name);
		}

      	
	]]>
	</mx:Script>

	<testCases>
		
		<TestCase testID="FileSystemList_Property_canNavigateBack_Default" keywords="[canNavigateBack, FileSystemList]">
			<setup>
				<RunCode code="whichOS()"/>
			 	<ResetComponent target="myFileSystemList" className="mx.controls::FileSystemList" waitEvent="updateComplete" waitTarget="myFileSystemList"/> 
			</setup>
			<body>
				<AssertPropertyValue target="myFileSystemList" propertyName="canNavigateBack" value="false" />
			</body>
		</TestCase>
		
		<TestCase testID="FileSystemList_Property_canNavigateBack_aftersetting" keywords="[canNavigateBack, FileSystemList]">
			<setup>
				<RunCode code="whichOS()"/>
			 	<ResetComponent target="myFileSystemList" className="mx.controls::FileSystemList" waitEvent="updateComplete" waitTarget="myFileSystemList"/> 
				
				<DispatchKeyEvent keys="[TAB]" waitEvent="focusIn" waitTarget="myFileSystemList"/>
				 <DispatchMouseEvent type="mouseDown" localX="10" localY="10" target="myFileSystemList" />
			     
			     <DispatchMouseEvent type="mouseUp" localX="10" localY="10" target="myFileSystemList" />
				<DispatchKeyEvent keys="[ENTER]" waitEvent="directoryChange" waitTarget="myFileSystemList"/>
			</setup>
			<body>
				<AssertPropertyValue target="myFileSystemList" propertyName="canNavigateBack" value="true" />
			</body>
		</TestCase>

		<TestCase testID="FileSystemList_Property_canNavigateDown_Default" keywords="[canNavigateDown, FileSystemList]">
			<setup>
				<RunCode code="whichOS()"/>
				<ResetComponent target="myFileSystemList" className="mx.controls::FileSystemList" waitEvent="updateComplete" waitTarget="myFileSystemList"/> 
			</setup>
			<body>
				<AssertPropertyValue target="myFileSystemList" propertyName="canNavigateDown" value="false" />
			</body>
		</TestCase>

		<TestCase testID="FileSystemList_Property_canNavigateDown_aftersetting_1" keywords="[canNavigateDown, FileSystemList]">
			<setup>
				<RunCode code="whichOS()"/>
			 	<ResetComponent target="myFileSystemList" className="mx.controls::FileSystemList" waitEvent="updateComplete" waitTarget="myFileSystemList"/> 
				<DispatchKeyEvent keys="[TAB]" waitEvent="focusIn" waitTarget="myFileSystemList"/>
				<DispatchMouseEvent type="mouseDown" localX="10" localY="10" target="myFileSystemList" />		     
				<DispatchMouseEvent type="mouseUp" localX="10" localY="10" target="myFileSystemList" />
			</setup>
			<body>
				<AssertPropertyValue target="myFileSystemList" propertyName="canNavigateDown" value="true" />
			</body>
		</TestCase>

		<TestCase testID="FileSystemList_Property_canNavigateForward_Default" keywords="[canNavigateForward, FileSystemList]">
			<setup>
				<RunCode code="whichOS()"/>
			 	<ResetComponent target="myFileSystemList" className="mx.controls::FileSystemList" waitEvent="updateComplete" waitTarget="myFileSystemList"/> 
			</setup>
			<body>
				<AssertPropertyValue target="myFileSystemList" propertyName="canNavigateForward" value="false" />
			</body>
		</TestCase>

		<TestCase testID="FileSystemList_Property_canNavigateForward_aftersetting" keywords="[canNavigateForward, FileSystemList]">
			<setup>
				<RunCode code="whichOS()"/>
			 	<ResetComponent target="myFileSystemList" className="mx.controls::FileSystemList" waitEvent="updateComplete" waitTarget="myFileSystemList"/> 
				<DispatchKeyEvent keys="[TAB]" waitEvent="focusIn" waitTarget="myFileSystemList"/>
				<DispatchMouseEvent type="mouseDown" localX="10" localY="10" target="myFileSystemList" />
			     
				<DispatchMouseEvent type="mouseUp" localX="10" localY="10" target="myFileSystemList" />
				<DispatchKeyEvent keys="[ENTER]" waitEvent="directoryChange" waitTarget="myFileSystemList"/>								
			</setup>
			<body>
				<AssertPropertyValue target="myFileSystemList" propertyName="canNavigateForward" value="false" />
			</body>
		</TestCase>

		<TestCase testID="FileSystemList_Property_canNavigateUp_Default" keywords="[canNavigateUp, FileSystemList]">
			<setup>
				<RunCode code="whichOS()"/>
			 	<ResetComponent target="myFileSystemList" className="mx.controls::FileSystemList" waitEvent="updateComplete" waitTarget="myFileSystemList"/> 
			</setup>
			<body>
				<AssertPropertyValue target="myFileSystemList" propertyName="canNavigateUp" value="false" />
			</body>
		</TestCase>

		<TestCase testID="FileSystemList_Property_canNavigateUp_aftersetting_1" keywords="[canNavigateUp, FileSystemList]">
			<setup>
				<RunCode code="whichOS()"/>
			 	<ResetComponent target="myFileSystemList" className="mx.controls::FileSystemList" waitEvent="updateComplete" waitTarget="myFileSystemList"/> 
				<DispatchKeyEvent keys="[TAB]" waitEvent="focusIn" waitTarget="myFileSystemList"/>
				<DispatchMouseEvent type="mouseDown" localX="10" localY="10" target="myFileSystemList" />
				<DispatchMouseEvent type="mouseUp" localX="10" localY="10" target="myFileSystemList" />
			</setup>
			<body>
				<AssertPropertyValue target="myFileSystemList" propertyName="canNavigateUp" value="false" />
			</body>
		</TestCase>

		<TestCase testID="FileSystemList_Property_backHistory_Default" keywords="[backHistory, FileSystemList]">
			<setup>
				<RunCode code="whichOS()"/>
				<ResetComponent target="myFileSystemList" className="mx.controls::FileSystemList" waitEvent="updateComplete" waitTarget="myFileSystemList"/> 
			</setup>
			<body>
				<AssertPropertyValue target="myFileSystemList" propertyName="backHistory" value="" />
			</body>
		</TestCase>

		<TestCase testID="FileSystemList_Property_directory_set" keywords="[directory, FileSystemList]">
			<setup>
				<RunCode code="whichOS()"/>
			 	<ResetComponent target="myFileSystemList" className="mx.controls::FileSystemList" waitEvent="updateComplete" waitTarget="myFileSystemList"/> 
				<DispatchKeyEvent keys="[TAB]" waitEvent="focusIn" waitTarget="myFileSystemList"/>
				<DispatchMouseEvent type="mouseDown" localX="10" localY="10" target="myFileSystemList" />
			     
				<DispatchMouseEvent type="mouseUp" localX="10" localY="10" target="myFileSystemList" />
				<DispatchKeyEvent keys="[ENTER]" waitEvent="directoryChange" waitTarget="myFileSystemList"/>
			</setup>
			<body>
				<AssertMethodValue target="myFileSystemList" method="value=updateBackHis()" value="1"/>
			</body>
		</TestCase>

		<TestCase testID="FileSystemList_Property_directory_Default" keywords="[directory, FileSystemList]">
			<setup>
				<RunCode code="whichOS()"/>
			 	<ResetComponent target="myFileSystemList" className="mx.controls::FileSystemList" waitEvent="updateComplete" waitTarget="myFileSystemList"/> 
			</setup>
			<body>
				<AssertMethodValue target="myFileSystemList" method="value=checkcurrentpath()" value="Computer"/>
			</body>
		</TestCase>
			
		<TestCase testID="FileSystemList_Property_directory_set2_mac" keywords="[directory, FileSystemList]">
			<setup>
				<RunCode code="whichOS()"/>
				<ResetComponent target="myFileSystemList" className="mx.controls::FileSystemList" waitEvent="updateComplete" waitTarget="myFileSystemList"/> 
				<RunCode code="setDir()"/>
			</setup>
			<body>
				<AssertMethodValue target="myFileSystemList" method="value=checkcurrentpath()" value="System"/>
			</body>
		</TestCase>
		<TestCase testID="FileSystemList_Property_directory_set2_win" keywords="[directory, FileSystemList]">
			<setup>
				<RunCode code="whichOS()"/>
				<ResetComponent target="myFileSystemList" className="mx.controls::FileSystemList" waitEvent="updateComplete" waitTarget="myFileSystemList"/> 
				<RunCode code="setDir()"/>
			</setup>
			<body>
				<AssertMethodValue target="myFileSystemList" method="value=checkcurrentpath()" value="windows"/>
			</body>
		</TestCase>

		<TestCase testID="FileSystemList_Property_enumerationMode_Default" keywords="[enumerationMode, FileSystemList]">
			<setup>
				<RunCode code="whichOS()"/>
				<ResetComponent target="myFileSystemList" className="mx.controls::FileSystemList" waitEvent="updateComplete" waitTarget="myFileSystemList"/> 
			</setup>
			<body>
				<AssertPropertyValue target="myFileSystemList" propertyName="enumerationMode" value="directoriesFirst" />
			</body>
		</TestCase>

		<TestCase testID="FileSystemList_Property_enumerationMode_set" keywords="[enumerationMode, FileSystemList]">
			<setup>
				<RunCode code="whichOS()"/>
				<ResetComponent target="myFileSystemList" className="mx.controls::FileSystemList" waitEvent="updateComplete" waitTarget="myFileSystemList"/> 
				<RunCode code="setDir()"/>
				<SetProperty target="myFileSystemList" propertyName="enumerationMode" value="filesOnly" waitEvent="updateComplete" waitTarget="myFileSystemList"/>				
				
						
			</setup>
			<body>
				<AssertPropertyValue target="myFileSystemList" propertyName="enumerationMode" value="filesOnly" />
			</body>
		</TestCase>


		<TestCase testID="FileSystemList_Property_extensions_Default" keywords="[extensions, FileSystemList]">
			<setup>
				<RunCode code="whichOS()"/>
			 	<ResetComponent target="myFileSystemList" className="mx.controls::FileSystemList" waitEvent="updateComplete" waitTarget="myFileSystemList"/> 
				<RunCode code="setDir()"/>
				<SetProperty target="myFileSystemList" propertyName="enumerationMode" value="filesOnly" waitEvent="updateComplete" waitTarget="myFileSystemList"/>				
			</setup>
			<body>
				<AssertPropertyValue target="myFileSystemList" propertyName="extensions" value="null" />
			</body>
		</TestCase>

		<TestCase testID="FileSystemList_Property_extensions_set" keywords="[extensions, FileSystemList]">
			<setup>
				<RunCode code="whichOS()"/>
				<ResetComponent target="myFileSystemList" className="mx.controls::FileSystemList" waitEvent="updateComplete" waitTarget="myFileSystemList"/> 
				<RunCode code="setVal()"/>
				<SetProperty target="myFileSystemList" propertyName="enumerationMode" value="filesOnly" waitEvent="updateComplete" waitTarget="myFileSystemList"/>				
			</setup>
			<body>
				<AssertPropertyValue target="myFileSystemList" propertyName="extensions" value=".txt" />
			</body>
		</TestCase>


		<TestCase testID="FileSystemList_Property_showIcons_Default" keywords="[showIcons, FileSystemList]">
			<setup>
				<RunCode code="whichOS()"/>
				<ResetComponent target="myFileSystemList" className="mx.controls::FileSystemList" waitEvent="updateComplete" waitTarget="myFileSystemList"/> 
			</setup>
			<body>
				<AssertPropertyValue target="myFileSystemList" propertyName="showIcons" value="true" />
			</body>
		</TestCase>

		<TestCase testID="FileSystemList_Property_showIcons_Set" keywords="[showIcons, FileSystemList]">
			<setup>
				<RunCode code="whichOS()"/>
				<ResetComponent target="myFileSystemList" className="mx.controls::FileSystemList" waitEvent="updateComplete" waitTarget="myFileSystemList"/> 
				<SetProperty target="myFileSystemList" propertyName="showIcons" value="false" waitEvent="updateComplete" waitTarget="myFileSystemList"/>				
			</setup>
			<body>
				<AssertPropertyValue target="myFileSystemList" propertyName="showIcons" value="false" />
			</body>
		</TestCase>

		<TestCase testID="FileSystemList_Property_showExtensions_Default" keywords="[showExtensions, FileSystemList]">
			<setup>
				<RunCode code="whichOS()"/>
			 	<ResetComponent target="myFileSystemList" className="mx.controls::FileSystemList" waitEvent="updateComplete" waitTarget="myFileSystemList"/> 
			</setup>
			<body>
				<AssertPropertyValue target="myFileSystemList" propertyName="showExtensions" value="true" />
			</body>
		</TestCase>

		<TestCase testID="FileSystemList_Property_showExtensions_Set" keywords="[showExtensions, FileSystemList]">
			<setup>
				<RunCode code="whichOS()"/>
				<ResetComponent target="myFileSystemList" className="mx.controls::FileSystemList" waitEvent="updateComplete" waitTarget="myFileSystemList"/> 
				<SetProperty target="myFileSystemList" propertyName="showExtensions" value="false" waitEvent="updateComplete" waitTarget="myFileSystemList"/>				
			</setup>
			<body>
				<AssertPropertyValue target="myFileSystemList" propertyName="showExtensions" value="false" />
			</body>
		</TestCase>

		<TestCase testID="FileSystemList_Property_showHidden_Default" keywords="[showHidden, FileSystemList]">
			<setup>
				<RunCode code="whichOS()"/>
				<ResetComponent target="myFileSystemList" className="mx.controls::FileSystemList" waitEvent="updateComplete" waitTarget="myFileSystemList"/> 
			</setup>
			<body>
				<AssertPropertyValue target="myFileSystemList" propertyName="showHidden" value="false" />
			</body>
		</TestCase>

		<TestCase testID="FileSystemList_Property_showHidden_Set" keywords="[showHidden, FileSystemList]">
			<setup>
				<RunCode code="whichOS()"/>
				<ResetComponent target="myFileSystemList" className="mx.controls::FileSystemList" waitEvent="updateComplete" waitTarget="myFileSystemList"/> 
				<SetProperty target="myFileSystemList" propertyName="showHidden" value="true" waitEvent="updateComplete" waitTarget="myFileSystemList"/>				
			</setup>
			<body>
				<AssertPropertyValue target="myFileSystemList" propertyName="showHidden" value="true" />
			</body>
		</TestCase>
		
	</testCases>

</UnitTester>
