=====================================================
项目描述
doctest(以及最近新增的manuel)提供了使用自定义doctest解析器的钩子。《zc.customdoctests》有助于利用这一点来支持其他语言,例如JavaScript
js> function double (x) { ... return x*2; ... } js> double(2) 4
与manuel一起,它简化了混合多种语言的doctests,例如Python、JavaScript和sh
详细文档
自定义doctest解析器
zc.customdoctests提供了一些帮助,用于创建与常规doctests类似但使用不同方式评估示例的自定义doctest解析器。要使用它,您需要调用zc.customdoctests.DocTestParser并传递以下任一选项
- ps1
第一行提示符,默认为'>>>'。
这是一个必须与正好3个字符匹配的正则表达式。
(注意:您不能覆盖第二行提示。)
- 注释前缀
注释前缀正则表达式,默认为‘#’。
- 转换
一个用于转换示例源码的函数,默认为无操作函数。
js模块提供了在doctests中使用JavaScript的支持,使用python-spidermonkey。它提供了一些自定义doctest解析器的示例。
JavaScript和Python-Spidermonkey支持
要设置此环境,您可以使用类似以下内容:
import doctest, zc.customdoctests.js test_suite = doctest.DocTestSuite( parser=zc.customdoctests.js.parser, setUp=zc.customdoctests.js.spidermonkeySetUp)
或者,使用manuel
test_suite = manuel.testing.TestSuite( manuel.doctest.Manuel(parser=zc.customdoctests.js.parser) + manuel.doctest.Manuel(parser=zc.customdoctests.js.eq_parser) + manuel.doctest.Manuel() + manuel.capture.Manuel(), 'spidermonkey.txt', setUp=zc.customdoctests.js.spidermonkeySetUp)
注意:zc.customdoctests不需要spidermonkey,因此如果您想使用它,需要单独安装spidermonkey。
使用manuel的一个优点是可以在同一文档中使用多个解析器。在上面的示例中,支持了2种JavaScript示例语法(下面将描述)以及标准的doctest语法。本文档使用manuel运行以允许使用所有3种语法。
在此文档的其余部分,我们将展示JavaScript doctests的示例以及支持JavaScript和集成JavaScript与Python的辅助API。
JavaScript doctests使用“js>”提示(如rhino和spidermonkey解释器中使用的那样)
js> 2 + ... 'Hi world' // doctest: +ELLIPSIS u'2Hi...
赋值返回值。这可能会在doctests中生成讨厌的输出
js> ob = {a: 1, b: 2} [object Object]
如果您使用manuel,可以通过使用js!来避免这种情况
js! x = 3
该命令抑制表达式值。
提供加载和打印函数(类似于rhino中的函数)。例如,给定一个javascript文件,double.js
function double (x) { return x*2; }
我们可以加载该文件
js> load('double.js') js> double(10) 20
我们可以打印值
js> print('Hi') Hi
Python对象提供对open函数和os模块的访问
js> python.os.path.exists('double.js') True js! f = python.open('double.js') js> print(f.read()) function double (x) { return x*2; } <BLANKLINE> js> f.close()
如果您使用manuel,可以混合Python和JavaScript示例,并且有一些API可以帮助使用Python和JavaScript。
有一个add_js_global函数可以将数据从Python复制
>>> add_js_global('y', 1) js> y 1
还有一个js对象,它提供对js全局属性的属性访问
>>> js.x 3 >>> js.z = 4 js> z 4
您也可以调用此来运行JS代码而不会返回结果值
>>> js('a = x + y') js> a 4
变更日志
1.0.1 (2013-02-14)
修复PyPI页面上的ReStructuredText错误。
1.0.0 (2013-02-13)
添加Python 3.3支持。
清理setup.py,添加tox.ini和清单。
0.1.0 (2011-05-19)
初始版本