blob: e626202162718058d8b371bd0ac0275083d84da0 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<meta charset="gbk"> <!-- test breaks if the server overrides this -->
<title>GBK encoding errors (form, misc)</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="gbk_index.js"></script>
<script src="gbk-encoder.js"></script>
<link rel="author" title="Richard Ishida" href="mailto:ishida@w3.org">
<link rel="help" href="http://www.w3.org/TR/encoding/#gbk">
<meta name="assert" content="The browser produces percent-escaped character references for a URL produced by a form when encoding miscellaneous characters that are not in the gbk encoding.">
<style>
iframe { display:none }
form { display:none }
</style>
</head>
<body>
<div id="log"></div>
<script>
var tests = []
var cplist = []
var numTests = null
var numFrames = 2
var chunkSize = 500
var numChunks = null
var frames = null
var frames = null
var forms = null
var seperator = ","
var encodedSeperator = encodeURIComponent(",")
var currentChunkIndex = 0
setup(function() {
// set up a simple array of unicode codepoints that are not encoded
var codepoints = []
for (var i=0x80;i<0x4FF;i++) {
result = gbEncoder(String.fromCodePoint(i))
if (!result) {
var item = {}
codepoints.push(item)
item.cp = i
item.expected = '%26%23'+item.cp+'%3B'
item.desc = 'latin, greek, cyrillic, etc '
}
}
for (i=0x2000;i<0x23FF;i++) {
result = gbEncoder(String.fromCodePoint(i))
if (!result) {
var item = {}
codepoints.push(item)
item.cp = i
item.expected = '%26%23'+item.cp+'%3B'
item.desc = 'punctuation, currency, symbols '
}
}
for (i=0x2460;i<0x26FF;i++) {
result = gbEncoder(String.fromCodePoint(i))
if (!result) {
var item = {}
codepoints.push(item)
item.cp = i
item.expected = '%26%23'+item.cp+'%3B'
item.desc = 'enclosed chars and boxes '
}
}
for (i=0x3000;i<0x33FF;i++) {
result = gbEncoder(String.fromCodePoint(i))
if (!result) {
var item = {}
codepoints.push(item)
item.cp = i
item.expected = '%26%23'+item.cp+'%3B'
item.desc = 'various asian '
}
}
for (i=0xFF00;i<0xFFEF;i++) {
result = gbEncoder(String.fromCodePoint(i))
if (!result) {
var item = {}
codepoints.push(item)
item.cp = i
item.expected = '%26%23'+item.cp+'%3B'
item.desc = 'half/full width '
}
}
// convert the information into a simple array of objects that can be easily traversed
var currentChunk = []
var currentTests = []
cplist = [currentChunk]
tests = [currentTests]
for (i=0; i< codepoints.length; i++) {
if (currentChunk.length == chunkSize) {
currentChunk = []
cplist.push(currentChunk)
currentTests = []
tests.push(currentTests)
}
var item = {}
currentChunk.push(item)
item.cp = codepoints[i].cp
item.expected = codepoints[i].expected
item.desc = codepoints[i].desc
currentTests.push(async_test(item.desc+"U+"+item.cp.toString(16).toUpperCase()+' '+ String.fromCodePoint(item.cp) + " " +item.expected))
}
numChunks = cplist.length
for (var i=0; i<numFrames; i++) {
var frame = document.createElement("iframe")
frame.id = frame.name = "frame-" + i
document.body.appendChild(frame)
var form = document.createElement("form")
form.id = 'form-' + i
form.method = "GET"
form.action = "dummy.html"
form.acceptCharset = "gbk"
form.target = frame.id
var input = document.createElement("input")
input.id = input.name = "input-" + i
form.appendChild(input)
document.body.appendChild(form)
}
addEventListener("load", function () {
frames = Array.prototype.slice.call(document.getElementsByTagName("iframe"))
forms = Array.prototype.slice.call(document.getElementsByTagName("form"))
inputs = Array.prototype.slice.call(document.getElementsByTagName("input"))
for (var i=0; i<Math.min(numFrames, numChunks); i++) {
runNext(i)
}
})
})
function runNext(id) {
var i = currentChunkIndex
currentChunkIndex += 1
var iframe = frames[id]
var form = forms[id]
var input = inputs[id]
input.value = cplist[i].map(function(x) {
return String.fromCodePoint(x.cp)
}).join(seperator);
form.submit()
iframe.onload = function () {
var url = iframe.contentWindow.location
var query = url.search
var result_string = query.substr(query.indexOf('=') + 1)
var results = result_string.split(encodedSeperator)
for (var j=0; j<cplist[i].length; j++) {
var t = tests[i][j]
t.step(function() {
assert_equals(normalizeStr(results[j]), normalizeStr(cplist[i][j].expected))
})
t.done()
}
if (currentChunkIndex < numChunks) {
runNext(id)
}
}
}
</script>
</body>
</html>