1b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Copyright 2013 the V8 project authors. All rights reserved. 2b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// Redistribution and use in source and binary forms, with or without 3b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// modification, are permitted provided that the following conditions are 4b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// met: 5b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// 6b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// * Redistributions of source code must retain the above copyright 7b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// notice, this list of conditions and the following disclaimer. 8b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// * Redistributions in binary form must reproduce the above 9b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// copyright notice, this list of conditions and the following 10b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// disclaimer in the documentation and/or other materials provided 11b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// with the distribution. 12b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// * Neither the name of Google Inc. nor the names of its 13b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// contributors may be used to endorse or promote products derived 14b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// from this software without specific prior written permission. 15b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// 16b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 19b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 20b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 28b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Tests String.prototype.localeCompare method override. 29b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 30b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvar testData = { 31b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 'en': ['blood', 'bull', 'ascend', 'zed', 'down'], 32b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 'sr': ['новине', 'ограда', 'жирафа', 'Никола', 'Андрија', 'Стара Планина', 33b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 'џак', 'алав', 'ћук', 'чука'], 34b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 'de': ['März', 'Fuße', 'FUSSE', 'Fluße', 'Flusse', 'flusse', 'fluße', 35b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 'flüße', 'flüsse'] 36b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 37b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 38b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 39b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochfunction testArrays(locale) { 40b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var data; 41b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch if (locale === undefined) { 42b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch data = testData['en']; 43b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch locale = []; 44b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } else { 45b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch data = testData[locale]; 46b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch } 47b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 48b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var collator = new Intl.Collator(locale, options); 49b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var collatorResult = data.sort(collator.compare); 50b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch var localeCompareResult = data.sort(function(a, b) { 51b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch return a.localeCompare(b, locale, options) 52b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch }); 53b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch assertEquals(collatorResult, localeCompareResult); 54b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch} 55b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 56b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 57b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Defaults 58b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvar options = undefined; 59b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochtestArrays(); 60b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 61b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 62b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Specify locale, keep default options. 63b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochoptions = undefined; 64b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochObject.keys(testData).forEach(testArrays); 65b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 66b8e0da25ee8efac3bb05cd6b2730aafbd96119f4Ben Murdoch 67b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Specify locale and options. 68b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochoptions = {caseFirst: 'upper'}; 69b8a8cc1952d61a2f3a2568848933943a543b5d3eBen MurdochObject.keys(testData).forEach(testArrays); 70