• Hinzugefügt am 21.10.2002
    (Ergänzt am 4.11.2002)
    JUnit-Failures, obwohl (lt. Fehlermeldung) expected genau gleich actual ist:
    Für die Ausgabe der erwarteten (expected:) und tatsächlichen (but was:) Werte in den JUnit-Fehlermeldungen wird die toString-Methode der verglichenen Objekte aufgerufen. Bei Tokens werden dabei aber nicht immer alle Attribute ausgegeben, obwohl sie in equals() verglichen werden. Darum sind auch die Werte der nicht ausgegebenen Attribute relevant. Hier gilt folgendes:
    • kind, line und col müssen immer definierte Werte enthalten. Diese Attribute werden von toString auch immer ausgegeben.
    • val wird nur bei number- und charConst-Token auf einen bestimmten Wert gesetzt. In allen anderen Fällen hat es den Wert 0.
    • string zeigt nur bei Bezeichnern und Schlüsselwörtern, sowie bei number-Tokens, auf den entsprechenden String, ansonsten ist es null (und nicht ""!).
  • ad Aufgabe 2 a):
    Die Terminalklasse printableChar wurde im VO-Skriptum nicht genau definiert, weil sie beliebig festgelegt werden darf. Die JUnit-Testfälle gehen allerdings davon aus, dass nur Zeichen zwischen ASCII 32 (' ' Space) und ASCII 126 ('~' Tilde) dazu gehören; alle anderen (z.B. auch Umlaute und scharfes S) nicht.
  • ad Aufgabe 2 b) bzw. Testen allgemein:
    Um die korrekte Behandlung von Fehlern durch den Compiler zu testen, werden einfach die vom Compiler erzeugten Fehlermeldungen mit den erwarteten verglichen (siehe Aufruf von TestPrintWriter.verify() z.B. in Testmethode ScannerTest.testInvalidSymbols()).
    Um in den JUnit-Testfällen keine Failures zu bekommen, müssten die erzeugten Fehlermeldungen exakt (= Zeichen für Zeichen) mit den von den Testfällen erwarteten übereinstimmen.
    Da man aber schwer erwarten, dass Sie sich bei der Implementierung Ihres Compilers genau die gleichen Fehlermeldungen ausdenken wie wir, gibt es folgende Richtlinien:
    • Alle Fehlermeldung beginnen mit:
      -- line X, col Y:
      (wobei X die Zeilen- und Y die Spaltennummer bezeichnen)
    • Nach dem Doppelpunkt soll eine sinnvolle Fehlermeldung folgen. Diese muss aber nicht mit der in den Testfällen erwarteten übereinstimmen. Solche Failures bringen keine Punkteabzüge.
  • ad Aufgabe 2 c):
    Abgabe bereits bis Mi, 16.10.2002, 12:00!