Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
michael@0 | 1 | /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ |
michael@0 | 2 | /* This Source Code Form is subject to the terms of the Mozilla Public |
michael@0 | 3 | * License, v. 2.0. If a copy of the MPL was not distributed with this |
michael@0 | 4 | * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
michael@0 | 5 | |
michael@0 | 6 | //----------------------------------------------------------------------------- |
michael@0 | 7 | |
michael@0 | 8 | /* |
michael@0 | 9 | This test case uses String.quote(), because that method uses the JS printf() |
michael@0 | 10 | functions internally. The printf() functions print to a char* buffer, causing |
michael@0 | 11 | conversion to and from UTF-8 if UTF-8 is enabled. If not, UTF-8 sequences are |
michael@0 | 12 | converted to ASCII \uXXXX sequences. Thus, both return values are acceptable. |
michael@0 | 13 | */ |
michael@0 | 14 | |
michael@0 | 15 | var BUGNUMBER = 315974; |
michael@0 | 16 | var summary = 'Test internal printf() for wide characters'; |
michael@0 | 17 | |
michael@0 | 18 | printBugNumber(BUGNUMBER); |
michael@0 | 19 | printStatus (summary); |
michael@0 | 20 | |
michael@0 | 21 | enterFunc (String (BUGNUMBER)); |
michael@0 | 22 | |
michael@0 | 23 | var goodSurrogatePair = '\uD841\uDC42'; |
michael@0 | 24 | var badSurrogatePair = '\uD841badbad'; |
michael@0 | 25 | |
michael@0 | 26 | var goodSurrogatePairQuotedUtf8 = '"\uD841\uDC42"'; |
michael@0 | 27 | var badSurrogatePairQuotedUtf8 = 'no error thrown!'; |
michael@0 | 28 | var goodSurrogatePairQuotedNoUtf8 = '"\\uD841\\uDC42"'; |
michael@0 | 29 | var badSurrogatePairQuotedNoUtf8 = '"\\uD841badbad"'; |
michael@0 | 30 | |
michael@0 | 31 | var status = summary + ': String.quote() should pay respect to surrogate pairs'; |
michael@0 | 32 | var actual = goodSurrogatePair.quote(); |
michael@0 | 33 | /* Result in case UTF-8 is enabled. */ |
michael@0 | 34 | var expect = goodSurrogatePairQuotedUtf8; |
michael@0 | 35 | /* Result in case UTF-8 is disabled. */ |
michael@0 | 36 | if (actual != expect && actual == goodSurrogatePairQuotedNoUtf8) |
michael@0 | 37 | expect = actual; |
michael@0 | 38 | reportCompare(expect, actual, status); |
michael@0 | 39 | |
michael@0 | 40 | /* |
michael@0 | 41 | * A malformed surrogate pair throws an out-of-memory error, |
michael@0 | 42 | * but only if UTF-8 is enabled. |
michael@0 | 43 | */ |
michael@0 | 44 | status = summary + ': String.quote() should throw error on bad surrogate pair'; |
michael@0 | 45 | /* Out of memory is not catchable. */ |
michael@0 | 46 | actual = badSurrogatePair.quote(); |
michael@0 | 47 | /* Come here only if UTF-8 is disabled. */ |
michael@0 | 48 | reportCompare(badSurrogatePairQuotedNoUtf8, actual, status); |
michael@0 | 49 | |
michael@0 | 50 | exitFunc (String (BUGNUMBER)); |