Alertを操作するユーティリティクラス

FlexUnitのflexUnitUIRunnerでテストする際に役に立ちそうなユーティリティクラスを作ってみた。
名前のつけ方にセンスがないのはご愛嬌…。

package tmftake.util {
    import mx.controls.Alert;
    import mx.core.Application;
    import mx.core.IFlexDisplayObject;
    import mx.events.CloseEvent;
    import mx.managers.ISystemManager;
    import mx.managers.PopUpManager;

    public class AlertTestUtil {

        /**
         * アラートのボタン押下
         *
         * 最後に表示したアラートを、引数で指定した種類のボタンを押下して閉じる。
         *
         * @param flags 押下するボタン。 (Alert.OK|Alert.Cancel|Alert.YES|Alert.NO)
         */
        public static function closeAlert(flags:uint = 0x4 /* Alert.OK */):void {
            var alert:Alert = AlertTestUtil.getAlert();
            if (alert != null) {
                alert.dispatchEvent(new CloseEvent(CloseEvent.CLOSE, false, false, flags));
                PopUpManager.removePopUp(alert);
            }
        }

        /**
         * アラートの表示文字列取得
         *
         * 最後に表示したアラートの表示文字列を取得する。
         */
        public static function getAlertText():String {
            var text:String = "";
            var alert:Alert = AlertTestUtil.getAlert();
            if (alert != null) {
                text = alert.text;
            }
            return text;
        }

        /**
         * アラートの取得
         *
         * 最後に表示したアラートのオブジェクトを取得する。
         */
        public static function getAlert():Alert {
            var systemManager:ISystemManager = Application.application.systemManager;
            var len:int = systemManager.rawChildren.numChildren;
            var alert:Alert = null;

            for (var i:int = len - 1; i > -1; i--) {
                var obj:IFlexDisplayObject = systemManager.rawChildren.getChildAt(i) as IFlexDisplayObject;
                if (obj is Alert) {
                    alert = obj as Alert;
                }
            }
            return alert;
        }

        /**
         * アラートの全除去
         */
        public static function clearAllAlert():Alert {
            var systemManager:ISystemManager = Application.application.systemManager;
            var len:int = systemManager.rawChildren.numChildren;

            for (var i:int = len - 1; i > -1; i--) {
                var obj:IFlexDisplayObject = systemManager.rawChildren.getChildAt(i) as IFlexDisplayObject;
                if (obj is Alert) {
                    PopUpManager.removePopUp(obj);
                }
            }
        }
    }
}