StatusLine.java

1
package com.renomad.minum.web;
2
3
import java.util.Arrays;
4
5
/**
6
 * This class represents the text that is sent back in a {@link Response}
7
 */
8
public record StatusLine(StatusCode status, HttpVersion version, String rawValue) {
9
10
    static final StatusLine EMPTY = new StatusLine(StatusCode.NULL, HttpVersion.NONE, "");
11
12
    /**
13
     * See <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Status">Status Codes</a>
14
     */
15
    public enum StatusCode{
16
17
        /* Information responses */
18
        CODE_100_CONTINUE(100, "CONTINUE"),
19
        CODE_101_SWITCHING_PROTOCOLS(101, "SWITCHING PROTOCOLS"),
20
        CODE_102_PROCESSING(102, "PROCESSING"),
21
        CODE_103_EARLY_HINTS(103, "EARLY HINTS"),
22
23
24
        /* Successful responses (200 – 299) */
25
26
        CODE_200_OK(200, "OK"),
27
        CODE_201_CREATED(201, "CREATED"),
28
        CODE_202_ACCEPTED(202, "ACCEPTED"),
29
        CODE_203_NON_AUTHORITATIVE_INFORMATION(203, "NON-AUTHORITATIVE INFORMATION"),
30
        CODE_204_NO_CONTENT(204, "NO CONTENT"),
31
        CODE_205_RESET_CONTENT(205, "RESET CONTENT"),
32
        CODE_206_PARTIAL_CONTENT(206, "PARTIAL CONTENT"),
33
        CODE_207_MULTI_STATUS(207, "MULTI-STATUS"),
34
        CODE_208_ALREADY_REPORTED(208, "ALREADY REPORTED"),
35
        CODE_226_IM_USED(226, "IM USED"),
36
37
        /* Redirection messages (300 – 399) */
38
39
        CODE_300_MULTIPLE_CHOICES(300, "MULTIPLE CHOICES"),
40
        CODE_301_MOVED_PERMANENTLY(301, "MOVED PERMANENTLY"),
41
        CODE_302_FOUND(302, "FOUND"),
42
43
        /**
44
         * Used a lot after receiving a post response.  The pattern is to
45
         * receive the post, then redirect to a new page. See <a href="https://en.wikipedia.org/wiki/Post/Redirect/Get">...</a>
46
         */
47
        CODE_303_SEE_OTHER(303, "SEE OTHER"),
48
        CODE_304_NOT_MODIFIED(304, "NOT MODIFIED"),
49
        CODE_305_USE_PROXY(305, "USE PROXY"),
50
        CODE_306_UNUSED(306, "UNUSED"),
51
        CODE_307_TEMPORARY_REDIRECT(307, "TEMPORARY REDIRECT"),
52
        CODE_308_PERMANENT_REDIRECT(308, "PERMANENT REDIRECT"),
53
54
        /* Client error responses (400 – 499) */
55
56
        CODE_400_BAD_REQUEST(400, "BAD REQUEST"),
57
        CODE_401_UNAUTHORIZED(401, "UNAUTHORIZED"),
58
        CODE_402_PAYMENT_REQUIRED(402, "PAYMENT REQUIRED"),
59
        CODE_403_FORBIDDEN(403, "FORBIDDEN"),
60
        CODE_404_NOT_FOUND(404, "NOT FOUND"),
61
        CODE_405_METHOD_NOT_ALLOWED(405, "METHOD NOT ALLOWED"),
62
        CODE_406_NOT_ACCEPTABLE(406, "NOT ACCEPTABLE"),
63
        CODE_407_PROXY_AUTHENTICATION_REQUIRED(407, "PROXY AUTHENTICATION REQUIRED"),
64
        CODE_408_REQUEST_TIMEOUT(408, "REQUEST TIMEOUT"),
65
        CODE_409_CONFLICT(409, "CONFLICT"),
66
        CODE_410_GONE(410, "GONE"),
67
        CODE_411_LENGTH_REQUIRED(411, "LENGTH REQUIRED"),
68
        CODE_412_PRECONDITION_FAILED(412, "PRECONDITION FAILED"),
69
        CODE_413_PAYLOAD_TOO_LARGE(413, "PAYLOAD TOO LARGE"),
70
        CODE_414_URI_TOO_LONG(414, "URI TOO LONG"),
71
        CODE_415_UNSUPPORTED_MEDIA_TYPE(415, "UNSUPPORTED MEDIA TYPE"),
72
        CODE_416_RANGE_NOT_SATISFIABLE(416, "RANGE NOT SATISFIABLE"),
73
        CODE_417_EXPECTATION_FAILED(417, "EXPECTATION FAILED"),
74
        CODE_418_IM_A_TEAPOT(418, "IM A TEAPOT"),
75
        CODE_421_MISDIRECTED_REQUEST(421, "MISDIRECTED REQUEST"),
76
        CODE_422_UNPROCESSABLE_CONTENT(422, "UNPROCESSABLE CONTENT"),
77
        CODE_423_LOCKED(423, "LOCKED"),
78
        CODE_424_FAILED_DEPENDENCY(424, "FAILED DEPENDENCY"),
79
        CODE_425_TOO_EARLY(425, "TOO EARLY"),
80
        CODE_426_UPGRADE_REQUIRED(426, "UPGRADE REQUIRED"),
81
        CODE_428_PRECONDITION_REQUIRED(428, "PRECONDITION REQUIRED"),
82
        CODE_429_TOO_MANY_REQUESTS(429, "TOO MANY REQUESTS"),
83
        CODE_431_REQUEST_HEADER_FIELDS_TOO_LARGE(431, "REQUEST HEADER FIELDS TOO LARGE"),
84
        CODE_451_UNAVAILABLE_FOR_LEGAL_REASONS(451, "UNAVAILABLE FOR LEGAL REASONS"),
85
86
        /* Server error responses (500 – 599) */
87
88
        CODE_500_INTERNAL_SERVER_ERROR(500, "INTERNAL SERVER ERROR"),
89
        CODE_501_NOT_IMPLEMENTED(501, "NOT IMPLEMENTED"),
90
        CODE_502_BAD_GATEWAY(502, "BAD GATEWAY"),
91
        CODE_503_SERVICE_UNAVAILABLE(503, "SERVICE UNAVAILABLE"),
92
        CODE_504_GATEWAY_TIMEOUT(504, "GATEWAY TIMEOUT"),
93
        CODE_505_HTTP_VERSION_NOT_SUPPORTED(505, "HTTP VERSION NOT SUPPORTED"),
94
        CODE_506_VARIANT_ALSO_NEGOTIATES(506, "VARIANT ALSO NEGOTIATES"),
95
        CODE_507_INSUFFICIENT_STORAGE(507, "INSUFFICIENT STORAGE"),
96
        CODE_508_LOOP_DETECTED(508, "LOOP DETECTED"),
97
        CODE_510_NOT_EXTENDED(510, "NOT EXTENDED"),
98
        CODE_511_NETWORK_AUTHENTICATION_REQUIRED(511, "NETWORK AUTHENTICATION REQUIRED"),
99
100
        /**
101
         * The null object, meant to represent "no status code"
102
         */
103
        NULL(0, "NULL OBJECT")
104
        ;
105
106
        public final int code;
107
        public final String shortDescription;
108
109
        StatusCode(int code, String shortDescription) {
110
            this.code = code;
111
            this.shortDescription = shortDescription;
112
        }
113
114
        static StatusCode findByCode(int code) {
115 1 1. findByCode : replaced return value with null for com/renomad/minum/web/StatusLine$StatusCode::findByCode → KILLED
            return Arrays.stream(StatusCode.values())
116 2 1. lambda$findByCode$0 : replaced boolean return with true for com/renomad/minum/web/StatusLine$StatusCode::lambda$findByCode$0 → KILLED
2. lambda$findByCode$0 : negated conditional → KILLED
                    .filter(x -> x.code == code)
117
                    .findFirst()
118
                    .orElseThrow();
119
        }
120
    }
121
122
}

Mutations

115

1.1
Location : findByCode
Killed by : com.renomad.minum.web.WebTests
replaced return value with null for com/renomad/minum/web/StatusLine$StatusCode::findByCode → KILLED

116

1.1
Location : lambda$findByCode$0
Killed by : com.renomad.minum.web.WebTests
replaced boolean return with true for com/renomad/minum/web/StatusLine$StatusCode::lambda$findByCode$0 → KILLED

2.2
Location : lambda$findByCode$0
Killed by : com.renomad.minum.web.WebTests
negated conditional → KILLED

Active mutators

Tests examined


Report generated by PIT 1.17.0