Open m4c0 opened 3 years ago
Thank you very much for your report. I'm going to look into this. My reply offhand is that I think to recall that every before_each
/after_each
needs a surrounding describe
. When I first got aware of this, I had the feeling that go_bandit
should get a mandatory string parameter which is used to describe
the outer level.
Thanks for your prompt answer!
Both makes sense (go_bandit
as s describe
and *_each
requiring a describe
).
go_bandit
with an extra parameter looks like a breaking change for users. Can we do a describe
without a parameter? That would keep the API stable and sounds like a easy solution.
By the way, I kinda missed the description when I mixed two go_bandit
in the same executable. Both info
and spec
yields a result that I can't identify the suite origin. That seems an extra argument to implement an implicit describe
. 😀
Problem
I want to have a single executable with multiple
go_bandit
suites. Some of them may containbefore_each
.Expected result
Each suite installed by
go_bandit
runs in a "sandboxed" environment and no variables orbefore_each
would leak between them.Current result
A
before_each
inside ago_bandit
works like a global, surviving longer than the lambda, triggering UBs.Code example
This zip contains an example CPP. It declares two
go_bandit
and one of them initialises aunique_ptr
in abefore_each
. Running as-is crashes due to a UB after thebefore_each
was called in the wronggo_bandit
.Changing the order of the
go_bandit
s causes Bandit to complain aboutbefore_each
without anit
.This setup simulates what would happen if each
go_bandit
was in its own CPP file.Request
I think Bandit needs to be modified to do one of these three possible solutions:
go_bandit
withbefore_each
. Maybe there's a way to treatgo_bandit
's lambda as a implicitdescribe
?before_each
inside ago_bandit
. This seems to be the norm, because there's no mention tobefore_each
insidego_bandit
in docs. if so, then code should fail and docs needs to be explicit about it.