我正在创建一个文本编辑器,我刚刚编写了突出显示算法,让每个语法以不同的颜色显示,并使用正确的解析树渲染到正确的位置。
我想知道是否有人可以提供我,或测试或一系列测试用例的位置,以确保没有任何东西会破坏。测试用例应涵盖在Web上使用的所有JavaScript语法,包括边缘情况(即包括throw
之类的语法,尽管很少使用),DOM创建和操作等。
我添加了以下静态测试用例。 应该涵盖所有语法。
有几点需要注意:由于代码是在语法级别上递归解析的,因此只需要基本情况。例如,编辑:
一个[1];和[1] [2] [3] [4] [5];将是相同的语法。由于第二行,只是递归地更多,然后是第一行。
我创建的测试用例已移至下面的答案。
答案 0 :(得分:2)
有趣的问题。我认为我最初的方法,除了这里的任何其他有趣的建议,将从相当主要的库中获取一堆JavaScript。我在想jQuery,Mootools,Prototype等等。
然后,一旦你完成了一些主要的库,做一些较小的库。我要结帐Github。也许在Underscore查看HeadJS,https://github.com/languages/JavaScript和其他一些人。
我还需要几个缩小的库,通过JSBeautifier运行它们。不确定美化的JS是否可能会略微改变原始语法。
最后,我会考虑通过JSLint运行其中的一些库,然后手动浏览并修改源代码以明确命中JSLint已经布局的一些“规则”。
编辑:并且通过“点击”,我的意思是确保您涵盖每个规则提供的两种方案,而不仅仅是“干净”版本。
答案 1 :(得分:1)
一种可能的方法:有各种应用程序可以从语言的BNF语法(例如this one)开始生成随机代码片段,并且javascript可用grammar files。
这不会让你得到一个静态测试用例,你可以用已知的预期结果编写脚本测试,但这可能是一个很好的方法来测试你的解析器对意外(但合法)字符串并确保它没有断裂。
答案 2 :(得分:1)
这是迄今为止我能够提出的最佳测试案例。
编辑:添加正则表达式,并抛出。这种情况在语法上是有效的,应涵盖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 */
答案 3 :(得分:0)
一个好的开始方式是通过JSLint运行,看看你的JavaScript是否有效。这是我所知道的最好的检查工具,但是我不确定检查代码是否破坏会有多好。 :(
希望有所帮助。