🤬
Revision indexing in progress... (symbol navigation in revisions will be accurate after indexed)
  • ■ ■ ■ ■ ■ ■
    common/src/main/java/com/google/tsunami/common/net/UrlUtils.java
    skipped 14 lines
    15 15   */
    16 16  package com.google.tsunami.common.net;
    17 17   
     18 +import static java.nio.charset.StandardCharsets.UTF_8;
     19 + 
    18 20  import com.google.common.base.Joiner;
    19 21  import com.google.common.collect.ImmutableSet;
    20 22  import com.google.common.collect.Iterables;
    21 23  import com.google.common.collect.Lists;
     24 +import java.io.UnsupportedEncodingException;
     25 +import java.net.URLEncoder;
    22 26  import java.util.List;
     27 +import java.util.Optional;
    23 28  import java.util.regex.Pattern;
    24 29  import okhttp3.HttpUrl;
    25 30   
    skipped 86 lines
    112 117   */
    113 118   public static String removeTrailingSlashes(String path) {
    114 119   return TRAILING_SLASH_PATTERN.matcher(path).replaceFirst("");
     120 + }
     121 + 
     122 + /**
     123 + * Encodes the given String using URL-encoding.
     124 + *
     125 + * @param raw the raw String to be encoded.
     126 + * @return the URL-encoded version of the provided String if it was valid UTF-8.
     127 + */
     128 + public static Optional<String> urlEncode(String raw) {
     129 + try {
     130 + return Optional.of(URLEncoder.encode(raw, UTF_8.toString()));
     131 + } catch (UnsupportedEncodingException e) {
     132 + return Optional.empty();
     133 + }
    115 134   }
    116 135   
    117 136   private UrlUtils() {}
    skipped 2 lines
  • ■ ■ ■ ■ ■ ■
    common/src/test/java/com/google/tsunami/common/net/UrlUtilsTest.java
    skipped 15 lines
    16 16  package com.google.tsunami.common.net;
    17 17   
    18 18  import static com.google.common.truth.Truth.assertThat;
     19 +import static com.google.common.truth.Truth8.assertThat;
    19 20  import static com.google.tsunami.common.net.UrlUtils.allSubPaths;
    20 21  import static com.google.tsunami.common.net.UrlUtils.removeLeadingSlashes;
    21 22  import static com.google.tsunami.common.net.UrlUtils.removeTrailingSlashes;
     23 +import static com.google.tsunami.common.net.UrlUtils.urlEncode;
    22 24   
    23 25  import okhttp3.HttpUrl;
    24 26  import org.junit.Test;
    skipped 96 lines
    121 123   @Test
    122 124   public void removeTrailingSlashes_whenMultipleTrailingSlashes_removesTrailingSlashes() {
    123 125   assertThat(removeTrailingSlashes("/a/b/c/////")).isEqualTo("/a/b/c");
     126 + }
     127 + 
     128 + @Test
     129 + public void urlEncode_whenEmptyString_returnsOriginal() {
     130 + assertThat(urlEncode("")).hasValue("");
     131 + }
     132 + 
     133 + @Test
     134 + public void urlEncode_whenNothingToEncode_returnsOriginal() {
     135 + assertThat(urlEncode("abcdefghijklmnopqrstuvwxyz")).hasValue("abcdefghijklmnopqrstuvwxyz");
     136 + assertThat(urlEncode("ABCDEFGHIJKLMNOPQRSTUVWXYZ")).hasValue("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
     137 + assertThat(urlEncode("0123456789")).hasValue("0123456789");
     138 + assertThat(urlEncode("-_.*")).hasValue("-_.*");
     139 + }
     140 + 
     141 + @Test
     142 + public void urlEncode_whenNotEncoded_returnsEncoded() {
     143 + assertThat(urlEncode(" ")).hasValue("+");
     144 + assertThat(urlEncode("()[]{}<>")).hasValue("%28%29%5B%5D%7B%7D%3C%3E");
     145 + assertThat(urlEncode("?!@#$%^&=+,;:'\"`/\\|~"))
     146 + .hasValue("%3F%21%40%23%24%25%5E%26%3D%2B%2C%3B%3A%27%22%60%2F%5C%7C%7E");
     147 + }
     148 + 
     149 + @Test
     150 + public void urlEncode_whenAlreadyEncoded_encodesAgain() {
     151 + assertThat(urlEncode("%2F")).hasValue("%252F");
     152 + assertThat(urlEncode("%252F")).hasValue("%25252F");
     153 + }
     154 + 
     155 + @Test
     156 + public void urlEncode_whenComplexEncoding_encodesCorrectly() {
     157 + assertThat(urlEncode("£")).hasValue("%C2%A3");
     158 + assertThat(urlEncode("つ")).hasValue("%E3%81%A4");
     159 + assertThat(urlEncode("äëïöüÿ")).hasValue("%C3%A4%C3%AB%C3%AF%C3%B6%C3%BC%C3%BF");
     160 + assertThat(urlEncode("ÄËÏÖÜŸ")).hasValue("%C3%84%C3%8B%C3%8F%C3%96%C3%9C%C5%B8");
     161 + }
     162 + 
     163 + @Test
     164 + public void urlEncode_whenUnicode_encodesOriginal() {
     165 + // EURO sign
     166 + assertThat(urlEncode("\u20AC")).hasValue("%E2%82%AC");
    124 167   }
    125 168  }
    126 169   
Please wait...
Page is in error, reload to recover