@Test
  public void projection_tuple() {
    assumeFeature(Feature.QUERY_WITH_PROJECTION);
    final PersonGenerator generator = new PersonGenerator();
    final LocalDate dob = LocalDate.now().minusYears(22);
    insert(generator.next().withId("id1").withFullName("John").withNickName(Optional.empty()).withAge(21).withIsActive(true).withDateOfBirth(dob));
    insert(generator.next().withId("id2").withFullName("Mary").withNickName("a").withAge(22).withIsActive(false).withDateOfBirth(dob));
    insert(generator.next().withId("id3").withFullName("Emma").withNickName("b").withAge(23).withIsActive(true).withDateOfBirth(dob));

    Checkers.check(repository().findAll().select(Collections.singleton(person.age)).map(x -> x.get(person.age)).fetch()).hasContentInAnyOrder(21, 22, 23);
    Checkers.check(repository().findAll().select(Collections.singleton(person.fullName)).map(x -> x.get(person.fullName)).fetch()).hasContentInAnyOrder("John", "Mary", "Emma");
    Checkers.check(repository().findAll().select(Collections.singleton(person.dateOfBirth)).map(x -> x.get(person.dateOfBirth)).fetch()).hasContentInAnyOrder(dob, dob, dob);
    Checkers.check(repository().findAll().select(Arrays.asList(person.isActive, person.dateOfBirth)).map(x -> x.get(person.dateOfBirth)).fetch()).hasContentInAnyOrder(dob, dob, dob);
    Checkers.check(repository().findAll().select(person.isActive, person.dateOfBirth).map(tuple -> tuple.get(person.dateOfBirth)).fetch()).hasContentInAnyOrder(dob, dob, dob);
  }
Edge case for empty/non-empty string for null values.
{@code string.notEmpty} should not return empty / missing values
criteria/common/test/org/immutables/criteria/personmodel/AbstractPersonTest.java