()
| 132 | |
| 133 | |
| 134 | def test_empty_field() -> None: |
| 135 | boundary = b"foo" |
| 136 | decoder = MultipartDecoder(boundary) |
| 137 | data = """ |
| 138 | --foo |
| 139 | Content-Disposition: form-data; name="text" |
| 140 | Content-Type: text/plain; charset="UTF-8" |
| 141 | |
| 142 | Some Text |
| 143 | --foo |
| 144 | Content-Disposition: form-data; name="empty" |
| 145 | Content-Type: text/plain; charset="UTF-8" |
| 146 | |
| 147 | --foo-- |
| 148 | """.replace("\n", "\r\n").encode() |
| 149 | decoder.receive_data(data) |
| 150 | decoder.receive_data(None) |
| 151 | events = [decoder.next_event()] |
| 152 | while not isinstance(events[-1], Epilogue): |
| 153 | events.append(decoder.next_event()) |
| 154 | assert events == [ |
| 155 | Preamble(data=b""), |
| 156 | Field( |
| 157 | name="text", |
| 158 | headers=Headers( |
| 159 | [ |
| 160 | ("Content-Disposition", 'form-data; name="text"'), |
| 161 | ("Content-Type", 'text/plain; charset="UTF-8"'), |
| 162 | ] |
| 163 | ), |
| 164 | ), |
| 165 | Data(data=b"Some Text", more_data=False), |
| 166 | Field( |
| 167 | name="empty", |
| 168 | headers=Headers( |
| 169 | [ |
| 170 | ("Content-Disposition", 'form-data; name="empty"'), |
| 171 | ("Content-Type", 'text/plain; charset="UTF-8"'), |
| 172 | ] |
| 173 | ), |
| 174 | ), |
| 175 | Data(data=b"", more_data=False), |
| 176 | Epilogue(data=b" "), |
| 177 | ] |
| 178 | encoder = MultipartEncoder(boundary) |
| 179 | result = b"" |
| 180 | for event in events: |
| 181 | result += encoder.send_event(event) |
| 182 | assert data == result |
nothing calls this directly
no test coverage detected