| // Copyright 2013 the V8 project authors. All rights reserved. | 
 | // Redistribution and use in source and binary forms, with or without | 
 | // modification, are permitted provided that the following conditions are | 
 | // met: | 
 | // | 
 | //     * Redistributions of source code must retain the above copyright | 
 | //       notice, this list of conditions and the following disclaimer. | 
 | //     * Redistributions in binary form must reproduce the above | 
 | //       copyright notice, this list of conditions and the following | 
 | //       disclaimer in the documentation and/or other materials provided | 
 | //       with the distribution. | 
 | //     * Neither the name of Google Inc. nor the names of its | 
 | //       contributors may be used to endorse or promote products derived | 
 | //       from this software without specific prior written permission. | 
 | // | 
 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | 
 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | 
 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | 
 | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | 
 | // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | 
 | // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | 
 | // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 
 | // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 
 | // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 
 | // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 
 | // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 
 |  | 
 | // Tests supportedLocalesOf method. | 
 |  | 
 | // Flags: --harmony-intl-segmenter | 
 |  | 
 | var services = [ | 
 |   Intl.Collator, | 
 |   Intl.DateTimeFormat, | 
 |   Intl.NumberFormat, | 
 |   Intl.ListFormat, | 
 |   Intl.PluralRules, | 
 |   Intl.RelativeTimeFormat, | 
 |   Intl.Segmenter, | 
 |   Intl.v8BreakIterator, | 
 | ]; | 
 |  | 
 | for (const service of services) { | 
 |   let undef = service.supportedLocalesOf(); | 
 |   assertEquals([], undef); | 
 |  | 
 |   let empty = service.supportedLocalesOf([]); | 
 |   assertEquals([], empty); | 
 |  | 
 |   let strLocale = service.supportedLocalesOf("sr"); | 
 |   assertEquals("sr", strLocale[0]); | 
 |  | 
 |   var locales = ["sr-Thai-RS", "de", "zh-CN"]; | 
 |   let multiLocale = service.supportedLocalesOf(locales); | 
 |   assertEquals("sr-Thai-RS", multiLocale[0]); | 
 |   assertEquals("de", multiLocale[1]); | 
 |   assertEquals("zh-CN", multiLocale[2]); | 
 |  | 
 |   let numLocale = service.supportedLocalesOf(1); | 
 |   assertEquals([], numLocale); | 
 |   assertThrows(function() { | 
 |     numLocale = Intl.Collator.supportedLocalesOf([1]); | 
 |   }, TypeError); | 
 |  | 
 |   extensionLocale = service.supportedLocalesOf("id-u-co-pinyin"); | 
 |   assertEquals("id-u-co-pinyin", extensionLocale[0]); | 
 |  | 
 |   bestFitLocale = service.supportedLocalesOf("de", { | 
 |     localeMatcher: "best fit" | 
 |   }); | 
 |   assertEquals("de", bestFitLocale[0]); | 
 |  | 
 |   // Need a better test for "lookup" once it differs from "best fit". | 
 |   lookupLocale = service.supportedLocalesOf("zh-CN", { | 
 |     localeMatcher: "lookup" | 
 |   }); | 
 |   assertEquals("zh-CN", lookupLocale[0]); | 
 |  | 
 |   assertThrows(function() { | 
 |     service.supportedLocalesOf("id-u-co-pinyin", { localeMatcher: "xyz" }); | 
 |   }, RangeError); | 
 |  | 
 |   privateuseLocale = service.supportedLocalesOf("en-US-x-twain"); | 
 |   assertEquals("en-US-x-twain", privateuseLocale[0]); | 
 |  | 
 |   privateuseLocale2 = service.supportedLocalesOf("x-twain"); | 
 |   assertEquals(undefined, privateuseLocale2[0]); | 
 |  | 
 |   if (service != Intl.PluralRules) { | 
 |     grandfatheredLocale = service.supportedLocalesOf("art-lojban"); | 
 |     assertEquals(undefined, grandfatheredLocale[0]); | 
 |   } | 
 |  | 
 |   grandfatheredLocale2 = service.supportedLocalesOf("i-pwn"); | 
 |   assertEquals(undefined, grandfatheredLocale2[0]); | 
 |  | 
 |   unicodeInPrivateuseLocale = service.supportedLocalesOf( | 
 |     "en-US-x-u-co-phonebk" | 
 |   ); | 
 |   assertEquals("en-US-x-u-co-phonebk", unicodeInPrivateuseLocale[0]); | 
 | } |