@Test
public void onlyEmitsEventsWhenShapeHasBoundTraitAndHasTemplate() {

    EmitEachSelectorValidator.Config config = new EmitEachSelectorValidator.Config();
    Model model = Model.builder()
            .addShape(StringShape.builder()
                              .id(ShapeId.from("foo.bar#A"))
                              .addTrait(new DocumentationTrait("hello"))
                              .build())
            .addShape(StringShape.builder().id(ShapeId.from("foo.bar#B")).build())
            .build();
    config.setSelector(Selector.parse("*"));
    config.setMessageTemplate("This is only set to test the necessary code path of using templates...");
    config.setBindToTrait(DocumentationTrait.ID);
    EmitEachSelectorValidator validator = new EmitEachSelectorValidator(config);
    List<ValidationEvent> events = validator.validate(model);
    assertThat(events, hasSize(1));
    assertThat(events.get(0).getShapeId(), equalTo(Optional.of(ShapeId.from("foo.bar#A"))));
}