Hi,
I just read the Wiki page about Fluint Sequences at http://docs.flexunit.org/index.php?title=Sequences#Sequences_from_Fluint. I really would like to use sequences as it seems a great way to test flows in UI components.
So I created a first test based on the examples in the wiki. Unfortunately it does not work as I hoped.
The testcase:
package flex.filter.eventFilter.view
{
import flash.events.Event;
import mx.events.FlexEvent;
import net.digitalprimates.fluint.tests.TestCase;
import org.fluint.sequence.SequenceRunner;
import org.fluint.sequence.SequenceSetter;
import org.fluint.sequence.SequenceWaiter;
public class RelativeDateInputFluintSequence extends TestCase
{
private var form:RelativeDateInput;
[Before(async)]
override protected function setUp():void
{
form = new RelativeDateInput();
form.addEventListener(FlexEvent.CREATION_COMPLETE, asyncHandler (pendUntilComplete, 100), false, 0, true);
addChild(form);
}
[After(async)]
override protected function tearDown():void
{
removeChild(form);
form = null;
}
[Test(async)]
public function testForm():void
{
var passThroughData:Object = new Object();
passThroughData.value = 5;
passThroughData.selectedUnit = "hours";
var sequence:SequenceRunner = new SequenceRunner(this);
// Set time in stepper
sequence.addStep (new SequenceSetter(form.timeStepper, {value:passThroughData.value}));
sequence.addStep(new SequenceWaiter(form.timeStepper, FlexEvent.VALUE_COMMIT, 100));
// Set units
sequence.addStep (new SequenceSetter(form.unitCombo, {selectedItem:passThroughData.selectedUnit}));
sequence.addStep(new SequenceWaiter(form.timeStepper, FlexEvent.VALUE_COMMIT, 100));
sequence.addAssertHandler(handleFiveHoursSet, passThroughData);
sequence.run();
}
private function handleFiveHoursSet(event:Event, passThroughData:Object):void
{
assertEquals(passThroughData.value * 60 * 60000, form.milliseconds);
}
}
}
Note that I did not add the test annotations at first as they were ommitted in the Wiki. I added these later after I got the error below.
When sequence.run() is executed I get this error:
Cannot add asynchronous functionality to methods defined by Test,Before or After that are not marked async
Error: Cannot add asynchronous functionality to methods defined by Test,Before or After that are not marked async
at org.flexunit.async::AsyncLocator$/getCallableForTest()[C:\Users\dmoore\Documents\_Product ion\Flex Unit 4\GIT\FlexUnit4\src\org\flexunit\async\AsyncLocator.as:82]
at org.fluint.sequence::SequenceWaiter/setupListeners()[C:\Users\dmoore\Documents\_Productio n\Flex Unit 4\GIT\FlexUnit4\src\org\fluint\sequence\SequenceWaiter.as:100]
at org.fluint.sequence::SequenceRunner/continueSequence()[C:\Users\dmoore\Documents\_Product ion\Flex Unit 4\GIT\FlexUnit4\src\org\fluint\sequence\SequenceRunner.as:177]
at org.fluint.sequence::SequenceRunner/run()[C:\Users\dmoore\Documents\_Production\Flex Unit 4\GIT\FlexUnit4\src\org\fluint\sequence\SequenceRunner.as:124]
at com.hp.opr.flex.filter.eventFilter.view::RelativeDateInputFluintSequence/testForm()[/home /cschlipf/data/dev/svn/opr/components/common/flex/lib/opr-fx-common/src/test/flex/com/hp/o pr/flex/filter/eventFilter/view/RelativeDateInputFluintSequence.as:56]
at net.digitalprimates.fluint.tests::TestCase/protect()[C:\Users\mlabriola\Documents\workspa ces\net\digitalprimates\opensource\flexunit\fluint\fluint\src\main\flex\net\digitalprimate s\fluint\tests\TestCase.as:315]
at Function/http://adobe.com/AS3/2006/builtin::apply()
at net.digitalprimates.fluint.tests::TestCase/executeMethodWhileProtected()[C:\Users\mlabrio la\Documents\workspaces\net\digitalprimates\opensource\flexunit\fluint\fluint\src\main\fle x\net\digitalprimates\fluint\tests\TestCase.as:370]
at net.digitalprimates.fluint.tests::TestCase/runTestMethod()[C:\Users\mlabriola\Documents\w orkspaces\net\digitalprimates\opensource\flexunit\fluint\fluint\src\main\flex\net\digitalp rimates\fluint\tests\TestCase.as:160]
at net.digitalprimates.fluint.ui::TestRunner/runTestMethod()[C:\Users\mlabriola\Documents\wo rkspaces\net\digitalprimates\opensource\flexunit\fluint\fluint\src\main\flex\net\digitalpr imates\fluint\ui\TestRunner.as:361]
at net.digitalprimates.fluint.ui::TestRunner/handleTestProcess()[C:\Users\mlabriola\Document s\workspaces\net\digitalprimates\opensource\flexunit\fluint\fluint\src\main\flex\net\digit alprimates\fluint\ui\TestRunner.as:393]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at net.digitalprimates.fluint.tests::TestCase/handleAsyncEventFired()[C:\Users\mlabriola\Doc uments\workspaces\net\digitalprimates\opensource\flexunit\fluint\fluint\src\main\flex\net\ digitalprimates\fluint\tests\TestCase.as:267]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at net.digitalprimates.fluint.async::AsyncHandler/handleEvent()[C:\Users\mlabriola\Documents \workspaces\net\digitalprimates\opensource\flexunit\fluint\fluint\src\main\flex\net\digita lprimates\fluint\async\AsyncHandler.as:166]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at mx.core::UIComponent/dispatchEvent()[C:\autobuild\3.5.0\frameworks\projects\framework\src \mx\core\UIComponent.as:9440]
at mx.core::UIComponent/set initialized()[C:\autobuild\3.5.0\frameworks\projects\framework\src\mx\core\UIComponent.as :1168]
at mx.managers::LayoutManager/doPhasedInstantiation()[C:\autobuild\3.5.0\frameworks\projects \framework\src\mx\managers\LayoutManager.as:718]
at Function/http://adobe.com/AS3/2006/builtin::apply()
at mx.core::UIComponent/callLaterDispatcher2()[C:\autobuild\3.5.0\frameworks\projects\framew ork\src\mx\core\UIComponent.as:8744]
at mx.core::UIComponent/callLaterDispatcher()[C:\autobuild\3.5.0\frameworks\projects\framewo rk\src\mx\core\UIComponent.as:8684]
So my guess is that the SequenceRunner is not fully compatible with FlexUnit 4 as asyncronous calls that are internal to the SequenceRunner are not marked as async.
Best regards,
Carsten