2011-05-25 60 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