translation-tests.js 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289
  1. var $ = require('jquery');
  2. var Options = require('select2/options');
  3. var Defaults = require('select2/defaults');
  4. module('Options - Translations', {
  5. beforeEach: function () {
  6. Defaults.reset();
  7. },
  8. afterEach: function () {
  9. Defaults.reset();
  10. }
  11. });
  12. test('partial dictonaries are reset when default reset', function (assert) {
  13. Defaults.set('language', {
  14. test: 'testing'
  15. });
  16. Defaults.reset();
  17. assert.ok(
  18. !Defaults.defaults.language.test,
  19. 'The partial dictionary should have been reset'
  20. );
  21. });
  22. test('default language chain is English', function (assert) {
  23. var $element = $('<select></select>');
  24. var options = new Options({}, $element);
  25. assert.deepEqual(
  26. options.get('language'),
  27. ['en']
  28. );
  29. });
  30. test(
  31. 'default translation includes all of the required messages',
  32. function (assert) {
  33. var $element = $('<select></select>');
  34. var options = new Options({}, $element);
  35. assert.deepEqual(
  36. Object.keys(options.get('translations').all()),
  37. [
  38. 'errorLoading',
  39. 'inputTooLong',
  40. 'inputTooShort',
  41. 'loadingMore',
  42. 'maximumSelected',
  43. 'noResults',
  44. 'searching',
  45. 'removeAllItems',
  46. 'removeItem'
  47. ]
  48. );
  49. }
  50. );
  51. test('partial dictionaries can be passed', function (assert) {
  52. var $element = $('<select></select>');
  53. var options = new Options({
  54. language: {
  55. searching: function () {
  56. return 'Something';
  57. }
  58. }
  59. }, $element);
  60. var translations = options.get('translations');
  61. assert.equal(
  62. translations.get('searching')(),
  63. 'Something',
  64. 'The partial dictionary still overrides translations'
  65. );
  66. assert.equal(
  67. translations.get('noResults')(),
  68. 'No results found',
  69. 'You can still get English translations for keys not passed in'
  70. );
  71. });
  72. test('partial dictionaries can be combined with defaults', function (assert) {
  73. var $element = $('<select></select>');
  74. Defaults.set('language', {
  75. test: function () {
  76. return 'Testing';
  77. }
  78. });
  79. var options = new Options({
  80. language: {
  81. searching: function () {
  82. return 'Something';
  83. }
  84. }
  85. }, $element);
  86. var translations = options.get('translations');
  87. assert.equal(
  88. translations.get('searching')(),
  89. 'Something',
  90. 'The partial dictionary still overrides translations'
  91. );
  92. assert.equal(
  93. translations.get('test')(),
  94. 'Testing',
  95. 'The defaults were included in the fallback chain'
  96. );
  97. assert.equal(
  98. translations.get('noResults')(),
  99. 'No results found',
  100. 'You can still get English translations for keys not passed in'
  101. );
  102. });
  103. test('partial dictionaries can used in fallback chains', function (assert) {
  104. var $element = $('<select></select>');
  105. var options = new Options({
  106. language: [
  107. {
  108. searching: function () {
  109. return 'Something';
  110. }
  111. },
  112. {
  113. test: function () {
  114. return 'Testing';
  115. }
  116. }
  117. ]
  118. }, $element);
  119. var translations = options.get('translations');
  120. assert.equal(
  121. translations.get('searching')(),
  122. 'Something',
  123. 'The partial dictionary still overrides translations'
  124. );
  125. assert.equal(
  126. translations.get('test')(),
  127. 'Testing',
  128. 'The defaults were included in the fallback chain'
  129. );
  130. assert.equal(
  131. translations.get('noResults')(),
  132. 'No results found',
  133. 'You can still get English translations for keys not passed in'
  134. );
  135. });
  136. test('language can be set via the options', function (assert) {
  137. var $element = $('<select></select>');
  138. var options = new Options({
  139. language: 'es'
  140. }, $element);
  141. assert.deepEqual(
  142. options.get('language'),
  143. ['es', 'en']
  144. );
  145. });
  146. test('multi-part language is broken out', function (assert) {
  147. var $element = $('<select></select>');
  148. var options = new Options({
  149. language: 'pt-BR'
  150. }, $element);
  151. assert.deepEqual(
  152. options.get('language'),
  153. ['pt-BR', 'pt', 'en']
  154. );
  155. });
  156. test('default language can be set', function (assert) {
  157. var $element = $('<select></select>');
  158. Defaults.set('language', 'es');
  159. var options = new Options({}, $element);
  160. assert.deepEqual(
  161. options.get('language'),
  162. ['es', 'en']
  163. );
  164. });
  165. test('lanugage set via options adds to default chain', function (assert) {
  166. var $element = $('<select></select>');
  167. Defaults.set('language', 'es');
  168. var options = new Options({
  169. language: 'it'
  170. }, $element);
  171. assert.deepEqual(
  172. options.get('language'),
  173. ['it', 'es', 'en']
  174. );
  175. });
  176. test('default language chain can be set', function (assert) {
  177. var $element = $('<select></select>');
  178. Defaults.set('language', ['es', 'it', 'en']);
  179. var options = new Options({}, $element);
  180. assert.deepEqual(
  181. options.get('language'),
  182. ['es', 'it', 'en']
  183. );
  184. });
  185. test('language can be set by lang attr', function (assert) {
  186. var $element = $('<select lang="es"></select>');
  187. var options = new Options({}, $element);
  188. assert.deepEqual(
  189. options.get('language'),
  190. ['es', 'en']
  191. );
  192. });
  193. test('language can be inherited by lang attr', function (assert) {
  194. var $element = $('<div lang="es"><select></select></div>').find('select');
  195. var options = new Options({}, $element);
  196. assert.deepEqual(
  197. options.get('language'),
  198. ['es', 'en']
  199. );
  200. });
  201. test('multi-part language can be inherited by lang attr', function (assert) {
  202. var $element = $('<div lang="pt-BR"><select></select></div>').find('select');
  203. var options = new Options({}, $element);
  204. assert.deepEqual(
  205. options.get('language'),
  206. ['pt-BR', 'pt', 'en']
  207. );
  208. });
  209. test('lang attr overrides default language', function (assert) {
  210. var $element = $('<select lang="it"></select>');
  211. Defaults.set('language', 'es');
  212. var options = new Options({}, $element);
  213. assert.deepEqual(
  214. options.get('language'),
  215. ['it', 'es', 'en']
  216. );
  217. });
  218. test('default language overrides inherited lang attr', function (assert) {
  219. var $element = $('<div lang="it"><select></select></div>').find('select');
  220. Defaults.set('language', 'es');
  221. var options = new Options({}, $element);
  222. assert.deepEqual(
  223. options.get('language'),
  224. ['es', 'it', 'en']
  225. );
  226. });