form.html 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
  6. <link rel="stylesheet" href="test.css">
  7. <title>Zepto Form unit tests</title>
  8. <script src="../vendor/evidence.js"></script>
  9. <script src="evidence_runner.js"></script>
  10. <script>
  11. // avoid caching
  12. (function(){
  13. function load(scripts){
  14. scripts.split(' ').forEach(function(script){
  15. document.write('<script src="../src/'+script+'.js?'+(+new Date)+'"></scr'+'ipt>')
  16. })
  17. }
  18. load('zepto event form ie')
  19. })()
  20. </script>
  21. </head>
  22. <body>
  23. <h1>Zepto Form unit tests</h1>
  24. <p id="results">
  25. Running… see browser console for results
  26. </p>
  27. <div id="fixtures">
  28. <form id="login_form" target="formtarget" action="./idontexist.html">
  29. <input name="email" value="koss@nocorp.me">
  30. <input name="password" value="123456">
  31. <input name="unchecked_hasValue" value="myValue" type="checkbox">
  32. <input name="unchecked_noValue" type="checkbox">
  33. <input name="checked_hasValue" checked value="myValue" type="checkbox">
  34. <input name="checked_disabled" checked value="ImDisabled" type="checkbox" disabled>
  35. <input name="checked_noValue" checked type="checkbox">
  36. <input type="text" id="no_name">
  37. <input type="file" name="file_upload">
  38. <fieldset>
  39. <input type="radio" name="radio1" value="r1">
  40. <input type="radio" name="radio1" checked value="r2">
  41. <input type="radio" name="radio1" value="r3">
  42. </fieldset>
  43. <select name="selectbox">
  44. <option value="selectopt1">select1</option>
  45. <option value="selectopt2">select2</option>
  46. <option value="selectopt3">select3</option>
  47. </select>
  48. <select name="users[id][]" multiple>
  49. <option value="1">a</option>
  50. <option value="2" selected>b</option>
  51. <option value="3" selected>c</option>
  52. <option value="4">d</option>
  53. </select>
  54. <div class="actions">
  55. <!--
  56. The name of the following element can't be "submit",
  57. as this breaks on IE 10 (the form's "submit" method
  58. is overwritten by an accessor to the input field
  59. with the "submit" name). Yes, that's a dumb bug.
  60. -->
  61. <input type="submit" name="submit_button" value="Save">
  62. <input type="button" name="preview" value="Preview">
  63. <input type="reset" name="clear" value="Clear form">
  64. <button name="button">I'm a button</button>
  65. </div>
  66. </form>
  67. <iframe name="formtarget"></iframe>
  68. </div>
  69. <script>
  70. (function(){
  71. // TODO: do we really need this function? This should be refactored.
  72. var isObjectEquals = function(obj1, obj2){
  73. for (var key in obj1)
  74. switch(typeof(obj1[key])) {
  75. case 'object':
  76. if (!isObjectEquals(obj1[key], obj2[key]))
  77. return false
  78. break
  79. case 'function':
  80. if (typeof(obj2[key]) == 'undefined' ||
  81. (obj1[key].toString() != obj2[key].toString()))
  82. return false
  83. break
  84. default:
  85. if (obj1[key] != obj2[key])
  86. return false
  87. }
  88. for (key in obj2)
  89. if (typeof(obj1[key]) == 'undefined')
  90. return false
  91. return true
  92. }
  93. Evidence.Assertions.assertEqualObject = function(expected, actual, message) {
  94. this._assertExpression(
  95. isObjectEquals(expected, actual),
  96. message || 'Failed assertion.',
  97. 'Expected %o, got %o.', expected, actual
  98. )
  99. }
  100. Evidence('FormTest', {
  101. testSerializeArray: function(t){
  102. var loginForm = $('#login_form')
  103. t.assertEqualObject(
  104. [
  105. { name: 'email', value: 'koss@nocorp.me' },
  106. { name: 'password', value: '123456' },
  107. { name: 'checked_hasValue', value: 'myValue' },
  108. { name: 'checked_noValue', value: 'on' },
  109. { name: 'radio1', value: 'r2' },
  110. { name: 'selectbox', value: 'selectopt1' },
  111. { name: 'users[id][]', value: '2' },
  112. { name: 'users[id][]', value: '3' }
  113. ],
  114. loginForm.serializeArray()
  115. )
  116. },
  117. testSerialize: function(t){
  118. var loginForm = $('#login_form')
  119. t.assertEqual('email=koss%40nocorp.me&password=123456&checked_hasValue=myValue&checked_noValue=on&radio1=r2&selectbox=selectopt1&users%5Bid%5D%5B%5D=2&users%5Bid%5D%5B%5D=3', loginForm.serialize())
  120. },
  121. testFormSubmit: function(t){
  122. var eventTriggered = false
  123. $('#login_form').submit(function(event){
  124. eventTriggered = true
  125. event.preventDefault()
  126. })
  127. $('#login_form').submit()
  128. t.assert(eventTriggered)
  129. },
  130. testFormSubmitBindFalse: function(t){
  131. var eventPropagated = false
  132. $(document).on('submit', function(){
  133. eventPropagated = true
  134. })
  135. try {
  136. var form = $('#login_form')
  137. form.submit(false)
  138. form.submit()
  139. t.assertFalse(eventPropagated)
  140. } finally {
  141. $(document).off('submit')
  142. }
  143. },
  144. testSerializeEmptyCollection: function(t){
  145. t.assertIdentical(0, $().serializeArray().length)
  146. t.assertIdentical("", $().serialize())
  147. }
  148. })
  149. })()
  150. </script>
  151. </body>
  152. </html>