8

テキストエディタを作成していて、各構文を異なる色で表示し、適切な解析ツリーを使用して適切な位置にレンダリングするための強調表示アルゴリズムの作成が完了しました。

誰かが私に提供してくれるのか、それとも何も壊れないことを確認するためのテストまたは一連のテストケースの場所を教えてくれるのだろうかと思っていました。テストケースは、エッジケース(つまり、throwめったに使用されないような構文を含む)、DOMの作成と操作など、Webで使用されるJavaScript構文のすべてをカバーする必要があります。

次の静的テストケースを追加しました。すべての構文をカバーする必要があります。

注意すべき点がいくつかあります。コードは文法レベルで再帰的に解析されるため、基本的なケースのみが必要です。たとえば、編集者には次のようになります。

a [1]; およびa[1][2] [3] [4] [5]; 同じ構文になります。2行目以降は、最初の行よりも再帰的に多くの登録者がいます。

私が作成したテストケースは、以下の回答に移動されました。

4

4 に答える 4

2

興味深い質問です。ここで他の興味深い提案を除いて、私の最初のアプローチは、かなり主要なライブラリから大量のJavaScriptを取得することだと思います。jQuery、Mootools、Prototypeなどを考えています。

次に、いくつかの主要なライブラリを実行したら、いくつかの小さなライブラリを実行します。Githubをチェックアウトします。アンダースコア、HeadJS 、その他のhttps://github.com/languages/JavaScriptをご覧ください

また、いくつかの縮小されたライブラリを取得し、それらをJSBeautifierで実行します。美化されたJSの構文が元の構文からわずかに変更されている可能性があるかどうかはわかりません。

最後に、これらのライブラリのいくつかをJSLintで実行することを検討します。次に、ソースを手動で調べて変更し、JSLintがレイアウトした「ルール」のいくつかに明示的にヒットします。

編集:そして「ヒット」とは、「クリーン」バージョンだけでなく、各ルールによって提供される両方のシナリオをカバーしていることを意味します。

于 2011-05-25T15:21:08.053 に答える
1

考えられるアプローチの1つ:言語のBNF文法(このようなもの)から始まるランダムなコードを生成するさまざまなアプリケーションがあり、JavaScript用の文法ファイルが利用可能です。

必然的に、既知の期待される結果でテストをスクリプト化できる静的テストケースは得られませんが、予期しない(ただし正当な)文字列に対してパーサーをテストし、破損しないことを確認するための良い方法かもしれません。

于 2011-05-25T15:20:54.040 に答える
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 */
于 2011-05-25T19:42:24.397 に答える
0

始めるのに良い方法は、これをJSLintで実行して、JavaScriptが有効かどうかを確認することです。これは私が知っている最高のチェックツールですが、コードが壊れているかどうかをチェックするのにどれだけうまくいくかはわかりません。:(

お役に立てば幸いです。

于 2011-05-25T15:20:46.777 に答える