From 03c447b3eeb9fe72ad33ed41b10428443d33503d Mon Sep 17 00:00:00 2001 From: hneemann Date: Fri, 21 Oct 2016 14:40:58 +0200 Subject: [PATCH] added test for unused language keys and removed 4 unused language keys --- .../neemann/digital/core/ObservableValue.java | 11 ------ .../neemann/digital/core/arithmetic/Add.java | 4 +-- .../core/element/ElementTypeDescription.java | 1 + src/main/resources/lang/lang_de.xml | 4 --- src/main/resources/lang/lang_en.xml | 4 --- .../de/neemann/digital/lang/TestLang.java | 34 ++++++++++++++----- 6 files changed, 28 insertions(+), 30 deletions(-) diff --git a/src/main/java/de/neemann/digital/core/ObservableValue.java b/src/main/java/de/neemann/digital/core/ObservableValue.java index 096744fcb..2ac9835cc 100644 --- a/src/main/java/de/neemann/digital/core/ObservableValue.java +++ b/src/main/java/de/neemann/digital/core/ObservableValue.java @@ -253,7 +253,6 @@ public class ObservableValue extends Observable implements PinDescription { return bidirectional; } - @Override public String getDescription() { if (description != null) @@ -262,16 +261,6 @@ public class ObservableValue extends Observable implements PinDescription { return getName(); } - /** - * Sets the description of this value. - * - * @param descriptionKey the descriptions key - * @return this for call chaining - */ - public ObservableValue setDescriptionKey(String descriptionKey) { - return setDescription(Lang.get(descriptionKey)); - } - /** * Sets the description of this value. * diff --git a/src/main/java/de/neemann/digital/core/arithmetic/Add.java b/src/main/java/de/neemann/digital/core/arithmetic/Add.java index f3833bd65..eb1d5aeea 100644 --- a/src/main/java/de/neemann/digital/core/arithmetic/Add.java +++ b/src/main/java/de/neemann/digital/core/arithmetic/Add.java @@ -47,8 +47,8 @@ public class Add extends Node implements Element { bits = attributes.get(Keys.BITS); this.mask = 1 << bits; - this.sum = new ObservableValue("s", bits).setDescriptionKey("elem_Add_output"); - this.cOut = new ObservableValue("c_o", 1).setDescriptionKey("elem_Add_carryOut"); + this.sum = new ObservableValue("s", bits).setDescription(Lang.get("elem_Add_output")); + this.cOut = new ObservableValue("c_o", 1).setDescription(Lang.get("elem_Add_carryOut")); } @Override diff --git a/src/main/java/de/neemann/digital/core/element/ElementTypeDescription.java b/src/main/java/de/neemann/digital/core/element/ElementTypeDescription.java index 3fb799778..1d41df1ff 100644 --- a/src/main/java/de/neemann/digital/core/element/ElementTypeDescription.java +++ b/src/main/java/de/neemann/digital/core/element/ElementTypeDescription.java @@ -63,6 +63,7 @@ public class ElementTypeDescription { public ElementTypeDescription(String name, ElementFactory elementFactory, PinDescription... inputPins) { this.name = name; this.shortName = null; + this.description = Lang.getNull("elem_" + name + "_tt"); String n = Lang.getNull("elem_" + name); if (n != null) this.translatedName = n; else this.translatedName = name; diff --git a/src/main/resources/lang/lang_de.xml b/src/main/resources/lang/lang_de.xml index d1bad757f..18fc64290 100644 --- a/src/main/resources/lang/lang_de.xml +++ b/src/main/resources/lang/lang_de.xml @@ -16,7 +16,6 @@ Erzeugt eine Schaltung in einem eigenen Fenster. Permanent Bearbeiten Öffnet den Bearbeitendialog nicht modal. - Übernehmen Abbrechen Digital Ausdruck @@ -139,7 +138,6 @@ in der Stabilisierungsphase befindet. Hat sich die Schaltung stabilisiert wird d Es sind mehrere zusammengeschaltete Ausgänge gleichzeitig aktiv Element {0} kann nicht analysiert werden. Enthält [var] und [nicht var] - Doppeltes Element {0} Pin {0} in Element {1} exitiert mehrfach Element {0} nicht gefunden Es sind {0} Variablen erforderlich, nicht {1} @@ -185,7 +183,6 @@ Zur Analyse können Sie die Schaltung im Gatterschrittmodus ausführen. Variable {0} ist nicht definiert. Unerwartetes Zeichen {0} Fehlende schließende Klammer - Unerwartetes Ende des Ausdrucks Wert {0} in Zeile {1} ist keine Zahl! Erwarte {0} anstelle von {1} Werten in Zeile {2}! Signal {0} ist im Testvektor nicht vorhanden! @@ -382,7 +379,6 @@ Die Icons stammen aus dem Tango Desktop Project. Fehler bei der Eingabe eines Wertes Fehler beim Import einer Schaltung Fehler beim Lesen einer Datei - Die Datei {0} wurde nicht gefunden! Das Kommando {0} ist unbekannt! Fehler beim Laden des Listings {0} Fehler beim Schreiben einer Datei diff --git a/src/main/resources/lang/lang_en.xml b/src/main/resources/lang/lang_en.xml index 55f7d8466..4cf2d6616 100644 --- a/src/main/resources/lang/lang_en.xml +++ b/src/main/resources/lang/lang_en.xml @@ -16,7 +16,6 @@ Create a circuit in a seperate window Edit detached Opens the dialog as a non modal dialog - apply Cancel Digital Expression @@ -139,7 +138,6 @@ The terminal opens its own window. More then one output is active on a wire Cannot analyse Node {0} Contains [var] and [not var] - Duplicate component {0} Pin {0} in component {1} exists twice Component {0} not found Exact {0} variables necessary, not {1} @@ -185,7 +183,6 @@ To analyse you can run the circuit in single gate step mode. Variable {0} not defined Unexpected Token {0} Missing closed parenthesis - Unexpected end of expression Value {0} in line {1} is not a number! Expected {0} but found {1} values in line {2}! Signal {0} is not present in test vector! @@ -395,7 +392,6 @@ The icons are taken from the Tango Desktop Project. Change needs a restart to take effect! No ROM found! ROM needs to be set to be program memory. More then one ROM found! Only one ROM must be set to be program memory. - Could not find file: {0} Command {0} unknown! Enter an expression: Error running the tests: diff --git a/src/test/java/de/neemann/digital/lang/TestLang.java b/src/test/java/de/neemann/digital/lang/TestLang.java index 70d37f03c..14291e9ea 100644 --- a/src/test/java/de/neemann/digital/lang/TestLang.java +++ b/src/test/java/de/neemann/digital/lang/TestLang.java @@ -48,19 +48,32 @@ public class TestLang extends TestCase { System.out.println("Try to use hardcoded " + SOURCEPATH); sources = SOURCEPATH; } + HashSet keys = new HashSet<>(); + parseTree(new File(sources), keys); - parseTree(new File(sources)); + StringBuilder sb = new StringBuilder(); + for (String key : map.keySet()) { + if (!keys.contains(key)) { + if (!(key.startsWith("key_") || key.startsWith("elem_"))) { + if (sb.length() > 0) + sb.append(", "); + sb.append('"').append(key).append('"'); + } + } + } + if (sb.length()>0) + fail("there are unused language keys: "+sb.toString()); } - private void parseTree(File file) throws IOException { + private void parseTree(File file, HashSet keys) throws IOException { File[] files = file.listFiles(); if (files != null) for (File f : files) { if (f.isDirectory() && f.getName().charAt(0) != '.') - parseTree(f); + parseTree(f, keys); if (f.isFile() && f.getName().endsWith(".java")) { try { - checkSourceFile(f); + checkSourceFile(f, keys); } catch (AssertionFailedError e) { throw new AssertionFailedError(e.getMessage() + " in file " + f); } @@ -68,14 +81,14 @@ public class TestLang extends TestCase { } } - private void checkSourceFile(File f) throws IOException { + private void checkSourceFile(File f, HashSet keys) throws IOException { try (BufferedReader r = new BufferedReader(new InputStreamReader(new FileInputStream(f), "utf-8"))) { int linecount = 0; String line; while ((line = r.readLine()) != null) { linecount++; try { - checkSourceLine(line); + checkSourceLine(line, keys); } catch (AssertionFailedError e) { throw new AssertionFailedError(e.getMessage() + " in line " + linecount); } @@ -85,7 +98,7 @@ public class TestLang extends TestCase { private static final String PATTERN = "Lang.get(\""; - private void checkSourceLine(String line) { + private void checkSourceLine(String line, HashSet keys) { if (line.contains(PATTERN)) { int pos = line.indexOf(PATTERN, 0); while (pos >= 0) { @@ -100,8 +113,11 @@ public class TestLang extends TestCase { while (line.charAt(pos) == ' ') pos++; char nextChar = line.charAt(pos); - if (nextChar != '+') - checkSourceKey(sb.toString()); + if (nextChar != '+') { + final String key = sb.toString(); + keys.add(key); + checkSourceKey(key); + } pos = line.indexOf(PATTERN, pos); } }