test_class.file: http/src/test/java/ro/polak/http/protocol/parser/impl/QueryStringParserTest.java
test_class.identifier: QueryStringParserTest
test_case.body: @Test
      public void shouldParseFields() throws MalformedInputException {
          String data = "&param1=ABCD1"
                  + "&param2=ABCD2"
                  + "&param3=ABC=DEF"
                  + "&param4=A%20B%20%3D%20%25%20*";
  
          Parser<Map<String, String>> parser = new QueryStringParser();
          Map<String, String> parameters = parser.parse(data);
  
          assertThat(parameters.size(), is(4));
  
          assertThat(parameters.get("param1"), is("ABCD1"));
          assertThat(parameters.get("param2"), is("ABCD2"));
          assertThat(parameters.get("param3"), is("ABC=DEF"));
          assertThat(parameters.get("param4"), is("A B = % *"));
      }
test_case.class_method_signature: QueryStringParserTest.shouldParseFields()
test_case.full_signature: @Test public void shouldParseFields()
test_case.identifier: shouldParseFields
test_case.invocations: parse assertThat size is assertThat get is assertThat get is assertThat get is assertThat get is
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void shouldParseFields()
focal_class.declarator: PAIR_SEPARATOR = "&"
focal_class.modifier: private static final
focal_class.original_string: private static final String PAIR_SEPARATOR = "&";
focal_class.type: String
focal_class.var_name: PAIR_SEPARATOR
focal_class.declarator: VALUE_SEPARATOR = "="
focal_class.modifier: private static final
focal_class.original_string: private static final String VALUE_SEPARATOR = "=";
focal_class.type: String
focal_class.var_name: VALUE_SEPARATOR
focal_class.file: http/src/main/java/ro/polak/http/protocol/parser/impl/QueryStringParser.java
focal_class.identifier: QueryStringParser
focal_class.interfaces: implements Parser<Map<String, String>>
focal_class.class_method_signature: QueryStringParser.parse(final String queryString)
focal_class.full_signature: @Override public Map<String, String> parse(final String queryString)
focal_class.identifier: parse
focal_class.modifiers: @Override public
focal_class.parameters: (final String queryString)
focal_class.return: Map<String, String>
focal_class.signature: Map<String, String> parse(final String queryString)
focal_method.body: @Override
      public Map<String, String> parse(final String queryString) throws MalformedInputException {
          Map<String, String> parameters = new HashMap<>();
          String[] queryParametersArray = queryString.split(PAIR_SEPARATOR);
          for (int i = 0; i < queryParametersArray.length; i++) {
              if (queryParametersArray[i].length() == 0) {
                  continue;
              }
  
              String[] parameterPair = queryParametersArray[i].split(VALUE_SEPARATOR, 2);
              if (parameterPair[0].length() == 0) {
                  continue;
              }
  
              if (parameterPair.length > 1) {
                  parameters.put(parameterPair[0], StringUtilities.urlDecode(parameterPair[1]));
              }
          }
  
          return parameters;
      }
focal_method.class_method_signature: QueryStringParser.parse(final String queryString)
focal_method.full_signature: @Override public Map<String, String> parse(final String queryString)
focal_method.identifier: parse
focal_method.invocations: split length split length put urlDecode
focal_method.modifiers: @Override public
focal_method.parameters: (final String queryString)
focal_method.return: Map<String, String>
focal_method.signature: Map<String, String> parse(final String queryString)