On Monday, 18 March 2019 at 18:54:22 UTC, Roman Sztergbaum wrote:
Hello as the subject say i'm asking this question because with
the following code
```
private config_create_answer create_config(string[] args)
in
{
assert(args !is null, "args cannot be null");
assert(args.length == 2, "need 1 arguments");
}
out (r)
{
assert(r.state == "SUCCESS", "create_config should
success");
assert(!r.config_key.empty, "config_key should not be
empty");
assert(!r.readonly_config_key.empty,
"readonly_config_key should not be empty");
}
body
{
string config_name;
getopt(args, "name", &config_name);
auto cfg = (cast(const
char[])(std.file.read("../API_doc/json_recipes/config_create.json")))
.deserialize!config_create;
cfg.config_name = config_name.strip("\"");
client_.socket.send(cfg.serializeToJson);
auto answer = new ubyte[256];
client_.socket.receive(answer);
client_.socket.getErrorText.writeln;
return (cast(string)
answer).deserialize!config_create_answer;
}
unittest
{
import std.exception : collectException;
auto cli = new
CLI("/tmp/raven-os_service_albinos.sock");
assert(cli.create_config(["create_config",
"--name=toto"])
.state == "SUCCESS", "should be success");
assert(cli.create_config(["create_config",
"--name=\"titi\""])
.state == "SUCCESS", "should be success");
assert(collectException(cli.create_config(["create_config",
"--name="]))); //here is my problem
}
```
i would like to specify `collectException!GetOptException`, but
it's seem's make the program exit with fail status.
any idea what i'm doing wrong ?
also it's my first d program, so if anything seem's bad let me
know
I haven't spot the exact position of the problem yet, but I think
the usage of assert is not correct at same places of your coding.
- Assertions are for logic errors, not for issues related to
resources (network, files, input from users,...)
You cannot recover from a logic error, there assert terminates
the application.
- for resource issues you should throw Exceptions. You can
recover from resource issues.
- assertions throwing "Errors" which are not catched by
collectException.
Kind regards
Andre