单元测试-Javascript语法测试用例



我正在创建一个文本编辑器,我刚刚完成了高亮显示算法的编写,使每个语法都以不同的颜色显示,并使用正确的解析树在正确的位置进行渲染。

我想知道是否有人能向我提供测试或一系列测试用例的位置,以确保不会出现任何问题。测试用例应涵盖网络上使用的所有JavaScript语法,包括边缘用例(即,包括throw等语法,尽管很少使用)、DOM创建和操作等。

我添加了以下静态测试用例。它应该涵盖所有语法。

有几点需要注意:由于代码是在语法级别上递归解析的,所以只需要基本的情况。例如,到编辑器:

a[1];和a[1][2][3][4][5];将是相同的语法。由于第二行,只是递归地比第一行多个子。

我创建的测试用例已移至下面的答案。

有趣的问题。我认为,除非这里有任何其他有趣的建议,否则我最初的方法是从相当大的库中获取一堆JavaScript。我在考虑jQuery、Mootools、Prototype等

然后,一旦你完成了一些主要的libs,就做一些较小的。我会签出Github。也许看看Underscore、HeadJS,也许还有其他一些https://github.com/languages/JavaScript.

我还将使用几个缩小的库,通过JSBeautifier运行它们。不确定美化后的JS是否与原始JS的语法略有不同。

最后,我会考虑通过JSLint运行其中一些库,然后手动遍历和修改源代码,以明确地满足JSLint制定的一些"规则"。

编辑:我所说的"命中",是指确保你涵盖了每个规则提供的两种场景,而不仅仅是"干净"版本。

一种可能的方法是:有各种应用程序会从一种语言的BNF语法(比如这个)开始生成随机的代码片段,并且有javascript的语法文件可用。

这不会给你带来一个静态测试用例,你可以用已知的预期结果编写测试脚本,但这可能是一个很好的方法,可以针对意外(但合法)的字符串测试你的解析器,并确保它不会崩溃。

这是迄今为止我能想到的最好的测试用例。

EDIT:添加了regexp和throw。这个案例在语法上是有效的,应该涵盖JS的所有案例。如果你发现有什么遗漏,请直接给我发消息,我可以在这里添加。

a = 1;
b = { 'a' : a };
c = 'a';
d = this;
var patt1=/w3ghouls/i;
throw "Err3";
function e(a,b,c){
    d += a + b + c++;
    return d;
}
this.xy.z = function(a, b){
    var x = null;
}
var f = function(a,b){
    if(a == b || (b === a && a)){
        var f = [a,b];
        try{
            f = f.slice(0);
        }catch(e){
            console.log(e * e + '');
        }
    }else if(a){
        a = null;
        a = undefined;
        b = typeof a;
        b = true;
        b = false;
    }else{
        switch(c){
           case 'c':
             break;
           default:
             null;
             break;
        }
    }
}
for(var i =0; i <= a.length; i++){
    do{
       continue;
       null;
      }while(a != b);
}
if(a == b)
  (a) ? null : null;
/* This is a finished 
   test case */

一个好的开始方法是通过JSLint运行它,看看您的JavaScript是否有效。这是我所知道的最好的检查工具,但我不确定它能不能很好地检查代码是否损坏。:(

希望能有所帮助。

相关内容

最新更新