JavaScript實現ZLOGO子集: 測試用例
阿新 • • 發佈:2019-01-05
續前文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();