[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