1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
<!doctype html>
<html>
<head>
<title>XMLHttpRequest: send() - charset parameter of Content-Type</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<div id="log"></div>
<script>
function request(input, output, title) {
title = title || document.title + ' - ' + input;
test(function() {
var client = new XMLHttpRequest()
client.open("POST", "resources/content.py", false)
if(input !== null)
client.setRequestHeader("Content-Type", input)
client.send("TEST")
assert_equals(client.responseText, "TEST")
assert_equals(client.getResponseHeader("x-request-content-type"), output)
}, title)
}
request(
"text; charset=ascii",
"text; charset=ascii",
"header with invalid MIME type is not changed"
)
request(
"",
"",
"header with invalid MIME type (empty string) is not changed"
)
request(
"charset=ascii",
"charset=ascii",
"known charset but bogus header - missing MIME type"
)
request(
"charset=bogus",
"charset=bogus",
"bogus charset and bogus header - missing MIME type"
)
request(
"text/plain;charset=utf-8",
"text/plain;charset=utf-8",
"If charset= param is UTF-8 (case-insensitive), it should not be changed"
)
request(
"text/x-pink-unicorn",
"text/x-pink-unicorn",
"If no charset= param is given, implementation should not add one - unknown MIME"
)
request(
"text/plain",
"text/plain",
"If no charset= param is given, implementation should not add one - known MIME"
)
request(
"text/plain; hi=bye",
"text/plain; hi=bye",
"If no charset= param is given, implementation should not add one - known MIME, unknown param, two spaces"
)
request(
"text/x-thepiano;charset= waddup",
"text/x-thepiano;charset=UTF-8",
"charset given but wrong, fix it (unknown MIME, bogus charset)"
)
request(
"text/plain;charset=utf-8;charset=waddup",
"text/plain;charset=utf-8;charset=waddup",
"If charset= param is UTF-8 (case-insensitive), it should not be changed (bogus charset)"
)
request(
"text/plain;charset=shift-jis",
"text/plain;charset=UTF-8",
"charset given but wrong, fix it (known MIME, actual charset)"
)
request(
"text/x-pink-unicorn; charset=windows-1252; charset=bogus; notrelated; charset=ascii",
"text/x-pink-unicorn;charset=UTF-8",
"Multiple non-UTF-8 charset parameters deduplicate, bogus parameter dropped"
)
request(
null,
"text/plain;charset=UTF-8",
"No content type set, give MIME and charset"
)
request(
"text/plain;charset= utf-8",
"text/plain;charset=UTF-8",
"charset with leading space that is UTF-8 does change")
request(
"text/plain;charset=utf-8 ;x=x",
"text/plain;charset=utf-8 ;x=x",
"charset with trailing space that is UTF-8 does not change");
request(
"text/plain;charset=\"utf-8\"",
"text/plain;charset=\"utf-8\"",
"charset in double quotes that is UTF-8 does not change")
request(
"text/plain;charset=\" utf-8\"",
"text/plain;charset=UTF-8",
"charset in double quotes with space")
request(
"text/plain;charset=\"u\\t\\f-8\"",
"text/plain;charset=\"u\\t\\f-8\"",
"charset in double quotes with backslashes that is UTF-8 does not change")
request(
"YO/yo;charset=x;yo=YO; X=y",
"yo/yo;charset=UTF-8;yo=YO;x=y",
"unknown parameters need to be preserved")
</script>
</body>
</html>
|