Emacs lisp unit test framework

几经修改,终于让evil eval里面提到的Emacs lisp单元测试框架成形了。你可以通过http://www.wanglianghome.org/svn/test/test.el查看或下载,也可以通过subversion。

$ svn co http://www.wanglianghome.org/svn/test

里面还有一个小例子和一张截屏

test和其它单元测试框架有两点不同,首先是抛弃了suite概念,而改用tag,同一个case可以属于多个tag;其次是通过一个test-assert-compare函数包含了所以已经实现和还没有实现的、二元assert功能,这使得整个代码无需很长(除去开头的文档,250行左右),却可以提供更多的功能,而且接口很一致。除此之外,还给用户提供了一定的扩展能力,使其能够编写更复杂的assert函数。

第一次在emacswiki上添加了属于自己的一笔,在UnitTest页面Automated testing frameworks一节的末尾。:-)

Define mode-map before mode definition

在Intel的时候写过一个简单的emacs mode,这次又写了一个。和前一个一样,都是用来显示编译器打印出来的中间语言,不过这次的要复杂一些,除了高亮、光标定位之外,还有narrow、以及自动生成控制流图等(用dot)。

写得过程中发现一个问题,即define-derived-mode要在定义mode-map的语句之后,如:

(defvar foo-mode-map ...)
(define-derived-mode foo-mode ...)

否则keybinding为空!因为define-derived-mode如果发现mode-map没有定义,就会自动定义一个,而后面的defvar在发现mode-map已经定义,就不会再赋值了。