@Test
  void next() {
    assertExpressional(person.bestFriend.value().hobby.is("ski"), "call op=EQUAL path=bestFriend.hobby constant=ski");

    assertExpressional(person.bestFriend.value().hobby.is("ski")
                    .age.is(22),
            "call op=AND",
            "  call op=EQUAL path=bestFriend.hobby constant=ski",
            "  call op=EQUAL path=age constant=22");

    assertExpressional(person.address.value().zip.is("12345"),
            "call op=EQUAL path=address.zip constant=12345");
    assertExpressional(PersonCriteria.person
                    .address.value().zip.is("12345")
                    .or()
                    .bestFriend.value().hobby.is("ski"),
            "call op=OR",
            "  call op=EQUAL path=address.zip constant=12345",
            "  call op=EQUAL path=bestFriend.hobby constant=ski");
  }
AND / ORs combined like {@code (A and B) or (C and D)}
criteria/common/test/org/immutables/criteria/ExpressionAsStringTest.java