mirror of
https://github.com/servo/servo.git
synced 2025-06-24 09:04:33 +01:00
Implement encoding determination for external scripts.
This commit is contained in:
parent
b1cd28e9c6
commit
89b8499df8
7 changed files with 175 additions and 8 deletions
|
@ -0,0 +1,5 @@
|
|||
(function() {
|
||||
window.getSomeString = function() {
|
||||
return "śćążź"; //<- these are five Polish letters, similar to scazz. It can be read correctly only with windows 1250 encoding.
|
||||
};
|
||||
})();
|
|
@ -0,0 +1,5 @@
|
|||
(function() {
|
||||
window.getSomeString = function() {
|
||||
return "œæ¹¿Ÿ"; //<- these are five Polish letters, similar to scazz. It can be read correctly only with windows 1250 encoding.
|
||||
};
|
||||
})();
|
|
@ -0,0 +1,89 @@
|
|||
<!DOCTYPE html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Script @type: unknown parameters</title>
|
||||
<link rel="author" title="askalski" href="github.com/askalski">
|
||||
<link rel="help" href="https://html.spec.whatwg.org/multipage/#scriptingLanguages">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<div id="log"></div>
|
||||
|
||||
<!-- "Step1" tests -->
|
||||
<!-- charset is set incorrectly via Content Type "text/javascript;charset=utf-8" in response
|
||||
which has priority before a correct setting in "charset" attribute of script tag.
|
||||
-->
|
||||
<script type="text/javascript"
|
||||
src="serve-with-content-type.py?fn=external-script-windows1250.js&ct=text/javascript%3Bcharset=utf-8" charset="windows-1250">
|
||||
</script>
|
||||
<script>
|
||||
test(function() {
|
||||
//these strings should not match, since the file charset is set incorrectly
|
||||
assert_not_equals(window.getSomeString(), "śćążź");
|
||||
});
|
||||
</script>
|
||||
<!-- charset is set correctly via Content Type "text/javascript;charset=utf-8" in response
|
||||
which has priority before a incorrect setting in "charset" attribute of script tag.
|
||||
-->
|
||||
|
||||
<script type="text/javascript"
|
||||
src="serve-with-content-type.py?fn=external-script-windows1250.js&ct=text/javascript%3Bcharset=windows-1250" charset="utf-8">
|
||||
</script>
|
||||
<script>
|
||||
//the charset is set correctly via Content Type "text/javascript;charset=windows-1250" in respones
|
||||
test(function() {
|
||||
assert_equals(window.getSomeString(), "śćążź");
|
||||
});
|
||||
</script>
|
||||
|
||||
<!-- end of step1 tests, now step2 tests -->
|
||||
<!-- in this case, the response's Content Type does not bring charset information.
|
||||
Second step takes block character encoding if available.-->
|
||||
<script type="text/javascript"
|
||||
src="serve-with-content-type.py?fn=external-script-windows1250.js&ct=text/javascript" charset="utf-8">
|
||||
</script>
|
||||
<script>
|
||||
test(function() {
|
||||
//these strings should not match, since the file charset is set incorrectly in "charset" tag of <script> above
|
||||
assert_not_equals(window.getSomeString(), "śćążź");
|
||||
});
|
||||
</script>
|
||||
<!-- charset is set correctly via Content Type "text/javascript;charset=utf-8" in response
|
||||
which has priority before a incorrect setting in "charset" attribute of script tag.
|
||||
-->
|
||||
|
||||
<script type="text/javascript"
|
||||
src="serve-with-content-type.py?fn=external-script-windows1250.js&ct=text/javascript" charset="windows-1250">
|
||||
</script>
|
||||
<script>
|
||||
//the charset is set correctly via content attribute in <script> above
|
||||
test(function() {
|
||||
assert_equals(window.getSomeString(), "śćążź");
|
||||
});
|
||||
</script>
|
||||
|
||||
<!-- end of step2 tests, now step3 tests -->
|
||||
<!-- in this case, neither response's Content Type nor charset attribute bring correct charset information.
|
||||
Third step takes this document's character encoding (declared correctly as UTF-8).-->
|
||||
<script type="text/javascript"
|
||||
src="serve-with-content-type.py?fn=external-script-windows1250.js&ct=text/javascript">
|
||||
</script>
|
||||
<script>
|
||||
test(function() {
|
||||
//these strings should not match, since the tested file is in windows-1250, and document is utf-8
|
||||
assert_not_equals(window.getSomeString(), "śćążź");
|
||||
});
|
||||
</script>
|
||||
|
||||
<script type="text/javascript"
|
||||
src="serve-with-content-type.py?fn=external-script-utf8.js&ct=text/javascript">
|
||||
</script>
|
||||
<script>
|
||||
//these strings should match, both document and tested file are utf-8
|
||||
test(function() {
|
||||
assert_equals(window.getSomeString(), "śćążź");
|
||||
});
|
||||
</script>
|
||||
|
||||
<!-- the last portion of tests (step4) are in file script-charset-02.html
|
||||
|
||||
</head>
|
|
@ -0,0 +1,40 @@
|
|||
<!DOCTYPE html>
|
||||
<head>
|
||||
<!-- TODO:
|
||||
askalski: while this test pass, it does not test anything now.
|
||||
It should test, whether with no document.charset set in any way, the
|
||||
external scripts will get decoded using utf-8 as fallback character encoding.
|
||||
It seems like utf-8 is also a fallback encoding to html (my guess), so
|
||||
the part of the code I was attempting to test is never reached.
|
||||
-->
|
||||
<title>Script @type: unknown parameters</title>
|
||||
<link rel="author" title="askalski" href="github.com/askalski">
|
||||
<link rel="help" href="https://html.spec.whatwg.org/multipage/#scriptingLanguages">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<div id="log"></div>
|
||||
|
||||
<!-- test of step4, which is taking utf-8 as fallback -->
|
||||
<!-- in this case, neither response's Content Type nor charset attribute bring correct charset information.
|
||||
Furthermore, document's encoding is not set.-->
|
||||
<script type="text/javascript"
|
||||
src="serve-with-content-type.py?fn=external-script-windows1250.js&ct=text/javascript">
|
||||
</script>
|
||||
<script>
|
||||
test(function() {
|
||||
//these strings should not match, since the tested file is in windows-1250, and fallback is defined as utf-8
|
||||
assert_not_equals(window.getSomeString().length, 5);
|
||||
});
|
||||
</script>
|
||||
|
||||
<script type="text/javascript"
|
||||
src="serve-with-content-type.py?fn=external-script-utf8.js&ct=text/javascript">
|
||||
</script>
|
||||
<script>
|
||||
//these strings should match, since fallback utf-8 is the correct setting.
|
||||
test(function() {
|
||||
assert_equals(window.getSomeString().length, 5);
|
||||
});
|
||||
</script>
|
||||
|
||||
</head>
|
|
@ -0,0 +1,15 @@
|
|||
import os
|
||||
|
||||
def main(request, response):
|
||||
directory = os.path.dirname(__file__)
|
||||
|
||||
try:
|
||||
file_name = request.GET.first("fn")
|
||||
content_type = request.GET.first("ct")
|
||||
with open(os.path.join(directory, file_name), "rb") as fh:
|
||||
content = fh.read()
|
||||
|
||||
response.headers.set("Content-Type", content_type)
|
||||
response.content = content
|
||||
except:
|
||||
response.set_error(400, "Not enough parameters or file not found")
|
Loading…
Add table
Add a link
Reference in a new issue