Index: trunk/autoquest-core-usability-test/src/test/java/de/ugoe/cs/autoquest/usability/AbstractUsabilityEvaluationTC.java
===================================================================
--- trunk/autoquest-core-usability-test/src/test/java/de/ugoe/cs/autoquest/usability/AbstractUsabilityEvaluationTC.java	(revision 1210)
+++ trunk/autoquest-core-usability-test/src/test/java/de/ugoe/cs/autoquest/usability/AbstractUsabilityEvaluationTC.java	(revision 1335)
@@ -50,6 +50,6 @@
 
     /**
-   *
-   */
+     *
+     */
     @Before
     public void setUp() {
@@ -58,6 +58,6 @@
 
     /**
-   *
-   */
+     *
+     */
     protected ITaskModel createTaskModel(String spec) {
         TaskTreeDecoder decoder = new TaskTreeDecoder(taskFactory, taskBuilder);
@@ -82,5 +82,6 @@
                                                    UsabilityEvaluationResult evaluationResult)
     {
-        assertEquals(expectedDefects.length, evaluationResult.getAllDefects().size());
+        assertEquals(evaluationResult.getAllDefects().toString(),
+                     expectedDefects.length, evaluationResult.getAllDefects().size());
 
         EXPECTED_DEFECT_ITERATION:
Index: trunk/autoquest-core-usability-test/src/test/java/de/ugoe/cs/autoquest/usability/RequiredScrollRuleTest.java
===================================================================
--- trunk/autoquest-core-usability-test/src/test/java/de/ugoe/cs/autoquest/usability/RequiredScrollRuleTest.java	(revision 1335)
+++ trunk/autoquest-core-usability-test/src/test/java/de/ugoe/cs/autoquest/usability/RequiredScrollRuleTest.java	(revision 1335)
@@ -0,0 +1,313 @@
+//   Copyright 2012 Georg-August-Universität Göttingen, Germany
+//
+//   Licensed under the Apache License, Version 2.0 (the "License");
+//   you may not use this file except in compliance with the License.
+//   You may obtain a copy of the License at
+//
+//       http://www.apache.org/licenses/LICENSE-2.0
+//
+//   Unless required by applicable law or agreed to in writing, software
+//   distributed under the License is distributed on an "AS IS" BASIS,
+//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//   See the License for the specific language governing permissions and
+//   limitations under the License.
+
+package de.ugoe.cs.autoquest.usability;
+
+import static de.ugoe.cs.autoquest.usability.UsabilityDefectDescription.SCROLL_REQUIRED;
+import static de.ugoe.cs.autoquest.usability.UsabilityDefectSeverity.HIGH;
+import static de.ugoe.cs.autoquest.usability.UsabilityDefectSeverity.INFO;
+import static de.ugoe.cs.autoquest.usability.UsabilityDefectSeverity.LOW;
+import static de.ugoe.cs.autoquest.usability.UsabilityDefectSeverity.MEDIUM;
+
+import org.junit.Test;
+
+import de.ugoe.cs.autoquest.usability.UsabilityDefect;
+
+/**
+ *
+ */
+public class RequiredScrollRuleTest extends AbstractUsabilityEvaluationTC {
+
+    /**
+     *
+     */
+    @Test
+    public void testWithNormalScroll_01() {
+        RequiredScrollRule rule = new RequiredScrollRule();
+
+        // ===== check =====
+        String spec =
+            "UserSession {" +
+            "  Scroll body {}" +
+            "  Interaction elem1 {}" +
+            "}";
+        
+        // no defect expected, as interactions do not form tasks
+        UsabilityDefect[] expectedDefects = new UsabilityDefect[] {  };
+
+        assertUsabilityEvaluationResult(expectedDefects, rule.evaluate(createTaskModel(spec)));
+
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void testWithNormalScroll_02() {
+        RequiredScrollRule rule = new RequiredScrollRule();
+
+        // ===== check =====
+        String spec =
+            "UserSession {" +
+            "  Scroll body {}" +
+            "  Interaction elem1 {}" +
+            "  Scroll body {}" +
+            "  Interaction elem1 {}" +
+            "}";
+        
+        // no defect expected, as interactions do not form tasks
+        UsabilityDefect[] expectedDefects = new UsabilityDefect[] { };
+
+        assertUsabilityEvaluationResult(expectedDefects, rule.evaluate(createTaskModel(spec)));
+
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void testWithNormalScroll_03() {
+        RequiredScrollRule rule = new RequiredScrollRule();
+
+        // ===== check =====
+        String spec =
+            "UserSession {" +
+            "  Sequence {" +
+            "    Scroll body {}" +
+            "    Interaction elem1 {}" +
+            "  }" +
+            "}";
+        
+        UsabilityDefect[] expectedDefects = new UsabilityDefect[]
+            { new UsabilityDefect(HIGH, SCROLL_REQUIRED) };
+
+        assertUsabilityEvaluationResult(expectedDefects, rule.evaluate(createTaskModel(spec)));
+
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void testWithNormalScroll_04() {
+        RequiredScrollRule rule = new RequiredScrollRule();
+
+        // ===== check =====
+        String spec =
+            "UserSession {" +
+            "  Sequence seq1 {" +
+            "    Scroll body {}" +
+            "    Interaction elem1 {}" +
+            "  }" +
+            "  Sequence seq1 {" +
+            "    Scroll body {}" +
+            "    Interaction elem1 {}" +
+            "  }" +
+            "}";
+        
+        UsabilityDefect[] expectedDefects = new UsabilityDefect[]
+            { new UsabilityDefect(HIGH, SCROLL_REQUIRED) };
+
+        assertUsabilityEvaluationResult(expectedDefects, rule.evaluate(createTaskModel(spec)));
+
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void testOnlySeldomPreceededByScroll_01() {
+        RequiredScrollRule rule = new RequiredScrollRule();
+
+        // ===== check =====
+        String spec =
+            "UserSession {" +
+            "  Sequence seq1 {" +
+            "    Interaction elem1 {}" +
+            "    Interaction elem1 {}" +
+            "    Interaction elem1 {}" +
+            "    Scroll body {}" +
+            "    Interaction elem1 {}" +
+            "  }" +
+            "}";
+        
+        UsabilityDefect[] expectedDefects = new UsabilityDefect[] { };
+
+        assertUsabilityEvaluationResult(expectedDefects, rule.evaluate(createTaskModel(spec)));
+
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void testOnlySeldomPreceededByScroll_02() {
+        RequiredScrollRule rule = new RequiredScrollRule();
+
+        // ===== check =====
+        String spec =
+            "UserSession {" +
+            "  Sequence seq1 {" +
+            "    Optional opt1 { }" +
+            "    Interaction elem1 {}" +
+            "  }" +
+            "  Sequence seq1 {" +
+            "    Optional opt1 {" +
+            "      Scroll body {}" +
+            "    }" +
+            "    Interaction elem1 {}" +
+            "  }" +
+            "  Sequence seq1 {" +
+            "    Optional opt1 {" +
+            "      Scroll body {}" +
+            "    }" +
+            "    Interaction elem1 {}" +
+            "  }" +
+            "}";
+        
+        UsabilityDefect[] expectedDefects = new UsabilityDefect[]
+            { new UsabilityDefect(MEDIUM, SCROLL_REQUIRED) };
+
+        assertUsabilityEvaluationResult(expectedDefects, rule.evaluate(createTaskModel(spec)));
+
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void testOnlySeldomPreceededByScroll_03() {
+        RequiredScrollRule rule = new RequiredScrollRule();
+
+        // ===== check =====
+        String spec =
+            "UserSession {" +
+            "  Sequence seq1 {" +
+            "    Optional opt1 { }" +
+            "    Interaction elem1 {}" +
+            "  }" +
+            "  Sequence seq1 {" +
+            "    Optional opt1 {}" +
+            "    Interaction elem1 {}" +
+            "  }" +
+            "  Sequence seq1 {" +
+            "    Optional opt1 {" +
+            "      Scroll body {}" +
+            "    }" +
+            "    Interaction elem1 {}" +
+            "  }" +
+            "  Sequence seq1 {" +
+            "    Optional opt1 {" +
+            "      Scroll body {}" +
+            "    }" +
+            "    Interaction elem1 {}" +
+            "  }" +
+            "}";
+        
+        UsabilityDefect[] expectedDefects = new UsabilityDefect[]
+           { new UsabilityDefect(LOW, SCROLL_REQUIRED) };
+
+        assertUsabilityEvaluationResult(expectedDefects, rule.evaluate(createTaskModel(spec)));
+
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void testOnlySeldomPreceededByScroll_04() {
+        RequiredScrollRule rule = new RequiredScrollRule();
+
+        // ===== check =====
+        String spec =
+            "UserSession {" +
+            "  Sequence seq1 {" +
+            "    Optional opt1 { }" +
+            "    Interaction elem1 {}" +
+            "  }" +
+            "  Sequence seq1 {" +
+            "    Optional opt1 { }" +
+            "    Interaction elem1 {}" +
+            "  }" +
+            "  Sequence seq1 {" +
+            "    Optional opt1 { }" +
+            "    Interaction elem1 {}" +
+            "  }" +
+            "  Sequence seq1 {" +
+            "    Optional opt1 {" +
+            "      Scroll body {}" +
+            "    }" +
+            "    Interaction elem1 {}" +
+            "  }" +
+            "}";
+        
+        UsabilityDefect[] expectedDefects = new UsabilityDefect[]
+            { new UsabilityDefect(INFO, SCROLL_REQUIRED) };
+
+        assertUsabilityEvaluationResult(expectedDefects, rule.evaluate(createTaskModel(spec)));
+
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void testOnlySeldomPreceededByScroll_05() {
+        RequiredScrollRule rule = new RequiredScrollRule();
+
+        // ===== check =====
+        String spec =
+            "UserSession {" +
+            "  Sequence seq1 {" +
+            "    Optional opt1 { }" +
+            "    Interaction elem1 {}" +
+            "  }" +
+            "  Sequence seq1 {" +
+            "    Optional opt1 { }" +
+            "    Interaction elem1 {}" +
+            "  }" +
+            "  Sequence seq1 {" +
+            "    Optional opt1 { }" +
+            "    Interaction elem1 {}" +
+            "  }" +
+            "  Sequence seq1 {" +
+            "    Optional opt1 {" +
+            "      Scroll body {}" +
+            "    }" +
+            "    Interaction elem1 {}" +
+            "  }" +
+            "  Sequence seq1 {" +
+            "    Optional opt1 { }" +
+            "    Interaction elem1 {}" +
+            "  }" +
+            "  Sequence seq1 {" +
+            "    Optional opt1 { }" +
+            "    Interaction elem1 {}" +
+            "  }" +
+            "  Sequence seq1 {" +
+            "    Optional opt1 { }" +
+            "    Interaction elem1 {}" +
+            "  }" +
+            "  Sequence seq1 {" +
+            "    Optional opt1 { }" +
+            "    Interaction elem1 {}" +
+            "  }" +
+            "}";
+        
+        UsabilityDefect[] expectedDefects = new UsabilityDefect[] { };
+
+        assertUsabilityEvaluationResult(expectedDefects, rule.evaluate(createTaskModel(spec)));
+
+    }
+}
Index: trunk/autoquest-core-usability-test/src/test/java/de/ugoe/cs/autoquest/usability/TextInputStatisticsRuleTest.java
===================================================================
--- trunk/autoquest-core-usability-test/src/test/java/de/ugoe/cs/autoquest/usability/TextInputStatisticsRuleTest.java	(revision 1210)
+++ trunk/autoquest-core-usability-test/src/test/java/de/ugoe/cs/autoquest/usability/TextInputStatisticsRuleTest.java	(revision 1335)
@@ -26,657 +26,699 @@
 
 import de.ugoe.cs.autoquest.usability.UsabilityDefect;
-import de.ugoe.cs.autoquest.usability.UsabilityEvaluationManager;
 
 /**
- * TODO comment
- * 
- * @version $Revision: $ $Date: 18.07.2012$
- * @author 2012, last modified by $Author: pharms$
+ *
  */
 public class TextInputStatisticsRuleTest extends AbstractUsabilityEvaluationTC {
 
     /**
-     * TODO: comment
-     * 
-     */
-    @Test
-    public void testWithDifferentTextInputInteractionsOnly() {
-        UsabilityEvaluationManager manager = new UsabilityEvaluationManager();
-
-        // ===== check =====
-        String spec =
-            "UserSession {" +
-            "  TextInput (bla) {}" +
-            "}";
+     *
+     */
+    @Test
+    public void testWithDifferentTextInputInteractionsOnly_01() {
+        TextInputStatisticsRule rule = new TextInputStatisticsRule();
+
+        // ===== check =====
+        String spec =
+            "UserSession {" +
+            "  TextInput elem1 (bla) {}" +
+            "}";
+        
         UsabilityDefect[] expectedDefects = new UsabilityDefect[]
             { new UsabilityDefect(HIGH, TEXT_FIELD_INPUT_RATIO) };
 
-        assertUsabilityEvaluationResult
-            (expectedDefects, manager.evaluateUsability(createTaskModel(spec)));
-
-        // ===== check =====
-        spec =
-            "UserSession {" +
-            "  TextInput (a) {}" +
-            "  TextInput (b) {}" +
-            "  TextInput (c) {}" +
-            "  TextInput (d) {}" +
-            "}";
-
-        expectedDefects = new UsabilityDefect[]
+        assertUsabilityEvaluationResult(expectedDefects, rule.evaluate(createTaskModel(spec)));
+
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void testWithDifferentTextInputInteractionsOnly_02() {
+        TextInputStatisticsRule rule = new TextInputStatisticsRule();
+
+        // ===== check =====
+        String spec =
+            "UserSession {" +
+            "  TextInput elem1 (a) {}" +
+            "  TextInput elem1 (b) {}" +
+            "  TextInput elem1 (c) {}" +
+            "  TextInput elem1 (d) {}" +
+            "}";
+
+        UsabilityDefect[] expectedDefects = new UsabilityDefect[]
             { new UsabilityDefect(HIGH, TEXT_FIELD_INPUT_RATIO) };
 
-        assertUsabilityEvaluationResult
-            (expectedDefects, manager.evaluateUsability(createTaskModel(spec)));
-
-        // ===== check =====
-        spec =
-            "UserSession {" +
-            "  TextInput (a) {}" +
-            "  TextInput (b) {}" +
-            "  TextInput (c) {}" +
-            "  TextInput (d) {}" +
-            "}";
-
-        expectedDefects = new UsabilityDefect[]
+        assertUsabilityEvaluationResult(expectedDefects, rule.evaluate(createTaskModel(spec)));
+
+    }
+
+
+    /**
+     *
+     */
+    @Test
+    public void testWithDifferentTextInputInteractionsOnly_03() {
+        TextInputStatisticsRule rule = new TextInputStatisticsRule();
+
+        // ===== check =====
+        String spec =
+            "UserSession {" +
+            "  TextInput elem1 (a) {}" +
+            "  TextInput elem1 (b) {}" +
+            "  TextInput elem1 (c) {}" +
+            "  TextInput elem1 (d) {}" +
+            "}";
+
+        UsabilityDefect[] expectedDefects = new UsabilityDefect[]
             { new UsabilityDefect(HIGH, TEXT_FIELD_INPUT_RATIO) };
 
-        assertUsabilityEvaluationResult
-            (expectedDefects, manager.evaluateUsability(createTaskModel(spec)));
-
-        // ===== check =====
-        spec =
-            "Iteration {" +
-            "  TextInput (bla) {}" +
-            "}";
-
-        expectedDefects = new UsabilityDefect[]
+        assertUsabilityEvaluationResult(expectedDefects, rule.evaluate(createTaskModel(spec)));
+
+    }
+
+
+    /**
+     *
+     */
+    @Test
+    public void testWithDifferentTextInputInteractionsOnly_04() {
+        TextInputStatisticsRule rule = new TextInputStatisticsRule();
+
+        // ===== check =====
+        String spec =
+            "UserSession {" +
+            "  Iteration {" +
+            "    TextInput elem1 (bla) {}" +
+            "  }" +
+            "}";
+
+        UsabilityDefect[] expectedDefects = new UsabilityDefect[]
             { new UsabilityDefect(HIGH, TEXT_FIELD_INPUT_RATIO) };
 
-        assertUsabilityEvaluationResult
-            (expectedDefects, manager.evaluateUsability(createTaskModel(spec)));
-
-        // ===== check =====
-        spec =
-            "Sequence {" +
-            "  TextInput (a) {}" +
+        assertUsabilityEvaluationResult(expectedDefects, rule.evaluate(createTaskModel(spec)));
+
+    }
+
+
+    /**
+     *
+     */
+    @Test
+    public void testWithDifferentTextInputInteractionsOnly_05() {
+        TextInputStatisticsRule rule = new TextInputStatisticsRule();
+
+        // ===== check =====
+        String spec =
+            "UserSession {" +
             "  Sequence {" +
-            "    TextInput (b) {}" +
-            "    TextInput (c) {}" +
-            "    TextInput (d) {}" +
-            "    TextInput (e) {}" +
-            "  }" +
-            "  Iteration {" +
-            "    TextInput (f) {}" +
-            "  }" +
-            "  TextInput (g) {}" +
+            "    TextInput elem1 (a) {}" +
+            "    Sequence seq1 {" +
+            "      TextInput elem1 (b) {}" +
+            "      TextInput elem1 (c) {}" +
+            "      TextInput elem1 (d) {}" +
+            "      TextInput elem1 (e) {}" +
+            "    }" +
+            "    Iteration it1 {" +
+            "      TextInput elem1 (f) {}" +
+            "     TextInput elem1 (g) {}" +
+            "      TextInput elem1 (h) {}" +
+            "      TextInput elem1 (i) {}" +
+            "    }" +
+            "    TextInput elem1 (j) {}" +
+            "    Selection sel1 {" +
+            "      TextInput elem1 (k) {}" +
+            "    }" +
+            "    Sequence seq2 {" +
+            "      TextInput elem1 (l) {}" +
+            "      Sequence seq1 {" +
+            "        TextInput elem1 (m) {}" +
+            "        TextInput elem1 (n) {}" +
+            "        TextInput elem1 (o) {}" +
+            "        TextInput elem1 (p) {}" +
+            "      }" +
+            "      Iteration it1 {" +
+            "        TextInput elem1 (q) {}" +
+            "        TextInput elem1 (r) {}" +
+            "        TextInput elem1 (s) {}" +
+            "        TextInput elem1 (t) {}" +
+            "      }" +
+            "      TextInput elem1 (u) {}" +
+            "      Selection sel1 {" +
+            "        TextInput elem1 (v) {}" +
+            "      }" +
+            "    }" +
+            "    Selection sel2 {" +
+            "      TextInput elem1 (w) {}" +
+            "    }" +
+            "    TextInput elem1 (x) {}" +
+            "  }" +
+            "}";
+
+        UsabilityDefect[] expectedDefects = new UsabilityDefect[]
+            { new UsabilityDefect(HIGH, TEXT_FIELD_INPUT_RATIO) };
+
+        assertUsabilityEvaluationResult(expectedDefects, rule.evaluate(createTaskModel(spec)));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void testCombinationsOfTextInputInteractionsAndOtherInteractions_01() {
+        TextInputStatisticsRule rule = new TextInputStatisticsRule();
+
+        // ===== check =====
+        String spec =
+            "UserSession {" +
+            "  Sequence {" +
+            "    Interaction elem1 {}" +
+            "    TextInput elem1 (a) {}" +
+            "    TextInput elem1 (b) {}" +
+            "    Interaction elem1 {}" +
+            "    TextInput elem1 (c) {}" +
+            "  }" +
+            "}";
+
+        UsabilityDefect[] expectedDefects = new UsabilityDefect[]
+            { new UsabilityDefect(LOW, TEXT_FIELD_INPUT_RATIO) };
+
+        assertUsabilityEvaluationResult(expectedDefects, rule.evaluate(createTaskModel(spec)));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void testCombinationsOfTextInputInteractionsAndOtherInteractions_02() {
+        TextInputStatisticsRule rule = new TextInputStatisticsRule();
+
+        // ===== check =====
+        String spec =
+            "UserSession {" +
+            "  Sequence {" +
+            "    Interaction elem1 {}" +
+            "    TextInput elem1 (a) {}" +
+            "    Interaction elem1 {}" +
+            "    Interaction elem1 {}" +
+            "    TextInput elem1 (c) {}" +
+            "  }" +
+            "}";
+
+        UsabilityDefect[] expectedDefects = new UsabilityDefect[]
+            { new UsabilityDefect(INFO, TEXT_FIELD_INPUT_RATIO) };
+
+        assertUsabilityEvaluationResult(expectedDefects, rule.evaluate(createTaskModel(spec)));
+
+    }
+
+
+    /**
+     *
+     */
+    @Test
+    public void testCombinationsOfTextInputInteractionsAndOtherInteractions_03() {
+        TextInputStatisticsRule rule = new TextInputStatisticsRule();
+
+        // ===== check =====
+        String spec =
+            "UserSession {" +
+            "  Sequence {" +
+            "    Interaction elem1 {}" +
+            "    TextInput elem1 (a) {}" +
+            "    Interaction elem1 {}" +
+            "    Interaction elem1 {}" +
+            "    Interaction elem1 {}" +
+            "  }" +
+            "}";
+
+        UsabilityDefect[] expectedDefects = new UsabilityDefect[0];
+
+        assertUsabilityEvaluationResult(expectedDefects, rule.evaluate(createTaskModel(spec)));
+
+    }
+
+
+    /**
+     *
+     */
+    @Test
+    public void testCombinationsOfTextInputInteractionsAndOtherInteractions_04() {
+        TextInputStatisticsRule rule = new TextInputStatisticsRule();
+
+        // ===== check =====
+        String spec =
+            "UserSession {" +
             "  Selection {" +
-            "    TextInput (h) {}" +
-            "    TextInput (i) {}" +
-            "    TextInput (j) {}" +
-            "    TextInput (k) {}" +
-            "  }" +
+            "    TextInput elem1 (a) {}" +
+            "  }" +
+            "}";
+
+        UsabilityDefect[] expectedDefects = new UsabilityDefect[]
+            { new UsabilityDefect(HIGH, TEXT_FIELD_INPUT_RATIO) };
+
+        assertUsabilityEvaluationResult(expectedDefects, rule.evaluate(createTaskModel(spec)));
+
+    }
+
+
+    /**
+     *
+     */
+    @Test
+    public void testCombinationsOfTextInputInteractionsAndOtherInteractions_05() {
+        TextInputStatisticsRule rule = new TextInputStatisticsRule();
+
+        // ===== check =====
+        String spec =
+            "UserSession {" +
+            "  Sequence seq1 {" +
+            "    TextInput elem1 (a) {}" +
+            "    Sequence seq2 {" +
+            "      Interaction elem1 {}" +
+            "      TextInput elem1 (b) {}" +
+            "      TextInput elem1 (c) {}" +
+            "      Interaction elem1 {}" +
+            "      TextInput elem1 (d) {}" +
+            "    }" +
+            "    Iteration it1 {" +
+            "      TextInput elem1 (e) {}" +
+            "    }" +
+            "    Interaction elem1 {}" +
+            "    Selection sel1 {" +
+            "      TextInput elem1 (f) {}" +
+            "    }" +
+            "    Sequence seq3 {" +
+            "      TextInput elem1 (j) {}" +
+            "      Sequence seq4 {" +
+            "        TextInput elem1 (k) {}" +
+            "        Interaction elem1 {}" +
+            "        TextInput elem1 (l) {}" +
+            "        TextInput elem1 (m) {}" +
+            "        Interaction elem1 {}" +
+            "        TextInput elem1 (n) {}" +
+            "        TextInput elem1 (o) {}" +
+            "      }" +
+            "      Iteration it2{" +
+            "        Interaction elem1 {}" +
+            "      }" +
+            "      Interaction elem1 {}" +
+            "      Selection sel1 {" +
+            "        TextInput elem1 (p) {}" +
+            "      }" +
+            "    }" +
+            "    Selection sel1 {" +
+            "      Sequence seq 5{" +
+            "        TextInput elem1 (w) {}" +
+            "        Interaction elem1 {}" +
+            "        TextInput elem1 (x) {}" +
+            "        TextInput elem1 (y) {}" +
+            "        Interaction elem1 {}" +
+            "      }" +
+            "    }" +
+            "    Interaction elem1 {}" +
+            "  }" +
+            "}";
+
+        UsabilityDefect[] expectedDefects = new UsabilityDefect[]
+            { new UsabilityDefect(LOW, TEXT_FIELD_INPUT_RATIO) };
+
+        assertUsabilityEvaluationResult(expectedDefects, rule.evaluate(createTaskModel(spec)));
+
+    }
+
+
+    /**
+     *
+     */
+    @Test
+    public void testCombinationsOfTextInputInteractionsAndOtherInteractions_06() {
+        TextInputStatisticsRule rule = new TextInputStatisticsRule();
+
+        // ===== check =====
+        String spec =
+            "UserSession {" +
+            "  Sequence seq1 {" +
+            "    TextInput elem1 (a) {}" +
+            "    Sequence seq2 {" +
+            "      Interaction elem1 {}" +
+            "      TextInput elem1 (b) {}" +
+            "      Interaction elem1 {}" +
+            "      Interaction elem1 {}" +
+            "      TextInput elem1 (c) {}" +
+            "    }" +
+            "    Iteration it1 {" +
+            "      TextInput elem1 (d) {}" +
+            "    }" +
+            "    Interaction elem1 {}" +
+            "    Selection sel1 {" +
+            "      TextInput elem1 (e) {}" +
+            "    }" +
+            "    Sequence seq3 {" +
+            "      TextInput elem1 (i) {}" +
+            "      Sequence seq4 {" +
+            "        TextInput elem1 (j) {}" +
+            "        Interaction elem1 {}" +
+            "        TextInput elem1 (k) {}" +
+            "        Interaction elem1 {}" +
+            "        Interaction elem1 {}" +
+            "        TextInput elem1 (m) {}" +
+            "        Interaction elem1 {}" +
+            "      }" +
+            "      Iteration it2 {" +
+            "        Interaction elem1 {}" +
+            "      }" +
+            "      Interaction elem1 {}" +
+            "      Selection sel1 {" +
+            "        Interaction elem1 {}" +
+            "      }" +
+            "    }" +
+            "    Selection sel1 {" +
+            "      Sequence seq5 {" +
+            "        TextInput elem1 (v) {}" +
+            "        Interaction elem1 {}" +
+            "        Interaction elem1 {}" +
+            "        TextInput elem1 (x) {}" +
+            "        Interaction elem1 {}" +
+            "      }" +
+            "    }" +
+            "    Interaction elem1 {}" +
+            "  }" +
+            "}";
+
+        UsabilityDefect[] expectedDefects = new UsabilityDefect[]
+            { new UsabilityDefect(INFO, TEXT_FIELD_INPUT_RATIO) };
+
+        assertUsabilityEvaluationResult(expectedDefects, rule.evaluate(createTaskModel(spec)));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void testTextEntryRepetitions_01() {
+        TextInputStatisticsRule rule = new TextInputStatisticsRule();
+
+        // ===== check =====
+        String spec =
+            "UserSession {" +
+            "  Sequence seq1 {" +
+            "    TextInput elem1 (a) {}" +
+            "    TextInput elem2 (a) {}" +
+            "  }" +
+            "}";
+
+        UsabilityDefect[] expectedDefects = new UsabilityDefect[]
+            { new UsabilityDefect(HIGH, TEXT_FIELD_INPUT_RATIO),
+              new UsabilityDefect(HIGH, TEXT_FIELD_INPUT_REPETITIONS),
+              new UsabilityDefect(HIGH, TEXT_FIELD_INPUT_REPETITIONS) };
+
+        assertUsabilityEvaluationResult(expectedDefects, rule.evaluate(createTaskModel(spec)));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void testTextEntryRepetitions_02() {
+        TextInputStatisticsRule rule = new TextInputStatisticsRule();
+
+        // ===== check =====
+        String spec =
+            "UserSession {" +
+            "  Sequence seq1 {" +
+            "    TextInput elem1 (a) {}" +
+            "    Sequence seq2 {" +
+            "      TextInput elem2 (a) {}" +
+            "    }" +
+            "    Iteration it1 {" +
+            "      TextInput elem3 (a) {}" +
+            "    }" +
+            "    Selection sel1 {" +
+            "      TextInput elem4 (a) {}" +
+            "    }" +
+            "  }" +
+            "}";
+
+        UsabilityDefect[] expectedDefects = new UsabilityDefect[]
+            { new UsabilityDefect(HIGH, TEXT_FIELD_INPUT_RATIO),
+              new UsabilityDefect(HIGH, TEXT_FIELD_INPUT_REPETITIONS),
+              new UsabilityDefect(HIGH, TEXT_FIELD_INPUT_REPETITIONS),
+              new UsabilityDefect(HIGH, TEXT_FIELD_INPUT_REPETITIONS),
+              new UsabilityDefect(HIGH, TEXT_FIELD_INPUT_REPETITIONS),
+              new UsabilityDefect(HIGH, TEXT_FIELD_INPUT_REPETITIONS),
+              new UsabilityDefect(HIGH, TEXT_FIELD_INPUT_REPETITIONS),
+              new UsabilityDefect(HIGH, TEXT_FIELD_INPUT_REPETITIONS),
+              new UsabilityDefect(HIGH, TEXT_FIELD_INPUT_REPETITIONS),
+              new UsabilityDefect(HIGH, TEXT_FIELD_INPUT_REPETITIONS),
+              new UsabilityDefect(HIGH, TEXT_FIELD_INPUT_REPETITIONS),
+              new UsabilityDefect(HIGH, TEXT_FIELD_INPUT_REPETITIONS),
+              new UsabilityDefect(HIGH, TEXT_FIELD_INPUT_REPETITIONS) };
+
+        assertUsabilityEvaluationResult(expectedDefects, rule.evaluate(createTaskModel(spec)));
+
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void testTextEntryRepetitions_03() {
+        TextInputStatisticsRule rule = new TextInputStatisticsRule();
+
+        // ===== check =====
+        String spec =
+            "UserSession {" +
+            "  Sequence seq1 {" +
+            "    TextInput elem1 (a) {}" +
+            "    TextInput elem2 (z) {}" +
+            "    TextInput elem1 (b) {}" +
+            "    TextInput elem2 (b) {}" +
+            "    TextInput elem1 (c) {}" +
+            "    TextInput elem2 (c) {}" +
+            "  }" +
+            "}";
+
+        UsabilityDefect[] expectedDefects = new UsabilityDefect[]
+            { new UsabilityDefect(HIGH, TEXT_FIELD_INPUT_RATIO),
+              new UsabilityDefect(MEDIUM, TEXT_FIELD_INPUT_REPETITIONS),
+              new UsabilityDefect(MEDIUM, TEXT_FIELD_INPUT_REPETITIONS) };
+
+        assertUsabilityEvaluationResult(expectedDefects, rule.evaluate(createTaskModel(spec)));
+
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void testTextEntryRepetitions_04() {
+        TextInputStatisticsRule rule = new TextInputStatisticsRule();
+
+        // ===== check =====
+        String spec =
+            "UserSession {" +
+            "  Sequence seq1 {" +
+            "    TextInput elem1 (a) {}" +
+            "    TextInput elem2 (z) {}" +
+            "    TextInput elem1 (b) {}" +
+            "    TextInput elem2 (y) {}" +
+            "    TextInput elem1 (c) {}" +
+            "    TextInput elem2 (c) {}" +
+            "  }" +
+            "}";
+
+        UsabilityDefect[] expectedDefects = new UsabilityDefect[]
+            { new UsabilityDefect(HIGH, TEXT_FIELD_INPUT_RATIO),
+              new UsabilityDefect(LOW, TEXT_FIELD_INPUT_REPETITIONS),
+              new UsabilityDefect(LOW, TEXT_FIELD_INPUT_REPETITIONS) };
+
+        assertUsabilityEvaluationResult(expectedDefects, rule.evaluate(createTaskModel(spec)));
+
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void testTextEntryRepetitions_05() {
+        TextInputStatisticsRule rule = new TextInputStatisticsRule();
+
+        // ===== check =====
+        String spec =
+            "UserSession {" +
+            "  Sequence seq1 {" +
+            "    TextInput elem1 (a) {}" +
+            "    TextInput elem2 (z) {}" +
+            "    TextInput elem1 (b) {}" +
+            "    TextInput elem2 (y) {}" +
+            "    TextInput elem1 (c) {}" +
+            "    TextInput elem2 (x) {}" +
+            "    TextInput elem1 (d) {}" +
+            "    TextInput elem2 (w) {}" +
+            "    TextInput elem1 (e) {}" +
+            "    TextInput elem2 (v) {}" +
+            "    TextInput elem1 (f) {}" +
+            "    TextInput elem2 (f) {}" +
+            "  }" +
+            "}";
+
+        UsabilityDefect[] expectedDefects = new UsabilityDefect[]
+            { new UsabilityDefect(HIGH, TEXT_FIELD_INPUT_RATIO),
+              new UsabilityDefect(INFO, TEXT_FIELD_INPUT_REPETITIONS),
+              new UsabilityDefect(INFO, TEXT_FIELD_INPUT_REPETITIONS) };
+
+        assertUsabilityEvaluationResult(expectedDefects, rule.evaluate(createTaskModel(spec)));
+
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void testTextEntryRepetitions_06() {
+        TextInputStatisticsRule rule = new TextInputStatisticsRule();
+
+        // ===== check =====
+        String spec =
+            "UserSession {" +
+            "  Sequence seq1 {" +
+            "    TextInput elem1 (a) {}" +
+            "    TextInput elem1 (b) {}" +
+            "    Sequence seq2 {" +
+            "      TextInput elem2 (a) {}" +
+            "      TextInput elem2 (b) {}" +
+            "      TextInput elem2 (c) {}" +
+            "    }" +
+            "  }" +
+            "}";
+
+        UsabilityDefect[] expectedDefects = new UsabilityDefect[]
+            { new UsabilityDefect(HIGH, TEXT_FIELD_INPUT_RATIO),
+              new UsabilityDefect(HIGH, TEXT_FIELD_INPUT_REPETITIONS),
+              new UsabilityDefect(MEDIUM, TEXT_FIELD_INPUT_REPETITIONS) };
+
+        assertUsabilityEvaluationResult(expectedDefects, rule.evaluate(createTaskModel(spec)));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void testTextEntryRepetitions_07() {
+        TextInputStatisticsRule rule = new TextInputStatisticsRule();
+
+        // ===== check =====
+        String spec =
+            "UserSession {" +
+            "  Sequence seq1 {" +
+            "    TextInput elem1 (a) {}" +
+            "    Sequence seq2 {" +
+            "      TextInput elem2 (a) {}" +
+            "      TextInput elem2 (b) {}" +
+            "      TextInput elem2 (c) {}" +
+            "    }" +
+            "  }" +
+            "}";
+
+        UsabilityDefect[] expectedDefects = new UsabilityDefect[]
+            { new UsabilityDefect(HIGH, TEXT_FIELD_INPUT_RATIO),
+              new UsabilityDefect(HIGH, TEXT_FIELD_INPUT_REPETITIONS),
+              new UsabilityDefect(LOW, TEXT_FIELD_INPUT_REPETITIONS) };
+
+        assertUsabilityEvaluationResult(expectedDefects, rule.evaluate(createTaskModel(spec)));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void testNoLetterOrDigitInput_01() {
+        TextInputStatisticsRule rule = new TextInputStatisticsRule();
+
+        // ===== check =====
+        String spec =
+            "UserSession {" +
             "  Sequence {" +
-            "    TextInput (l) {}" +
-            "    Sequence {" +
-            "      TextInput (m) {}" +
-            "      TextInput (n) {}" +
-            "      TextInput (o) {}" +
-            "      TextInput (p) {}" +
-            "    }" +
-            "    Iteration {" +
-            "      TextInput (q) {}" +
-            "    }" +
-            "    TextInput (r) {}" +
-            "    Selection {" +
-            "      TextInput (s) {}" +
-            "      TextInput (t) {}" +
-            "      TextInput (u) {}" +
-            "      TextInput (v) {}" +
-            "    }" +
-            "  }" +
-            "  Selection {" +
-            "    TextInput (w) {}" +
-            "    Sequence {" +
-            "      TextInput (x) {}" +
-            "      TextInput (y) {}" +
-            "      TextInput (z) {}" +
-            "      TextInput (aa) {}" +
-            "    }" +
-            "    Iteration {" +
-            "      TextInput (ab) {}" +
-            "    }" +
-            "    TextInput (ac) {}" +
-            "    Selection {" +
-            "      TextInput (ad) {}" +
-            "      TextInput (ae) {}" +
-            "      TextInput (af) {}" +
-            "      TextInput (ag) {}" +
-            "    }" +
-            "  }" +
-            "  TextInput (ah) {}" +
-            "}";
-
-        expectedDefects = new UsabilityDefect[]
-            { new UsabilityDefect(HIGH, TEXT_FIELD_INPUT_RATIO) };
-
-        assertUsabilityEvaluationResult
-            (expectedDefects, manager.evaluateUsability(createTaskModel(spec)));
-    }
-
-    /**
-     * TODO: comment
-     * 
-     */
-    @Test
-    public void testCombinationsOfTextInputInteractionsAndOtherInteractions() {
-        UsabilityEvaluationManager manager = new UsabilityEvaluationManager();
-
-        // ===== check =====
-        String spec =
-            "Sequence {" +
-            "  Interaction {}" +
-            "  TextInput (a) {}" +
-            "  TextInput (b) {}" +
-            "  Interaction {}" +
-            "  TextInput (c) {}" +
-            "}";
-
-        UsabilityDefect[] expectedDefects = new UsabilityDefect[]
-            { new UsabilityDefect(LOW, TEXT_FIELD_INPUT_RATIO) };
-
-        assertUsabilityEvaluationResult
-            (expectedDefects, manager.evaluateUsability(createTaskModel(spec)));
-
-        // ===== check =====
-        spec =
-            "Sequence {" +
-            "  Interaction {}" +
-            "  TextInput (a) {}" +
-            "  Interaction {}" +
-            "  Interaction {}" +
-            "  TextInput (c) {}" +
-            "}";
-
-        expectedDefects = new UsabilityDefect[]
-            { new UsabilityDefect(INFO, TEXT_FIELD_INPUT_RATIO) };
-
-        assertUsabilityEvaluationResult
-            (expectedDefects, manager.evaluateUsability(createTaskModel(spec)));
-
-        // ===== check =====
-        spec =
-            "Sequence {" +
-            "  Interaction {}" +
-            "  TextInput (a) {}" +
-            "  Interaction {}" +
-            "  Interaction {}" +
-            "  Interaction {}" +
-            "}";
-
-        expectedDefects = new UsabilityDefect[0];
-
-        assertUsabilityEvaluationResult
-            (expectedDefects, manager.evaluateUsability(createTaskModel(spec)));
-
-        // ===== check =====
-        spec =
-            "Selection {" +
-            "  Interaction {}" +
-            "  TextInput (a) {}" +
-            "  TextInput (b) {}" +
-            "  Interaction {}" +
-            "  TextInput (c) {}" +
-            "}";
-
-        expectedDefects = new UsabilityDefect[]
-            { new UsabilityDefect(LOW, TEXT_FIELD_INPUT_RATIO) };
-
-        assertUsabilityEvaluationResult
-            (expectedDefects, manager.evaluateUsability(createTaskModel(spec)));
-
-        // ===== check =====
-        spec =
-            "Sequence {" +
-            "  TextInput (a) {}" +
+            "    TextInput elem1 (_a_b_c_) {}" +
+            "  }" +
+            "}";
+
+        UsabilityDefect[] expectedDefects = new UsabilityDefect[]
+            { new UsabilityDefect(HIGH, TEXT_FIELD_INPUT_RATIO),
+              new UsabilityDefect(HIGH, TEXT_FIELD_NO_LETTER_OR_DIGIT_RATIO) };
+
+        assertUsabilityEvaluationResult(expectedDefects, rule.evaluate(createTaskModel(spec)));
+
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void testNoLetterOrDigitInput_02() {
+        TextInputStatisticsRule rule = new TextInputStatisticsRule();
+
+        // ===== check =====
+        String spec =
+            "UserSession {" +
             "  Sequence {" +
-            "    Interaction {}" +
-            "    TextInput (b) {}" +
-            "    TextInput (c) {}" +
-            "    Interaction {}" +
-            "    TextInput (d) {}" +
-            "  }" +
-            "  Iteration {" +
-            "    TextInput (e) {}" +
-            "  }" +
-            "  Interaction {}" +
-            "  Selection {" +
-            "    Interaction {}" +
-            "    TextInput (f) {}" +
-            "    TextInput (g) {}" +
-            "    Interaction {}" +
-            "    TextInput (h) {}" +
-            "    TextInput (i) {}" +
-            "  }" +
+            "    TextInput elem1 (12345_6789012345) {}" +
+            "  }" +
+            "}";
+
+        UsabilityDefect[] expectedDefects = new UsabilityDefect[]
+            { new UsabilityDefect(HIGH, TEXT_FIELD_INPUT_RATIO),
+              new UsabilityDefect(MEDIUM, TEXT_FIELD_NO_LETTER_OR_DIGIT_RATIO) };
+
+        assertUsabilityEvaluationResult(expectedDefects, rule.evaluate(createTaskModel(spec)));
+
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void testNoLetterOrDigitInput_03() {
+        TextInputStatisticsRule rule = new TextInputStatisticsRule();
+
+        // ===== check =====
+        String spec =
+            "UserSession {" +
             "  Sequence {" +
-            "    TextInput (j) {}" +
-            "    Sequence {" +
-            "      TextInput (k) {}" +
-            "      Interaction {}" +
-            "      TextInput (l) {}" +
-            "      TextInput (m) {}" +
-            "      Interaction {}" +
-            "      TextInput (n) {}" +
-            "      TextInput (o) {}" +
-            "    }" +
-            "    Iteration {" +
-            "      Interaction {}" +
-            "    }" +
-            "    Interaction {}" +
-            "    Selection {" +
-            "      TextInput (p) {}" +
-            "      TextInput (q) {}" +
-            "      TextInput (r) {}" +
-            "      Interaction {}" +
-            "      TextInput (s) {}" +
-            "      TextInput (t) {}" +
-            "      Interaction {}" +
-            "      TextInput (u) {}" +
-            "      TextInput (v) {}" +
-            "    }" +
-            "  }" +
-            "  Selection {" +
-            "    Interaction {}" +
-            "    Sequence {" +
-            "      TextInput (w) {}" +
-            "      Interaction {}" +
-            "      TextInput (x) {}" +
-            "      TextInput (y) {}" +
-            "      Interaction {}" +
-            "    }" +
-            "    Iteration {" +
-            "      TextInput (z) {}" +
-            "    }" +
-            "    TextInput (aa) {}" +
-            "    Selection {" +
-            "      TextInput (ab) {}" +
-            "      Interaction {}" +
-            "      TextInput (ac) {}" +
-            "      TextInput (ad) {}" +
-            "      Interaction {}" +
-            "      TextInput (ae) {}" +
-            "    }" +
-            "  }" +
-            "  Interaction {}" +
-            "}";
-
-        expectedDefects = new UsabilityDefect[]
-            { new UsabilityDefect(LOW, TEXT_FIELD_INPUT_RATIO) };
-
-        assertUsabilityEvaluationResult
-            (expectedDefects, manager.evaluateUsability(createTaskModel(spec)));
-
-        // ===== check =====
-        spec =
-            "Sequence {" +
-            "  TextInput (a) {}" +
+            "    TextInput elem1 (123456789012345678901234567890_123456789012345) {}" +
+            "  }" +
+            "}";
+
+        UsabilityDefect[] expectedDefects = new UsabilityDefect[]
+            { new UsabilityDefect(HIGH, TEXT_FIELD_INPUT_RATIO),
+              new UsabilityDefect(LOW, TEXT_FIELD_NO_LETTER_OR_DIGIT_RATIO) };
+
+        assertUsabilityEvaluationResult(expectedDefects, rule.evaluate(createTaskModel(spec)));
+
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void testNoLetterOrDigitInput_04() {
+        TextInputStatisticsRule rule = new TextInputStatisticsRule();
+
+        // ===== check =====
+        String spec =
+            "UserSession {" +
             "  Sequence {" +
-            "    Interaction {}" +
-            "    TextInput (b) {}" +
-            "    Interaction {}" +
-            "    Interaction {}" +
-            "    TextInput (c) {}" +
-            "  }" +
-            "  Iteration {" +
-            "    TextInput (d) {}" +
-            "  }" +
-            "  Interaction {}" +
-            "  Selection {" +
-            "    Interaction {}" +
-            "    TextInput (e) {}" +
-            "    Interaction {}" +
-            "    Interaction {}" +
-            "    TextInput (g) {}" +
-            "    Interaction {}" +
-            "  }" +
-            "  Sequence {" +
-            "    TextInput (i) {}" +
-            "    Sequence {" +
-            "      TextInput (j) {}" +
-            "      Interaction {}" +
-            "      TextInput (k) {}" +
-            "      Interaction {}" +
-            "      Interaction {}" +
-            "      TextInput (m) {}" +
-            "      Interaction {}" +
-            "    }" +
-            "    Iteration {" +
-            "      Interaction {}" +
-            "    }" +
-            "    Interaction {}" +
-            "    Selection {" +
-            "      TextInput (o) {}" +
-            "      Interaction {}" +
-            "      Interaction {}" +
-            "      Interaction {}" +
-            "      Interaction {}" +
-            "      TextInput (s) {}" +
-            "      Interaction {}" +
-            "      TextInput (t) {}" +
-            "      TextInput (u) {}" +
-            "    }" +
-            "  }" +
-            "  Selection {" +
-            "    Interaction {}" +
-            "    Sequence {" +
-            "      TextInput (v) {}" +
-            "      Interaction {}" +
-            "      Interaction {}" +
-            "      TextInput (x) {}" +
-            "      Interaction {}" +
-            "    }" +
-            "    Iteration {" +
-            "      TextInput (y) {}" +
-            "    }" +
-            "    TextInput (z) {}" +
-            "    Selection {" +
-            "      TextInput (aa) {}" +
-            "      Interaction {}" +
-            "      TextInput (ab) {}" +
-            "      Interaction {}" +
-            "      Interaction {}" +
-            "      TextInput (ad) {}" +
-            "    }" +
-            "  }" +
-            "  Interaction {}" +
-            "}";
-
-        expectedDefects = new UsabilityDefect[]
-            { new UsabilityDefect(INFO, TEXT_FIELD_INPUT_RATIO) };
-
-        assertUsabilityEvaluationResult
-            (expectedDefects, manager.evaluateUsability(createTaskModel(spec)));
-    }
-
-    /**
-     * TODO: comment
-     * 
-     */
-    @Test
-    public void testTextEntryRepetitions() {
-        UsabilityEvaluationManager manager = new UsabilityEvaluationManager();
-
-        // ===== check =====
-        String spec =
-            "Sequence {" +
-            "  TextInput (a b c) {}" +
-            "  Sequence {" +
-            "    TextInput (a) {}" +
-            "    TextInput (b) {}" +
-            "    TextInput (c) {}" +
-            "    TextInput (a) {}" +
-            "  }" +
-            "  Iteration {" +
-            "    TextInput (a) {}" +
-            "  }" +
-            "  TextInput (a) {}" +
-            "  Selection {" +
-            "    TextInput (b c) {}" +
-            "    TextInput (a) {}" +
-            "    TextInput (a c) {}" +
-            "    TextInput (b a) {}" +
-            "  }" +
-            "  Sequence {" +
-            "    TextInput (b c) {}" +
-            "    Sequence {" +
-            "      TextInput (d a c) {}" +
-            "      TextInput (b b b a) {}" +
-            "      TextInput (a a c c) {}" +
-            "      TextInput (b b a) {}" +
-            "    }" +
-            "  }" +
-            "  TextInput (d) {}" +
-            "}";
-
-        UsabilityDefect[] expectedDefects = new UsabilityDefect[]
-            { new UsabilityDefect(HIGH, TEXT_FIELD_INPUT_RATIO),
-              new UsabilityDefect(HIGH, TEXT_FIELD_INPUT_REPETITIONS) };
-
-        assertUsabilityEvaluationResult
-            (expectedDefects, manager.evaluateUsability(createTaskModel(spec)));
-
-        // ===== check =====
-        spec =
-            "Sequence {" +
-            "  TextInput (a b c d e f g h i j k l m) {}" +
-            "  Sequence {" +
-            "    TextInput (a) {}" +
-            "    TextInput (b) {}" +
-            "    TextInput (c) {}" +
-            "    TextInput (d) {}" +
-            "  }" +
-            "  Iteration {" +
-            "    TextInput (e) {}" +
-            "  }" +
-            "  TextInput (f) {}" +
-            "  Selection {" +
-            "    TextInput (g) {}" +
-            "    TextInput (h) {}" +
-            "    TextInput (i) {}" +
-            "    TextInput (j) {}" +
-            "  }" +
-            "  Sequence {" +
-            "    TextInput (k) {}" +
-            "    Sequence {" +
-            "      TextInput (l) {}" +
-            "      TextInput (m) {}" +
-            "      TextInput (n) {}" +
-            "      TextInput (o) {}" +
-            "    }" +
-            "  }" +
-            "  TextInput (p) {}" +
-            "}";
-
-        expectedDefects = new UsabilityDefect[]
-            { new UsabilityDefect(HIGH, TEXT_FIELD_INPUT_RATIO),
-              new UsabilityDefect(HIGH, TEXT_FIELD_INPUT_REPETITIONS) };
-
-        assertUsabilityEvaluationResult
-            (expectedDefects, manager.evaluateUsability(createTaskModel(spec)));
-
-        // ===== check =====
-        spec =
-            "Sequence {" +
-            "  TextInput (a b c d e f g h i j k l m) {}" +
-            "  Sequence {" +
-            "    TextInput (a) {}" +
-            "    TextInput (b) {}" +
-            "    TextInput (c) {}" +
-            "    TextInput (d) {}" +
-            "  }" +
-            "  Iteration {" +
-            "    TextInput (e) {}" +
-            "  }" +
-            "  TextInput (a) {}" +
-            "  Selection {" +
-            "    TextInput (b) {}" +
-            "    TextInput (c) {}" +
-            "    TextInput (d) {}" +
-            "    TextInput (e) {}" +
-            "  }" +
-            "  Sequence {" +
-            "    TextInput (a) {}" +
-            "    Sequence {" +
-            "      TextInput (b) {}" +
-            "      TextInput (c) {}" +
-            "      TextInput (d) {}" +
-            "      TextInput (e) {}" +
-            "    }" +
-            "  }" +
-            "  TextInput (f) {}" +
-            "}";
-
-        expectedDefects = new UsabilityDefect[]
-            { new UsabilityDefect(HIGH, TEXT_FIELD_INPUT_RATIO),
-              new UsabilityDefect(MEDIUM, TEXT_FIELD_INPUT_REPETITIONS) };
-
-        assertUsabilityEvaluationResult
-            (expectedDefects, manager.evaluateUsability(createTaskModel(spec)));
-
-        // ===== check =====
-        spec =
-            "Sequence {" +
-            "  TextInput (a b c d e f g h i j k l m) {}" +
-            "  Sequence {" +
-            "    TextInput (a) {}" +
-            "    TextInput (b) {}" +
-            "    TextInput (c) {}" +
-            "    TextInput (a) {}" +
-            "  }" +
-            "  Iteration {" +
-            "    TextInput (b) {}" +
-            "  }" +
-            "  TextInput (c) {}" +
-            "  Selection {" +
-            "    TextInput (a) {}" +
-            "    TextInput (b) {}" +
-            "    TextInput (c) {}" +
-            "    TextInput (a) {}" +
-            "  }" +
-            "  Sequence {" +
-            "    TextInput (b) {}" +
-            "    Sequence {" +
-            "      TextInput (c) {}" +
-            "      TextInput (a) {}" +
-            "      TextInput (b) {}" +
-            "      TextInput (c) {}" +
-            "    }" +
-            "  }" +
-            "  TextInput (a) {}" +
-            "}";
-
-        expectedDefects = new UsabilityDefect[]
-            { new UsabilityDefect(HIGH, TEXT_FIELD_INPUT_RATIO),
-              new UsabilityDefect(MEDIUM, TEXT_FIELD_INPUT_REPETITIONS) };
-
-        assertUsabilityEvaluationResult
-            (expectedDefects, manager.evaluateUsability(createTaskModel(spec)));
-
-        // ===== check =====
-        spec =
-            "Sequence {" +
-            "  TextInput (a b c) {}" +
-            "  Sequence {" +
-            "    TextInput (a) {}" +
-            "    TextInput (b) {}" +
-            "    TextInput (c) {}" +
-            "  }" +
-            "}";
-
-        expectedDefects = new UsabilityDefect[]
-            { new UsabilityDefect(HIGH, TEXT_FIELD_INPUT_RATIO),
-              new UsabilityDefect(LOW, TEXT_FIELD_INPUT_REPETITIONS) };
-
-        assertUsabilityEvaluationResult
-            (expectedDefects, manager.evaluateUsability(createTaskModel(spec)));
-
-        // ===== check =====
-        spec =
-            "Sequence {" +
-            "  TextInput (a b c) {}" +
-            "  Sequence {" +
-            "    TextInput (a) {}" +
-            "    TextInput (a) {}" +
-            "    TextInput (b) {}" +
-            "  }" +
-            "}";
-
-        expectedDefects = new UsabilityDefect[]
-            { new UsabilityDefect(HIGH, TEXT_FIELD_INPUT_RATIO),
-              new UsabilityDefect(LOW, TEXT_FIELD_INPUT_REPETITIONS) };
-
-        assertUsabilityEvaluationResult
-            (expectedDefects, manager.evaluateUsability(createTaskModel(spec)));
-
-        // ===== check =====
-        spec =
-            "Sequence {" +
-            "  TextInput (a b c) {}" +
-            "  Sequence {" +
-            "    TextInput (a) {}" +
-            "    TextInput (d) {}" +
-            "    TextInput (e) {}" +
-            "  }" +
-            "}";
-
-        expectedDefects = new UsabilityDefect[]
-            { new UsabilityDefect(HIGH, TEXT_FIELD_INPUT_RATIO),
-              new UsabilityDefect(INFO, TEXT_FIELD_INPUT_REPETITIONS) };
-
-        assertUsabilityEvaluationResult
-            (expectedDefects, manager.evaluateUsability(createTaskModel(spec)));
-
-    }
-
-    /**
-     * TODO: comment
-     * 
-     */
-    @Test
-    public void testNoLetterOrDigitInput() {
-        UsabilityEvaluationManager manager = new UsabilityEvaluationManager();
-
-        // ===== check =====
-        String spec =
-            "Sequence {" +
-            "  TextInput (_a_b_c_) {}" +
-            "}";
-
-        UsabilityDefect[] expectedDefects = new UsabilityDefect[]
-            { new UsabilityDefect(HIGH, TEXT_FIELD_INPUT_RATIO),
-              new UsabilityDefect(HIGH, TEXT_FIELD_NO_LETTER_OR_DIGIT_RATIO) };
-
-        assertUsabilityEvaluationResult
-            (expectedDefects, manager.evaluateUsability(createTaskModel(spec)));
-
-        // ===== check =====
-        spec =
-            "Sequence {" +
-            "  TextInput (12345_6789012345) {}" +
-            "}";
-
-        expectedDefects = new UsabilityDefect[]
-            { new UsabilityDefect(HIGH, TEXT_FIELD_INPUT_RATIO),
-              new UsabilityDefect(MEDIUM, TEXT_FIELD_NO_LETTER_OR_DIGIT_RATIO) };
-
-        assertUsabilityEvaluationResult
-            (expectedDefects, manager.evaluateUsability(createTaskModel(spec)));
-
-        // ===== check =====
-        spec =
-            "Sequence {" +
-            "  TextInput (123456789012345678901234567890_123456789012345) {}" +
-            "}";
-
-        expectedDefects = new UsabilityDefect[]
-            { new UsabilityDefect(HIGH, TEXT_FIELD_INPUT_RATIO),
-              new UsabilityDefect(LOW, TEXT_FIELD_NO_LETTER_OR_DIGIT_RATIO) };
-
-        assertUsabilityEvaluationResult
-            (expectedDefects, manager.evaluateUsability(createTaskModel(spec)));
-
-        // ===== check =====
-        spec =
-            "Sequence {" +
-            "  TextInput (1234567890123456789012345678901234567890123456789_01234567890" +
+            "    TextInput elem1 (1234567890123456789012345678901234567890123456789_01234567890" +
             "12345678901234567890123456789012345) {}" +
-            "}";
-
-        expectedDefects = new UsabilityDefect[]
+            "  }" +
+            "}";
+
+        UsabilityDefect[] expectedDefects = new UsabilityDefect[]
             { new UsabilityDefect(HIGH, TEXT_FIELD_INPUT_RATIO),
               new UsabilityDefect(INFO, TEXT_FIELD_NO_LETTER_OR_DIGIT_RATIO) };
 
-        assertUsabilityEvaluationResult
-            (expectedDefects, manager.evaluateUsability(createTaskModel(spec)));
+        assertUsabilityEvaluationResult(expectedDefects, rule.evaluate(createTaskModel(spec)));
 
     }
