<?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="resources/ResourceManager/Events/"  xmlns:mx="http://www.adobe.com/2006/mxml" xmlns="*" testSWF="ResourceManagerApp.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;
        import mx.resources.ResourceBundle;
        import mx.events.ResourceEvent;
        
        public var ed1:IEventDispatcher;
        public var ed2:IEventDispatcher;
        public var ed3:IEventDispatcher;
        public var ed4:IEventDispatcher;
        public var ed5:IEventDispatcher;
        
        private function clearAllLocaleData():void{            
            
            ResourceManager.getInstance().localeChain = [];
            
            var numLocales:int = ResourceManager.getInstance().getLocales().length;
            
            for(var i:int = numLocales; i > 0; --i){
                ResourceManager.getInstance().removeResourceBundlesForLocale(ResourceManager.getInstance().getLocales()[i-1]);
            }
        }

        private function handleErrorEvent(e:ResourceEvent):void{trace("handleErrorEvent: " + e.toString())}
        private function handleProgressEvent(e:ResourceEvent):void{trace("handleProgressEvent: " + e.toString())}
        private function handleCompleteEvent(e:ResourceEvent):void{trace("handleCompleteEvent: " + e.toString())}
        
    ]]></mx:Script>


<!-- 
General approach:
    <setup>
        - Remove all locales.
        - Clear the locale chain.
        - Verify that there are no resources left.
    </setup>
    <body>
        - Initiate the loading
        - Set up event listeners for the returned IEventDispatcher.
        - Make sure events do (or do not) occur.
    </body>        
-->

    <testCases>

        <!--
            It is a bug to wait for 2 error events instead of just one.  Bug 203857. Excluding.
        -->
        <TestCase frequency="all" testID="RTL_Event_ResourceManagerErrorEvent_ExactlyOne" description="Confirm that loadResourceModule triggers an error event when the parameter is invalid." keywords="[Runtime Localization,loadResourceModule]" >
            <setup>
                <RunCode code="clearAllLocaleData()" />
                <AssertMethodValue method="value=ResourceManager.getInstance().getLocales().length" value="0" />
                <AssertMethodValue method="value=ResourceManager.getInstance().localeChain.length" value="0" />
            </setup>
            <body>
                <RunCode code="ed1=ResourceManager.getInstance().loadResourceModule('ThisDoesNotExist.swf')" />
                <RunCode code="ed1.addEventListener(ResourceEvent.ERROR, handleErrorEvent)" />
                <AssertEvent target="script:ed1" eventName="error" eventClass="mx.events::ResourceEvent" numExpectedEvents="1" />
            </body>
        </TestCase>

        <!--
            This is just like the above test, except that we don't care how many error events occur.  That way we can exclude
            the above test yet still confirm that an error event will get dispatched.
        -->
        <TestCase frequency="all" testID="RTL_Event_ResourceManagerErrorEvent_AtLeastOne" description="Confirm that loadResourceModule triggers an error event when the parameter is invalid." keywords="[Runtime Localization,loadResourceModule]" >
            <setup>
                <RunCode code="clearAllLocaleData()" />
                <AssertMethodValue method="value=ResourceManager.getInstance().getLocales().length" value="0" />
                <AssertMethodValue method="value=ResourceManager.getInstance().localeChain.length" value="0" />
            </setup>
            <body>
                <RunCode code="ed1=ResourceManager.getInstance().loadResourceModule('ThisDoesNotExist.swf')" />
                <RunCode code="ed1.addEventListener(ResourceEvent.ERROR, handleErrorEvent)" />
                <AssertEvent target="script:ed1" eventName="error" eventClass="mx.events::ResourceEvent" numExpectedEvents="-1" />
            </body>
        </TestCase>

        <TestCase frequency="all" testID="RTL_Event_ResourceManagerProgressEvent" description="Confirm that loadResourceModule triggers a progress event when loading." keywords="[Runtime Localization,loadResourceModule]" >
            <setup>
                <RunCode code="clearAllLocaleData()" />
                <AssertMethodValue method="value=ResourceManager.getInstance().getLocales().length" value="0" />
                <AssertMethodValue method="value=ResourceManager.getInstance().localeChain.length" value="0" />
            </setup>
            <body>
                <RunCode code="ed2=ResourceManager.getInstance().loadResourceModule('assets/bundles/framework/resMod_events_001.swf')" />
                <RunCode code="ed2.addEventListener(ResourceEvent.PROGRESS, handleProgressEvent)" />
                <RunCode code="ed2.addEventListener(ResourceEvent.COMPLETE, handleCompleteEvent)" />
                <AssertEvent target="script:ed2" eventName="progress" eventClass="mx.events::ResourceEvent" numExpectedEvents="-1" />
                <AssertEvent target="script:ed2" eventName="complete" eventClass="mx.events::ResourceEvent" />
            </body>
        </TestCase>

        <TestCase frequency="all" testID="RTL_Event_ResourceManagerCompleteEvent" description="Confirm that loadResourceModule triggers a complete event when it is done loading." keywords="[Runtime Localization,loadResourceModule]" >
            <setup>
                <RunCode code="clearAllLocaleData()" />
                <AssertMethodValue method="value=ResourceManager.getInstance().getLocales().length" value="0" />
                <AssertMethodValue method="value=ResourceManager.getInstance().localeChain.length" value="0" />
            </setup>
            <body>
                <RunCode code="ed3=ResourceManager.getInstance().loadResourceModule('assets/bundles/framework/resMod_events_002.swf')" />
                <RunCode code="ed3.addEventListener(ResourceEvent.COMPLETE, handleCompleteEvent)" />
                <AssertEvent target="script:ed3" eventName="complete" eventClass="mx.events::ResourceEvent" />
            </body>
        </TestCase>

        <TestCase frequency="all" testID="RTL_Event_ResourceManagerNoCompleteEventWithError" description="Confirm that loadResourceModule() does not trigger a complete event when there is an error." keywords="[Runtime Localization,loadResourceModule]" >
            <setup>
                <RunCode code="clearAllLocaleData()" />
                <AssertMethodValue method="value=ResourceManager.getInstance().getLocales().length" value="0" />
                <AssertMethodValue method="value=ResourceManager.getInstance().localeChain.length" value="0" />
             </setup>
             <body>
                 <RunCode code="ed4=ResourceManager.getInstance().loadResourceModule('ThisDoesNotExist.swf')" />
                 <RunCode code="ed4.addEventListener(ResourceEvent.COMPLETE, handleCompleteEvent)" />
                 <RunCode code="ed4.addEventListener(ResourceEvent.ERROR, handleErrorEvent)" />
                 <AssertNoEvent target="script:ed4" eventName="complete" eventClass="mx.events::ResourceEvent" />
             </body>
        </TestCase>

        <TestCase frequency="all" testID="RTL_Event_ResourceManagerNoErrorEventWithComplete" description="Confirm that loadResourceModule() does not trigger an error event when loading is successful." keywords="[Runtime Localization,loadResourceModule]" >
            <setup>
                <RunCode code="clearAllLocaleData()" />
                <AssertMethodValue method="value=ResourceManager.getInstance().getLocales().length" value="0" />
                <AssertMethodValue method="value=ResourceManager.getInstance().localeChain.length" value="0" />
             </setup>
             <body>
                 <RunCode code="ed5=ResourceManager.getInstance().loadResourceModule('assets/bundles/framework/resMod_events_003.swf')" />
                 <RunCode code="ed5.addEventListener(ResourceEvent.COMPLETE, handleCompleteEvent)" />
                 <RunCode code="ed5.addEventListener(ResourceEvent.ERROR, handleErrorEvent)" />
                 <AssertEvent target="script:ed5" eventName="complete" eventClass="mx.events::ResourceEvent" />
                 <AssertNoEvent target="script:ed5" eventName="error" eventClass="mx.events::ResourceEvent" />
             </body>
        </TestCase>
    </testCases>
</UnitTester>
