Yoda Expectations

| Tags: dart, dev, web

Since releasing the Dart testing framework dahlia two months ago, I have been using it on a Dart project of mine. Although I’m pretty satisfied with it, there’s one aspect of it that is somewhat ugly. To test something in dahlia you specify an expectation and look whether it holds as in


For my taste there are too many parentheses there and normally you get an additional pair around it when you put it into a one-line it-block like in

it('a should equal b', ()
  => expect(a).to(equal(b)));

So I want to get rid of some of those parentheses and working on my project I took inspiration from Dart’s event system which provides a nice approach for defining event handlers. Here’s an example


Now I’m experimenting with a new form of expectations


That looks better. But what about negations and combinations?


can be implemented quite easily, but


is another matter. There is no way to know that after the first equal-matcher an and-matcher and another equal-matcher follows as there is no finishing method call that completes the expectation. A solution is to find some expression that puts a marker at the start like


but “either a or b” is definitely not the same as “a or b” and isn’t really flexible.

Doing it Yoda-style seems to solve the problem


For the fun of it, you can make it sound even more like Yoda


I’m unsure whether it solves a real problem, though. Tests shouldn’t be that complicated that the need for combinations of matchers arises. And though it’s fun, the original form where you know the subject before what is expected of it is more readable.