class ShouldHaveUserInfo extends BasicErrorMessageFactory {

  private static final String SHOULD_HAVE_NO_USER_INFO = "%nExpecting actual:%n  <%s>%nnot to have user info but had:%n  <%s>";
  private static final String SHOULD_HAVE_USER_INFO = "%nExpecting user info of%n  <%s>%nto be:%n  <%s>%nbut was:%n  <%s>";

  public static ErrorMessageFactory shouldHaveUserInfo(URI actual, String expectedUserInfo) {
    return expectedUserInfo == null ? new ShouldHaveUserInfo(actual) : new ShouldHaveUserInfo(actual, expectedUserInfo);
  }

  private ShouldHaveUserInfo(URI actual, String expectedUserInfo) {
    super(SHOULD_HAVE_USER_INFO, actual, expectedUserInfo, actual.getUserInfo());
  }

  private ShouldHaveUserInfo(URI actual) {
    super(SHOULD_HAVE_NO_USER_INFO, actual, actual.getUserInfo());
  }

  public static ErrorMessageFactory shouldHaveUserInfo(URL actual, String expectedUserInfo) {<FILL_FUNCTION_BODY>}

  private ShouldHaveUserInfo(URL actual, String expectedUserInfo) {
    super(SHOULD_HAVE_USER_INFO, actual, expectedUserInfo, actual.getUserInfo());
  }

  private ShouldHaveUserInfo(URL actual) {
    super(SHOULD_HAVE_NO_USER_INFO, actual, actual.getUserInfo());
  }
}

    return expectedUserInfo == null ? new ShouldHaveUserInfo(actual) : new ShouldHaveUserInfo(actual, expectedUserInfo);
  
<methods>public transient void <init>(java.lang.String, java.lang.Object[]) ,public java.lang.String create(org.assertj.core.description.Description, org.assertj.core.presentation.Representation) ,public java.lang.String create(org.assertj.core.description.Description) ,public java.lang.String create() ,public boolean equals(java.lang.Object) ,public int hashCode() ,public java.lang.String toString() <variables>protected final non-sealed java.lang.Object[] arguments,protected final non-sealed java.lang.String format,org.assertj.core.error.MessageFormatter formatter