<!-- Please describe your changes on the following line: --> This commit adds the append method for the Headers API. @malisas and I are both contributors. There are a few TODOs related: - The script needs to parse the header value for certain header names to decide the header group it belongs - There are possible spec bugs that could change what a valid header value looks like (related: [issue page](https://github.com/whatwg/fetch/issues/332)) There are WPT tests already written for the Headers API, but they will fail as the Headers API is not fully implemented. --- <!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: --> - [X] `./mach build -d` does not report any errors - [X] `./mach test-tidy` does not report any errors - [ ] These changes fix #__ (github issue number if applicable). <!-- Either: --> - [ ] There are tests for these changes OR - [X] These changes do not require tests because tests for the Headers API already exists, but this commit does not implement the interface fully. The tests will fail. <!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. --> Source-Repo: https://github.com/servo/servo Source-Revision: 03fa7f0ba533acc44100639ad85625810618df3a
75 lines
3.1 KiB
Rust
75 lines
3.1 KiB
Rust
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
use script::dom::bindings::str::ByteString;
|
|
use script::dom::headers;
|
|
|
|
#[test]
|
|
fn test_normalize_empty_bytestring() {
|
|
// empty ByteString test
|
|
let empty_bytestring = ByteString::new(vec![]);
|
|
let actual = headers::normalize_value(empty_bytestring);
|
|
let expected = ByteString::new(vec![]);
|
|
assert_eq!(actual, expected);
|
|
}
|
|
|
|
#[test]
|
|
fn test_normalize_all_whitespace_bytestring() {
|
|
// All whitespace test. A horizontal tab, a line feed, a carriage return , and a space
|
|
let all_whitespace_bytestring = ByteString::new(vec![b'\t', b'\n', b'\r', b' ']);
|
|
let actual = headers::normalize_value(all_whitespace_bytestring);
|
|
let expected = ByteString::new(vec![]);
|
|
assert_eq!(actual, expected);
|
|
}
|
|
|
|
#[test]
|
|
fn test_normalize_non_empty_no_whitespace_bytestring() {
|
|
// Non-empty, no whitespace ByteString test
|
|
let no_whitespace_bytestring = ByteString::new(vec![b'S', b'!']);
|
|
let actual = headers::normalize_value(no_whitespace_bytestring);
|
|
let expected = ByteString::new(vec![b'S', b'!']);
|
|
assert_eq!(actual, expected);
|
|
}
|
|
|
|
#[test]
|
|
fn test_normalize_non_empty_leading_whitespace_bytestring() {
|
|
// Non-empty, leading whitespace, no trailing whitespace ByteString test
|
|
let leading_whitespace_bytestring = ByteString::new(vec![b'\t', b'\n', b' ', b'\r', b'S', b'!']);
|
|
let actual = headers::normalize_value(leading_whitespace_bytestring);
|
|
let expected = ByteString::new(vec![b'S', b'!']);
|
|
assert_eq!(actual, expected);
|
|
}
|
|
|
|
#[test]
|
|
fn test_normalize_non_empty_no_leading_whitespace_trailing_whitespace_bytestring() {
|
|
// Non-empty, no leading whitespace, but with trailing whitespace ByteString test
|
|
let trailing_whitespace_bytestring = ByteString::new(vec![b'S', b'!', b'\t', b'\n', b' ', b'\r']);
|
|
let actual = headers::normalize_value(trailing_whitespace_bytestring);
|
|
let expected = ByteString::new(vec![b'S', b'!']);
|
|
assert_eq!(actual, expected);
|
|
}
|
|
|
|
#[test]
|
|
fn test_normalize_non_empty_leading_and_trailing_whitespace_bytestring() {
|
|
// Non-empty, leading whitespace, and trailing whitespace ByteString test
|
|
let whitespace_sandwich_bytestring =
|
|
ByteString::new(vec![b'\t', b'\n', b' ', b'\r', b'S', b'!', b'\t', b'\n', b' ', b'\r']);
|
|
let actual = headers::normalize_value(whitespace_sandwich_bytestring);
|
|
let expected = ByteString::new(vec![b'S', b'!']);
|
|
assert_eq!(actual, expected);
|
|
}
|
|
|
|
#[test]
|
|
fn test_normalize_non_empty_leading_trailing_and_internal_whitespace_bytestring() {
|
|
// Non-empty, leading whitespace, trailing whitespace,
|
|
// and internal whitespace ByteString test
|
|
let whitespace_bigmac_bytestring =
|
|
ByteString::new(vec![b'\t', b'\n', b' ', b'\r', b'S',
|
|
b'\t', b'\n', b' ', b'\r', b'!',
|
|
b'\t', b'\n', b' ', b'\r']);
|
|
let actual = headers::normalize_value(whitespace_bigmac_bytestring);
|
|
let expected = ByteString::new(vec![b'S', b'\t', b'\n', b' ', b'\r', b'!']);
|
|
assert_eq!(actual, expected);
|
|
}
|