blob: db014cc6767c6c934d71d5f40590a937044fd684 [file] [log] [blame]
<!DOCTYPE html>
<html>
<body>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<script>
test(function() {
assert_true('language' in window.navigator);
assert_true('languages' in window.navigator);
assert_true('onlanguagechange' in window);
}, "Test that NavigatorLanguage API is present in window");
test(function() {
var received = false;
window.onlanguagechange = function() {
received = true;
}
window.testRunner.setAcceptLanguages('klingon');
assert_true(received);
}, "Test that the languagechange event fires on window.onlanguagechange");
test(function() {
var received = false;
window.addEventListener('languagechange', function() {
received = true;
});
window.testRunner.setAcceptLanguages('klingon-FR');
assert_true(received);
}, "Test that the languagechange event fires on window.addEventListener('languagechange')");
test(function() {
window.received = false; // We need a global variable here.
document.body.setAttribute('onlanguagechange', 'window.received = true;');
window.testRunner.setAcceptLanguages('klingon-US');
assert_true(window.received);
}, "Test that the languagechange event fires on body onlanguagechange attribute");
test(function() {
window.received = 0; // We need a global variable here.
var fromWindowHandler = false;
document.body.setAttribute('onlanguagechange', 'window.received++;');
window.onlanguagechange = function() {
received++;
fromWindowHandler = true;
}
window.testRunner.setAcceptLanguages('klingon');
assert_equals(window.received, 1);
assert_true(fromWindowHandler);
window.received = 0;
fromWindowHandler = false;
window.onlanguagechange = function() {
received++;
fromWindowHandler = true;
}
document.body.setAttribute('onlanguagechange', 'window.received++;');
window.testRunner.setAcceptLanguages('klingon-FR');
assert_equals(window.received, 1);
assert_false(fromWindowHandler);
}, "Test that the languagechange event fires on body onlanguagechange attribute XOR window.onlanguagechange");
test(function() {
var eventsCount = 0;
window.onlanguagechange = function() {
eventsCount++;
}
window.testRunner.setAcceptLanguages('klingon-US');
window.testRunner.setAcceptLanguages('klingon-US');
assert_equals(eventsCount, 1);
}, "Test that changing the language to the same value doesn't fire an event.")
test(function() {
window.addEventListener('languagechange', function(e) {
assert_false(e.cancelable);
assert_false(e.bubbles);
});
window.testRunner.setAcceptLanguages('klingon');
}, "Test properties of the fired event.");
test(function() {
var testValues = [
{ accept_languages: 'foo', language: 'foo', languages: ['foo'] },
{ accept_languages: '', language: '', languages: [] },
{ accept_languages: 'foo,bar', language: 'foo', languages: [ 'foo', 'bar' ] },
{ accept_languages: ' foo , bar ', language: 'foo', languages: [ 'foo', 'bar' ] },
{ accept_languages: ' foo ; bar ', language: 'foo ; bar', languages: [ 'foo ; bar' ] },
{ accept_languages: '_foo_', language: '_foo_', languages: ['_foo_'] },
{ accept_languages: 'en_', language: 'en-', languages: ['en-'] },
{ accept_languages: 'en__', language: 'en-_', languages: ['en-_'] },
{ accept_languages: 'en_US, fr_FR', language: 'en-US', languages: ['en-US', 'fr-FR'] },
{ accept_languages: 'en_US_CA', language: 'en-US_CA', languages: ['en-US_CA'] },
];
var eventsCount = 0;
window.onlanguagechange = function() {
eventsCount++;
}
for (var i = 0; i < testValues.length; ++i) {
var data = testValues[i];
window.testRunner.setAcceptLanguages(data.accept_languages);
assert_equals(eventsCount, i + 1);
assert_equals(navigator.languages.length, data.languages.length);
// FIXME: test navigator.language
for (var j = 0; j < navigator.languages.length; ++j) {
assert_equals(navigator.languages[j], data.languages[j]);
}
}
}, "Test that navigator.languages reflects the accept languages value.");
test(function() {
var previous = navigator.languages;
assert_equals(navigator.languages, navigator.languages);
assert_equals(navigator.languages, previous);
window.testRunner.setAcceptLanguages('fr-FR');
assert_not_equals(navigator.languages, previous);
}, "Test that navigator.languages caching behaviour.");
test(function() {
// The region code should be uppercase.
assert_equals(navigator.language, 'en-US');
}, 'Test that the default navigator.language in the test environment.');
</script>
</body>
</html>