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


Reply via email to