If you have a Flash Builder Standard license, chances are good that you’re lamenting the lack of FlexUnit support. You can run your tests from the command line but then you lose debugging and an integrated results display. You could add a second Application to your project to embed a test runner but due to an annoying bug in Flash Builder, this application file needs to be in your main source folder or else it can’t be added as a run configuration. I set out to find a new solution with the following in mind:
- I want all test-related code to stay in the test sources folder. (src/test/flex since I’m using Maven)
- I want a visual test runner to display which tests/failed passed, give timing information, stack traces, etc.
- The tests must work as-is when committed and run through flexmojos on a CI machine (e.g. Jenkins)
- Debugging support through Flash Builder must be available when running the tests locally.
Anyone who uses actionscript reflection in non-trivial cases will eventually run into this problem: The is operator only works on instances. For example:
var obj:Object = new Panel();
trace(obj is Panel); //true
trace(obj is UIComponent); //true
trace(obj is Object); //true
trace(obj is IInvalidating); //true
trace(obj is CheckBox); //false
var cls:Class = Panel;
trace(cls is Panel); //false
trace(cls is UIComponent); //false
trace(cls is Object); //true
trace(cls is IInvalidating); //false
trace(cls is CheckBox); //false
This behavior is expected, but not very useful. Since
cls is actually an instance of the Class class, we are actually checking whether the Class class inherits from each of those 5 things. Since Class only extends Object, that’s the only one that’s true.
What happens if you only have a Class object and you need to check if it’s the subclass of another Class?
The Flex LineChart control has a feature to display pop-up “data tips” when the user hovers near a data point in the chart. These are basically just tooltips with information about the x and y values at the given point. Unfortunately, Flex offers little in the way of customizing when and how these data tips display. For example, the following is a LineChart using the horizontal-step style:
In a horizontal step chart, a line is drawn horizontally to the right of each data point, and vertically at each change in value. The circles around each data point indicate the area where hovering the mouse would produce a data tip. No other areas on the chart produce a data tip and this can be slightly confusing. The user might wonder why they can’t hover at other bends in the line to see the current value. Other users might want to simply hover anywhere along the line.