[地址:http://opensource.adobe.com/wiki/display/flexunit/Downloads] 并在应用中加入库文件:
目前版本为0.9, 下载完解压缩之后, 在Flex或AIR工程的Flex Build Path的Library Path中加入FlexUnit.swc库文件.
待测试的单元:
package { public class SimpleConverter { public function SimpleConverter() { } public function convertToString(i:int):String { var s:String = "错误!" if(i == 1) { s = "是"; }else { s = "否"; } return s; } } }
测试用例:
package { import flexunit.framework.Assert; import flexunit.framework.TestCase; public class TestSimpleConverter extends TestCase { public function TestSimpleConverter(methodName:String=null) { super(methodName); } /** * 测试用例 */ public function testSimpleConverter():void { var sc:SimpleConverter = new SimpleConverter(); var s:String = sc.convertToString(1); Assert.assertEquals(sc.convertToString(1), "是"); } } }
import flexunit.framework.TestSuite; private function onCreateComplete():void { var ts:TestSuite = new TestSuite(); ts.addTest(new TestSimpleConverter("testSimpleConverter")); testRunner.test = ts; testRunner.startTest(); }
在没有使用ASDoc之前, 我的注释总是乱七八糟, 并且胡说八道. 该讲的没有讲清楚, 废话比代码还多. 自从抱着试试看的态度用了一下ASDoc, 俺决定认真参照公司的代码规范, 认真规范下俺不曾被规范的注释.
ActionScript注释生成工具很多, 但俺们就使用ASDoc.
常用的注释:
@param
@return
@throws
@see
如:
/** * 解析给定的I18N语言字符串, 并通过fieldStringToLocalizationItem将之转换为LocalizationItem对象,放入到ArrayCollection中. * @example 处理里一串I18N语言字符串 * * stringToAC('{zh=简体中文}{zh_tw="繁体中文"}', false); * * @param s:String 待处理的字符串 * @param strict:Boolean 是否采用严格机制来处理, 默认为ture,意为如果字符串不合要求则报错; 可指定为False, 忽略错误,完成操作. * @return 处理完后包含有LocalizationItem的ArrayCollection; 如果制定的字串为NULL,则返回一个空的ArrayCollection; * @throws Error 如果strict为true,在检测到字符串不合要求时会throw Error. * @see #fieldStringToLocalizationItem() */ public static function stringToLocalizationItems(s:String, strict:Boolean = true):ArrayCollection { .... }
[这个文档写的很粗糙] 经过ASDoc生成后的文档如下:
当需要see顶级类中的函数时
@see Array#pop(); (Method)
@see Array#length; (Property)
需要see本类某函数时,如需要see下本类的 fieldStringToLocalizationItem(fieldString:String, strict:Boolean = true)函数, 则:
@see #fieldStringToLocalizationItem().
关于@see的详细介绍: http://livedocs.adobe.com/flex/3/html/help.html?content=asdoc_7.html#188433
不足之处就是开发工具对注释的支持实在是不敢恭维.
-source-path, 该path指明了源代码存放的位置
-doc-classes, 需要生成目录的类 , 在使用该变量之前必须已经声明-source-path;
如: asdoc -source-path . -doc-classes comps.GraphingWidget comps.GraphingWidgetTwo 则意味着生成当前目录下,comps\GraphingWidget .as 与comps\GraphingWidgetTwo.as的文档
-doc-sources: 指定某目录, 生成该目录及其子目录下所有.as文件的注释. 可以单独直接使用,也可以配合使用-source-path. 如:
doc-sources E:\\eclipse-jee-europa-fall2-win32_FB3\\eclipse\\workspace\\AIRTest\\com\\insprise
或配合使用:
-doc-sources com\\insprise
-source-path E:\\eclipse-jee-europa-fall2-win32_FB3\\eclipse\\workspace\\AIRTest\\com\\insprise
其他信息基本上都是无关紧要不痛不痒的一看明白.
可参照:http://liguoliang.com/2008/10/280/
在所在工程中新建一个properties文件,用以保存相关配置, 同时建立一个bulid.xml, 用以提供ANT配置文件.
1: 为便于管理与配置, 将ASDoc的参数放置于一个properties文件中, 在本例中我们取名叫做: asdoc.properties
含如下信息:
FLEX_HOME = E:\\eclipse-jee-europa-fall2-win32_FB3\\eclipse\\FBPlug-in301\\sdks\\3.1.0
asdoc.exe = E:\\eclipse-jee-europa-fall2-win32_FB3\\eclipse\\FBPlug-in301\\sdks\\3.1.0\\bin\\asdoc.exe
dir.docSource = com\\insprise\\localizationeditor
dir.src = .
dir.output = E:\\eclipse-jee-europa-fall2-win32_FB3\\eclipse\\workspace\\AIRTest\\doc
main.title = Test
window.title = test
footer = Insprise Software
以上提供了ASDoc的路径, 源文件的目录, 文档输出目录, 以及文档的网页标题, 文档内标题, 文档页脚等信息.
2: Build.xml配置: [因代码高亮代码有误,导致bulid.xml显示有误,请参照网页源代码自行修正]
ANT运行build.xml之后,将会自动生成文档到输出目录.
ASDoc具体的参数配置可参见:http://liguoliang.com/2008/10/286/
当ANT编译成功后,会出现如下提示[这个是在Eclipse中使用ANT编译后的输出信息]:
Buildfile: E:\eclipse-jee-europa-fall2-win32_FB3\eclipse\workspace\AIRTest\src\build.xml
clean_Old_Docs:
[delete] Deleting directory E:\eclipse-jee-europa-fall2-win32_FB3\eclipse\workspace\AIRTest\doc
[mkdir] Created dir: E:\eclipse-jee-europa-fall2-win32_FB3\eclipse\workspace\AIRTest\doc
create_Docs:
[exec] Loading configuration file E:\eclipse-jee-europa-fall2-win32_FB3\eclipse\FBPlug-in301\sdks\3.1.0\frameworks\flex-config.xml
[exec] Documentation was created in E:\eclipse-jee-europa-fall2-win32_FB3\eclipse\workspace\AIRTest\doc\
main:
BUILD SUCCESSFUL
Total time: 26 seconds
与窗口一样, 在一个AIR应用中, 菜单也是不可或缺的.
虽然在AIR中菜单有多种实现方式, 但是所有的Menu都是相同的,只是其实现方式不同而已,因此, 我们建立一个菜单, 使用不同的方式实现:
var menuFile:NativeMenu = new NativeMenu(); //如果需要在选择save时进行处理,则监听Event.SELECT事件, 如:save.addEventListener var save:NativeMenuItem = new NativeMenuItem("Save"); var close:NativeMenuItem = new NativeMenuItem("Close"); menuFile.items = [save, close];
在苹果里叫做application menus, 不过本质都是相同的NativeMenu. 没有苹果机, 只说说Windows下的Window Menus. 当然也可以检查系统是否支持NativeMenu,或是application menus, 如:
if(NativeWindow.supportsMenu) ;
注意: 如果要在窗口中使用Window Menus , 他的配置文件或属性中systemChrome必须设置为"standard",否则将在编译时发生错误.
Window Menus的实现:
if(NativeWindow.supportsMenu) { //检测是否支持Window menu var mainMenu:NativeMenu = new NativeMenu(); mainMenu.addSubmenu(menuFile,"File"); //加入子菜单 nativeWindow.menu = mainMenu; //将菜单加入到程序中. }
效果:
我们可以给AIR程序中的Flash或基于Flash的对象设置Context Menu. 注意:
1. 在AIR中, Context Menu是 NativeMenu的实例, 而在Web应用中[Flex], 它是ContextMenu的实例
2. Context Menu可以在AIR应用之上或超出其范围显示. 它是系统级别的.
Context Menu的实现:
buttonOpen.contextMenu = menuFile;
效果:
你可以通过编程方式在任何时候使用Pop-Up Menus, 一般情况下,在用户按下某个键, 或是点击鼠标后弹出Pop-UpMenus. 不论是何种方式, 只需要运行NativeMenu实例的display()方法,将Pop-Up Menu显示便可.
监听textInput的右键Down事件:
textInput.addEventListener(MouseEvent.RIGHT_MOUSE_DOWN, onTextInputClicked);
该事件的响应函数,将会阻止在textInput中右键的默认菜单, 将其菜单换做上面我们定义的menuFile. 该响应函数如下:
private function onTextInputClicked(e:MouseEvent):void { e.preventDefault(); menuFile.display(stage, mouseX, mouseY); }
效果:
在AIR工程中, 如果新建某个窗口, 当关闭主窗口时, 新窗口并不随着主窗口的关闭而关闭, 但是在很多情况下. 我们需要在主窗口关闭时, 所有的子窗口都一起关闭.
为了达到这个效果, 我们监听主窗口的Event.CLOSING事件, 当用户点击主窗口关闭按钮或是单击任务栏右键时, 我们采取一定措施, 关闭所有窗口.
在AIR中,openedWindows是一个包括了所有当前打开的窗口滴数组. 因此遍历该数组,将所有元素都关闭便可达到目的.
故Event.CLOSING的监听函数可以这么写:
/**主窗口点击关闭时,关闭所有打开的窗口*/ private function onMainWindowClose(e:Event):void { var wds:Array = NativeApplication.nativeApplication.openedWindows; for (var i:int = 0; i运行代码,点击主窗口关闭按钮或是任务栏右键关闭时,所有窗口都将关闭.
另外,如果仅需要关闭主窗口之外的所有窗口, 可以在for循环结束之后增加e.preventDefault(),同时for循环修改为:
for (var i:int = 1; i以阻止主窗口关闭,达到关闭其他窗口,保留主窗口的目的.
// Proudly powered by Apache, PHP, MySQL, WordPress, Bootstrap, etc,.