[Cuis] New updates
Andres Valloud
avalloud at smalltalk.comcastbiz.net
Fri Nov 27 09:21:45 CST 2015
Hello,
The fixes to exceptions are about solving subtle misbehaviors with the
messages #pass, #outer, and #resignalAs:. Generally speaking, the main
issue was that the correct handler block wouldn't be found. Thus, for
example, sending the message #pass would fail to find a default handler.
I found these types of issues while porting Assessments (more on
Assessments below), because it uses #pass to track exceptions, and
#resignalAs: to remap other exceptions into exceptions Assessments
understands. Correct nested execution of #pass required a stack of
handler contexts, thus now exceptions keep an ordered collection of
handler contexts rather than just the topmost handler. Surely this is
not the only way this can be done.
Assessments is a testing framework specifically designed with
collaboration in mind. I had been making SUnit extensions since 2001,
and eventually I realized sharing such extensions and improvements with
other SUnit users would be fundamentally obstructed. SUnit's design is
such that one has to change the framework itself in order to extend its
behavior. Thus, what I change in my image does not necessarily have to
work in someone else's image, and vice versa. As a result, most SUnit
users end up implementing extensions such as file logging or more
extensive result reporting, and those extensions are incompatible with
each other.
Instead, Assessments is built around the principle that the testing
framework's behavior and extensibility should rely on object composition
rather than subclassing. In addition, a few critical objects are now
reified explicitly. Chief among them is the Assessment (the "test
suite"), with its evaluation context (no parallel). The key is that the
evaluation context of an assessment can change how tests are executed,
how results are collected, and so on. Since this is done by object
composition, it's trivial to e.g. set up an assessment to report results
to multiple files and to the GUI without changing Assessments itself.
As a result, extensions can be shared without the threat of immediate
incompatibility.
But what about pre-existing SUnit tests? Well surely a new testing
framework built around collaboration wouldn't immediately obsolete the
enormous body of SUnit tests out there, or force a migration because NIH
or something like that. And that's exactly what Assessments
accomplishes. Since there is an evaluation context object, an
assessment ("test suite") can specify which execution policy goes for
which check ("test"). Assessments uses this flexibility to execute
SUnit tests in situ, as if SUnit itself was running them. Unlike other
solutions deployed to solve this problem, Assessments does not require
modifications to existing code. Loading Assessments is effectively
invisible to existing SUnit code.
The end result is that the Assessments checklist evaluator (the "test
runner") displays both SUnit tests and native Assessments tests, and one
assessment object can execute both types together.
In addiiton, Assessments provides a clean, native implementation of
SUnit Validation (also known as "Extreme Validation"), as well as SUnit
Benchmarks. Both of these are implemented in terms of Assessments
checklists. Briefly, validation involves using tests to verify e.g.
business objects at run time. A typical application of validation would
be data entry verification. The Benchmarks is another application of
tests, where each test measures the time needed to execute some code.
In addition, Benchmarks can enforce that some code runs within a certain
amount of time. An interesting detail is that the required time is
specified in "message send" units, rather than time. Thus, the
benchmarks do not become obsolete or inappropriate depending on the
speed of the machine where the measurements are taken.
For more information, the Assessments package contains more detailed
comments as well as links to additional detail. I originally presented
Assessments at ESUG 2008, the video of the talk is online here (and
other places):
https://vimeo.com/1945494
There are also some notes on validation here:
http://csl.ensm-douai.fr/Esug2007Media/uploads/1/Extreme.pdf
There is also a paper by Leandro Caniglia titled "Extreme Validation",
which unfortunately I couldn't immediately find in Google. But I image
I can get a copy and put it online somewhere.
Andres.
On 11/23/15 7:35 , Luciano Notarfrancesco wrote:
> Hi all,
> About my recent changes, some of them are 1) extensions to Theme to be
> able to customize some more aspects of how the windows and widgets look,
> or 2) fixes for small bugs that I found on the way, like misalignments
> of a few pixels between parts of a widget or a window. The motivation
> behind this was just to be able to implement a very minimalist look
> (borders of just 1 pixel, no decorations, no icons, no anything that I
> dont need and takes up screen real estate), and a sort of tiling dynamic
> window manager very much like http://dwm.suckless.org
> (https://github.com/len/Cuis-Smalltalk-DWM).
>
> In order to implement this "window manager" as an external package with
> minimal changes to the core system, I decided to: 1) make the current
> Theme receive messages #windowOpen: #windowClosed: every time
> SystemWindows are open or closed, in order to give it a chance to
> implement window-management behaviour or delegate it to a proper window
> manager; 2) move the window-management keyboard shortcuts (like alt-w to
> close) to Theme, so it is all in one place, easy to change, and easy to
> make a Theme that delegates keyboard events to a proper window manager.
>
> Again I did it like this in order to minimize changes to the core
> system. At the moment window management is in part implemented in
> SystemWindow, and also in HandMorph and Morph. I had to make some small
> modifications in order to get the desired behavior when using DWM, and
> keep the original behavior in the base system. Maybe in the long run we
> would want to have a WindowManager class that do this, handle keyboard
> events for the window-management shortcuts and receives #windowOpen: and
> #windowClosed:, etc. But I would like to think better about this before
> adding new concepts and complexity to the core.
>
> Cheers,
> Luciano
>
>
> On Mon, Nov 23, 2015 at 12:59 PM, Juan Vuletich <juan at jvuletich.org
> <mailto:juan at jvuletich.org>> wrote:
>
> Hi all,
>
> I recently included some new updates:
>
> - Fixes to Exceptions by Andrés Valloud and Martin McClure.
> - Assessments framework for testing and validation by Andrés Valloud.
> - Many fixes and enhancements to Layouts, Window drawing, keyboard
> shortcuts, etc. by Luciano Notarfrancesco
>
> Thank you very much Folks! Andrés, Luciano, please comment a bit on
> what you did, especially subtle but important behavior such as
> Exceptions and new stuff like Assessments, and the new Theme and
> Window Manager.
>
> Cheers,
> Juan Vuletich
>
> _______________________________________________
> Cuis mailing list
> Cuis at jvuletich.org <mailto:Cuis at jvuletich.org>
> http://jvuletich.org/mailman/listinfo/cuis_jvuletich.org
>
>
>
>
> _______________________________________________
> Cuis mailing list
> Cuis at jvuletich.org
> http://jvuletich.org/mailman/listinfo/cuis_jvuletich.org
>
More information about the Cuis
mailing list