i18n.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323
  1. describe('i18n', function() {
  2. beforeEach(function() {
  3. $([
  4. '<form id="i18nForm" class="form-horizontal">',
  5. '<div class="form-group">',
  6. '<label class="col-lg-3 control-label">Full name</label>',
  7. '<div class="col-lg-5">',
  8. '<input type="text" class="form-control" name="fullName" />',
  9. '</div>',
  10. '</div>',
  11. '<div class="form-group">',
  12. '<label class="col-lg-3 control-label">Username</label>',
  13. '<div class="col-lg-5">',
  14. '<input type="text" class="form-control" name="username" />',
  15. '</div>',
  16. '</div>',
  17. '<div class="form-group">',
  18. '<label class="col-lg-3 control-label">Email address</label>',
  19. '<div class="col-lg-5">',
  20. '<input type="text" class="form-control" name="email" />',
  21. '</div>',
  22. '</div>',
  23. '<div class="form-group">',
  24. '<label class="col-lg-3 control-label">Password</label>',
  25. '<div class="col-lg-5">',
  26. '<input type="password" class="form-control" name="password" />',
  27. '</div>',
  28. '</div>',
  29. '<div class="form-group">',
  30. '<label class="col-lg-3 control-label">Retype password</label>',
  31. '<div class="col-lg-5">',
  32. '<input type="password" class="form-control" name="confirmPassword" />',
  33. '</div>',
  34. '</div>',
  35. '<div class="form-group">',
  36. '<label class="col-lg-3 control-label">Gender</label>',
  37. '<div class="col-lg-5">',
  38. '<div class="radio">',
  39. '<label><input type="radio" name="gender" value="male" /> Male</label>',
  40. '</div>',
  41. '<div class="radio">',
  42. '<label><input type="radio" name="gender" value="female" /> Female</label>',
  43. '</div>',
  44. '<div class="radio">',
  45. '<label><input type="radio" name="gender" value="other" /> Other</label>',
  46. '</div>',
  47. '</div>',
  48. '</div>',
  49. '<div class="form-group">',
  50. '<label class="col-lg-3 control-label">Age</label>',
  51. '<div class="col-lg-3">',
  52. '<input type="text" class="form-control" name="age" />',
  53. '</div>',
  54. '</div>',
  55. '<div class="form-group">',
  56. '<label class="col-lg-3 control-label">Website</label>',
  57. '<div class="col-lg-5">',
  58. '<input type="text" class="form-control" name="website" />',
  59. '</div>',
  60. '</div>',
  61. '<div class="form-group">',
  62. '<label class="col-lg-3 control-label">Phone number</label>',
  63. '<div class="col-lg-5">',
  64. '<input type="text" class="form-control" name="phoneNumber" />',
  65. '</div>',
  66. '</div>',
  67. '<div class="form-group">',
  68. '<label class="col-lg-3 control-label">Languages</label>',
  69. '<div class="col-lg-5">',
  70. '<div class="checkbox">',
  71. '<label><input type="checkbox" name="languages[]" value="english" /> English</label>',
  72. '</div>',
  73. '<div class="checkbox">',
  74. '<label><input type="checkbox" name="languages[]" value="french" /> French</label>',
  75. '</div>',
  76. '<div class="checkbox">',
  77. '<label><input type="checkbox" name="languages[]" value="german" /> German</label>',
  78. '</div>',
  79. '<div class="checkbox">',
  80. '<label><input type="checkbox" name="languages[]" value="russian" /> Russian</label>',
  81. '</div>',
  82. '<div class="checkbox">',
  83. '<label><input type="checkbox" name="languages[]" value="other" /> Other</label>',
  84. '</div>',
  85. '</div>',
  86. '</div>',
  87. '<div class="form-group">',
  88. '<label class="col-lg-3 control-label">Programming Languages</label>',
  89. '<div class="col-lg-5">',
  90. '<div class="checkbox">',
  91. '<label><input type="checkbox" name="programs[]" value="net" /> .Net</label>',
  92. '</div>',
  93. '<div class="checkbox">',
  94. '<label><input type="checkbox" name="programs[]" value="java" /> Java</label>',
  95. '</div>',
  96. '<div class="checkbox">',
  97. '<label><input type="checkbox" name="programs[]" value="c" /> C/C++</label>',
  98. '</div>',
  99. '<div class="checkbox">',
  100. '<label><input type="checkbox" name="programs[]" value="php" /> PHP</label>',
  101. '</div>',
  102. '<div class="checkbox">',
  103. '<label><input type="checkbox" name="programs[]" value="perl" /> Perl</label>',
  104. '</div>',
  105. '<div class="checkbox">',
  106. '<label><input type="checkbox" name="programs[]" value="ruby" /> Ruby</label>',
  107. '</div>',
  108. '<div class="checkbox">',
  109. '<label><input type="checkbox" name="programs[]" value="python" /> Python</label>',
  110. '</div>',
  111. '<div class="checkbox">',
  112. '<label><input type="checkbox" name="programs[]" value="javascript" /> Javascript</label>',
  113. '</div>',
  114. '</div>',
  115. '</div>',
  116. '</form>'
  117. ].join('')).appendTo('body');
  118. $('#i18nForm').bootstrapValidator({
  119. feedbackIcons: {
  120. valid: 'glyphicon glyphicon-ok',
  121. invalid: 'glyphicon glyphicon-remove',
  122. validating: 'glyphicon glyphicon-refresh'
  123. },
  124. fields: {
  125. fullName: {
  126. validators: {
  127. notEmpty: {},
  128. stringCase: {
  129. 'case': 'upper'
  130. }
  131. }
  132. },
  133. username: {
  134. validators: {
  135. notEmpty: {},
  136. stringLength: {
  137. min: 6,
  138. max: 20
  139. },
  140. regexp: {
  141. regexp: /^[a-zA-Z0-9_\.]+$/
  142. },
  143. different: {
  144. field: 'password'
  145. }
  146. }
  147. },
  148. email: {
  149. validators: {
  150. emailAddress: {}
  151. }
  152. },
  153. password: {
  154. validators: {
  155. notEmpty: {},
  156. identical: {
  157. field: 'confirmPassword'
  158. },
  159. different: {
  160. field: 'username'
  161. }
  162. }
  163. },
  164. confirmPassword: {
  165. validators: {
  166. notEmpty: {},
  167. identical: {
  168. field: 'password'
  169. },
  170. different: {
  171. field: 'username'
  172. }
  173. }
  174. },
  175. age: {
  176. validators: {
  177. notEmpty: {},
  178. digits: {},
  179. greaterThan: {
  180. value: 18
  181. },
  182. lessThan: {
  183. value: 100
  184. }
  185. }
  186. },
  187. website: {
  188. validators: {
  189. notEmpty: {},
  190. uri: {}
  191. }
  192. },
  193. phoneNumber: {
  194. validators: {
  195. notEmpty: {},
  196. digits: {},
  197. phone: {
  198. country: 'US'
  199. }
  200. }
  201. },
  202. gender: {
  203. validators: {
  204. notEmpty: {}
  205. }
  206. },
  207. 'languages[]': {
  208. validators: {
  209. notEmpty: {}
  210. }
  211. },
  212. 'programs[]': {
  213. validators: {
  214. choice: {
  215. min: 2,
  216. max: 4
  217. }
  218. }
  219. }
  220. }
  221. });
  222. this.bv = $('#i18nForm').data('bootstrapValidator');
  223. this.$fullName = this.bv.getFieldElements('fullName');
  224. this.$email = this.bv.getFieldElements('email');
  225. this.$userName = this.bv.getFieldElements('username');
  226. this.$password = this.bv.getFieldElements('password');
  227. this.$confirm = this.bv.getFieldElements('confirmPassword');
  228. this.$age = this.bv.getFieldElements('age');
  229. this.$website = this.bv.getFieldElements('website');
  230. this.$phone = this.bv.getFieldElements('phoneNumber');
  231. this.$program = this.bv.getFieldElements('programs[]');
  232. });
  233. afterEach(function() {
  234. $('#i18nForm').bootstrapValidator('destroy').remove();
  235. });
  236. it('default message', function() {
  237. var format = $.fn.bootstrapValidator.helpers.format,
  238. i18n = $.fn.bootstrapValidator.i18n;
  239. this.bv.validate();
  240. expect(this.bv.getMessages(this.$fullName, 'notEmpty')[0]).toEqual(i18n.notEmpty['default']);
  241. this.$fullName.val('lowerName');
  242. this.bv.revalidateField('fullName');
  243. expect(this.bv.getMessages('fullName', 'stringCase')[0]).toEqual(i18n.stringCase.upper);
  244. this.bv.resetForm();
  245. this.$userName.val('123');
  246. this.bv.validate();
  247. expect(this.bv.getMessages('username', 'stringLength')[0]).toEqual(format(i18n.stringLength.between, [6, 20]));
  248. this.bv.resetForm();
  249. this.$userName.val('contain@#$');
  250. this.bv.validate();
  251. expect(this.bv.getMessages(this.$userName, 'regexp')[0]).toEqual(i18n.regexp['default']);
  252. this.bv.resetForm();
  253. this.$userName.val('validUserName');
  254. this.$password.val('validUserName');
  255. this.bv.validate();
  256. expect(this.bv.getMessages('username', 'different')[0]).toEqual(i18n.different['default']);
  257. this.bv.resetForm();
  258. this.$email.val('invalid#email@address');
  259. this.bv.validate();
  260. expect(this.bv.getMessages(this.$email, 'emailAddress')[0]).toEqual(i18n.emailAddress['default']);
  261. this.bv.resetForm();
  262. this.$password.val('@S3cur3P@@w0rd');
  263. this.$confirm.val('notMatch');
  264. this.bv.validate();
  265. expect(this.bv.getMessages('password', 'identical')[0]).toEqual(i18n.identical['default']);
  266. this.bv.resetForm();
  267. this.$age.val('notDigit');
  268. this.bv.validate();
  269. expect(this.bv.getMessages('age', 'digits')[0]).toEqual(i18n.digits['default']);
  270. this.bv.resetForm();
  271. this.$age.val(10);
  272. this.bv.validate();
  273. expect(this.bv.getMessages(this.$age, 'greaterThan')[0]).toEqual(format(i18n.greaterThan['default'], 18));
  274. this.bv.resetForm();
  275. this.$age.val(120);
  276. this.bv.validate();
  277. expect(this.bv.getMessages('age', 'lessThan')[0]).toEqual(format(i18n.lessThan['default'], 100));
  278. this.bv.resetForm();
  279. this.$website.val('http://invalidWebsite');
  280. this.bv.validate();
  281. expect(this.bv.getMessages('website', 'uri')[0]).toEqual(i18n.uri['default']);
  282. this.bv.resetForm();
  283. this.$phone.val('123456');
  284. this.bv.validate();
  285. expect(this.bv.getMessages('phoneNumber', 'phone')[0]).toEqual(format(i18n.phone.country, i18n.phone.countries['US']));
  286. this.bv.resetForm();
  287. this.$program.eq(0).prop('checked', 'checked');
  288. this.bv.validate();
  289. expect(this.bv.getMessages(this.$program, 'choice')[0]).toEqual(format(i18n.choice.between, [2, 4]));
  290. this.bv.resetForm();
  291. this.$program.prop('checked', 'checked');
  292. this.bv.validate();
  293. expect(this.bv.getMessages('programs[]', 'choice')[0]).toEqual(format(i18n.choice.between, [2, 4]));
  294. });
  295. });