续前文JavaScript实现ZLOGO子集: 前进+转向. 在添加新功能之前, 先添加测试用例, 以应对日益复杂的代码.

选择使用QUnit编写运行测试用例. 暂时对比较复杂和I/O无关的部分进行测试.

一是代码分析部分: Antlr通过生成的分析器和定制的监听器, 对原始代码进行分析和生成指令序列的部分. 下面是对循环进行测试的一个用例:

QUnit.test( "分析_循环_前进1", function( assert ) {
assert.deepEqual(
分析("开始\n循环2次\n前进50\n到此为止\n结束\n").返回指令序列(),
[{名称: 常量_指令名_前进, 参数: 50},
{名称: 常量_指令名_前进, 参数: 50}],
"循环2次通过!" );
});

"生成路径表"将指令序列转换成路点序列(经过的转折点), 其中一个测试用例如下:

QUnit.test( "生成路径表_前进_左转_前进", function( assert ) {
assert.deepEqual(
生成路径表([{名称: 常量_指令名_前进, 参数: 50},
{名称: 常量_指令名_转向, 参数: 90},
{名称: 常量_指令名_前进, 参数: 50}], 初始前进角度),
[{起点: 路点0, 终点: 路点1, 长度: 50},
{起点: 路点1, 终点: 路点2, 长度: 50}],
"通过!" );
});

添加测试的过程中, 再次感受代码封装的重要性. 在测试目标接口中, DOM操作都需避免(比如document, window).

虽然已经添加了多层循环的代码分析部分测试用例, 但在实现时, 感觉需要语法树以便于支持更复杂的语法. 另外在现在的代码里, 已经开始需要拆分模块("定制监听器"比较杂乱).

下面需要调研语法树相关的JS库, 比如: ajaxorg/treehugger

另外, 发现TypeScript也可以利用Antlr: Creating ANTLR Applications in TypeScript - Dangl.Blog();

2017-12-09 JavaScript实现ZLOGO子集: 测试用例的更多相关文章

  1. 2017-12-06 JavaScript实现ZLOGO子集: 单层循环功能

    前文JavaScript实现ZLOGO子集: 前进+转向的示例代码很累赘, 因此尝试实现基本的循环功能, 使得前面的11行代码缩减为7行: 开始 循环4次 前进200 左转144度 到此为止 前进20 ...

  2. 2017-12-05 JavaScript实现ZLOGO子集: 前进+转向

    在前文中文编程语言之Z语言初尝试: ZLOGO 4与相关讨论后, 萌生了用JavaScript编写类似语言以便在线编程的想法. 于是使用 @TKT2016 (知乎账号)的ZLOGO语法设计, 在编程语 ...

  3. JavaScript实现ZLOGO: 用语法树实现多层循环

    原址: https://zhuanlan.zhihu.com/p/32571516 照例先上演示弱效果图. 演示地址照旧: 代码如下: 开始 循环4次 循环4次 前进50 左转90度 到此为止 右转9 ...

  4. 2018-12-14 JavaScript实现ZLOGO: 前进方向和速度

    系列前文: JavaScript实现ZLOGO子集: 前进+转向 JavaScript实现ZLOGO子集: 单层循环功能 JavaScript实现ZLOGO子集: 测试用例 JavaScript实现Z ...

  5. 2018-01-02 JavaScript实现ZLOGO: 用语法树实现多层循环

    原址: https://zhuanlan.zhihu.com/p/32571516 照例先上演示弱效果图. 演示地址照旧: 代码如下: 开始 循环4次 循环4次 前进50 左转90度 到此为止 右转9 ...

  6. 2017.12.21-JQuery

    作业:密码加强验证 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> & ...

  7. Gitlab一键端的安装汉化及问题解决(2017/12/14目前版本为10.2.4)

    Gitlab的安装汉化及问题解决 一.前言 Gitlab需要安装的包太TM多了,源码安装能愁死个人,一直出错,后来发现几行命令就装的真是遇到的新大陆一样... ... 装完之后感觉太简单,加了汉化补丁 ...

  8. 2019-01-20 JavaScript实现ZLOGO: 界面改进与速度可调

    续前文JavaScript实现ZLOGO: 前进方向和速度 在线演示地址: http://codeinchinese.com/%E5%9C%883/%E5%9C%883.html 源码仍在: prog ...

  9. 2019-01-23 JavaScript实现ZLOGO: 性能改进

    主攻前文吴烜:JavaScript实现ZLOGO: 界面改进与速度可调的几个性能问题 在线演示: 圈3 源码仍在: program-in-chinese/quan3 之前是在绘制过程中计算每帧需要绘制 ...

随机推荐

  1. PAT1035: Password

    1035. Password (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue To prepare f ...

  2. PAT1132: Cut Integer

    1132. Cut Integer (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Cutting a ...

  3. How to untar a TAR file using Apache Commons

    import org.apache.commons.compress.archivers.tar.TarArchiveEntry; import org.apache.commons.compress ...

  4. Javascript 中的map/reduce

    先填个坑,后面慢慢填 附上一篇不错的文章:https://segmentfault.com/a/1190000008719824

  5. Android推送 百度云推送 入门篇

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/27231237 现在app基本都有推送的功能,于是看了下百度云的推送,官方文档和D ...

  6. QM3_Statistics Concepts and Market Returns

    Basic Concepts Terms Descriptive Statistics Describes the important aspects of large data sets. 统计 概 ...

  7. linux.go

    func LockFile(file *os.File) error { return syscall.Flock(int(file.Fd()), syscall.LOCK_EX) }

  8. bzoj 2186 [Sdoi2008]沙拉公主的困惑 欧拉函数

    n>=m,所以就变成了求 ϕ(m!)∗n!/m! 而 ϕ(m!)=m!∗(p−1)/p...... p为m!的素因子,即为m内的所有素数,问题就转化为了求 n!∗(p−1)/p...... 只需 ...

  9. sublime 基本的配置

    { "font_size": 14.6, // font size "ignored_packages": [ "Vintage" ], & ...

  10. monkey----测试中的要求

       测试中的要求:   (1)导出的log命名以测试机的imei号为主或者是以测试机的编号为主,这样方便找到测试机,避免出现问题后无法找到机器,难以定位问题. 导出的log文件后缀名以.log命名, ...