<?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="browser/resources/Preloader/Integration/"  xmlns:mx="http://www.adobe.com/2006/mxml" xmlns="*" testSWF="PreloaderApp2.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 mx.resources.ResourceManager;

	]]></mx:Script>



<!-- 

    For more information, see PreloaderApp1.mxml.

-->



	<testCases>



		<TestCase frequency="all" testID="Preloader_params2_resourceManagerLocaleChain" description="Confirm that the localeChain was correctly set by the time preinitialize occurred." keywords="[resources,Preloader,localeChain]">

			<body>

                <AssertMethodValue method="value=ResourceManager.getInstance().localeChain" value="fr_FR" />

				<Pause timeout="1"/>

			</body>

		</TestCase>



		<TestCase frequency="all" testID="Preloader_params2_appParameterLocaleChain" description="Confirm that application.parameters.localeChain was available when preinitialize occurred." keywords="[resources,Preloader,application.parameters.localeChain]">

			<body>

                <AssertMethodValue method="value=application.appParamLocaleChain" value="fr_FR" />

				<Pause timeout="1"/>

			</body>

		</TestCase>



		<TestCase frequency="all" testID="Preloader_params2_appParameterURLs" description="Confirm that application.parameters.resourceModuleURLs was available when preinitialize occurred." keywords="[resources,Preloader,application.parameters.resourceModuleURLs]">

			<body>

                <AssertMethodValue method="value=application.appParamURLs" value="Assets/resources/framework/frFrameworkResources.swf" />

				<Pause timeout="1"/>

			</body>

		</TestCase>



		<TestCase frequency="all" testID="Preloader_params2_accessResources" description="Confirm that resources can really be accessed after specifying parameters in flashvars." keywords="[resources,Preloader,application.parameters.localeChain,application.parameters.resourceModuleURLs]">

			<body>

                <AssertPropertyValue target="lbl1" propertyName="text" value="French View Source" />

				<Pause timeout="1"/>

			</body>

		</TestCase>



	</testCases>

</UnitTester>

