Hi Folks,

I've been beating my head against a problem and I'm hoping someone out there
can help.  I'm writing some test cases for our Flex application using Flex
Unit 4 (RC 2) and we are currently building with the Flex 3.2 SDK in Flash
Builder 4.

The problem I'm seeing is when I add UI elements to the UIImpersonator they
never finish setting up (i.e. their creation complete event is never
triggered, never initialized, etc.).

Per the directions at
http://docs.flexunit.org/index.php?title=UIImpersonator I've set up my test
case instantiating the component in the [Before], added the Async listener
on the creation complete, etc.  In fact, just to make sure I didn't have a
typo I took their complete example and pasted it in as a test case.  No
dice.

Source code I'm using below the description here.

In every instance I get a 'Timeout occurred before expected event' error.

Just to troubleshoot I tried adding the UI element as a child to the
Application instead of the UIImpersonator (sorry to make your spine shiver,
Douglas.  It's just for troubleshooting, honest!).  That worked fine so I
know the Async proceedOnEvent is working fine.

I also tried just removing the Async.proceedOnEvent but in that case the
text input box is never initialized.

Searching online some folks said that the problem may be with the
VisualTestEnvironmentBuilder (which apparently UIImpersonator uses) but I
haven't found anyone discussing how to _fix_ it.

Any suggestions or help are appreciated.  Thanks for the help.

-Marty

TestApp.mxml:
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml";
xmlns:adobe="http://www.adobe.com/2009/flexUnitUIRunner";
xmlns:listeners="org.flexunit.listeners.*"
creationComplete="runTests()" >
<mx:Script>
import org.flexunit.runner.FlexUnitCore;
import BasicSuite;
 public function runTests():void
{
var core:FlexUnitCore = new FlexUnitCore();
core.addListener(runner);
core.run(BasicSuite);
}
</mx:Script>
<adobe:TestRunnerBase id="runner" />
</mx:Application>

BasicSuite.as
{
[Suite]
[RunWith("org.flexunit.runners.Suite")]
public class BasicSuite
{
//declare (but don't instantiate) a variable for each unit test class to run
in this suite
public var test1:tests.ExpandingTextInputTest;
}
}

tests.ExpandingTextInputTest:
package tests
{
import mx.controls.Alert;
import mx.controls.TextInput;
import mx.core.Application;
import mx.events.FlexEvent;
 import org.flexunit.Assert;
import org.flexunit.async.Async;
import org.fluint.uiImpersonation.UIImpersonator;

public class ExpandingTextInputTest
{
private var ti:TextInput;
 /**
 * initialize the text input and add it to the UIImpersonator
 */
[Before(async, ui)]
public function setUp():void
{
ti = new TextInput();
Async.proceedOnEvent(this, ti, FlexEvent.CREATION_COMPLETE, 1000);
UIImpersonator.addChild(ti);
}
 /**
 * remove the input from the layout and null out the reference to ensure the
object is destroyed.
 */
[After(async, ui)]
public function tearDown():void
{
UIImpersonator.removeChild(ti);
ti = null;
}
 /**
 * test adding only a couple of characters.
 */
[Test(async,ui)]
public function testAddingShortText():void
{
Alert.show("In testAddingShortText.  Is TI initialized? " + ti.initialized);

}
     }
}

Reply via email to