Ich erstelle einen Texteditor und habe gerade die Hervorhebungsalgorithmen geschrieben, damit jede Syntax in einer anderen Farbe erscheint und an der richtigen Stelle mit den richtigen Syntaxbäumen dargestellt wird.
Ich habe mich gefragt, ob mir jemand einen Test oder eine Reihe von Testfällen zur Verfügung stellen könnte, um sicherzustellen, dass nichts kaputt geht. Die Testfälle sollten die gesamte JavaScript-Syntax abdecken, wie sie im Web verwendet wird, einschließlich Edge Cases (d. H. Einschließlich Syntax wie throw
, obwohl sie selten verwendet wird), DOM-Erstellung und -Management usw.
Ich habe den folgenden statischen Testfall hinzugefügt. It sollte die gesamte Syntax abdecken.
Es gibt einige Dinge zu beachten: Da der Code rekursiv auf einer Grammatikebene analysiert wird, sind nur grundlegende Fälle erforderlich. Zum Beispiel für den Editor:
a [1]; und a [1] [2] [3] [4] [5]; wäre die gleiche Syntax. Seit der zweiten Zeile, ist rekursiv nur mehr Subs als die erste Zeile.
Der Testfall, den ich erstellt habe, wurde in eine Antwort verschoben.
Dies ist bisher der beste Testfall, den ich mir vorstellen konnte.
EDIT: Regexp hinzugefügt und werfen. Dieser Fall ist syntaktisch gültig und sollte alle Fälle von JS abdecken. Bitte melde mich direkt, wenn du etwas vermisst hast, damit ich es hier hinzufügen kann.
%Vor%Interessante Frage. Ich denke, meine erste Herangehensweise, abgesehen von anderen interessanten Vorschlägen, würde darin bestehen, eine Menge JavaScript aus ziemlich großen Bibliotheken zu holen. Ich denke jQuery, Mootools, Prototype, etc.
Wenn Sie ein paar größere Bibliotheken erstellt haben, sollten Sie einige kleinere Bibliotheken verwenden. Ich würde Github auschecken. Vielleicht sehen Sie sich Underscore , HeadJS an und vielleicht einige andere in Ссылка .
Ich würde auch ein paar verkleinerte Bibliotheken nehmen und sie durch JSBeauberator laufen lassen. Nicht sicher, ob verschönertes JS eine geringfügig veränderte Syntax vom Original haben könnte.
Schließlich würde ich erwägen, einige dieser Bibliotheken über JSLint auszuführen und dann manuell die Quellen durchzugehen und zu modifizieren, um einige explizit zu treffen der Regeln, die JSLint angelegt hat.
EDIT: Und mit "hit" meine ich, dass Sie beide Szenarien abdecken, die von jeder Regel angeboten werden, nicht nur die "saubere" Version.
Ein möglicher Ansatz: Es gibt verschiedene Anwendungen, die aus einer BNF-Grammatik einer Sprache zufällige Codeteile erzeugen (wie etwa dieses ) und es gibt Grammatikdateien für Javascript.
Das wird Ihnen keinen statischen Testfall liefern, mit dem Sie Tests mit bekannten erwarteten Ergebnissen skripten können, aber es könnte ein guter Weg sein, Ihren Parser gegen unerwartete (aber legale) Strings zu testen und sicherzustellen, dass dies nicht geschieht Pause.
Ein guter Anfang wäre, dies durch JSLint auszuführen, um zu sehen, ob Ihr JavaScript gültig ist. Es ist das beste Überprüfungswerkzeug, das ich kenne, aber ich bin mir nicht sicher, wie gut es funktionieren wird, um zu überprüfen, ob der Code kaputt ist. : (
Ich hoffe, das hilft.
Tags und Links javascript unit-testing syntax-highlighting parse-tree