diff --git a/src/lib/test/event-log.hpp b/src/lib/test/event-log.hpp index 8e63f37e3..443d8802d 100644 --- a/src/lib/test/event-log.hpp +++ b/src/lib/test/event-log.hpp @@ -111,7 +111,7 @@ namespace test{ bool foundSolution() { - return !isnil (solution_); + return not isnil (solution_); } /** this is actually called after each refinement of @@ -129,7 +129,7 @@ namespace test{ if (look_for_match_ and not isnil (violation_)) return; // already failed, no further check necessary - if (foundSolution()) + if (foundSolution()) // NOTE this pulls the filter { lastMatch_ = matchSpec+" @ "+string(*solution_) + (isnil(lastMatch_)? "" @@ -898,10 +898,14 @@ namespace test{ return matcher; } - /** start a query to ensure the given expression does \em not match. + /** start a query to ensure the given expression does _not_ match. * @remarks the query expression is built similar to the other queries, * but the logic of evaluation is flipped: whenever we find any match * the overall result (when evaluating to `bool`) will be `false`. + * @warning this is not an proper exhaustive negation, since the implementation + * does not proper backtracking with a stack of choices. This becomes + * evident, when you combine `ensureNot()` with a switch in search + * direction, like e.g. using `afterXXX` at some point in the chain. */ EventMatch ensureNot (string match) const diff --git a/tests/gui/abstract-tangible-test.cpp b/tests/gui/abstract-tangible-test.cpp index 735b14c18..29a42bfe0 100644 --- a/tests/gui/abstract-tangible-test.cpp +++ b/tests/gui/abstract-tangible-test.cpp @@ -532,6 +532,13 @@ namespace test { .before("revealYourself") .beforeEvent("delivered mark")); + // Note the fine point: the target element /was/ already expanded + // and thus there is no second "expanded" event, nor is there a + // second state mark emitted into the UI-Bus... + CHECK (mock.ensureNot("expand") +// .afterCall("revealYourself") + .afterEvent("expanded")); + cout << "____Event-Log_________________\n" diff --git a/tests/library/test/test-event-log-test.cpp b/tests/library/test/test-event-log-test.cpp index 18ac7c2ac..c6ad29d90 100644 --- a/tests/library/test/test-event-log-test.cpp +++ b/tests/library/test/test-event-log-test.cpp @@ -108,6 +108,9 @@ namespace test{ CHECK (log.verify("ham").after("spam").after("beans")); CHECK (log.verify("ham").after("beans").before("spam").before("ham")); CHECK (not log.verify("spam").after("beans").after("ham")); + + log.event("beans"); + CHECK (log.verify("beans").after("spam")); } diff --git a/wiki/thinkPad.ichthyo.mm b/wiki/thinkPad.ichthyo.mm index 6ffe5f950..f49937dbd 100644 --- a/wiki/thinkPad.ichthyo.mm +++ b/wiki/thinkPad.ichthyo.mm @@ -1818,8 +1818,7 @@ ...der das eigentliche Widget expandieren kann

- - + @@ -1836,8 +1835,7 @@ ggfs müssen alle anderen Funktionen nach unten delegieren

- - +
@@ -1861,8 +1859,7 @@ Standard-Beispiel: Property-Panel

- -
+
@@ -1892,8 +1889,7 @@ ...wenn wir eine Mix-in -Implementierung wählen

- - +
@@ -2041,6 +2037,10 @@ + + + + @@ -2149,7 +2149,7 @@ - + @@ -2327,7 +2327,7 @@ - + @@ -2356,8 +2356,7 @@ oder sie prüfen den Zustand und machen nichts, wenn das Widget nicht da ist

- - +
@@ -18634,8 +18633,7 @@ nicht bool-Testbar

- - + @@ -18663,8 +18661,7 @@ wenn es nicht sichtbar ist. Denn Sichtbarkeit gehört zur UI-Mechanik und geht den Client nix an

- -
+
@@ -18701,8 +18698,7 @@ denn dann gäbe es eine Implementierung "von der Stange"

- - +
@@ -18728,8 +18724,7 @@ aber die Operationen sind der Sache nach nicht symmetrisch

- - +
@@ -25100,6 +25095,13 @@ + + + + + + +
@@ -34410,8 +34412,7 @@ sofern das Widget mit entsprechendem Modus eingefügt wurde

- - +
@@ -35130,8 +35131,7 @@ Gtk::Expander

- - + @@ -35152,8 +35152,7 @@ ...ob beim Expand/Collapse das umschließende Widget resized werden soll

- - +
@@ -35165,8 +35164,7 @@ ob eingeklappt oder ausgeklappt

- -
+
@@ -35184,8 +35182,7 @@ was dazu führt, daß das Kind stets allen verfügbaren Platz nimmt

- - +