public static SuggestBuilder randomSuggestBuilder() {
   SuggestBuilder builder = new SuggestBuilder();
   if (randomBoolean()) {
     builder.setGlobalText(randomAsciiOfLengthBetween(1, 20));
   }
   final int numSuggestions = randomIntBetween(1, 5);
   for (int i = 0; i < numSuggestions; i++) {
     builder.addSuggestion(randomAsciiOfLengthBetween(5, 10), randomSuggestionBuilder());
   }
   return builder;
 }
 @Override
 protected SuggestBuilder createMutation(SuggestBuilder original) throws IOException {
   SuggestBuilder mutation = new SuggestBuilder().setGlobalText(original.getGlobalText());
   for (Entry<String, SuggestionBuilder<?>> suggestionBuilder :
       original.getSuggestions().entrySet()) {
     mutation.addSuggestion(suggestionBuilder.getKey(), suggestionBuilder.getValue());
   }
   if (randomBoolean()) {
     mutation.setGlobalText(randomAsciiOfLengthBetween(5, 60));
   } else {
     mutation.addSuggestion(
         randomAsciiOfLength(10), PhraseSuggestionBuilderTests.randomPhraseSuggestionBuilder());
   }
   return mutation;
 }
  /**
   * creates random suggestion builder, renders it to xContent and back to new instance that should
   * be equal to original
   */
  public void testFromXContent() throws IOException {
    Suggesters suggesters = new Suggesters(Collections.emptyMap());
    QueryParseContext context = new QueryParseContext(null);
    context.parseFieldMatcher(new ParseFieldMatcher(Settings.EMPTY));
    for (int runs = 0; runs < NUMBER_OF_RUNS; runs++) {
      SuggestBuilder suggestBuilder = createTestModel();
      XContentBuilder xContentBuilder =
          XContentFactory.contentBuilder(randomFrom(XContentType.values()));
      if (randomBoolean()) {
        xContentBuilder.prettyPrint();
      }
      suggestBuilder.toXContent(xContentBuilder, ToXContent.EMPTY_PARAMS);
      XContentParser parser = XContentHelper.createParser(xContentBuilder.bytes());
      context.reset(parser);

      SuggestBuilder secondSuggestBuilder = SuggestBuilder.fromXContent(context, suggesters);
      assertNotSame(suggestBuilder, secondSuggestBuilder);
      assertEquals(suggestBuilder, secondSuggestBuilder);
      assertEquals(suggestBuilder.hashCode(), secondSuggestBuilder.hashCode());
    }
  }