translation-tests.js 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  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 dictionaries 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. 'search'
  48. ]
  49. );
  50. }
  51. );
  52. test('partial dictionaries can be passed', function (assert) {
  53. var $element = $('<select></select>');
  54. var options = new Options({
  55. language: {
  56. searching: function () {
  57. return 'Something';
  58. }
  59. }
  60. }, $element);
  61. var translations = options.get('translations');
  62. assert.equal(
  63. translations.get('searching')(),
  64. 'Something',
  65. 'The partial dictionary still overrides translations'
  66. );
  67. assert.equal(
  68. translations.get('noResults')(),
  69. 'No results found',
  70. 'You can still get English translations for keys not passed in'
  71. );
  72. });
  73. test('partial dictionaries can be combined with defaults', function (assert) {
  74. var $element = $('<select></select>');
  75. Defaults.set('language', {
  76. test: function () {
  77. return 'Testing';
  78. }
  79. });
  80. var options = new Options({
  81. language: {
  82. searching: function () {
  83. return 'Something';
  84. }
  85. }
  86. }, $element);
  87. var translations = options.get('translations');
  88. assert.equal(
  89. translations.get('searching')(),
  90. 'Something',
  91. 'The partial dictionary still overrides translations'
  92. );
  93. assert.equal(
  94. translations.get('test')(),
  95. 'Testing',
  96. 'The defaults were included in the fallback chain'
  97. );
  98. assert.equal(
  99. translations.get('noResults')(),
  100. 'No results found',
  101. 'You can still get English translations for keys not passed in'
  102. );
  103. });
  104. test('partial dictionaries can used in fallback chains', function (assert) {
  105. var $element = $('<select></select>');
  106. var options = new Options({
  107. language: [
  108. {
  109. searching: function () {
  110. return 'Something';
  111. }
  112. },
  113. {
  114. test: function () {
  115. return 'Testing';
  116. }
  117. }
  118. ]
  119. }, $element);
  120. var translations = options.get('translations');
  121. assert.equal(
  122. translations.get('searching')(),
  123. 'Something',
  124. 'The partial dictionary still overrides translations'
  125. );
  126. assert.equal(
  127. translations.get('test')(),
  128. 'Testing',
  129. 'The defaults were included in the fallback chain'
  130. );
  131. assert.equal(
  132. translations.get('noResults')(),
  133. 'No results found',
  134. 'You can still get English translations for keys not passed in'
  135. );
  136. });
  137. test('language can be set via the options', function (assert) {
  138. var $element = $('<select></select>');
  139. var options = new Options({
  140. language: 'es'
  141. }, $element);
  142. assert.deepEqual(
  143. options.get('language'),
  144. ['es', 'en']
  145. );
  146. });
  147. test('multi-part language is broken out', function (assert) {
  148. var $element = $('<select></select>');
  149. var options = new Options({
  150. language: 'pt-BR'
  151. }, $element);
  152. assert.deepEqual(
  153. options.get('language'),
  154. ['pt-BR', 'pt', 'en']
  155. );
  156. });
  157. test('default language can be set', function (assert) {
  158. var $element = $('<select></select>');
  159. Defaults.set('language', 'es');
  160. var options = new Options({}, $element);
  161. assert.deepEqual(
  162. options.get('language'),
  163. ['es', 'en']
  164. );
  165. });
  166. test('lanugage set via options adds to default chain', function (assert) {
  167. var $element = $('<select></select>');
  168. Defaults.set('language', 'es');
  169. var options = new Options({
  170. language: 'it'
  171. }, $element);
  172. assert.deepEqual(
  173. options.get('language'),
  174. ['it', 'es', 'en']
  175. );
  176. });
  177. test('default language chain can be set', function (assert) {
  178. var $element = $('<select></select>');
  179. Defaults.set('language', ['es', 'it', 'en']);
  180. var options = new Options({}, $element);
  181. assert.deepEqual(
  182. options.get('language'),
  183. ['es', 'it', 'en']
  184. );
  185. });
  186. test('language can be set by lang attr', function (assert) {
  187. var $element = $('<select lang="es"></select>');
  188. var options = new Options({}, $element);
  189. assert.deepEqual(
  190. options.get('language'),
  191. ['es', 'en']
  192. );
  193. });
  194. test('language can be inherited by lang attr', function (assert) {
  195. var $element = $('<div lang="es"><select></select></div>').find('select');
  196. var options = new Options({}, $element);
  197. assert.deepEqual(
  198. options.get('language'),
  199. ['es', 'en']
  200. );
  201. });
  202. test('multi-part language can be inherited by lang attr', function (assert) {
  203. var $element = $('<div lang="pt-BR"><select></select></div>').find('select');
  204. var options = new Options({}, $element);
  205. assert.deepEqual(
  206. options.get('language'),
  207. ['pt-BR', 'pt', 'en']
  208. );
  209. });
  210. test('lang attr overrides default language', function (assert) {
  211. var $element = $('<select lang="it"></select>');
  212. Defaults.set('language', 'es');
  213. var options = new Options({}, $element);
  214. assert.deepEqual(
  215. options.get('language'),
  216. ['it', 'es', 'en']
  217. );
  218. });
  219. test('default language overrides inherited lang attr', function (assert) {
  220. var $element = $('<div lang="it"><select></select></div>').find('select');
  221. Defaults.set('language', 'es');
  222. var options = new Options({}, $element);
  223. assert.deepEqual(
  224. options.get('language'),
  225. ['es', 'it', 'en']
  226. );
  227. });