• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

coditory / quark-uri / #3

pending completion
#3

push

github-actions

ogesaku
init

1212 of 1212 new or added lines in 21 files covered. (100.0%)

926 of 1212 relevant lines covered (76.4%)

0.76 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

84.75
/src/main/java/com/coditory/quark/uri/PercentCodec.java
1
package com.coditory.quark.uri;
2

3
import org.jetbrains.annotations.NotNull;
4

5
import java.nio.charset.Charset;
6
import java.util.BitSet;
7

8
import static com.coditory.quark.uri.Preconditions.expectNonNull;
9
import static com.coditory.quark.uri.UriRfcCharacters.URI_UNRESERVED;
10
import static java.nio.charset.StandardCharsets.UTF_8;
11

12
public final class PercentCodec {
13
    public static final PercentCodec PERCENT_CODEC = PercentCodec.builder()
1✔
14
            .decodeSpaceAsPlus(false)
1✔
15
            .charset(UTF_8)
1✔
16
            .safeCharactersAsUriUnreserved()
1✔
17
            .build();
1✔
18

19
    public static final PercentCodec PERCENT_PLUS_CODEC = PercentCodec.builder()
1✔
20
            .decodeSpaceAsPlus(true)
1✔
21
            .charset(UTF_8)
1✔
22
            .safeCharactersAsUriUnreserved()
1✔
23
            .build();
1✔
24

25
    public static String encodeUriComponent(String component) {
26
        return PERCENT_CODEC.encode(component);
1✔
27
    }
28

29
    public static String decodeUriComponent(String component) {
30
        return PERCENT_CODEC.decode(component);
1✔
31
    }
32

33
    public static String encodeUriComponentWithPlusAsSpace(String component) {
34
        return PERCENT_PLUS_CODEC.encode(component);
×
35
    }
36

37
    public static String decodeUriComponentWithPlusAsSpace(String component) {
38
        return PERCENT_PLUS_CODEC.decode(component);
×
39
    }
40

41
    private final PercentEncoder encoder;
42
    private final PercentDecoder decoder;
43

44
    PercentCodec(PercentEncoder encoder, PercentDecoder decoder) {
1✔
45
        this.encoder = encoder;
1✔
46
        this.decoder = decoder;
1✔
47
    }
1✔
48

49
    @NotNull
50
    public String encode(@NotNull String input) {
51
        return encoder.encode(input);
1✔
52
    }
53

54
    public boolean encode(@NotNull String input, @NotNull StringBuilder out) {
55
        return encoder.encode(input, out);
1✔
56
    }
57

58
    public boolean encode(@NotNull String input, @NotNull StringBuilder out, @NotNull Charset charset) {
59
        return encoder.encode(input, out, charset);
×
60
    }
61

62
    @NotNull
63
    public String decode(@NotNull String input) {
64
        return decoder.decode(input);
1✔
65
    }
66

67
    public boolean decode(@NotNull String input, @NotNull StringBuilder out) {
68
        return decoder.decode(input, out);
1✔
69
    }
70

71
    public boolean decode(@NotNull String input, @NotNull StringBuilder out, @NotNull Charset charset) {
72
        return decoder.decode(input, out, charset);
×
73
    }
74

75
    @NotNull
76
    public static PercentCodecBuilder builder() {
77
        return new PercentCodecBuilder();
1✔
78
    }
79

80
    public static class PercentCodecBuilder {
1✔
81
        private BitSet safeCharacters = BitSets.of(URI_UNRESERVED);
1✔
82
        private boolean decodeSpaceAsPlus = false;
1✔
83
        private boolean encodeSpaceAsPlus = false;
1✔
84
        private Charset charset = UTF_8;
1✔
85

86
        @NotNull
87
        public PercentCodecBuilder addSafeCharacters(@NotNull String safeCharacters) {
88
            expectNonNull(safeCharacters, "safeCharacters");
×
89
            this.safeCharacters.or(BitSets.of(safeCharacters));
×
90
            return this;
×
91
        }
92

93
        @NotNull
94
        public PercentCodecBuilder safeCharacters(@NotNull String safeCharacters) {
95
            expectNonNull(safeCharacters, "safeCharacters");
1✔
96
            this.safeCharacters = BitSets.of(safeCharacters);
1✔
97
            return this;
1✔
98
        }
99

100
        @NotNull
101
        public PercentCodecBuilder safeCharactersAsUriUnreserved() {
102
            return safeCharacters(URI_UNRESERVED);
1✔
103
        }
104

105
        @NotNull
106
        public PercentCodecBuilder decodeSpaceAsPlus(boolean spaceAsPlus) {
107
            this.decodeSpaceAsPlus = spaceAsPlus;
1✔
108
            return this;
1✔
109
        }
110

111
        @NotNull
112
        public PercentCodecBuilder encodeSpaceAsPlus(boolean spaceAsPlus) {
113
            this.encodeSpaceAsPlus = spaceAsPlus;
×
114
            return this;
×
115
        }
116

117
        @NotNull
118
        public PercentCodecBuilder spaceAsPlus(boolean spaceAsPlus) {
119
            this.decodeSpaceAsPlus = spaceAsPlus;
1✔
120
            this.encodeSpaceAsPlus = spaceAsPlus;
1✔
121
            return this;
1✔
122
        }
123

124
        @NotNull
125
        public PercentCodecBuilder charset(Charset charset) {
126
            expectNonNull(charset, "charset");
1✔
127
            this.charset = charset;
1✔
128
            return this;
1✔
129
        }
130

131
        @NotNull
132
        public PercentCodec build() {
133
            if (encodeSpaceAsPlus || decodeSpaceAsPlus) {
1✔
134
                safeCharacters = BitSets.set(safeCharacters, '+', false);
1✔
135
            }
136
            PercentEncoder encoder = PercentEncoder.builder()
1✔
137
                    .safeCharacters(safeCharacters)
1✔
138
                    .spaceAsPlus(encodeSpaceAsPlus)
1✔
139
                    .charset(charset)
1✔
140
                    .build();
1✔
141
            PercentDecoder decoder = PercentDecoder.builder()
1✔
142
                    .spaceAsPlus(decodeSpaceAsPlus)
1✔
143
                    .charset(charset)
1✔
144
                    .build();
1✔
145
            return new PercentCodec(encoder, decoder);
1✔
146
        }
147
    }
148
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc