2011-05-25 94 views
8

我创建了一个文本编辑器,并且我刚完成了突出显示算法的编写,使每种语法都以不同的颜色显示,并使用适当的分析树呈现在正确的位置。Javascript语法测试用例

我想知道是否有人可以提供给我,或测试或一系列测试用例的位置,以确保没有任何破坏。测试用例应包含所有JavaScript语法,因为它在网络上使用,包括边缘情况(即,包括类似throw这样的语法(尽管它很少使用),DOM创建和操作等)。

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

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

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

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

+0

+1有趣的问题。 – pixelbobby 2011-05-25 15:10:58

回答

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 */ 
0

开始的一个好方法是通过JSLint运行这个来查看你的JavaScript是否有效。这是我所知道的最好的检查工具,但我不确定它将如何检查代码是否被破坏。 :(

希望帮助

+2

JSLint是一个很好的工具,但它抱怨了很多仍然“有效”的东西,并且仍然应该被认为对编辑来说是有效的。 – Matt 2011-05-25 15:22:56

+0

javaScript已经证明是有效的,我只担心我错过了一些有效的情况。 – GAgnew 2011-05-25 15:32:58

+0

@Matt是的,我知道很难让JSLint开心。 :) @Greg对不起,我无法帮助这个。 – 2011-05-25 15:45:50

1

一个可行的方法:有,将产生的代码随机件从语言(如this one)的BNF语法开始,有grammar files可用JavaScript的各种应用。

这不会让你得到一个静态测试用例,你可以用已知的预期结果对脚本进行脚本测试,但可能是一种很好的方法来测试解析器对意外(但合法)的字符串并确保它不会' t break。

+0

这是非常有趣的想法。我没有想过使用随机生成的代码作为测试用例,并且可能效率不高,因为我已经介绍了常见的情况。不过,我可以使用这个生成器作为编辑器的第二个方面。谢谢。 – GAgnew 2011-05-25 15:36:37

2

有趣的questi上。我认为,除了其他有趣的建议之外,我的最初方法是从相当主要的图书馆获取一堆JavaScript。我在想jQuery,Mootools,Prototype等。

然后,一旦你做了几个主要的库,做一些小的库。我会结账Github。也许看看Underscore,HeadJS,也许还有其他人在https://github.com/languages/JavaScript

我也会采取几个缩小的库,通过JSBeautifier运行它们。不知道美化的JS可能是从原来的语法略有改变。

最后,我会考虑通过JSLint来运行这些库中的一部分,然后手动通过并修改源代码以明确命中JSLint已经布置的一些“规则”。

编辑:而“打”,我的意思是确保你涵盖每个规则提供的两种情况,而不仅仅是'干净'的版本。

+0

正如你已经在下面说过的那样:JSLint可以是非常有限制的,它甚至不喜欢'++'和'--',它们完全有效(和声音,恕我直言)。 – 2011-05-25 15:27:31

+0

@Marcel是的,这就是为什么我建议*明确*触及它的一些规则,以确保覆盖这些案件。我不是故意建议使用该工具来确保代码“干净”。编辑澄清。 – Matt 2011-05-25 15:29:28

+0

此外nodejs应用程序,因为这些也是JavaScript,但他们不是DOM-y – jcolebrand 2011-05-25 15:32:06