| // Copyright 2013 The Closure Library Authors. All Rights Reserved. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS-IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| goog.provide('goog.labs.i18n.ListFormatTest'); |
| goog.setTestOnly('goog.labs.i18n.ListFormatTest'); |
| |
| goog.require('goog.labs.i18n.GenderInfo'); |
| goog.require('goog.labs.i18n.ListFormat'); |
| goog.require('goog.labs.i18n.ListFormatSymbols'); |
| goog.require('goog.labs.i18n.ListFormatSymbols_el'); |
| goog.require('goog.labs.i18n.ListFormatSymbols_en'); |
| goog.require('goog.labs.i18n.ListFormatSymbols_fr'); |
| goog.require('goog.labs.i18n.ListFormatSymbols_ml'); |
| goog.require('goog.labs.i18n.ListFormatSymbols_zu'); |
| goog.require('goog.testing.jsunit'); |
| |
| function setUp() { |
| // Always switch back to English on startup. |
| goog.labs.i18n.ListFormatSymbols = goog.labs.i18n.ListFormatSymbols_en; |
| } |
| |
| function testListFormatterArrayDirect() { |
| var fmt = new goog.labs.i18n.ListFormat(); |
| assertEquals( |
| 'One', |
| fmt.format(['One']) |
| ); |
| assertEquals( |
| 'One and Two', |
| fmt.format(['One', 'Two']) |
| ); |
| assertEquals( |
| 'One, Two, and Three', |
| fmt.format(['One', 'Two', 'Three']) |
| ); |
| assertEquals( |
| 'One, Two, Three, Four, Five, and Six', |
| fmt.format(['One', 'Two', 'Three', 'Four', 'Five', 'Six']) |
| ); |
| } |
| |
| function testListFormatterArrayIndirect() { |
| var fmt = new goog.labs.i18n.ListFormat(); |
| |
| var items = []; |
| |
| items.push('One'); |
| assertEquals('One', fmt.format(items)); |
| |
| items.push('Two'); |
| assertEquals('One and Two', fmt.format(items)); |
| items.push('Three'); |
| assertEquals('One, Two, and Three', fmt.format(items)); |
| |
| items.push('Four'); |
| items.push('Five'); |
| items.push('Six'); |
| assertEquals('One, Two, Three, Four, Five, and Six', fmt.format(items)); |
| } |
| |
| function testListFormatterFrench() { |
| goog.labs.i18n.ListFormatSymbols = goog.labs.i18n.ListFormatSymbols_fr; |
| |
| var fmt = new goog.labs.i18n.ListFormat(); |
| assertEquals( |
| 'One', |
| fmt.format(['One']) |
| ); |
| assertEquals( |
| 'One et Two', |
| fmt.format(['One', 'Two']) |
| ); |
| assertEquals( |
| 'One, Two et Three', |
| fmt.format(['One', 'Two', 'Three']) |
| ); |
| assertEquals( |
| 'One, Two, Three, Four, Five et Six', |
| fmt.format(['One', 'Two', 'Three', 'Four', 'Five', 'Six']) |
| ); |
| |
| goog.labs.i18n.ListFormatSymbols = goog.labs.i18n.ListFormatSymbols_en; |
| } |
| |
| // Malayalam and Zulu are the only two locales with pathers |
| // different than '{0} sometext {1}' |
| function testListFormatterSpecialLanguages() { |
| goog.labs.i18n.ListFormatSymbols = goog.labs.i18n.ListFormatSymbols_ml; |
| var fmt_ml = new goog.labs.i18n.ListFormat(); |
| goog.labs.i18n.ListFormatSymbols = goog.labs.i18n.ListFormatSymbols_zu; |
| var fmt_zu = new goog.labs.i18n.ListFormat(); |
| goog.labs.i18n.ListFormatSymbols = goog.labs.i18n.ListFormatSymbols_en; |
| |
| // Only the end pattern is special with Malayalam |
| // Escaped for safety, the string is 'One, Two, Three എന്നിവ' |
| assertEquals('One, Two, Three \u0D0E\u0D28\u0D4D\u0D28\u0D3F\u0D35', |
| fmt_ml.format(['One', 'Two', 'Three'])); |
| |
| // Only the two items pattern is special with Zulu |
| assertEquals('I-One ne-Two', fmt_zu.format(['One', 'Two'])); |
| } |
| |
| function testVariousObjectTypes() { |
| var fmt = new goog.labs.i18n.ListFormat(); |
| var booleanObject = new Boolean(1); |
| var arrayObject = ['black', 'white']; |
| // Not sure how "flaky" this is. Firefox and Chrome give the same results, |
| // but I am not sure if the JavaScript standard specifies exactly what |
| // Array toString does, for instance. |
| assertEquals( |
| 'One, black,white, 42, true, and Five', |
| fmt.format(['One', arrayObject, 42, booleanObject, 'Five']) |
| ); |
| } |
| |
| function testListGendersNeutral() { |
| var Gender = goog.labs.i18n.GenderInfo.Gender; |
| |
| goog.labs.i18n.ListFormatSymbols = goog.labs.i18n.ListFormatSymbols_en; |
| var listGen = new goog.labs.i18n.GenderInfo(); |
| |
| assertEquals(Gender.MALE, listGen.getListGender([Gender.MALE])); |
| assertEquals(Gender.FEMALE, listGen.getListGender([Gender.FEMALE])); |
| assertEquals(Gender.OTHER, listGen.getListGender([Gender.OTHER])); |
| |
| assertEquals(Gender.OTHER, listGen.getListGender([Gender.MALE, Gender.MALE])); |
| assertEquals( |
| Gender.OTHER, listGen.getListGender([Gender.FEMALE, Gender.FEMALE])); |
| assertEquals( |
| Gender.OTHER, listGen.getListGender([Gender.OTHER, Gender.OTHER])); |
| |
| assertEquals( |
| Gender.OTHER, listGen.getListGender([Gender.MALE, Gender.OTHER])); |
| assertEquals( |
| Gender.OTHER, listGen.getListGender([Gender.OTHER, Gender.MALE])); |
| assertEquals( |
| Gender.OTHER, listGen.getListGender([Gender.MALE, Gender.FEMALE])); |
| assertEquals( |
| Gender.OTHER, listGen.getListGender([Gender.FEMALE, Gender.MALE])); |
| assertEquals( |
| Gender.OTHER, listGen.getListGender([Gender.OTHER, Gender.FEMALE])); |
| assertEquals( |
| Gender.OTHER, listGen.getListGender([Gender.FEMALE, Gender.OTHER])); |
| |
| assertEquals( |
| Gender.OTHER, |
| listGen.getListGender([Gender.MALE, Gender.FEMALE, Gender.OTHER])); |
| assertEquals( |
| Gender.OTHER, |
| listGen.getListGender([Gender.MALE, Gender.OTHER, Gender.FEMALE])); |
| assertEquals( |
| Gender.OTHER, |
| listGen.getListGender([Gender.FEMALE, Gender.MALE, Gender.OTHER])); |
| assertEquals( |
| Gender.OTHER, |
| listGen.getListGender([Gender.FEMALE, Gender.OTHER, Gender.MALE])); |
| assertEquals( |
| Gender.OTHER, |
| listGen.getListGender([Gender.OTHER, Gender.MALE, Gender.FEMALE])); |
| assertEquals( |
| Gender.OTHER, |
| listGen.getListGender([Gender.OTHER, Gender.FEMALE, Gender.MALE])); |
| } |
| |
| function testListGendersMaleTaints() { |
| var Gender = goog.labs.i18n.GenderInfo.Gender; |
| |
| goog.labs.i18n.ListFormatSymbols = goog.labs.i18n.ListFormatSymbols_fr; |
| var listGen = new goog.labs.i18n.GenderInfo(); |
| goog.labs.i18n.ListFormatSymbols = goog.labs.i18n.ListFormatSymbols_en; |
| |
| assertEquals(Gender.MALE, listGen.getListGender([Gender.MALE])); |
| assertEquals(Gender.FEMALE, listGen.getListGender([Gender.FEMALE])); |
| assertEquals(Gender.OTHER, listGen.getListGender([Gender.OTHER])); |
| |
| assertEquals(Gender.MALE, listGen.getListGender([Gender.MALE, Gender.MALE])); |
| assertEquals( |
| Gender.FEMALE, listGen.getListGender([Gender.FEMALE, Gender.FEMALE])); |
| assertEquals( |
| Gender.MALE, listGen.getListGender([Gender.OTHER, Gender.OTHER])); |
| |
| assertEquals(Gender.MALE, listGen.getListGender([Gender.MALE, Gender.OTHER])); |
| assertEquals(Gender.MALE, listGen.getListGender([Gender.OTHER, Gender.MALE])); |
| assertEquals( |
| Gender.MALE, listGen.getListGender([Gender.MALE, Gender.FEMALE])); |
| assertEquals( |
| Gender.MALE, listGen.getListGender([Gender.FEMALE, Gender.MALE])); |
| assertEquals( |
| Gender.MALE, listGen.getListGender([Gender.OTHER, Gender.FEMALE])); |
| assertEquals( |
| Gender.MALE, listGen.getListGender([Gender.FEMALE, Gender.OTHER])); |
| |
| assertEquals( |
| Gender.MALE, |
| listGen.getListGender([Gender.MALE, Gender.FEMALE, Gender.OTHER])); |
| assertEquals( |
| Gender.MALE, |
| listGen.getListGender([Gender.MALE, Gender.OTHER, Gender.FEMALE])); |
| assertEquals( |
| Gender.MALE, |
| listGen.getListGender([Gender.FEMALE, Gender.MALE, Gender.OTHER])); |
| assertEquals( |
| Gender.MALE, |
| listGen.getListGender([Gender.FEMALE, Gender.OTHER, Gender.MALE])); |
| assertEquals( |
| Gender.MALE, |
| listGen.getListGender([Gender.OTHER, Gender.MALE, Gender.FEMALE])); |
| assertEquals( |
| Gender.MALE, |
| listGen.getListGender([Gender.OTHER, Gender.FEMALE, Gender.MALE])); |
| } |
| |
| function testListGendersMixedNeutral() { |
| var Gender = goog.labs.i18n.GenderInfo.Gender; |
| |
| goog.labs.i18n.ListFormatSymbols = goog.labs.i18n.ListFormatSymbols_el; |
| var listGen = new goog.labs.i18n.GenderInfo(); |
| goog.labs.i18n.ListFormatSymbols = goog.labs.i18n.ListFormatSymbols_en; |
| |
| assertEquals(Gender.MALE, listGen.getListGender([Gender.MALE])); |
| assertEquals(Gender.FEMALE, listGen.getListGender([Gender.FEMALE])); |
| assertEquals(Gender.OTHER, listGen.getListGender([Gender.OTHER])); |
| |
| assertEquals(Gender.MALE, listGen.getListGender([Gender.MALE, Gender.MALE])); |
| assertEquals( |
| Gender.FEMALE, listGen.getListGender([Gender.FEMALE, Gender.FEMALE])); |
| assertEquals( |
| Gender.OTHER, listGen.getListGender([Gender.OTHER, Gender.OTHER])); |
| |
| assertEquals( |
| Gender.OTHER, listGen.getListGender([Gender.MALE, Gender.OTHER])); |
| assertEquals( |
| Gender.OTHER, listGen.getListGender([Gender.OTHER, Gender.MALE])); |
| assertEquals( |
| Gender.OTHER, listGen.getListGender([Gender.MALE, Gender.FEMALE])); |
| assertEquals( |
| Gender.OTHER, listGen.getListGender([Gender.FEMALE, Gender.MALE])); |
| assertEquals( |
| Gender.OTHER, listGen.getListGender([Gender.OTHER, Gender.FEMALE])); |
| assertEquals( |
| Gender.OTHER, listGen.getListGender([Gender.FEMALE, Gender.OTHER])); |
| |
| assertEquals( |
| Gender.OTHER, |
| listGen.getListGender([Gender.MALE, Gender.FEMALE, Gender.OTHER])); |
| assertEquals( |
| Gender.OTHER, |
| listGen.getListGender([Gender.MALE, Gender.OTHER, Gender.FEMALE])); |
| assertEquals( |
| Gender.OTHER, |
| listGen.getListGender([Gender.FEMALE, Gender.MALE, Gender.OTHER])); |
| assertEquals( |
| Gender.OTHER, |
| listGen.getListGender([Gender.FEMALE, Gender.OTHER, Gender.MALE])); |
| assertEquals( |
| Gender.OTHER, |
| listGen.getListGender([Gender.OTHER, Gender.MALE, Gender.FEMALE])); |
| assertEquals( |
| Gender.OTHER, |
| listGen.getListGender([Gender.OTHER, Gender.FEMALE, Gender.MALE])); |
| } |
| |
| function testListGendersVariousCallTypes() { |
| var Gender = goog.labs.i18n.GenderInfo.Gender; |
| |
| // Using French because with English the results are mostly Gender.OTHER |
| // so we can detect fewer problems |
| goog.labs.i18n.ListFormatSymbols = goog.labs.i18n.ListFormatSymbols_fr; |
| var listGen = new goog.labs.i18n.GenderInfo(); |
| goog.labs.i18n.ListFormatSymbols = goog.labs.i18n.ListFormatSymbols_en; |
| |
| // Anynymous Arrays |
| assertEquals(Gender.MALE, listGen.getListGender([Gender.MALE])); |
| assertEquals(Gender.FEMALE, listGen.getListGender([Gender.FEMALE])); |
| assertEquals(Gender.OTHER, listGen.getListGender([Gender.OTHER])); |
| |
| assertEquals(Gender.MALE, listGen.getListGender([Gender.MALE, Gender.MALE])); |
| assertEquals( |
| Gender.FEMALE, listGen.getListGender([Gender.FEMALE, Gender.FEMALE])); |
| assertEquals( |
| Gender.MALE, listGen.getListGender([Gender.OTHER, Gender.OTHER])); |
| |
| assertEquals( |
| Gender.MALE, listGen.getListGender([Gender.MALE, Gender.FEMALE])); |
| assertEquals(Gender.MALE, listGen.getListGender([Gender.MALE, Gender.OTHER])); |
| assertEquals( |
| Gender.MALE, listGen.getListGender([Gender.FEMALE, Gender.OTHER])); |
| |
| // Arrays |
| var arrayM = [Gender.MALE]; |
| var arrayF = [Gender.FEMALE]; |
| var arrayO = [Gender.OTHER]; |
| |
| var arrayMM = [Gender.MALE, Gender.MALE]; |
| var arrayFF = [Gender.FEMALE, Gender.FEMALE]; |
| var arrayOO = [Gender.OTHER, Gender.OTHER]; |
| |
| var arrayMF = [Gender.MALE, Gender.FEMALE]; |
| var arrayMO = [Gender.MALE, Gender.OTHER]; |
| var arrayFO = [Gender.FEMALE, Gender.OTHER]; |
| |
| assertEquals(Gender.MALE, listGen.getListGender(arrayM)); |
| assertEquals(Gender.FEMALE, listGen.getListGender(arrayF)); |
| assertEquals(Gender.OTHER, listGen.getListGender(arrayO)); |
| |
| assertEquals(Gender.MALE, listGen.getListGender(arrayMM)); |
| assertEquals(Gender.FEMALE, listGen.getListGender(arrayFF)); |
| assertEquals(Gender.MALE, listGen.getListGender(arrayOO)); |
| |
| assertEquals(Gender.MALE, listGen.getListGender(arrayMF)); |
| assertEquals(Gender.MALE, listGen.getListGender(arrayMO)); |
| assertEquals(Gender.MALE, listGen.getListGender(arrayFO)); |
| } |