Thread overview | |||||
---|---|---|---|---|---|
|
June 08, 2011 Cover handler for a statement or a block of statements. | ||||
---|---|---|---|---|
| ||||
Cover handler for a statement or a block of statements. I would like to suggest a method for defining code statement covering. Some examp1es of a cover are as follows :- - try ... finally - this is defined in dotnet as a using - try ... (catch)+ - cursor save and display others ... restore saved cursor a possible syntax - cover hourglass(Application &app) { Cursor save = app.cursor; app.cursor = HOURGLASS_CURSOR; ~ code ~ app.cursor = save; } usage could be something like - void function(Application &app) { hourglass(app) { ... // code to be run by cover } } |
June 08, 2011 Re: Cover handler for a statement or a block of statements. | ||||
---|---|---|---|---|
| ||||
Posted in reply to vincent | On 2011-06-08 12:06, vincent wrote:
> Cover handler for a statement or a block of statements.
>
> I would like to suggest a method for defining code statement
> covering. Some examp1es of a cover are as follows :-
> - try ... finally - this is defined in dotnet as a using
> - try ... (catch)+
> - cursor save and display others ... restore saved cursor
>
> a possible syntax -
>
> cover hourglass(Application &app)
> {
> Cursor save = app.cursor;
> app.cursor = HOURGLASS_CURSOR;
> ~ code ~
> app.cursor = save;
> }
>
> usage could be something like -
>
> void function(Application &app)
> {
> hourglass(app)
> {
> ... // code to be run by cover
> }
> }
That would typically be done with either a struct with a destructor or with a scope statement.
- Jonathan M Davis
|
June 08, 2011 Re: Cover handler for a statement or a block of statements. | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jonathan M Davis | On 08.06.2011 21:09, Jonathan M Davis wrote:
> On 2011-06-08 12:06, vincent wrote:
>> Cover handler for a statement or a block of statements.
>>
>> I would like to suggest a method for defining code statement
>> covering. Some examp1es of a cover are as follows :-
>> - try ... finally - this is defined in dotnet as a using
>> - try ... (catch)+
>> - cursor save and display others ... restore saved cursor
>>
>> a possible syntax -
>>
>> cover hourglass(Application&app)
>> {
>> Cursor save = app.cursor;
>> app.cursor = HOURGLASS_CURSOR;
>> ~ code ~
>> app.cursor = save;
>> }
>>
>> usage could be something like -
>>
>> void function(Application&app)
>> {
>> hourglass(app)
>> {
>> ... // code to be run by cover
>> }
>> }
>
> That would typically be done with either a struct with a destructor or with a
> scope statement.
>
> - Jonathan M Davis
To give Jonathan's answer an example.
import std.stdio;
void main() {
class Cursor {
string name = "regular";
}
class Application {
private Cursor _cursor;
@property Cursor cursor() {
return _cursor;
}
@property void cursor(Cursor value) {
writeln("setting cursor ", value.name);
_cursor = value;
}
this() { _cursor = new Cursor(); }
}
auto app = new Application();
auto HOURGLASS_CURSOR = new Cursor();
HOURGLASS_CURSOR.name = "hourglass";
writeln("try/finally:");
auto save = app.cursor;
try {
app.cursor = HOURGLASS_CURSOR;
writeln("code here");
} finally {
app.cursor = save;
}
writeln("\nor scope(exit):");
{
save = app.cursor;
scope(exit) app.cursor = save;
app.cursor = HOURGLASS_CURSOR;
writeln("code here");
}
}
Outputs
try/finally:
setting cursor hourglass
code here
setting cursor regular
or scope(exit):
setting cursor hourglass
code here
setting cursor regular
|
Copyright © 1999-2021 by the D Language Foundation