rhodes 3.2.0.beta.4 → 3.2.0.beta.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (667) hide show
  1. data/CHANGELOG +2 -0
  2. data/Manifest.txt +517 -23
  3. data/Rakefile +52 -7
  4. data/doc/build.txt +7 -1
  5. data/doc/device-caps.txt +1 -1
  6. data/doc/install.txt +12 -0
  7. data/doc/jqt-jqm-transition.txt +121 -0
  8. data/doc/release.txt +6 -1
  9. data/doc/ui.txt +4 -2
  10. data/installer/icon.ico +0 -0
  11. data/lib/extensions/barcode/ext/barcode/shared/src/zbar.c +7 -0
  12. data/lib/extensions/barcode/ext/barcode/shared/zbar/rho_bridge.c +3 -3
  13. data/lib/extensions/barcode/ext/barcode/shared/zbar/zbar/README.TXT +74 -3
  14. data/lib/extensions/fcntl/ext/Rakefile +57 -38
  15. data/lib/extensions/fcntl/ext/build.bat +1 -0
  16. data/lib/extensions/fcntl/ext/fcntl.vcproj +323 -0
  17. data/lib/extensions/fileutils/fileutils.rb +57 -33
  18. data/lib/extensions/net-http/net/ftp.rb +40 -36
  19. data/lib/extensions/net-http/net/http.rb +98 -38
  20. data/lib/extensions/net-http/net/https.rb +3 -13
  21. data/lib/extensions/net-http/net/protocol.rb +20 -4
  22. data/lib/extensions/rexml/rexml/document.rb +11 -9
  23. data/lib/extensions/rexml/rexml/element.rb +1 -1
  24. data/lib/extensions/rexml/rexml/entity.rb +1 -1
  25. data/lib/extensions/rexml/rexml/formatters/default.rb +3 -1
  26. data/lib/extensions/rexml/rexml/formatters/pretty.rb +1 -1
  27. data/lib/extensions/rexml/rexml/light/node.rb +1 -2
  28. data/lib/extensions/rexml/rexml/parent.rb +1 -0
  29. data/lib/extensions/rexml/rexml/parsers/xpathparser.rb +2 -1
  30. data/lib/extensions/rexml/rexml/quickpath.rb +4 -1
  31. data/lib/extensions/rexml/rexml/rexml.rb +1 -1
  32. data/lib/extensions/rexml/rexml/source.rb +25 -14
  33. data/lib/extensions/rexml/rexml/text.rb +20 -21
  34. data/lib/extensions/rexml/rexml/xmldecl.rb +2 -2
  35. data/lib/extensions/rexml/rexml/xmltokens.rb +2 -2
  36. data/lib/extensions/rexml/rexml/xpath_parser.rb +2 -1
  37. data/lib/extensions/set/set.rb +100 -25
  38. data/lib/extensions/uri/uri/common.rb +134 -4
  39. data/lib/extensions/uri/uri/ftp.rb +14 -3
  40. data/lib/extensions/uri/uri/generic.rb +53 -44
  41. data/lib/extensions/uri/uri/http.rb +1 -1
  42. data/lib/extensions/uri/uri/https.rb +1 -1
  43. data/lib/extensions/uri/uri/ldap.rb +1 -1
  44. data/lib/extensions/uri/uri/mailto.rb +9 -9
  45. data/lib/framework/rho/rhoviewhelpers.rb +3 -2
  46. data/lib/framework/rholang/localization_simplified.rb +5 -3
  47. data/platform/android/Rhodes/src/com/rhomobile/rhodes/Logger.java +14 -1
  48. data/platform/android/Rhodes/src/com/rhomobile/rhodes/camera/ImageCapture.java +1 -1
  49. data/platform/android/Rhodes/src/com/rhomobile/rhodes/camera/ImageCaptureCallback.java +0 -1
  50. data/platform/android/Rhodes/src/com/rhomobile/rhodes/file/RhoFileApi.java +12 -5
  51. data/platform/android/build/android.rake +7 -7
  52. data/platform/iphone/Classes/AppManager/AppManager.m +19 -7
  53. data/platform/iphone/rbuild/iphone.rake +1 -1
  54. data/platform/osx/bin/RhoSimulator/RhoSimulator.app/Contents/Frameworks/QtCore.framework/Versions/4/QtCore +0 -0
  55. data/platform/osx/bin/RhoSimulator/RhoSimulator.app/Contents/Frameworks/QtGui.framework/Versions/4/QtGui +0 -0
  56. data/platform/osx/bin/RhoSimulator/RhoSimulator.app/Contents/Frameworks/QtNetwork.framework/Versions/4/QtNetwork +0 -0
  57. data/platform/osx/bin/RhoSimulator/RhoSimulator.app/Contents/Frameworks/QtWebKit.framework/Versions/4/QtWebKit +0 -0
  58. data/platform/osx/bin/RhoSimulator/RhoSimulator.app/Contents/Frameworks/phonon.framework/Versions/4/phonon +0 -0
  59. data/platform/osx/bin/RhoSimulator/RhoSimulator.app/Contents/Info.plist +1 -1
  60. data/platform/osx/bin/RhoSimulator/RhoSimulator.app/Contents/MacOS/RhoSimulator +0 -0
  61. data/platform/osx/bin/RhoSimulator/RhoSimulator.app/Contents/PlugIns/accessible/libqtaccessiblewidgets.dylib +0 -0
  62. data/platform/osx/bin/RhoSimulator/RhoSimulator.app/Contents/PlugIns/bearer/libqgenericbearer.dylib +0 -0
  63. data/platform/osx/bin/RhoSimulator/RhoSimulator.app/Contents/PlugIns/codecs/libqcncodecs.dylib +0 -0
  64. data/platform/osx/bin/RhoSimulator/RhoSimulator.app/Contents/PlugIns/codecs/libqjpcodecs.dylib +0 -0
  65. data/platform/osx/bin/RhoSimulator/RhoSimulator.app/Contents/PlugIns/codecs/libqkrcodecs.dylib +0 -0
  66. data/platform/osx/bin/RhoSimulator/RhoSimulator.app/Contents/PlugIns/codecs/libqtwcodecs.dylib +0 -0
  67. data/platform/osx/bin/RhoSimulator/RhoSimulator.app/Contents/PlugIns/graphicssystems/libqtracegraphicssystem.dylib +0 -0
  68. data/platform/osx/bin/RhoSimulator/RhoSimulator.app/Contents/PlugIns/imageformats/libqgif.dylib +0 -0
  69. data/platform/osx/bin/RhoSimulator/RhoSimulator.app/Contents/PlugIns/imageformats/libqico.dylib +0 -0
  70. data/platform/osx/bin/RhoSimulator/RhoSimulator.app/Contents/PlugIns/imageformats/libqjpeg.dylib +0 -0
  71. data/platform/osx/bin/RhoSimulator/RhoSimulator.app/Contents/PlugIns/imageformats/libqmng.dylib +0 -0
  72. data/platform/osx/bin/RhoSimulator/RhoSimulator.app/Contents/PlugIns/imageformats/libqtiff.dylib +0 -0
  73. data/platform/osx/bin/RhoSimulator/RhoSimulator.app/Contents/PlugIns/phonon_backend/libphonon_qt7.dylib +0 -0
  74. data/platform/osx/bin/RhoSimulator/RhoSimulator.app/Contents/PlugIns/qmltooling/libqmldbg_tcp.dylib +0 -0
  75. data/platform/osx/bin/RhoSimulator/RhoSimulator.app/Contents/Resources/rho.icns +0 -0
  76. data/platform/osx/build/osx.rake +25 -3
  77. data/platform/shared/common/AutoPointer.h +1 -1
  78. data/platform/shared/common/RhoStd.h +10 -10
  79. data/platform/shared/common/RhodesAppBase.cpp +3 -0
  80. data/platform/shared/logging/RhoLogConf.cpp +1 -1
  81. data/platform/shared/qt/rhodes/QtMainWindow.cpp +7 -0
  82. data/platform/shared/qt/rhodes/RhoSimulator.h +3 -1
  83. data/platform/shared/qt/rhodes/main.cpp +3 -0
  84. data/platform/shared/qt/rhodes/resources/rho.icns +0 -0
  85. data/platform/shared/qt/rhodes/resources/rho.ico +0 -0
  86. data/platform/shared/qt/rhodes/resources/rho.png +0 -0
  87. data/platform/shared/qt/rhodes/resources/simulator.qrc +5 -0
  88. data/platform/shared/qt/rhodes/rhodes.pro +2 -0
  89. data/platform/shared/ruby/ext/rho/rhosupport.c +21 -2
  90. data/platform/shared/ruby/ext/socket_192/addrinfo.h +191 -0
  91. data/platform/shared/ruby/ext/socket_192/ancdata.c +1800 -0
  92. data/platform/shared/ruby/ext/socket_192/basicsocket.c +771 -0
  93. data/platform/shared/ruby/ext/socket_192/constants.c +145 -0
  94. data/platform/shared/ruby/ext/socket_192/depend +25 -0
  95. data/platform/shared/ruby/ext/socket_192/extconf.rb +365 -0
  96. data/platform/shared/ruby/ext/socket_192/getaddrinfo.c +674 -0
  97. data/platform/shared/ruby/ext/socket_192/getnameinfo.c +260 -0
  98. data/platform/shared/ruby/ext/socket_192/init.c +575 -0
  99. data/platform/shared/ruby/ext/socket_192/ipsocket.c +308 -0
  100. data/platform/shared/ruby/ext/socket_192/lib/socket.rb +755 -0
  101. data/platform/shared/ruby/ext/socket_192/mkconstants.rb +696 -0
  102. data/platform/shared/ruby/ext/socket_192/option.c +692 -0
  103. data/platform/shared/ruby/ext/socket_192/raddrinfo.c +2211 -0
  104. data/platform/shared/ruby/ext/socket_192/rubysocket.h +306 -0
  105. data/platform/shared/ruby/ext/socket_192/socket.c +1870 -0
  106. data/platform/shared/ruby/ext/socket_192/sockport.h +84 -0
  107. data/platform/shared/ruby/ext/socket_192/sockssocket.c +58 -0
  108. data/platform/shared/ruby/ext/socket_192/tcpserver.c +145 -0
  109. data/platform/shared/ruby/ext/socket_192/tcpsocket.c +69 -0
  110. data/platform/shared/ruby/ext/socket_192/udpsocket.c +264 -0
  111. data/platform/shared/ruby/ext/socket_192/unixserver.c +154 -0
  112. data/platform/shared/ruby/ext/socket_192/unixsocket.c +514 -0
  113. data/platform/shared/ruby/ext/stringio/stringio.c +158 -61
  114. data/platform/shared/ruby/ext/strscan/strscan.c +18 -31
  115. data/platform/shared/ruby/iphone/ruby/config.h +2 -1
  116. data/platform/shared/ruby/linux/ruby/config.h +2 -1
  117. data/platform/shared/ruby/symbian/ruby/config.h +2 -1
  118. data/platform/shared/ruby/win32/ruby/config.h +1 -0
  119. data/platform/shared/ruby/win32/ruby/constdefs.c +5866 -0
  120. data/platform/shared/ruby/win32/ruby/constdefs.h +1788 -0
  121. data/platform/shared/ruby/wince/ruby/config.h +1 -0
  122. data/platform/shared/ruby/wince/ruby/constdefs.c +5866 -0
  123. data/platform/shared/ruby/wince/ruby/constdefs.h +1788 -0
  124. data/platform/symbian/build/symbian.rake +8 -0
  125. data/platform/symbian/rhodes/rhodes.pro +3 -3
  126. data/platform/win32/RhoSimulator/RhoSimulator.exe +0 -0
  127. data/platform/wm/build/wm.rake +1 -1
  128. data/platform/wm/rhodes/Rhodes.cpp +3 -0
  129. data/platform/wm/rhodes/rhodes.vcproj +612 -6
  130. data/platform/wm/rhodes/rhosim.rc +394 -0
  131. data/platform/wm/rhodes/simulator/MainWindowQt.cpp +2 -2
  132. data/platform/wp7/RhoRubyLib/common/RhodesApp.cs +8 -2
  133. data/platform/wp7/RhoRubyLib/net/NetRequest.cs +5 -1
  134. data/platform/wp7/build/wp.rake +1 -1
  135. data/rakefile.rb +52 -7
  136. data/res/generators/templates/application/app/layout.erb +4 -4
  137. data/res/generators/templates/application/public/jqmobile/{jquery.mobile-1.0b3.css → jquery.mobile-1.0rc1.css} +507 -457
  138. data/res/generators/templates/application/public/jqmobile/{jquery.mobile-1.0b3.js → jquery.mobile-1.0rc1.js} +565 -458
  139. data/res/generators/templates/application/public/jqmobile/jquery.mobile-1.0rc1.min.css +12 -0
  140. data/res/generators/templates/application/public/jqmobile/jquery.mobile-1.0rc1.min.js +170 -0
  141. data/res/generators/templates/application/public/jquery/{jquery-1.6.3.js → jquery-1.6.4.js} +10 -8
  142. data/res/generators/templates/application/public/jquery/jquery-1.6.4.min.js +4 -0
  143. data/res/generators/templates/application/public/js/jqmobile-patch.js +47 -1
  144. data/res/icons/rho.icns +0 -0
  145. data/res/icons/rho.ico +0 -0
  146. data/res/icons/rho.png +0 -0
  147. data/res/icons/rho.psd +0 -0
  148. data/res/icons/rhodes.icns +0 -0
  149. data/res/icons/rhodes.ico +0 -0
  150. data/res/icons/rhodes.png +0 -0
  151. data/res/icons/rhodes.psd +0 -0
  152. data/res/icons/rhosim.icns +0 -0
  153. data/res/icons/rhosim.ico +0 -0
  154. data/res/icons/rhosim.png +0 -0
  155. data/res/icons/rhosim.psd +0 -0
  156. data/rhodes.gemspec +1 -1
  157. data/spec/framework_spec/app/spec/core/file/expand_path_spec.rb +4 -4
  158. data/spec/framework_spec/app/spec/library/net/FTPError_spec.rb +8 -0
  159. data/spec/framework_spec/app/spec/library/net/FTPPermError_spec.rb +12 -0
  160. data/spec/framework_spec/app/spec/library/net/FTPProtoError_spec.rb +12 -0
  161. data/spec/framework_spec/app/spec/library/net/FTPReplyError_spec.rb +12 -0
  162. data/spec/framework_spec/app/spec/library/net/FTPTempError_spec.rb +12 -0
  163. data/spec/framework_spec/app/spec/library/net/ftp/abort_spec.rb +62 -0
  164. data/spec/framework_spec/app/spec/library/net/ftp/acct_spec.rb +58 -0
  165. data/spec/framework_spec/app/spec/library/net/ftp/binary_spec.rb +24 -0
  166. data/spec/framework_spec/app/spec/library/net/ftp/chdir_spec.rb +101 -0
  167. data/spec/framework_spec/app/spec/library/net/ftp/close_spec.rb +28 -0
  168. data/spec/framework_spec/app/spec/library/net/ftp/closed_spec.rb +21 -0
  169. data/spec/framework_spec/app/spec/library/net/ftp/connect_spec.rb +49 -0
  170. data/spec/framework_spec/app/spec/library/net/ftp/debug_mode_spec.rb +23 -0
  171. data/spec/framework_spec/app/spec/library/net/ftp/delete_spec.rb +59 -0
  172. data/spec/framework_spec/app/spec/library/net/ftp/dir_spec.rb +8 -0
  173. data/spec/framework_spec/app/spec/library/net/ftp/fixtures/putbinaryfile +3 -0
  174. data/spec/framework_spec/app/spec/library/net/ftp/fixtures/puttextfile +3 -0
  175. data/spec/framework_spec/app/spec/library/net/ftp/fixtures/server.rb +258 -0
  176. data/spec/framework_spec/app/spec/library/net/ftp/get_spec.rb +21 -0
  177. data/spec/framework_spec/app/spec/library/net/ftp/getbinaryfile_spec.rb +8 -0
  178. data/spec/framework_spec/app/spec/library/net/ftp/getdir_spec.rb +7 -0
  179. data/spec/framework_spec/app/spec/library/net/ftp/gettextfile_spec.rb +8 -0
  180. data/spec/framework_spec/app/spec/library/net/ftp/help_spec.rb +66 -0
  181. data/spec/framework_spec/app/spec/library/net/ftp/initialize_spec.rb +87 -0
  182. data/spec/framework_spec/app/spec/library/net/ftp/last_response_code_spec.rb +8 -0
  183. data/spec/framework_spec/app/spec/library/net/ftp/last_response_spec.rb +25 -0
  184. data/spec/framework_spec/app/spec/library/net/ftp/lastresp_spec.rb +8 -0
  185. data/spec/framework_spec/app/spec/library/net/ftp/list_spec.rb +8 -0
  186. data/spec/framework_spec/app/spec/library/net/ftp/login_spec.rb +216 -0
  187. data/spec/framework_spec/app/spec/library/net/ftp/ls_spec.rb +8 -0
  188. data/spec/framework_spec/app/spec/library/net/ftp/mdtm_spec.rb +38 -0
  189. data/spec/framework_spec/app/spec/library/net/ftp/mkdir_spec.rb +61 -0
  190. data/spec/framework_spec/app/spec/library/net/ftp/mtime_spec.rb +50 -0
  191. data/spec/framework_spec/app/spec/library/net/ftp/nlst_spec.rb +122 -0
  192. data/spec/framework_spec/app/spec/library/net/ftp/noop_spec.rb +38 -0
  193. data/spec/framework_spec/app/spec/library/net/ftp/open_spec.rb +55 -0
  194. data/spec/framework_spec/app/spec/library/net/ftp/passive_spec.rb +24 -0
  195. data/spec/framework_spec/app/spec/library/net/ftp/put_spec.rb +21 -0
  196. data/spec/framework_spec/app/spec/library/net/ftp/putbinaryfile_spec.rb +8 -0
  197. data/spec/framework_spec/app/spec/library/net/ftp/puttextfile_spec.rb +8 -0
  198. data/spec/framework_spec/app/spec/library/net/ftp/pwd_spec.rb +53 -0
  199. data/spec/framework_spec/app/spec/library/net/ftp/quit_spec.rb +33 -0
  200. data/spec/framework_spec/app/spec/library/net/ftp/rename_spec.rb +94 -0
  201. data/spec/framework_spec/app/spec/library/net/ftp/resume_spec.rb +23 -0
  202. data/spec/framework_spec/app/spec/library/net/ftp/retrbinary_spec.rb +31 -0
  203. data/spec/framework_spec/app/spec/library/net/ftp/retrlines_spec.rb +35 -0
  204. data/spec/framework_spec/app/spec/library/net/ftp/return_code_spec.rb +24 -0
  205. data/spec/framework_spec/app/spec/library/net/ftp/rmdir_spec.rb +58 -0
  206. data/spec/framework_spec/app/spec/library/net/ftp/sendcmd_spec.rb +54 -0
  207. data/spec/framework_spec/app/spec/library/net/ftp/set_socket_spec.rb +8 -0
  208. data/spec/framework_spec/app/spec/library/net/ftp/shared/getbinaryfile.rb +180 -0
  209. data/spec/framework_spec/app/spec/library/net/ftp/shared/gettextfile.rb +130 -0
  210. data/spec/framework_spec/app/spec/library/net/ftp/shared/last_response_code.rb +25 -0
  211. data/spec/framework_spec/app/spec/library/net/ftp/shared/list.rb +134 -0
  212. data/spec/framework_spec/app/spec/library/net/ftp/shared/putbinaryfile.rb +233 -0
  213. data/spec/framework_spec/app/spec/library/net/ftp/shared/puttextfile.rb +150 -0
  214. data/spec/framework_spec/app/spec/library/net/ftp/shared/pwd.rb +3 -0
  215. data/spec/framework_spec/app/spec/library/net/ftp/site_spec.rb +53 -0
  216. data/spec/framework_spec/app/spec/library/net/ftp/size_spec.rb +48 -0
  217. data/spec/framework_spec/app/spec/library/net/ftp/status_spec.rb +63 -0
  218. data/spec/framework_spec/app/spec/library/net/ftp/storbinary_spec.rb +49 -0
  219. data/spec/framework_spec/app/spec/library/net/ftp/storlines_spec.rb +44 -0
  220. data/spec/framework_spec/app/spec/library/net/ftp/system_spec.rb +48 -0
  221. data/spec/framework_spec/app/spec/library/net/ftp/voidcmd_spec.rb +54 -0
  222. data/spec/framework_spec/app/spec/library/net/ftp/welcome_spec.rb +25 -0
  223. data/spec/framework_spec/app/spec/library/net/http/HTTPBadResponse_spec.rb +8 -0
  224. data/spec/framework_spec/app/spec/library/net/http/HTTPError_spec.rb +12 -0
  225. data/spec/framework_spec/app/spec/library/net/http/HTTPFatalError_spec.rb +12 -0
  226. data/spec/framework_spec/app/spec/library/net/http/HTTPHeaderSyntaxError_spec.rb +8 -0
  227. data/spec/framework_spec/app/spec/library/net/http/HTTPRetriableError_spec.rb +12 -0
  228. data/spec/framework_spec/app/spec/library/net/http/HTTPServerException_spec.rb +12 -0
  229. data/spec/framework_spec/app/spec/library/net/http/http/Proxy_spec.rb +35 -0
  230. data/spec/framework_spec/app/spec/library/net/http/http/active_spec.rb +8 -0
  231. data/spec/framework_spec/app/spec/library/net/http/http/address_spec.rb +9 -0
  232. data/spec/framework_spec/app/spec/library/net/http/http/close_on_empty_response_spec.rb +10 -0
  233. data/spec/framework_spec/app/spec/library/net/http/http/copy_spec.rb +23 -0
  234. data/spec/framework_spec/app/spec/library/net/http/http/default_port_spec.rb +8 -0
  235. data/spec/framework_spec/app/spec/library/net/http/http/delete_spec.rb +23 -0
  236. data/spec/framework_spec/app/spec/library/net/http/http/finish_spec.rb +31 -0
  237. data/spec/framework_spec/app/spec/library/net/http/http/fixtures/http_server.rb +97 -0
  238. data/spec/framework_spec/app/spec/library/net/http/http/get2_spec.rb +8 -0
  239. data/spec/framework_spec/app/spec/library/net/http/http/get_print_spec.rb +29 -0
  240. data/spec/framework_spec/app/spec/library/net/http/http/get_response_spec.rb +29 -0
  241. data/spec/framework_spec/app/spec/library/net/http/http/get_spec.rb +52 -0
  242. data/spec/framework_spec/app/spec/library/net/http/http/head2_spec.rb +9 -0
  243. data/spec/framework_spec/app/spec/library/net/http/http/head_spec.rb +27 -0
  244. data/spec/framework_spec/app/spec/library/net/http/http/http_default_port_spec.rb +8 -0
  245. data/spec/framework_spec/app/spec/library/net/http/http/https_default_port_spec.rb +8 -0
  246. data/spec/framework_spec/app/spec/library/net/http/http/initialize_spec.rb +46 -0
  247. data/spec/framework_spec/app/spec/library/net/http/http/inspect_spec.rb +26 -0
  248. data/spec/framework_spec/app/spec/library/net/http/http/is_version_1_1_spec.rb +7 -0
  249. data/spec/framework_spec/app/spec/library/net/http/http/is_version_1_2_spec.rb +7 -0
  250. data/spec/framework_spec/app/spec/library/net/http/http/lock_spec.rb +23 -0
  251. data/spec/framework_spec/app/spec/library/net/http/http/mkcol_spec.rb +23 -0
  252. data/spec/framework_spec/app/spec/library/net/http/http/move_spec.rb +27 -0
  253. data/spec/framework_spec/app/spec/library/net/http/http/new_spec.rb +86 -0
  254. data/spec/framework_spec/app/spec/library/net/http/http/newobj_spec.rb +48 -0
  255. data/spec/framework_spec/app/spec/library/net/http/http/open_timeout_spec.rb +24 -0
  256. data/spec/framework_spec/app/spec/library/net/http/http/options_spec.rb +27 -0
  257. data/spec/framework_spec/app/spec/library/net/http/http/port_spec.rb +9 -0
  258. data/spec/framework_spec/app/spec/library/net/http/http/post2_spec.rb +8 -0
  259. data/spec/framework_spec/app/spec/library/net/http/http/post_form_spec.rb +21 -0
  260. data/spec/framework_spec/app/spec/library/net/http/http/post_spec.rb +40 -0
  261. data/spec/framework_spec/app/spec/library/net/http/http/propfind_spec.rb +26 -0
  262. data/spec/framework_spec/app/spec/library/net/http/http/proppatch_spec.rb +26 -0
  263. data/spec/framework_spec/app/spec/library/net/http/http/proxy_address_spec.rb +31 -0
  264. data/spec/framework_spec/app/spec/library/net/http/http/proxy_class_spec.rb +9 -0
  265. data/spec/framework_spec/app/spec/library/net/http/http/proxy_pass_spec.rb +39 -0
  266. data/spec/framework_spec/app/spec/library/net/http/http/proxy_port_spec.rb +39 -0
  267. data/spec/framework_spec/app/spec/library/net/http/http/proxy_user_spec.rb +39 -0
  268. data/spec/framework_spec/app/spec/library/net/http/http/put2_spec.rb +8 -0
  269. data/spec/framework_spec/app/spec/library/net/http/http/put_spec.rb +26 -0
  270. data/spec/framework_spec/app/spec/library/net/http/http/read_timeout_spec.rb +24 -0
  271. data/spec/framework_spec/app/spec/library/net/http/http/request_get_spec.rb +8 -0
  272. data/spec/framework_spec/app/spec/library/net/http/http/request_head_spec.rb +8 -0
  273. data/spec/framework_spec/app/spec/library/net/http/http/request_post_spec.rb +8 -0
  274. data/spec/framework_spec/app/spec/library/net/http/http/request_put_spec.rb +8 -0
  275. data/spec/framework_spec/app/spec/library/net/http/http/request_spec.rb +111 -0
  276. data/spec/framework_spec/app/spec/library/net/http/http/request_types_spec.rb +254 -0
  277. data/spec/framework_spec/app/spec/library/net/http/http/send_request_spec.rb +120 -0
  278. data/spec/framework_spec/app/spec/library/net/http/http/set_debug_output_spec.rb +35 -0
  279. data/spec/framework_spec/app/spec/library/net/http/http/shared/request_get.rb +45 -0
  280. data/spec/framework_spec/app/spec/library/net/http/http/shared/request_head.rb +45 -0
  281. data/spec/framework_spec/app/spec/library/net/http/http/shared/request_post.rb +45 -0
  282. data/spec/framework_spec/app/spec/library/net/http/http/shared/request_put.rb +45 -0
  283. data/spec/framework_spec/app/spec/library/net/http/http/shared/started.rb +28 -0
  284. data/spec/framework_spec/app/spec/library/net/http/http/shared/version_1_1.rb +19 -0
  285. data/spec/framework_spec/app/spec/library/net/http/http/shared/version_1_2.rb +6 -0
  286. data/spec/framework_spec/app/spec/library/net/http/http/socket_type_spec.rb +8 -0
  287. data/spec/framework_spec/app/spec/library/net/http/http/start_spec.rb +103 -0
  288. data/spec/framework_spec/app/spec/library/net/http/http/started_spec.rb +8 -0
  289. data/spec/framework_spec/app/spec/library/net/http/http/trace_spec.rb +26 -0
  290. data/spec/framework_spec/app/spec/library/net/http/http/unlock_spec.rb +26 -0
  291. data/spec/framework_spec/app/spec/library/net/http/http/use_ssl_spec.rb +9 -0
  292. data/spec/framework_spec/app/spec/library/net/http/http/version_1_1_spec.rb +22 -0
  293. data/spec/framework_spec/app/spec/library/net/http/http/version_1_2_spec.rb +20 -0
  294. data/spec/framework_spec/app/spec/library/net/http/httpexceptions/fixtures/classes.rb +5 -0
  295. data/spec/framework_spec/app/spec/library/net/http/httpexceptions/initialize_spec.rb +17 -0
  296. data/spec/framework_spec/app/spec/library/net/http/httpexceptions/response_spec.rb +10 -0
  297. data/spec/framework_spec/app/spec/library/net/http/httpgenericrequest/body_exist_spec.rb +27 -0
  298. data/spec/framework_spec/app/spec/library/net/http/httpgenericrequest/body_spec.rb +30 -0
  299. data/spec/framework_spec/app/spec/library/net/http/httpgenericrequest/body_stream_spec.rb +32 -0
  300. data/spec/framework_spec/app/spec/library/net/http/httpgenericrequest/exec_spec.rb +122 -0
  301. data/spec/framework_spec/app/spec/library/net/http/httpgenericrequest/inspect_spec.rb +25 -0
  302. data/spec/framework_spec/app/spec/library/net/http/httpgenericrequest/method_spec.rb +15 -0
  303. data/spec/framework_spec/app/spec/library/net/http/httpgenericrequest/path_spec.rb +12 -0
  304. data/spec/framework_spec/app/spec/library/net/http/httpgenericrequest/request_body_permitted_spec.rb +12 -0
  305. data/spec/framework_spec/app/spec/library/net/http/httpgenericrequest/response_body_permitted_spec.rb +12 -0
  306. data/spec/framework_spec/app/spec/library/net/http/httpgenericrequest/set_body_internal_spec.rb +21 -0
  307. data/spec/framework_spec/app/spec/library/net/http/httpheader/add_field_spec.rb +31 -0
  308. data/spec/framework_spec/app/spec/library/net/http/httpheader/basic_auth_spec.rb +14 -0
  309. data/spec/framework_spec/app/spec/library/net/http/httpheader/canonical_each_spec.rb +8 -0
  310. data/spec/framework_spec/app/spec/library/net/http/httpheader/chunked_spec.rb +22 -0
  311. data/spec/framework_spec/app/spec/library/net/http/httpheader/content_length_spec.rb +54 -0
  312. data/spec/framework_spec/app/spec/library/net/http/httpheader/content_range_spec.rb +34 -0
  313. data/spec/framework_spec/app/spec/library/net/http/httpheader/content_type_spec.rb +26 -0
  314. data/spec/framework_spec/app/spec/library/net/http/httpheader/delete_spec.rb +30 -0
  315. data/spec/framework_spec/app/spec/library/net/http/httpheader/each_capitalized_name_spec.rb +45 -0
  316. data/spec/framework_spec/app/spec/library/net/http/httpheader/each_capitalized_spec.rb +9 -0
  317. data/spec/framework_spec/app/spec/library/net/http/httpheader/each_header_spec.rb +8 -0
  318. data/spec/framework_spec/app/spec/library/net/http/httpheader/each_key_spec.rb +8 -0
  319. data/spec/framework_spec/app/spec/library/net/http/httpheader/each_name_spec.rb +8 -0
  320. data/spec/framework_spec/app/spec/library/net/http/httpheader/each_spec.rb +8 -0
  321. data/spec/framework_spec/app/spec/library/net/http/httpheader/each_value_spec.rb +46 -0
  322. data/spec/framework_spec/app/spec/library/net/http/httpheader/element_reference_spec.rb +39 -0
  323. data/spec/framework_spec/app/spec/library/net/http/httpheader/element_set_spec.rb +41 -0
  324. data/spec/framework_spec/app/spec/library/net/http/httpheader/fetch_spec.rb +69 -0
  325. data/spec/framework_spec/app/spec/library/net/http/httpheader/fixtures/classes.rb +11 -0
  326. data/spec/framework_spec/app/spec/library/net/http/httpheader/form_data_spec.rb +8 -0
  327. data/spec/framework_spec/app/spec/library/net/http/httpheader/get_fields_spec.rb +39 -0
  328. data/spec/framework_spec/app/spec/library/net/http/httpheader/initialize_http_header_spec.rb +29 -0
  329. data/spec/framework_spec/app/spec/library/net/http/httpheader/key_spec.rb +21 -0
  330. data/spec/framework_spec/app/spec/library/net/http/httpheader/length_spec.rb +8 -0
  331. data/spec/framework_spec/app/spec/library/net/http/httpheader/main_type_spec.rb +24 -0
  332. data/spec/framework_spec/app/spec/library/net/http/httpheader/proxy_basic_auth_spec.rb +14 -0
  333. data/spec/framework_spec/app/spec/library/net/http/httpheader/range_length_spec.rb +32 -0
  334. data/spec/framework_spec/app/spec/library/net/http/httpheader/range_spec.rb +48 -0
  335. data/spec/framework_spec/app/spec/library/net/http/httpheader/set_content_type_spec.rb +8 -0
  336. data/spec/framework_spec/app/spec/library/net/http/httpheader/set_form_data_spec.rb +8 -0
  337. data/spec/framework_spec/app/spec/library/net/http/httpheader/set_range_spec.rb +8 -0
  338. data/spec/framework_spec/app/spec/library/net/http/httpheader/shared/each_capitalized.rb +42 -0
  339. data/spec/framework_spec/app/spec/library/net/http/httpheader/shared/each_header.rb +42 -0
  340. data/spec/framework_spec/app/spec/library/net/http/httpheader/shared/each_name.rb +39 -0
  341. data/spec/framework_spec/app/spec/library/net/http/httpheader/shared/set_content_type.rb +18 -0
  342. data/spec/framework_spec/app/spec/library/net/http/httpheader/shared/set_form_data.rb +27 -0
  343. data/spec/framework_spec/app/spec/library/net/http/httpheader/shared/set_range.rb +89 -0
  344. data/spec/framework_spec/app/spec/library/net/http/httpheader/shared/size.rb +18 -0
  345. data/spec/framework_spec/app/spec/library/net/http/httpheader/size_spec.rb +8 -0
  346. data/spec/framework_spec/app/spec/library/net/http/httpheader/sub_type_spec.rb +32 -0
  347. data/spec/framework_spec/app/spec/library/net/http/httpheader/to_hash_spec.rb +25 -0
  348. data/spec/framework_spec/app/spec/library/net/http/httpheader/type_params_spec.rb +24 -0
  349. data/spec/framework_spec/app/spec/library/net/http/httprequest/initialize_spec.rb +45 -0
  350. data/spec/framework_spec/app/spec/library/net/http/httpresponse/body_permitted_spec.rb +13 -0
  351. data/spec/framework_spec/app/spec/library/net/http/httpresponse/body_spec.rb +7 -0
  352. data/spec/framework_spec/app/spec/library/net/http/httpresponse/code_spec.rb +24 -0
  353. data/spec/framework_spec/app/spec/library/net/http/httpresponse/code_type_spec.rb +24 -0
  354. data/spec/framework_spec/app/spec/library/net/http/httpresponse/entity_spec.rb +7 -0
  355. data/spec/framework_spec/app/spec/library/net/http/httpresponse/error_spec.rb +24 -0
  356. data/spec/framework_spec/app/spec/library/net/http/httpresponse/error_type_spec.rb +24 -0
  357. data/spec/framework_spec/app/spec/library/net/http/httpresponse/exception_type_spec.rb +13 -0
  358. data/spec/framework_spec/app/spec/library/net/http/httpresponse/header_spec.rb +9 -0
  359. data/spec/framework_spec/app/spec/library/net/http/httpresponse/http_version_spec.rb +12 -0
  360. data/spec/framework_spec/app/spec/library/net/http/httpresponse/initialize_spec.rb +11 -0
  361. data/spec/framework_spec/app/spec/library/net/http/httpresponse/inspect_spec.rb +15 -0
  362. data/spec/framework_spec/app/spec/library/net/http/httpresponse/message_spec.rb +9 -0
  363. data/spec/framework_spec/app/spec/library/net/http/httpresponse/msg_spec.rb +9 -0
  364. data/spec/framework_spec/app/spec/library/net/http/httpresponse/read_body_spec.rb +86 -0
  365. data/spec/framework_spec/app/spec/library/net/http/httpresponse/read_header_spec.rb +9 -0
  366. data/spec/framework_spec/app/spec/library/net/http/httpresponse/read_new_spec.rb +22 -0
  367. data/spec/framework_spec/app/spec/library/net/http/httpresponse/reading_body_spec.rb +58 -0
  368. data/spec/framework_spec/app/spec/library/net/http/httpresponse/response_spec.rb +9 -0
  369. data/spec/framework_spec/app/spec/library/net/http/httpresponse/shared/body.rb +18 -0
  370. data/spec/framework_spec/app/spec/library/net/http/httpresponse/to_ary_spec.rb +26 -0
  371. data/spec/framework_spec/app/spec/library/net/http/httpresponse/value_spec.rb +24 -0
  372. data/spec/framework_spec/app/spec/library/rexml/attribute/clone_spec.rb +11 -0
  373. data/spec/framework_spec/app/spec/library/rexml/attribute/element_spec.rb +23 -0
  374. data/spec/framework_spec/app/spec/library/rexml/attribute/equal_value_spec.rb +18 -0
  375. data/spec/framework_spec/app/spec/library/rexml/attribute/hash_spec.rb +13 -0
  376. data/spec/framework_spec/app/spec/library/rexml/attribute/initialize_spec.rb +29 -0
  377. data/spec/framework_spec/app/spec/library/rexml/attribute/inspect_spec.rb +20 -0
  378. data/spec/framework_spec/app/spec/library/rexml/attribute/namespace_spec.rb +24 -0
  379. data/spec/framework_spec/app/spec/library/rexml/attribute/node_type_spec.rb +10 -0
  380. data/spec/framework_spec/app/spec/library/rexml/attribute/prefix_spec.rb +18 -0
  381. data/spec/framework_spec/app/spec/library/rexml/attribute/remove_spec.rb +20 -0
  382. data/spec/framework_spec/app/spec/library/rexml/attribute/to_s_spec.rb +14 -0
  383. data/spec/framework_spec/app/spec/library/rexml/attribute/to_string_spec.rb +15 -0
  384. data/spec/framework_spec/app/spec/library/rexml/attribute/value_spec.rb +15 -0
  385. data/spec/framework_spec/app/spec/library/rexml/attribute/write_spec.rb +23 -0
  386. data/spec/framework_spec/app/spec/library/rexml/attribute/xpath_spec.rb +20 -0
  387. data/spec/framework_spec/app/spec/library/rexml/attributes/add_spec.rb +7 -0
  388. data/spec/framework_spec/app/spec/library/rexml/attributes/append_spec.rb +7 -0
  389. data/spec/framework_spec/app/spec/library/rexml/attributes/delete_all_spec.rb +31 -0
  390. data/spec/framework_spec/app/spec/library/rexml/attributes/delete_spec.rb +27 -0
  391. data/spec/framework_spec/app/spec/library/rexml/attributes/each_attribute_spec.rb +24 -0
  392. data/spec/framework_spec/app/spec/library/rexml/attributes/each_spec.rb +24 -0
  393. data/spec/framework_spec/app/spec/library/rexml/attributes/element_reference_spec.rb +19 -0
  394. data/spec/framework_spec/app/spec/library/rexml/attributes/element_set_spec.rb +26 -0
  395. data/spec/framework_spec/app/spec/library/rexml/attributes/get_attribute_ns_spec.rb +14 -0
  396. data/spec/framework_spec/app/spec/library/rexml/attributes/get_attribute_spec.rb +29 -0
  397. data/spec/framework_spec/app/spec/library/rexml/attributes/initialize_spec.rb +19 -0
  398. data/spec/framework_spec/app/spec/library/rexml/attributes/length_spec.rb +7 -0
  399. data/spec/framework_spec/app/spec/library/rexml/attributes/namespaces_spec.rb +6 -0
  400. data/spec/framework_spec/app/spec/library/rexml/attributes/prefixes_spec.rb +24 -0
  401. data/spec/framework_spec/app/spec/library/rexml/attributes/shared/add.rb +17 -0
  402. data/spec/framework_spec/app/spec/library/rexml/attributes/shared/length.rb +13 -0
  403. data/spec/framework_spec/app/spec/library/rexml/attributes/size_spec.rb +7 -0
  404. data/spec/framework_spec/app/spec/library/rexml/attributes/to_a_spec.rb +20 -0
  405. data/spec/framework_spec/app/spec/library/rexml/cdata/clone_spec.rb +10 -0
  406. data/spec/framework_spec/app/spec/library/rexml/cdata/initialize_spec.rb +25 -0
  407. data/spec/framework_spec/app/spec/library/rexml/cdata/shared/to_s.rb +11 -0
  408. data/spec/framework_spec/app/spec/library/rexml/cdata/to_s_spec.rb +7 -0
  409. data/spec/framework_spec/app/spec/library/rexml/cdata/value_spec.rb +7 -0
  410. data/spec/framework_spec/app/spec/library/rexml/document/add_element_spec.rb +31 -0
  411. data/spec/framework_spec/app/spec/library/rexml/document/add_spec.rb +61 -0
  412. data/spec/framework_spec/app/spec/library/rexml/document/clone_spec.rb +20 -0
  413. data/spec/framework_spec/app/spec/library/rexml/document/doctype_spec.rb +15 -0
  414. data/spec/framework_spec/app/spec/library/rexml/document/encoding_spec.rb +22 -0
  415. data/spec/framework_spec/app/spec/library/rexml/document/expanded_name_spec.rb +16 -0
  416. data/spec/framework_spec/app/spec/library/rexml/document/new_spec.rb +38 -0
  417. data/spec/framework_spec/app/spec/library/rexml/document/node_type_spec.rb +8 -0
  418. data/spec/framework_spec/app/spec/library/rexml/document/root_spec.rb +12 -0
  419. data/spec/framework_spec/app/spec/library/rexml/document/stand_alone_spec.rb +19 -0
  420. data/spec/framework_spec/app/spec/library/rexml/document/version_spec.rb +14 -0
  421. data/spec/framework_spec/app/spec/library/rexml/document/write_spec.rb +39 -0
  422. data/spec/framework_spec/app/spec/library/rexml/document/xml_decl_spec.rb +15 -0
  423. data/spec/framework_spec/app/spec/library/rexml/element/add_attribute_spec.rb +41 -0
  424. data/spec/framework_spec/app/spec/library/rexml/element/add_attributes_spec.rb +22 -0
  425. data/spec/framework_spec/app/spec/library/rexml/element/add_element_spec.rb +39 -0
  426. data/spec/framework_spec/app/spec/library/rexml/element/add_namespace_spec.rb +24 -0
  427. data/spec/framework_spec/app/spec/library/rexml/element/add_text_spec.rb +24 -0
  428. data/spec/framework_spec/app/spec/library/rexml/element/attribute_spec.rb +17 -0
  429. data/spec/framework_spec/app/spec/library/rexml/element/attributes_spec.rb +19 -0
  430. data/spec/framework_spec/app/spec/library/rexml/element/cdatas_spec.rb +24 -0
  431. data/spec/framework_spec/app/spec/library/rexml/element/clone_spec.rb +29 -0
  432. data/spec/framework_spec/app/spec/library/rexml/element/comments_spec.rb +21 -0
  433. data/spec/framework_spec/app/spec/library/rexml/element/delete_attribute_spec.rb +39 -0
  434. data/spec/framework_spec/app/spec/library/rexml/element/delete_element_spec.rb +51 -0
  435. data/spec/framework_spec/app/spec/library/rexml/element/delete_namespace_spec.rb +25 -0
  436. data/spec/framework_spec/app/spec/library/rexml/element/document_spec.rb +18 -0
  437. data/spec/framework_spec/app/spec/library/rexml/element/each_element_with_attribute_spec.rb +35 -0
  438. data/spec/framework_spec/app/spec/library/rexml/element/each_element_with_text_spec.rb +31 -0
  439. data/spec/framework_spec/app/spec/library/rexml/element/get_text_spec.rb +18 -0
  440. data/spec/framework_spec/app/spec/library/rexml/element/has_attributes_spec.rb +17 -0
  441. data/spec/framework_spec/app/spec/library/rexml/element/has_elements_spec.rb +18 -0
  442. data/spec/framework_spec/app/spec/library/rexml/element/has_text_spec.rb +16 -0
  443. data/spec/framework_spec/app/spec/library/rexml/element/inspect_spec.rb +27 -0
  444. data/spec/framework_spec/app/spec/library/rexml/element/instructions_spec.rb +21 -0
  445. data/spec/framework_spec/app/spec/library/rexml/element/namespace_spec.rb +27 -0
  446. data/spec/framework_spec/app/spec/library/rexml/element/namespaces_spec.rb +32 -0
  447. data/spec/framework_spec/app/spec/library/rexml/element/new_spec.rb +35 -0
  448. data/spec/framework_spec/app/spec/library/rexml/element/next_element_spec.rb +19 -0
  449. data/spec/framework_spec/app/spec/library/rexml/element/node_type_spec.rb +8 -0
  450. data/spec/framework_spec/app/spec/library/rexml/element/prefixes_spec.rb +23 -0
  451. data/spec/framework_spec/app/spec/library/rexml/element/previous_element_spec.rb +20 -0
  452. data/spec/framework_spec/app/spec/library/rexml/element/raw_spec.rb +24 -0
  453. data/spec/framework_spec/app/spec/library/rexml/element/root_spec.rb +28 -0
  454. data/spec/framework_spec/app/spec/library/rexml/element/text_spec.rb +46 -0
  455. data/spec/framework_spec/app/spec/library/rexml/element/texts_spec.rb +16 -0
  456. data/spec/framework_spec/app/spec/library/rexml/element/whitespace_spec.rb +23 -0
  457. data/spec/framework_spec/app/spec/library/rexml/node/each_recursive_spec.rb +21 -0
  458. data/spec/framework_spec/app/spec/library/rexml/node/find_first_recursive_spec.rb +25 -0
  459. data/spec/framework_spec/app/spec/library/rexml/node/index_in_parent_spec.rb +15 -0
  460. data/spec/framework_spec/app/spec/library/rexml/node/next_sibling_node_spec.rb +21 -0
  461. data/spec/framework_spec/app/spec/library/rexml/node/parent_spec.rb +21 -0
  462. data/spec/framework_spec/app/spec/library/rexml/node/previous_sibling_node_spec.rb +21 -0
  463. data/spec/framework_spec/app/spec/library/rexml/shared/each_element.rb +36 -0
  464. data/spec/framework_spec/app/spec/library/rexml/shared/elements_to_a.rb +36 -0
  465. data/spec/framework_spec/app/spec/library/rexml/text/append_spec.rb +10 -0
  466. data/spec/framework_spec/app/spec/library/rexml/text/clone_spec.rb +10 -0
  467. data/spec/framework_spec/app/spec/library/rexml/text/comparison_spec.rb +25 -0
  468. data/spec/framework_spec/app/spec/library/rexml/text/empty_spec.rb +12 -0
  469. data/spec/framework_spec/app/spec/library/rexml/text/indent_text_spec.rb +24 -0
  470. data/spec/framework_spec/app/spec/library/rexml/text/inspect_spec.rb +8 -0
  471. data/spec/framework_spec/app/spec/library/rexml/text/new_spec.rb +49 -0
  472. data/spec/framework_spec/app/spec/library/rexml/text/node_type_spec.rb +8 -0
  473. data/spec/framework_spec/app/spec/library/rexml/text/normalize_spec.rb +8 -0
  474. data/spec/framework_spec/app/spec/library/rexml/text/read_with_substitution_spec.rb +13 -0
  475. data/spec/framework_spec/app/spec/library/rexml/text/to_s_spec.rb +18 -0
  476. data/spec/framework_spec/app/spec/library/rexml/text/unnormalize_spec.rb +8 -0
  477. data/spec/framework_spec/app/spec/library/rexml/text/value_spec.rb +37 -0
  478. data/spec/framework_spec/app/spec/library/rexml/text/wrap_spec.rb +21 -0
  479. data/spec/framework_spec/app/spec/library/rexml/text/write_with_substitution_spec.rb +33 -0
  480. data/spec/framework_spec/app/spec/library/set/exclusion_spec.rb +2 -2
  481. data/spec/framework_spec/app/spec/library/set/merge_spec.rb +2 -2
  482. data/spec/framework_spec/app/spec/library/set/shared/difference.rb +2 -2
  483. data/spec/framework_spec/app/spec/library/set/shared/intersection.rb +2 -2
  484. data/spec/framework_spec/app/spec/library/set/shared/union.rb +2 -2
  485. data/spec/framework_spec/app/spec/library/set/sortedset/exclusion_spec.rb +2 -2
  486. data/spec/framework_spec/app/spec/library/set/sortedset/merge_spec.rb +2 -2
  487. data/spec/framework_spec/app/spec/library/set/sortedset/shared/difference.rb +2 -2
  488. data/spec/framework_spec/app/spec/library/set/sortedset/shared/intersection.rb +2 -2
  489. data/spec/framework_spec/app/spec/library/set/sortedset/shared/union.rb +2 -2
  490. data/spec/framework_spec/app/spec/library/timeout/timeout_spec.rb +37 -0
  491. data/spec/framework_spec/app/spec/library/uri/eql_spec.rb +12 -0
  492. data/spec/framework_spec/app/spec/library/uri/equality_spec.rb +48 -0
  493. data/spec/framework_spec/app/spec/library/uri/escape/decode_spec.rb +6 -0
  494. data/spec/framework_spec/app/spec/library/uri/escape/encode_spec.rb +6 -0
  495. data/spec/framework_spec/app/spec/library/uri/escape/escape_spec.rb +6 -0
  496. data/spec/framework_spec/app/spec/library/uri/escape/unescape_spec.rb +6 -0
  497. data/spec/framework_spec/app/spec/library/uri/extract_spec.rb +86 -0
  498. data/spec/framework_spec/app/spec/library/uri/fixtures/classes.rb +11 -0
  499. data/spec/framework_spec/app/spec/library/uri/fixtures/normalization.rb +54 -0
  500. data/spec/framework_spec/app/spec/library/uri/ftp/build_spec.rb +6 -0
  501. data/spec/framework_spec/app/spec/library/uri/ftp/merge_spec.rb +6 -0
  502. data/spec/framework_spec/app/spec/library/uri/ftp/new2_spec.rb +6 -0
  503. data/spec/framework_spec/app/spec/library/uri/ftp/path_spec.rb +56 -0
  504. data/spec/framework_spec/app/spec/library/uri/ftp/set_typecode_spec.rb +6 -0
  505. data/spec/framework_spec/app/spec/library/uri/ftp/to_s_spec.rb +25 -0
  506. data/spec/framework_spec/app/spec/library/uri/ftp/typecode_spec.rb +10 -0
  507. data/spec/framework_spec/app/spec/library/uri/generic/absolute_spec.rb +10 -0
  508. data/spec/framework_spec/app/spec/library/uri/generic/build2_spec.rb +6 -0
  509. data/spec/framework_spec/app/spec/library/uri/generic/build_spec.rb +6 -0
  510. data/spec/framework_spec/app/spec/library/uri/generic/coerce_spec.rb +6 -0
  511. data/spec/framework_spec/app/spec/library/uri/generic/component_ary_spec.rb +6 -0
  512. data/spec/framework_spec/app/spec/library/uri/generic/component_spec.rb +10 -0
  513. data/spec/framework_spec/app/spec/library/uri/generic/default_port_spec.rb +10 -0
  514. data/spec/framework_spec/app/spec/library/uri/generic/eql_spec.rb +6 -0
  515. data/spec/framework_spec/app/spec/library/uri/generic/equal_value_spec.rb +6 -0
  516. data/spec/framework_spec/app/spec/library/uri/generic/fragment_spec.rb +10 -0
  517. data/spec/framework_spec/app/spec/library/uri/generic/hash_spec.rb +6 -0
  518. data/spec/framework_spec/app/spec/library/uri/generic/hierarchical_spec.rb +6 -0
  519. data/spec/framework_spec/app/spec/library/uri/generic/host_spec.rb +10 -0
  520. data/spec/framework_spec/app/spec/library/uri/generic/inspect_spec.rb +6 -0
  521. data/spec/framework_spec/app/spec/library/uri/generic/merge_spec.rb +10 -0
  522. data/spec/framework_spec/app/spec/library/uri/generic/minus_spec.rb +6 -0
  523. data/spec/framework_spec/app/spec/library/uri/generic/normalize_spec.rb +10 -0
  524. data/spec/framework_spec/app/spec/library/uri/generic/opaque_spec.rb +10 -0
  525. data/spec/framework_spec/app/spec/library/uri/generic/password_spec.rb +10 -0
  526. data/spec/framework_spec/app/spec/library/uri/generic/path_spec.rb +10 -0
  527. data/spec/framework_spec/app/spec/library/uri/generic/plus_spec.rb +6 -0
  528. data/spec/framework_spec/app/spec/library/uri/generic/port_spec.rb +10 -0
  529. data/spec/framework_spec/app/spec/library/uri/generic/query_spec.rb +10 -0
  530. data/spec/framework_spec/app/spec/library/uri/generic/registry_spec.rb +10 -0
  531. data/spec/framework_spec/app/spec/library/uri/generic/relative_spec.rb +6 -0
  532. data/spec/framework_spec/app/spec/library/uri/generic/route_from_spec.rb +6 -0
  533. data/spec/framework_spec/app/spec/library/uri/generic/route_to_spec.rb +6 -0
  534. data/spec/framework_spec/app/spec/library/uri/generic/scheme_spec.rb +10 -0
  535. data/spec/framework_spec/app/spec/library/uri/generic/select_spec.rb +6 -0
  536. data/spec/framework_spec/app/spec/library/uri/generic/set_fragment_spec.rb +6 -0
  537. data/spec/framework_spec/app/spec/library/uri/generic/set_host_spec.rb +6 -0
  538. data/spec/framework_spec/app/spec/library/uri/generic/set_opaque_spec.rb +6 -0
  539. data/spec/framework_spec/app/spec/library/uri/generic/set_password_spec.rb +6 -0
  540. data/spec/framework_spec/app/spec/library/uri/generic/set_path_spec.rb +6 -0
  541. data/spec/framework_spec/app/spec/library/uri/generic/set_port_spec.rb +6 -0
  542. data/spec/framework_spec/app/spec/library/uri/generic/set_query_spec.rb +6 -0
  543. data/spec/framework_spec/app/spec/library/uri/generic/set_registry_spec.rb +6 -0
  544. data/spec/framework_spec/app/spec/library/uri/generic/set_scheme_spec.rb +6 -0
  545. data/spec/framework_spec/app/spec/library/uri/generic/set_user_spec.rb +6 -0
  546. data/spec/framework_spec/app/spec/library/uri/generic/set_userinfo_spec.rb +6 -0
  547. data/spec/framework_spec/app/spec/library/uri/generic/to_s_spec.rb +6 -0
  548. data/spec/framework_spec/app/spec/library/uri/generic/use_registry_spec.rb +6 -0
  549. data/spec/framework_spec/app/spec/library/uri/generic/user_spec.rb +10 -0
  550. data/spec/framework_spec/app/spec/library/uri/generic/userinfo_spec.rb +10 -0
  551. data/spec/framework_spec/app/spec/library/uri/http/build_spec.rb +6 -0
  552. data/spec/framework_spec/app/spec/library/uri/http/request_uri_spec.rb +16 -0
  553. data/spec/framework_spec/app/spec/library/uri/join_spec.rb +61 -0
  554. data/spec/framework_spec/app/spec/library/uri/ldap/attributes_spec.rb +10 -0
  555. data/spec/framework_spec/app/spec/library/uri/ldap/build_spec.rb +6 -0
  556. data/spec/framework_spec/app/spec/library/uri/ldap/dn_spec.rb +10 -0
  557. data/spec/framework_spec/app/spec/library/uri/ldap/extensions_spec.rb +10 -0
  558. data/spec/framework_spec/app/spec/library/uri/ldap/filter_spec.rb +10 -0
  559. data/spec/framework_spec/app/spec/library/uri/ldap/hierarchical_spec.rb +6 -0
  560. data/spec/framework_spec/app/spec/library/uri/ldap/scope_spec.rb +10 -0
  561. data/spec/framework_spec/app/spec/library/uri/ldap/set_attributes_spec.rb +6 -0
  562. data/spec/framework_spec/app/spec/library/uri/ldap/set_dn_spec.rb +6 -0
  563. data/spec/framework_spec/app/spec/library/uri/ldap/set_extensions_spec.rb +6 -0
  564. data/spec/framework_spec/app/spec/library/uri/ldap/set_filter_spec.rb +6 -0
  565. data/spec/framework_spec/app/spec/library/uri/ldap/set_scope_spec.rb +6 -0
  566. data/spec/framework_spec/app/spec/library/uri/mailto/build_spec.rb +99 -0
  567. data/spec/framework_spec/app/spec/library/uri/mailto/headers_spec.rb +10 -0
  568. data/spec/framework_spec/app/spec/library/uri/mailto/set_headers_spec.rb +6 -0
  569. data/spec/framework_spec/app/spec/library/uri/mailto/set_to_spec.rb +6 -0
  570. data/spec/framework_spec/app/spec/library/uri/mailto/to_mailtext_spec.rb +6 -0
  571. data/spec/framework_spec/app/spec/library/uri/mailto/to_rfc822text_spec.rb +6 -0
  572. data/spec/framework_spec/app/spec/library/uri/mailto/to_s_spec.rb +6 -0
  573. data/spec/framework_spec/app/spec/library/uri/mailto/to_spec.rb +10 -0
  574. data/spec/framework_spec/app/spec/library/uri/merge_spec.rb +22 -0
  575. data/spec/framework_spec/app/spec/library/uri/normalize_spec.rb +35 -0
  576. data/spec/framework_spec/app/spec/library/uri/parse_spec.rb +249 -0
  577. data/spec/framework_spec/app/spec/library/uri/plus_spec.rb +489 -0
  578. data/spec/framework_spec/app/spec/library/uri/regexp_spec.rb +18 -0
  579. data/spec/framework_spec/app/spec/library/uri/route_from_spec.rb +25 -0
  580. data/spec/framework_spec/app/spec/library/uri/route_to_spec.rb +28 -0
  581. data/spec/framework_spec/app/spec/library/uri/select_spec.rb +31 -0
  582. data/spec/framework_spec/app/spec/library/uri/set_component_spec.rb +47 -0
  583. data/spec/framework_spec/app/spec/library/uri/shared/eql.rb +17 -0
  584. data/spec/framework_spec/app/spec/library/uri/split_spec.rb +6 -0
  585. data/spec/framework_spec/app/spec/library/uri/uri_spec.rb +31 -0
  586. data/spec/framework_spec/app/spec/library/uri/util/make_components_hash_spec.rb +6 -0
  587. data/spec/framework_spec/build.yml +2 -2
  588. data/spec/framework_spec/extensions/test-libs/test/unit.rb +328 -0
  589. data/spec/framework_spec/extensions/test-libs/test/unit/assertionfailederror.rb +25 -0
  590. data/spec/framework_spec/extensions/test-libs/test/unit/assertions.rb +1878 -0
  591. data/spec/framework_spec/extensions/test-libs/test/unit/attribute.rb +129 -0
  592. data/spec/framework_spec/extensions/test-libs/test/unit/autorunner.rb +422 -0
  593. data/spec/framework_spec/extensions/test-libs/test/unit/collector.rb +38 -0
  594. data/spec/framework_spec/extensions/test-libs/test/unit/collector/descendant.rb +23 -0
  595. data/spec/framework_spec/extensions/test-libs/test/unit/collector/dir.rb +108 -0
  596. data/spec/framework_spec/extensions/test-libs/test/unit/collector/load.rb +187 -0
  597. data/spec/framework_spec/extensions/test-libs/test/unit/collector/objectspace.rb +34 -0
  598. data/spec/framework_spec/extensions/test-libs/test/unit/collector/xml.rb +250 -0
  599. data/spec/framework_spec/extensions/test-libs/test/unit/color-scheme.rb +153 -0
  600. data/spec/framework_spec/extensions/test-libs/test/unit/color.rb +123 -0
  601. data/spec/framework_spec/extensions/test-libs/test/unit/data.rb +80 -0
  602. data/spec/framework_spec/extensions/test-libs/test/unit/diff.rb +740 -0
  603. data/spec/framework_spec/extensions/test-libs/test/unit/error.rb +151 -0
  604. data/spec/framework_spec/extensions/test-libs/test/unit/exceptionhandler.rb +39 -0
  605. data/spec/framework_spec/extensions/test-libs/test/unit/failure.rb +136 -0
  606. data/spec/framework_spec/extensions/test-libs/test/unit/fixture.rb +214 -0
  607. data/spec/framework_spec/extensions/test-libs/test/unit/notification.rb +133 -0
  608. data/spec/framework_spec/extensions/test-libs/test/unit/omission.rb +191 -0
  609. data/spec/framework_spec/extensions/test-libs/test/unit/pending.rb +150 -0
  610. data/spec/framework_spec/extensions/test-libs/test/unit/priority.rb +182 -0
  611. data/spec/framework_spec/extensions/test-libs/test/unit/runner/console.rb +59 -0
  612. data/spec/framework_spec/extensions/test-libs/test/unit/runner/emacs.rb +8 -0
  613. data/spec/framework_spec/extensions/test-libs/test/unit/runner/tap.rb +8 -0
  614. data/spec/framework_spec/extensions/test-libs/test/unit/runner/xml.rb +15 -0
  615. data/spec/framework_spec/extensions/test-libs/test/unit/testcase.rb +601 -0
  616. data/spec/framework_spec/extensions/test-libs/test/unit/testresult.rb +125 -0
  617. data/spec/framework_spec/extensions/test-libs/test/unit/testsuite.rb +134 -0
  618. data/spec/framework_spec/extensions/test-libs/test/unit/testsuitecreator.rb +79 -0
  619. data/spec/framework_spec/extensions/test-libs/test/unit/ui/console/outputlevel.rb +15 -0
  620. data/spec/framework_spec/extensions/test-libs/test/unit/ui/console/testrunner.rb +561 -0
  621. data/spec/framework_spec/extensions/test-libs/test/unit/ui/emacs/testrunner.rb +63 -0
  622. data/spec/framework_spec/extensions/test-libs/test/unit/ui/tap/testrunner.rb +82 -0
  623. data/spec/framework_spec/extensions/test-libs/test/unit/ui/testrunner.rb +53 -0
  624. data/spec/framework_spec/extensions/test-libs/test/unit/ui/testrunnermediator.rb +86 -0
  625. data/spec/framework_spec/extensions/test-libs/test/unit/ui/testrunnerutilities.rb +41 -0
  626. data/spec/framework_spec/extensions/test-libs/test/unit/ui/xml/testrunner.rb +224 -0
  627. data/spec/framework_spec/extensions/test-libs/test/unit/util/backtracefilter.rb +42 -0
  628. data/spec/framework_spec/extensions/test-libs/test/unit/util/method-owner-finder.rb +28 -0
  629. data/spec/framework_spec/extensions/test-libs/test/unit/util/observable.rb +90 -0
  630. data/spec/framework_spec/extensions/test-libs/test/unit/util/output.rb +31 -0
  631. data/spec/framework_spec/extensions/test-libs/test/unit/util/procwrapper.rb +48 -0
  632. data/spec/framework_spec/extensions/test-libs/test/unit/version.rb +5 -0
  633. data/spec/framework_spec/extensions/test-libs/webrick/accesslog.rb +10 -2
  634. data/spec/framework_spec/extensions/test-libs/webrick/cgi.rb +1 -1
  635. data/spec/framework_spec/extensions/test-libs/webrick/config.rb +1 -1
  636. data/spec/framework_spec/extensions/test-libs/webrick/httpauth/digestauth.rb +1 -1
  637. data/spec/framework_spec/extensions/test-libs/webrick/httpresponse.rb +1 -1
  638. data/spec/framework_spec/extensions/test-libs/webrick/https.rb +2 -2
  639. data/spec/framework_spec/extensions/test-libs/webrick/httpservlet/abstract.rb +1 -2
  640. data/spec/framework_spec/extensions/test-libs/webrick/httpservlet/cgihandler.rb +2 -2
  641. data/spec/framework_spec/extensions/test-libs/webrick/httpservlet/filehandler.rb +9 -5
  642. data/spec/framework_spec/extensions/test-libs/webrick/httpstatus.rb +32 -321
  643. data/spec/framework_spec/extensions/test-libs/webrick/httputils.rb +3 -3
  644. data/spec/framework_spec/extensions/test-libs/webrick/ssl.rb +3 -2
  645. data/spec/phone_spec/build.yml +1 -1
  646. data/version +1 -0
  647. metadata +521 -27
  648. data/lib/extensions/net-http/monitor.rb +0 -265
  649. data/lib/extensions/net-http/thread.rb +0 -367
  650. data/lib/extensions/net-http/timeout.rb +0 -114
  651. data/lib/extensions/net-http/uri.rb +0 -29
  652. data/lib/extensions/net-http/uri/common.rb +0 -727
  653. data/lib/extensions/net-http/uri/ftp.rb +0 -198
  654. data/lib/extensions/net-http/uri/generic.rb +0 -1128
  655. data/lib/extensions/net-http/uri/http.rb +0 -100
  656. data/lib/extensions/net-http/uri/https.rb +0 -20
  657. data/lib/extensions/net-http/uri/ldap.rb +0 -190
  658. data/lib/extensions/net-http/uri/ldaps.rb +0 -12
  659. data/lib/extensions/net-http/uri/mailto.rb +0 -266
  660. data/platform/osx/bin/RhoSimulator/RhoSimulator.app/Contents/Frameworks/QtDBus.framework/Versions/4/QtDBus +0 -0
  661. data/platform/osx/bin/RhoSimulator/RhoSimulator.app/Contents/Frameworks/QtXml.framework/Versions/4/QtXml +0 -0
  662. data/platform/osx/bin/RhoSimulator/RhoSimulator.app/Contents/PlugIns/qmltooling/libtcpserver.dylib +0 -0
  663. data/res/generators/templates/application/public/jqmobile/images/icon-search-black.png +0 -0
  664. data/res/generators/templates/application/public/jqmobile/jquery.mobile-1.0b3.min.css +0 -8
  665. data/res/generators/templates/application/public/jqmobile/jquery.mobile-1.0b3.min.js +0 -169
  666. data/res/generators/templates/application/public/jquery/jquery-1.6.3.min.js +0 -4
  667. data/spec/framework_spec/extensions/test-libs/thread.rb +0 -391
@@ -0,0 +1,25 @@
1
+ #--
2
+ #
3
+ # Author:: Nathaniel Talbott.
4
+ # Copyright:: Copyright (c) 2000-2002 Nathaniel Talbott. All rights reserved.
5
+ # License:: Ruby license.
6
+
7
+ module Test
8
+ module Unit
9
+
10
+ # Thrown by Test::Unit::Assertions when an assertion fails.
11
+ class AssertionFailedError < StandardError
12
+ attr_accessor :expected, :actual, :user_message
13
+ attr_accessor :inspected_expected, :inspected_actual
14
+ def initialize(message=nil, options=nil)
15
+ options ||= {}
16
+ @expected = options[:expected]
17
+ @actual = options[:actual]
18
+ @inspected_expected = options[:inspected_expected]
19
+ @inspected_actual = options[:inspected_actual]
20
+ @user_message = options[:user_message]
21
+ super(message)
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,1878 @@
1
+ # Author:: Nathaniel Talbott.
2
+ # Copyright:: Copyright (c) 2000-2003 Nathaniel Talbott. All rights reserved.
3
+ # Copyright (c) 2009-2010 Kouhei Sutou. All rights reserved.
4
+ # License:: Ruby license.
5
+
6
+ require 'test/unit/assertionfailederror'
7
+ require 'test/unit/util/backtracefilter'
8
+ require 'test/unit/util/method-owner-finder'
9
+ require 'test/unit/diff'
10
+
11
+ module Test
12
+ module Unit
13
+
14
+ ##
15
+ # Test::Unit::Assertions contains the standard Test::Unit assertions.
16
+ # Assertions is included in Test::Unit::TestCase.
17
+ #
18
+ # To include it in your own code and use its functionality, you simply
19
+ # need to rescue Test::Unit::AssertionFailedError. Additionally you may
20
+ # override add_assertion to get notified whenever an assertion is made.
21
+ #
22
+ # Notes:
23
+ # * The message to each assertion, if given, will be propagated with the
24
+ # failure.
25
+ # * It is easy to add your own assertions based on assert_block().
26
+ #
27
+ # = Example Custom Assertion
28
+ #
29
+ # def deny(boolean, message = nil)
30
+ # message = build_message message, '<?> is not false or nil.', boolean
31
+ # assert_block message do
32
+ # not boolean
33
+ # end
34
+ # end
35
+
36
+ module Assertions
37
+
38
+ ##
39
+ # The assertion upon which all other assertions are based. Passes if the
40
+ # block yields true.
41
+ #
42
+ # Example:
43
+ # assert_block "Couldn't do the thing" do
44
+ # do_the_thing
45
+ # end
46
+
47
+ public
48
+ def assert_block(message="assert_block failed.") # :yields:
49
+ _wrap_assertion do
50
+ if (! yield)
51
+ raise AssertionFailedError.new(message.to_s)
52
+ end
53
+ end
54
+ end
55
+
56
+ ##
57
+ # Asserts that +boolean+ is not false or nil.
58
+ #
59
+ # Example:
60
+ # assert [1, 2].include?(5)
61
+
62
+ public
63
+ def assert(boolean, message=nil)
64
+ _wrap_assertion do
65
+ case message
66
+ when nil, String, Proc
67
+ else
68
+ error_message = "assertion message must be String or Proc: "
69
+ error_message << "<#{message.inspect}>(<#{message.class}>)"
70
+ raise ArgumentError, error_message, filter_backtrace(caller)
71
+ end
72
+ assert_block("assert should not be called with a block.") do
73
+ !block_given?
74
+ end
75
+ assert_block(build_message(message, "<?> is not true.", boolean)) do
76
+ boolean
77
+ end
78
+ end
79
+ end
80
+
81
+ ##
82
+ # Passes if +expected+ == +actual.
83
+ #
84
+ # Note that the ordering of arguments is important, since a helpful
85
+ # error message is generated when this one fails that tells you the
86
+ # values of expected and actual.
87
+ #
88
+ # Example:
89
+ # assert_equal 'MY STRING', 'my string'.upcase
90
+
91
+ public
92
+ def assert_equal(expected, actual, message=nil)
93
+ diff = AssertionMessage.delayed_diff(expected, actual)
94
+ if expected.respond_to?(:encoding) and
95
+ actual.respond_to?(:encoding) and
96
+ expected.encoding != actual.encoding
97
+ format = <<EOT
98
+ <?>(?) expected but was
99
+ <?>(?).?
100
+ EOT
101
+ full_message = build_message(message, format,
102
+ expected, expected.encoding.name,
103
+ actual, actual.encoding.name,
104
+ diff)
105
+ else
106
+ full_message = build_message(message, <<EOT, expected, actual, diff)
107
+ <?> expected but was
108
+ <?>.?
109
+ EOT
110
+ end
111
+ begin
112
+ assert_block(full_message) { expected == actual }
113
+ rescue AssertionFailedError => failure
114
+ failure.expected = expected
115
+ failure.actual = actual
116
+ failure.inspected_expected = AssertionMessage.convert(expected)
117
+ failure.inspected_actual = AssertionMessage.convert(actual)
118
+ failure.user_message = message
119
+ raise failure # For JRuby. :<
120
+ end
121
+ end
122
+
123
+ ##
124
+ # Passes if the block raises one of the expected
125
+ # exceptions. When an expected exception is an Exception
126
+ # object, passes if expected_exception == actual_exception.
127
+ #
128
+ # Example:
129
+ # assert_raise(RuntimeError, LoadError) do
130
+ # raise 'Boom!!!'
131
+ # end # -> pass
132
+ #
133
+ # assert_raise do
134
+ # raise Exception, 'Any exception should be raised!!!'
135
+ # end # -> pass
136
+ #
137
+ # assert_raise(RuntimeError.new("XXX")) {raise "XXX"} # -> pass
138
+ # assert_raise(MyError.new("XXX")) {raise "XXX"} # -> fail
139
+ # assert_raise(RuntimeError.new("ZZZ")) {raise "XXX"} # -> fail
140
+ public
141
+ def assert_raise(*args, &block)
142
+ assert_expected_exception = Proc.new do |*_args|
143
+ message, assert_exception_helper, actual_exception = _args
144
+ expected = assert_exception_helper.expected_exceptions
145
+ full_message = build_message(message,
146
+ "<?> exception expected but was\n?",
147
+ expected, actual_exception)
148
+ assert_block(full_message) do
149
+ expected == [] or assert_exception_helper.expected?(actual_exception)
150
+ end
151
+ end
152
+ _assert_raise(assert_expected_exception, *args, &block)
153
+ end
154
+
155
+ ##
156
+ # Alias of assert_raise.
157
+ #
158
+ # Will be deprecated in 1.9, and removed in 2.0.
159
+
160
+ public
161
+ def assert_raises(*args, &block)
162
+ assert_raise(*args, &block)
163
+ end
164
+
165
+ ##
166
+ # Passes if the block raises one of the given
167
+ # exceptions or sub exceptions of the given exceptions.
168
+ #
169
+ # Example:
170
+ # assert_raise_kind_of(SystemCallError) do
171
+ # raise Errno::EACCES
172
+ # end
173
+ def assert_raise_kind_of(*args, &block)
174
+ assert_expected_exception = Proc.new do |*_args|
175
+ message, assert_exception_helper, actual_exception = _args
176
+ expected = assert_exception_helper.expected_exceptions
177
+ full_message = build_message(message,
178
+ "<?> family exception expected " +
179
+ "but was\n?",
180
+ expected, actual_exception)
181
+ assert_block(full_message) do
182
+ assert_exception_helper.expected?(actual_exception, :kind_of?)
183
+ end
184
+ end
185
+ _assert_raise(assert_expected_exception, *args, &block)
186
+ end
187
+
188
+
189
+ ##
190
+ # Passes if +object+.instance_of?(+klass+). When +klass+ is
191
+ # an array of classes, it passes if any class
192
+ # satisfies +object.instance_of?(class).
193
+ #
194
+ # Example:
195
+ # assert_instance_of(String, 'foo') # -> pass
196
+ # assert_instance_of([Fixnum, NilClass], 100) # -> pass
197
+ # assert_instance_of([Numeric, NilClass], 100) # -> fail
198
+
199
+ public
200
+ def assert_instance_of(klass, object, message="")
201
+ _wrap_assertion do
202
+ klasses = nil
203
+ klasses = klass if klass.is_a?(Array)
204
+ assert_block("The first parameter to assert_instance_of should be " +
205
+ "a Class or an Array of Class.") do
206
+ if klasses
207
+ klasses.all? {|k| k.is_a?(Class)}
208
+ else
209
+ klass.is_a?(Class)
210
+ end
211
+ end
212
+ klass_message = AssertionMessage.maybe_container(klass) do |value|
213
+ "<#{value}>"
214
+ end
215
+ full_message = build_message(message, <<EOT, object, klass_message, object.class)
216
+ <?> expected to be an instance of
217
+ ? but was
218
+ <?>.
219
+ EOT
220
+ assert_block(full_message) do
221
+ if klasses
222
+ klasses.any? {|k| object.instance_of?(k)}
223
+ else
224
+ object.instance_of?(klass)
225
+ end
226
+ end
227
+ end
228
+ end
229
+
230
+ ##
231
+ # Passes if +object+ is nil.
232
+ #
233
+ # Example:
234
+ # assert_nil [1, 2].uniq!
235
+
236
+ public
237
+ def assert_nil(object, message="")
238
+ full_message = build_message(message, <<EOT, object)
239
+ <?> expected to be nil.
240
+ EOT
241
+ assert_block(full_message) { object.nil? }
242
+ end
243
+
244
+ ##
245
+ # Passes if +object+.kind_of?(+klass+). When +klass+ is
246
+ # an array of classes or modules, it passes if any
247
+ # class or module satisfies +object.kind_of?(class_or_module).
248
+ #
249
+ # Example:
250
+ # assert_kind_of(Object, 'foo') # -> pass
251
+ # assert_kind_of([Fixnum, NilClass], 100) # -> pass
252
+ # assert_kind_of([Fixnum, NilClass], "string") # -> fail
253
+
254
+ public
255
+ def assert_kind_of(klass, object, message="")
256
+ _wrap_assertion do
257
+ klasses = nil
258
+ klasses = klass if klass.is_a?(Array)
259
+ assert_block("The first parameter to assert_kind_of should be " +
260
+ "a kind_of Module or an Array of a kind_of Module.") do
261
+ if klasses
262
+ klasses.all? {|k| k.kind_of?(Module)}
263
+ else
264
+ klass.kind_of?(Module)
265
+ end
266
+ end
267
+ klass_message = AssertionMessage.maybe_container(klass) do |value|
268
+ "<#{value}>"
269
+ end
270
+ full_message = build_message(message,
271
+ "<?> expected to be kind_of\\?\n" +
272
+ "? but was\n" +
273
+ "<?>.",
274
+ object,
275
+ klass_message,
276
+ object.class)
277
+ assert_block(full_message) do
278
+ if klasses
279
+ klasses.any? {|k| object.kind_of?(k)}
280
+ else
281
+ object.kind_of?(klass)
282
+ end
283
+ end
284
+ end
285
+ end
286
+
287
+ ##
288
+ # Passes if +object+ .respond_to? +method+
289
+ #
290
+ # Example:
291
+ # assert_respond_to 'bugbear', :slice
292
+
293
+ public
294
+ def assert_respond_to(object, method, message="")
295
+ _wrap_assertion do
296
+ full_message = build_message(message,
297
+ "<?>.kind_of\\?(Symbol) or\n" +
298
+ "<?>.respond_to\\?(:to_str) expected",
299
+ method, method)
300
+ assert_block(full_message) do
301
+ method.kind_of?(Symbol) or method.respond_to?(:to_str)
302
+ end
303
+ full_message = build_message(message,
304
+ "<?>.respond_to\\?(?) expected\n" +
305
+ "(Class: <?>)",
306
+ object, method, object.class)
307
+ assert_block(full_message) {object.respond_to?(method)}
308
+ end
309
+ end
310
+
311
+ ##
312
+ # Passes if +object+ does not .respond_to? +method+.
313
+ #
314
+ # Example:
315
+ # assert_not_respond_to('bugbear', :nonexistence) # -> pass
316
+ # assert_not_respond_to('bugbear', :size) # -> fail
317
+
318
+ public
319
+ def assert_not_respond_to(object, method, message="")
320
+ _wrap_assertion do
321
+ full_message = build_message(message,
322
+ "<?>.kind_of\\?(Symbol) or\n" +
323
+ "<?>.respond_to\\?(:to_str) expected",
324
+ method, method)
325
+ assert_block(full_message) do
326
+ method.kind_of?(Symbol) or method.respond_to?(:to_str)
327
+ end
328
+ full_message = build_message(message,
329
+ "!<?>.respond_to\\?(?) expected\n" +
330
+ "(Class: <?>)",
331
+ object, method, object.class)
332
+ assert_block(full_message) {!object.respond_to?(method)}
333
+ end
334
+ end
335
+
336
+ ##
337
+ # Passes if +string+ =~ +pattern+.
338
+ #
339
+ # Example:
340
+ # assert_match(/\d+/, 'five, 6, seven')
341
+
342
+ public
343
+ def assert_match(pattern, string, message="")
344
+ _wrap_assertion do
345
+ pattern = case(pattern)
346
+ when String
347
+ Regexp.new(Regexp.escape(pattern))
348
+ else
349
+ pattern
350
+ end
351
+ full_message = build_message(message, "<?> expected to be =~\n<?>.", string, pattern)
352
+ assert_block(full_message) { string =~ pattern }
353
+ end
354
+ end
355
+
356
+ ##
357
+ # Passes if +actual+ .equal? +expected+ (i.e. they are the same
358
+ # instance).
359
+ #
360
+ # Example:
361
+ # o = Object.new
362
+ # assert_same o, o
363
+
364
+ public
365
+ def assert_same(expected, actual, message="")
366
+ full_message = build_message(message, <<EOT, expected, expected.__id__, actual, actual.__id__)
367
+ <?>
368
+ with id <?> expected to be equal\\? to
369
+ <?>
370
+ with id <?>.
371
+ EOT
372
+ assert_block(full_message) { actual.equal?(expected) }
373
+ end
374
+
375
+ ##
376
+ # Compares the +object1+ with +object2+ using +operator+.
377
+ #
378
+ # Passes if object1.__send__(operator, object2) is true.
379
+ #
380
+ # Example:
381
+ # assert_operator 5, :>=, 4
382
+
383
+ public
384
+ def assert_operator(object1, operator, object2, message="")
385
+ _wrap_assertion do
386
+ full_message = build_message(nil, "<?>\ngiven as the operator for #assert_operator must be a Symbol or #respond_to\\?(:to_str).", operator)
387
+ assert_block(full_message){operator.kind_of?(Symbol) || operator.respond_to?(:to_str)}
388
+ full_message = build_message(message, <<EOT, object1, AssertionMessage.literal(operator), object2)
389
+ <?> expected to be
390
+ ?
391
+ <?>.
392
+ EOT
393
+ assert_block(full_message) { object1.__send__(operator, object2) }
394
+ end
395
+ end
396
+
397
+ ##
398
+ # Passes if block does not raise an exception.
399
+ #
400
+ # Example:
401
+ # assert_nothing_raised do
402
+ # [1, 2].uniq
403
+ # end
404
+
405
+ public
406
+ def assert_nothing_raised(*args)
407
+ _wrap_assertion do
408
+ if args.last.is_a?(String)
409
+ message = args.pop
410
+ else
411
+ message = ""
412
+ end
413
+
414
+ assert_exception_helper = AssertExceptionHelper.new(self, args)
415
+ begin
416
+ yield
417
+ rescue Exception => e
418
+ if ((args.empty? && !e.instance_of?(AssertionFailedError)) ||
419
+ assert_exception_helper.expected?(e))
420
+ failure_message = build_message(message, "Exception raised:\n?", e)
421
+ assert_block(failure_message) {false}
422
+ else
423
+ raise
424
+ end
425
+ end
426
+ nil
427
+ end
428
+ end
429
+
430
+ ##
431
+ # Flunk always fails.
432
+ #
433
+ # Example:
434
+ # flunk 'Not done testing yet.'
435
+
436
+ public
437
+ def flunk(message="Flunked")
438
+ assert_block(build_message(message)){false}
439
+ end
440
+
441
+ ##
442
+ # Passes if ! +actual+ .equal? +expected+
443
+ #
444
+ # Example:
445
+ # assert_not_same Object.new, Object.new
446
+
447
+ public
448
+ def assert_not_same(expected, actual, message="")
449
+ full_message = build_message(message, <<EOT, expected, expected.__id__, actual, actual.__id__)
450
+ <?>
451
+ with id <?> expected to not be equal\\? to
452
+ <?>
453
+ with id <?>.
454
+ EOT
455
+ assert_block(full_message) { !actual.equal?(expected) }
456
+ end
457
+
458
+ ##
459
+ # Passes if +expected+ != +actual+
460
+ #
461
+ # Example:
462
+ # assert_not_equal 'some string', 5
463
+
464
+ public
465
+ def assert_not_equal(expected, actual, message="")
466
+ full_message = build_message(message, "<?> expected to be != to\n<?>.", expected, actual)
467
+ assert_block(full_message) { expected != actual }
468
+ end
469
+
470
+ ##
471
+ # Passes if ! +object+ .nil?
472
+ #
473
+ # Example:
474
+ # assert_not_nil '1 two 3'.sub!(/two/, '2')
475
+
476
+ public
477
+ def assert_not_nil(object, message="")
478
+ full_message = build_message(message, "<?> expected to not be nil.", object)
479
+ assert_block(full_message){!object.nil?}
480
+ end
481
+
482
+ ##
483
+ # Passes if +regexp+ !~ +string+
484
+ #
485
+ # Example:
486
+ # assert_not_match(/two/, 'one 2 three') # -> pass
487
+ # assert_not_match(/three/, 'one 2 three') # -> fail
488
+
489
+ public
490
+ def assert_not_match(regexp, string, message="")
491
+ _wrap_assertion do
492
+ assert_instance_of(Regexp, regexp,
493
+ "<REGEXP> in assert_not_match(<REGEXP>, ...) " +
494
+ "should be a Regexp.")
495
+ full_message = build_message(message,
496
+ "<?> expected to not match\n<?>.",
497
+ regexp, string)
498
+ assert_block(full_message) { regexp !~ string }
499
+ end
500
+ end
501
+
502
+ ##
503
+ # Deprecated. Use #assert_not_match instead.
504
+ #
505
+ # Passes if +regexp+ !~ +string+
506
+ #
507
+ # Example:
508
+ # assert_no_match(/two/, 'one 2 three') # -> pass
509
+ # assert_no_match(/three/, 'one 2 three') # -> fail
510
+
511
+ public
512
+ def assert_no_match(regexp, string, message="")
513
+ _wrap_assertion do
514
+ assert_instance_of(Regexp, regexp,
515
+ "The first argument to assert_no_match " +
516
+ "should be a Regexp.")
517
+ assert_not_match(regexp, string, message)
518
+ end
519
+ end
520
+
521
+ UncaughtThrow = {
522
+ NameError => /^uncaught throw \`(.+)\'$/, #`
523
+ ArgumentError => /^uncaught throw (.+)$/,
524
+ ThreadError => /^uncaught throw \`(.+)\' in thread / #`
525
+ }
526
+
527
+ ##
528
+ # Passes if the block throws +expected_object+
529
+ #
530
+ # Example:
531
+ # assert_throw(:done) do
532
+ # throw(:done)
533
+ # end
534
+
535
+ public
536
+ def assert_throw(expected_object, message="", &proc)
537
+ _wrap_assertion do
538
+ begin
539
+ catch([]) {}
540
+ rescue TypeError
541
+ assert_instance_of(Symbol, expected_object,
542
+ "assert_throws expects the symbol that should be thrown for its first argument")
543
+ end
544
+ assert_block("Should have passed a block to assert_throw.") do
545
+ block_given?
546
+ end
547
+ caught = true
548
+ begin
549
+ catch(expected_object) do
550
+ proc.call
551
+ caught = false
552
+ end
553
+ full_message = build_message(message,
554
+ "<?> should have been thrown.",
555
+ expected_object)
556
+ assert_block(full_message) {caught}
557
+ rescue NameError, ArgumentError, ThreadError => error
558
+ raise unless UncaughtThrow[error.class] =~ error.message
559
+ tag = $1
560
+ tag = tag[1..-1].intern if tag[0, 1] == ":"
561
+ full_message = build_message(message,
562
+ "<?> expected to be thrown but\n" +
563
+ "<?> was thrown.",
564
+ expected_object, tag)
565
+ flunk(full_message)
566
+ end
567
+ end
568
+ end
569
+
570
+ ##
571
+ # Alias of assert_throw.
572
+ #
573
+ # Will be deprecated in 1.9, and removed in 2.0.
574
+ def assert_throws(*args, &block)
575
+ assert_throw(*args, &block)
576
+ end
577
+
578
+ ##
579
+ # Passes if block does not throw anything.
580
+ #
581
+ # Example:
582
+ # assert_nothing_thrown do
583
+ # [1, 2].uniq
584
+ # end
585
+
586
+ public
587
+ def assert_nothing_thrown(message="", &proc)
588
+ _wrap_assertion do
589
+ assert(block_given?, "Should have passed a block to assert_nothing_thrown")
590
+ begin
591
+ proc.call
592
+ rescue NameError, ArgumentError, ThreadError => error
593
+ raise unless UncaughtThrow[error.class] =~ error.message
594
+ tag = $1
595
+ tag = tag[1..-1].intern if tag[0, 1] == ":"
596
+ full_message = build_message(message,
597
+ "<?> was thrown when nothing was expected",
598
+ tag)
599
+ flunk(full_message)
600
+ end
601
+ assert(true, "Expected nothing to be thrown")
602
+ end
603
+ end
604
+
605
+ ##
606
+ # Passes if +expected_float+ and +actual_float+ are equal
607
+ # within +delta+ tolerance.
608
+ #
609
+ # Example:
610
+ # assert_in_delta 0.05, (50000.0 / 10**6), 0.00001
611
+
612
+ public
613
+ def assert_in_delta(expected_float, actual_float, delta=0.001, message="")
614
+ _wrap_assertion do
615
+ _assert_in_delta_validate_arguments(expected_float,
616
+ actual_float,
617
+ delta)
618
+ full_message = _assert_in_delta_message(expected_float,
619
+ actual_float,
620
+ delta,
621
+ message)
622
+ assert_block(full_message) do
623
+ (expected_float.to_f - actual_float.to_f).abs <= delta.to_f
624
+ end
625
+ end
626
+ end
627
+
628
+ ##
629
+ # Passes if +expected_float+ and +actual_float+ are
630
+ # not equal within +delta+ tolerance.
631
+ #
632
+ # Example:
633
+ # assert_not_in_delta(0.05, (50000.0 / 10**6), 0.00002) # -> pass
634
+ # assert_not_in_delta(0.05, (50000.0 / 10**6), 0.00001) # -> fail
635
+
636
+ public
637
+ def assert_not_in_delta(expected_float, actual_float, delta=0.001, message="")
638
+ _wrap_assertion do
639
+ _assert_in_delta_validate_arguments(expected_float,
640
+ actual_float,
641
+ delta)
642
+ full_message = _assert_in_delta_message(expected_float,
643
+ actual_float,
644
+ delta,
645
+ message,
646
+ :negative_assertion => true)
647
+ assert_block(full_message) do
648
+ (expected_float.to_f - actual_float.to_f).abs > delta.to_f
649
+ end
650
+ end
651
+ end
652
+
653
+ # :stopdoc:
654
+ private
655
+ def _assert_in_delta_validate_arguments(expected_float,
656
+ actual_float,
657
+ delta)
658
+ {
659
+ expected_float => "first float",
660
+ actual_float => "second float",
661
+ delta => "delta"
662
+ }.each do |float, name|
663
+ assert_respond_to(float, :to_f,
664
+ "The arguments must respond to to_f; " +
665
+ "the #{name} did not")
666
+ end
667
+ delta = delta.to_f
668
+ assert_operator(delta, :>=, 0.0, "The delta should not be negative")
669
+ end
670
+
671
+ def _assert_in_delta_message(expected_float, actual_float, delta,
672
+ message, options={})
673
+ if options[:negative_assertion]
674
+ format = <<-EOT
675
+ <?> -/+ <?> expected to not include
676
+ <?>.
677
+ EOT
678
+ else
679
+ format = <<-EOT
680
+ <?> -/+ <?> expected to include
681
+ <?>.
682
+ EOT
683
+ end
684
+ arguments = [expected_float, delta, actual_float]
685
+ normalized_expected = expected_float.to_f
686
+ normalized_actual = actual_float.to_f
687
+ normalized_delta = delta.to_f
688
+ relation_format = nil
689
+ relation_arguments = nil
690
+ if normalized_actual < normalized_expected - normalized_delta
691
+ relation_format = "<<?> < <?>-<?>[?] <= <?>+<?>[?]>"
692
+ relation_arguments = [actual_float,
693
+ expected_float, delta,
694
+ normalized_expected - normalized_delta,
695
+ expected_float, delta,
696
+ normalized_expected + normalized_delta]
697
+ elsif normalized_actual <= normalized_expected + normalized_delta
698
+ relation_format = "<<?>-<?>[?] <= <?> <= <?>+<?>[?]>"
699
+ relation_arguments = [expected_float, delta,
700
+ normalized_expected - normalized_delta,
701
+ actual_float,
702
+ expected_float, delta,
703
+ normalized_expected + normalized_delta]
704
+ else
705
+ relation_format = "<<?>-<?>[?] <= <?>+<?>[?] < <?>>"
706
+ relation_arguments = [expected_float, delta,
707
+ normalized_expected - normalized_delta,
708
+ expected_float, delta,
709
+ normalized_expected + normalized_delta,
710
+ actual_float]
711
+ end
712
+
713
+ if relation_format
714
+ format << <<-EOT
715
+
716
+ Relation:
717
+ #{relation_format}
718
+ EOT
719
+ arguments.concat(relation_arguments)
720
+ end
721
+
722
+ build_message(message, format, *arguments)
723
+ end
724
+
725
+ public
726
+ # :startdoc:
727
+
728
+ ##
729
+ # Passes if +expected_float+ and +actual_float+ are equal
730
+ # within +epsilon+ relative error of +expected_float+.
731
+ #
732
+ # Example:
733
+ # assert_in_epsilon(10000.0, 9900.0, 0.1) # -> pass
734
+ # assert_in_epsilon(10000.0, 9899.0, 0.1) # -> fail
735
+
736
+ public
737
+ def assert_in_epsilon(expected_float, actual_float, epsilon=0.001,
738
+ message="")
739
+ _wrap_assertion do
740
+ _assert_in_epsilon_validate_arguments(expected_float,
741
+ actual_float,
742
+ epsilon)
743
+ full_message = _assert_in_epsilon_message(expected_float,
744
+ actual_float,
745
+ epsilon,
746
+ message)
747
+ assert_block(full_message) do
748
+ normalized_expected_float = expected_float.to_f
749
+ delta = normalized_expected_float * epsilon.to_f
750
+ (normalized_expected_float - actual_float.to_f).abs <= delta
751
+ end
752
+ end
753
+ end
754
+
755
+ ##
756
+ # Passes if +expected_float+ and +actual_float+ are
757
+ # not equal within +epsilon+ relative error of
758
+ # +expected_float+.
759
+ #
760
+ # Example:
761
+ # assert_not_in_epsilon(10000.0, 9900.0, 0.1) # -> fail
762
+ # assert_not_in_epsilon(10000.0, 9899.0, 0.1) # -> pass
763
+
764
+ public
765
+ def assert_not_in_epsilon(expected_float, actual_float, epsilon=0.001,
766
+ message="")
767
+ _wrap_assertion do
768
+ _assert_in_epsilon_validate_arguments(expected_float,
769
+ actual_float,
770
+ epsilon)
771
+ full_message = _assert_in_epsilon_message(expected_float,
772
+ actual_float,
773
+ epsilon,
774
+ message,
775
+ :negative_assertion => true)
776
+ assert_block(full_message) do
777
+ normalized_expected_float = expected_float.to_f
778
+ delta = normalized_expected_float * epsilon.to_f
779
+ (normalized_expected_float - actual_float.to_f).abs > delta
780
+ end
781
+ end
782
+ end
783
+
784
+ # :stopdoc:
785
+ private
786
+ def _assert_in_epsilon_validate_arguments(expected_float,
787
+ actual_float,
788
+ epsilon)
789
+ {
790
+ expected_float => "first float",
791
+ actual_float => "second float",
792
+ epsilon => "epsilon"
793
+ }.each do |float, name|
794
+ assert_respond_to(float, :to_f,
795
+ "The arguments must respond to to_f; " +
796
+ "the #{name} did not")
797
+ end
798
+ epsilon = epsilon.to_f
799
+ assert_operator(epsilon, :>=, 0.0, "The epsilon should not be negative")
800
+ end
801
+
802
+ def _assert_in_epsilon_message(expected_float, actual_float, epsilon,
803
+ message, options={})
804
+ normalized_expected = expected_float.to_f
805
+ normalized_actual = actual_float.to_f
806
+ normalized_epsilon = epsilon.to_f
807
+ delta = normalized_expected * normalized_epsilon
808
+
809
+ if options[:negative_assertion]
810
+ format = <<-EOT
811
+ <?> -/+ (<?> * <?>)[?] expected to not include
812
+ <?>.
813
+ EOT
814
+ else
815
+ format = <<-EOT
816
+ <?> -/+ (<?> * <?>)[?] expected to include
817
+ <?>.
818
+ EOT
819
+ end
820
+ arguments = [expected_float, expected_float, epsilon, delta,
821
+ actual_float]
822
+
823
+ relation_format = nil
824
+ relation_arguments = nil
825
+ if normalized_actual < normalized_expected - delta
826
+ relation_format = "<<?> < <?>-(<?>*<?>)[?] <= <?>+(<?>*<?>)[?]>"
827
+ relation_arguments = [actual_float,
828
+ expected_float, expected_float, epsilon,
829
+ normalized_expected - delta,
830
+ expected_float, expected_float, epsilon,
831
+ normalized_expected + delta]
832
+ elsif normalized_actual <= normalized_expected + delta
833
+ relation_format = "<<?>-(<?>*<?>)[?] <= <?> <= <?>+(<?>*<?>)[?]>"
834
+ relation_arguments = [expected_float, expected_float, epsilon,
835
+ normalized_expected - delta,
836
+ actual_float,
837
+ expected_float, expected_float, epsilon,
838
+ normalized_expected + delta]
839
+ else
840
+ relation_format = "<<?>-(<?>*<?>)[?] <= <?>+(<?>*<?>)[?] < <?>>"
841
+ relation_arguments = [expected_float, expected_float, epsilon,
842
+ normalized_expected - delta,
843
+ expected_float, expected_float, epsilon,
844
+ normalized_expected + delta,
845
+ actual_float]
846
+ end
847
+
848
+ if relation_format
849
+ format << <<-EOT
850
+
851
+ Relation:
852
+ #{relation_format}
853
+ EOT
854
+ arguments.concat(relation_arguments)
855
+ end
856
+
857
+ build_message(message, format, *arguments)
858
+ end
859
+
860
+ public
861
+ # :startdoc:
862
+
863
+ ##
864
+ # Passes if the method send returns a true value.
865
+ #
866
+ # +send_array+ is composed of:
867
+ # * A receiver
868
+ # * A method
869
+ # * Arguments to the method
870
+ #
871
+ # Example:
872
+ # assert_send([[1, 2], :member?, 1]) # -> pass
873
+ # assert_send([[1, 2], :member?, 4]) # -> fail
874
+
875
+ public
876
+ def assert_send(send_array, message=nil)
877
+ _wrap_assertion do
878
+ assert_instance_of(Array, send_array,
879
+ "assert_send requires an array " +
880
+ "of send information")
881
+ assert_operator(send_array.size, :>=, 2,
882
+ "assert_send requires at least a receiver " +
883
+ "and a message name")
884
+ format = <<EOT
885
+ <?> expected to respond to
886
+ <?(*?)> with a true value but was
887
+ <?>.
888
+ EOT
889
+ receiver, message_name, *arguments = send_array
890
+ result = nil
891
+ full_message =
892
+ build_message(message,
893
+ format,
894
+ receiver,
895
+ AssertionMessage.literal(message_name.to_s),
896
+ arguments,
897
+ AssertionMessage.delayed_literal {result})
898
+ assert_block(full_message) do
899
+ result = receiver.__send__(message_name, *arguments)
900
+ result
901
+ end
902
+ end
903
+ end
904
+
905
+ ##
906
+ # Passes if the method send doesn't return a true value.
907
+ #
908
+ # +send_array+ is composed of:
909
+ # * A receiver
910
+ # * A method
911
+ # * Arguments to the method
912
+ #
913
+ # Example:
914
+ # assert_not_send([[1, 2], :member?, 1]) # -> fail
915
+ # assert_not_send([[1, 2], :member?, 4]) # -> pass
916
+ def assert_not_send(send_array, message=nil)
917
+ _wrap_assertion do
918
+ assert_instance_of(Array, send_array,
919
+ "assert_not_send requires an array " +
920
+ "of send information")
921
+ assert_operator(send_array.size, :>=, 2,
922
+ "assert_not_send requires at least a receiver " +
923
+ "and a message name")
924
+ format = <<EOT
925
+ <?> expected to respond to
926
+ <?(*?)> with not a true value but was
927
+ <?>.
928
+ EOT
929
+ receiver, message_name, *arguments = send_array
930
+ result = nil
931
+ full_message =
932
+ build_message(message,
933
+ format,
934
+ receiver,
935
+ AssertionMessage.literal(message_name.to_s),
936
+ arguments,
937
+ AssertionMessage.delayed_literal {result})
938
+ assert_block(full_message) do
939
+ result = receiver.__send__(message_name, *arguments)
940
+ not result
941
+ end
942
+ end
943
+ end
944
+
945
+ ##
946
+ # Passes if +actual+ is a boolean value.
947
+ #
948
+ # Example:
949
+ # assert_boolean(true) # -> pass
950
+ # assert_boolean(nil) # -> fail
951
+ def assert_boolean(actual, message=nil)
952
+ _wrap_assertion do
953
+ assert_block(build_message(message,
954
+ "<true> or <false> expected but was\n<?>",
955
+ actual)) do
956
+ [true, false].include?(actual)
957
+ end
958
+ end
959
+ end
960
+
961
+ ##
962
+ # Passes if +actual+ is true.
963
+ #
964
+ # Example:
965
+ # assert_true(true) # -> pass
966
+ # assert_true(:true) # -> fail
967
+ def assert_true(actual, message=nil)
968
+ _wrap_assertion do
969
+ assert_block(build_message(message,
970
+ "<true> expected but was\n<?>",
971
+ actual)) do
972
+ actual == true
973
+ end
974
+ end
975
+ end
976
+
977
+ ##
978
+ # Passes if +actual+ is false.
979
+ #
980
+ # Example:
981
+ # assert_false(false) # -> pass
982
+ # assert_false(nil) # -> fail
983
+ def assert_false(actual, message=nil)
984
+ _wrap_assertion do
985
+ assert_block(build_message(message,
986
+ "<false> expected but was\n<?>",
987
+ actual)) do
988
+ actual == false
989
+ end
990
+ end
991
+ end
992
+
993
+ ##
994
+ # Passes if expression "+expected+ +operator+
995
+ # +actual+" is true.
996
+ #
997
+ # Example:
998
+ # assert_compare(1, "<", 10) # -> pass
999
+ # assert_compare(1, ">=", 10) # -> fail
1000
+ def assert_compare(expected, operator, actual, message=nil)
1001
+ _wrap_assertion do
1002
+ assert_send([["<", "<=", ">", ">="], :include?, operator.to_s])
1003
+ case operator.to_s
1004
+ when "<"
1005
+ operator_description = "less than"
1006
+ when "<="
1007
+ operator_description = "less than or equal to"
1008
+ when ">"
1009
+ operator_description = "greater than"
1010
+ when ">="
1011
+ operator_description = "greater than or equal to"
1012
+ end
1013
+ template = <<-EOT
1014
+ <?> #{operator} <?> should be true
1015
+ <?> expected #{operator_description}
1016
+ <?>.
1017
+ EOT
1018
+ full_message = build_message(message, template,
1019
+ expected, actual,
1020
+ expected, actual)
1021
+ assert_block(full_message) do
1022
+ expected.__send__(operator, actual)
1023
+ end
1024
+ end
1025
+ end
1026
+
1027
+ ##
1028
+ # Passes if assertion is failed in block.
1029
+ #
1030
+ # Example:
1031
+ # assert_fail_assertion {assert_equal("A", "B")} # -> pass
1032
+ # assert_fail_assertion {assert_equal("A", "A")} # -> fail
1033
+ def assert_fail_assertion(message=nil)
1034
+ _wrap_assertion do
1035
+ full_message = build_message(message,
1036
+ "Failed assertion was expected.")
1037
+ assert_block(full_message) do
1038
+ begin
1039
+ yield
1040
+ false
1041
+ rescue AssertionFailedError
1042
+ true
1043
+ end
1044
+ end
1045
+ end
1046
+ end
1047
+
1048
+ ##
1049
+ # Passes if an exception is raised in block and its
1050
+ # message is +expected+.
1051
+ #
1052
+ # Example:
1053
+ # assert_raise_message("exception") {raise "exception"} # -> pass
1054
+ # assert_raise_message(/exc/i) {raise "exception"} # -> pass
1055
+ # assert_raise_message("exception") {raise "EXCEPTION"} # -> fail
1056
+ # assert_raise_message("exception") {} # -> fail
1057
+ def assert_raise_message(expected, message=nil)
1058
+ _wrap_assertion do
1059
+ full_message = build_message(message,
1060
+ "<?> exception message expected " +
1061
+ "but none was thrown.",
1062
+ expected)
1063
+ exception = nil
1064
+ assert_block(full_message) do
1065
+ begin
1066
+ yield
1067
+ false
1068
+ rescue Exception => exception
1069
+ true
1070
+ end
1071
+ end
1072
+
1073
+ actual = exception.message
1074
+ diff = AssertionMessage.delayed_diff(expected, actual)
1075
+ full_message =
1076
+ build_message(message,
1077
+ "<?> exception message expected but was\n" +
1078
+ "<?>.?", expected, actual, diff)
1079
+ assert_block(full_message) do
1080
+ if expected.is_a?(Regexp)
1081
+ expected =~ actual
1082
+ else
1083
+ expected == actual
1084
+ end
1085
+ end
1086
+ end
1087
+ end
1088
+
1089
+ ##
1090
+ # Passes if +object+.const_defined?(+constant_name+)
1091
+ #
1092
+ # Example:
1093
+ # assert_const_defined(Test, :Unit) # -> pass
1094
+ # assert_const_defined(Object, :Nonexistent) # -> fail
1095
+ def assert_const_defined(object, constant_name, message=nil)
1096
+ _wrap_assertion do
1097
+ full_message = build_message(message,
1098
+ "<?>.const_defined\\?(<?>) expected.",
1099
+ object, constant_name)
1100
+ assert_block(full_message) do
1101
+ object.const_defined?(constant_name)
1102
+ end
1103
+ end
1104
+ end
1105
+
1106
+ ##
1107
+ # Passes if !+object+.const_defined?(+constant_name+)
1108
+ #
1109
+ # Example:
1110
+ # assert_not_const_defined(Object, :Nonexistent) # -> pass
1111
+ # assert_not_const_defined(Test, :Unit) # -> fail
1112
+ def assert_not_const_defined(object, constant_name, message=nil)
1113
+ _wrap_assertion do
1114
+ full_message = build_message(message,
1115
+ "!<?>.const_defined\\?(<?>) expected.",
1116
+ object, constant_name)
1117
+ assert_block(full_message) do
1118
+ !object.const_defined?(constant_name)
1119
+ end
1120
+ end
1121
+ end
1122
+
1123
+ ##
1124
+ # Passes if +object+.+predicate+ is _true_.
1125
+ #
1126
+ # Example:
1127
+ # assert_predicate([], :empty?) # -> pass
1128
+ # assert_predicate([1], :empty?) # -> fail
1129
+ def assert_predicate(object, predicate, message=nil)
1130
+ _wrap_assertion do
1131
+ assert_respond_to(object, predicate, message)
1132
+ actual = object.__send__(predicate)
1133
+ full_message = build_message(message,
1134
+ "<?>.? is true value expected but was\n" +
1135
+ "<?>",
1136
+ object,
1137
+ AssertionMessage.literal(predicate),
1138
+ actual)
1139
+ assert_block(full_message) do
1140
+ actual
1141
+ end
1142
+ end
1143
+ end
1144
+
1145
+ ##
1146
+ # Passes if +object+.+predicate+ is not _true_.
1147
+ #
1148
+ # Example:
1149
+ # assert_not_predicate([1], :empty?) # -> pass
1150
+ # assert_not_predicate([], :empty?) # -> fail
1151
+ def assert_not_predicate(object, predicate, message=nil)
1152
+ _wrap_assertion do
1153
+ assert_respond_to(object, predicate, message)
1154
+ actual = object.__send__(predicate)
1155
+ full_message = build_message(message,
1156
+ "<?>.? is false value expected but was\n" +
1157
+ "<?>",
1158
+ object,
1159
+ AssertionMessage.literal(predicate),
1160
+ actual)
1161
+ assert_block(full_message) do
1162
+ not actual
1163
+ end
1164
+ end
1165
+ end
1166
+
1167
+ ##
1168
+ # Passes if +object+#+alias_name+ is an alias method of
1169
+ # +object+#+original_name+.
1170
+ #
1171
+ # Example:
1172
+ # assert_alias_method([], :length, :size) # -> pass
1173
+ # assert_alias_method([], :size, :length) # -> pass
1174
+ # assert_alias_method([], :each, :size) # -> fail
1175
+ def assert_alias_method(object, alias_name, original_name, message=nil)
1176
+ _wrap_assertion do
1177
+ find_method_failure_message = Proc.new do |method_name|
1178
+ build_message(message,
1179
+ "<?>.? doesn't exist\n" +
1180
+ "(Class: <?>)",
1181
+ object,
1182
+ AssertionMessage.literal(method_name),
1183
+ object.class)
1184
+ end
1185
+
1186
+ alias_method = original_method = nil
1187
+ assert_block(find_method_failure_message.call(alias_name)) do
1188
+ begin
1189
+ alias_method = object.method(alias_name)
1190
+ true
1191
+ rescue NameError
1192
+ false
1193
+ end
1194
+ end
1195
+ assert_block(find_method_failure_message.call(original_name)) do
1196
+ begin
1197
+ original_method = object.method(original_name)
1198
+ true
1199
+ rescue NameError
1200
+ false
1201
+ end
1202
+ end
1203
+
1204
+ full_message = build_message(message,
1205
+ "<?> is alias of\n" +
1206
+ "<?> expected",
1207
+ alias_method,
1208
+ original_method)
1209
+ assert_block(full_message) do
1210
+ alias_method == original_method
1211
+ end
1212
+ end
1213
+ end
1214
+
1215
+ ##
1216
+ # Passes if +path+ exists.
1217
+ #
1218
+ # Example:
1219
+ # assert_path_exist("/tmp") # -> pass
1220
+ # assert_path_exist("/bin/sh") # -> pass
1221
+ # assert_path_exist("/nonexistent") # -> fail
1222
+ def assert_path_exist(path, message=nil)
1223
+ _wrap_assertion do
1224
+ failure_message = build_message(message,
1225
+ "<?> expected to exist",
1226
+ path)
1227
+ assert_block(failure_message) do
1228
+ File.exist?(path)
1229
+ end
1230
+ end
1231
+ end
1232
+
1233
+ ##
1234
+ # Passes if +path+ doesn't exist.
1235
+ #
1236
+ # Example:
1237
+ # assert_path_not_exist("/nonexistent") # -> pass
1238
+ # assert_path_not_exist("/tmp") # -> fail
1239
+ # assert_path_not_exist("/bin/sh") # -> fail
1240
+ def assert_path_not_exist(path, message=nil)
1241
+ _wrap_assertion do
1242
+ failure_message = build_message(message,
1243
+ "<?> expected to not exist",
1244
+ path)
1245
+ assert_block(failure_message) do
1246
+ not File.exist?(path)
1247
+ end
1248
+ end
1249
+ end
1250
+
1251
+ ##
1252
+ # Passes if +collection+ includes +object+.
1253
+ #
1254
+ # Example:
1255
+ # assert_include([1, 10], 1) # -> pass
1256
+ # assert_include(1..10, 5) # -> pass
1257
+ # assert_include([1, 10], 5) # -> fail
1258
+ # assert_include(1..10, 20) # -> fail
1259
+ def assert_include(collection, object, message=nil)
1260
+ _wrap_assertion do
1261
+ assert_respond_to(collection, :include?,
1262
+ "The collection must respond to :include?.")
1263
+ full_message = build_message(message,
1264
+ "<?> expected to include\n<?>.",
1265
+ collection,
1266
+ object)
1267
+ assert_block(full_message) do
1268
+ collection.include?(object)
1269
+ end
1270
+ end
1271
+ end
1272
+
1273
+ ##
1274
+ # Passes if +collection+ doesn't include +object+.
1275
+ #
1276
+ # Example:
1277
+ # assert_not_include([1, 10], 5) # -> pass
1278
+ # assert_not_include(1..10, 20) # -> pass
1279
+ # assert_not_include([1, 10], 1) # -> fail
1280
+ # assert_not_include(1..10, 5) # -> fail
1281
+ def assert_not_include(collection, object, message=nil)
1282
+ _wrap_assertion do
1283
+ assert_respond_to(collection, :include?,
1284
+ "The collection must respond to :include?.")
1285
+ full_message = build_message(message,
1286
+ "<?> expected to not include\n<?>.",
1287
+ collection,
1288
+ object)
1289
+ assert_block(full_message) do
1290
+ not collection.include?(object)
1291
+ end
1292
+ end
1293
+ end
1294
+
1295
+ ##
1296
+ # Passes if +object+ is empty.
1297
+ #
1298
+ # Example:
1299
+ # assert_empty("") # -> pass
1300
+ # assert_empty([]) # -> pass
1301
+ # assert_empty({}) # -> pass
1302
+ # assert_empty(" ") # -> fail
1303
+ # assert_empty([nil]) # -> fail
1304
+ # assert_empty({1 => 2}) # -> fail
1305
+ def assert_empty(object, message=nil)
1306
+ _wrap_assertion do
1307
+ assert_respond_to(object, :empty?,
1308
+ "The object must respond to :empty?.")
1309
+ full_message = build_message(message,
1310
+ "<?> expected to be empty.",
1311
+ object)
1312
+ assert_block(full_message) do
1313
+ object.empty?
1314
+ end
1315
+ end
1316
+ end
1317
+
1318
+ ##
1319
+ # Passes if +object+ is not empty.
1320
+ #
1321
+ # Example:
1322
+ # assert_not_empty(" ") # -> pass
1323
+ # assert_not_empty([nil]) # -> pass
1324
+ # assert_not_empty({1 => 2}) # -> pass
1325
+ # assert_not_empty("") # -> fail
1326
+ # assert_not_empty([]) # -> fail
1327
+ # assert_not_empty({}) # -> fail
1328
+ def assert_not_empty(object, message=nil)
1329
+ _wrap_assertion do
1330
+ assert_respond_to(object, :empty?,
1331
+ "The object must respond to :empty?.")
1332
+ full_message = build_message(message,
1333
+ "<?> expected to not be empty.",
1334
+ object)
1335
+ assert_block(full_message) do
1336
+ not object.empty?
1337
+ end
1338
+ end
1339
+ end
1340
+
1341
+ ##
1342
+ # Builds a failure message. +head+ is added before the +template+ and
1343
+ # +arguments+ replaces the '?'s positionally in the template.
1344
+
1345
+ public
1346
+ def build_message(head, template=nil, *arguments)
1347
+ template &&= template.chomp
1348
+ return AssertionMessage.new(head, template, arguments)
1349
+ end
1350
+
1351
+ private
1352
+ def _wrap_assertion(&block)
1353
+ @_assertion_wrapped ||= false
1354
+ if @_assertion_wrapped
1355
+ block.call
1356
+ else
1357
+ @_assertion_wrapped = true
1358
+ begin
1359
+ add_assertion
1360
+ block.call
1361
+ ensure
1362
+ @_assertion_wrapped = false
1363
+ end
1364
+ end
1365
+ end
1366
+
1367
+ ##
1368
+ # Called whenever an assertion is made. Define this in classes that
1369
+ # include Test::Unit::Assertions to record assertion counts.
1370
+
1371
+ private
1372
+ def add_assertion
1373
+ end
1374
+
1375
+ ##
1376
+ # Select whether or not to use the pretty-printer. If this option is set
1377
+ # to false before any assertions are made, pp.rb will not be required.
1378
+
1379
+ public
1380
+ def self.use_pp=(value)
1381
+ AssertionMessage.use_pp = value
1382
+ end
1383
+
1384
+ # :stopdoc:
1385
+ private
1386
+ def _assert_raise(assert_expected_exception, *args, &block)
1387
+ _wrap_assertion do
1388
+ if args.last.is_a?(String)
1389
+ message = args.pop
1390
+ else
1391
+ message = ""
1392
+ end
1393
+
1394
+ assert_exception_helper = AssertExceptionHelper.new(self, args)
1395
+ expected = assert_exception_helper.expected_exceptions
1396
+ actual_exception = nil
1397
+ full_message = build_message(message,
1398
+ "<?> exception expected " +
1399
+ "but none was thrown.",
1400
+ expected)
1401
+ assert_block(full_message) do
1402
+ begin
1403
+ yield
1404
+ false
1405
+ rescue Exception => actual_exception
1406
+ true
1407
+ end
1408
+ end
1409
+ assert_expected_exception.call(message, assert_exception_helper,
1410
+ actual_exception)
1411
+ actual_exception
1412
+ end
1413
+ end
1414
+
1415
+ class AssertionMessage
1416
+ @use_pp = true
1417
+ class << self
1418
+ attr_accessor :use_pp
1419
+
1420
+ def literal(value)
1421
+ Literal.new(value)
1422
+ end
1423
+
1424
+ def delayed_literal(&block)
1425
+ DelayedLiteral.new(block)
1426
+ end
1427
+
1428
+ def maybe_container(value, &formatter)
1429
+ MaybeContainer.new(value, &formatter)
1430
+ end
1431
+
1432
+ MAX_DIFF_TARGET_STRING_SIZE = 1000
1433
+ def max_diff_target_string_size
1434
+ return @@max_diff_target_string_size if @@max_diff_target_string_size
1435
+
1436
+ size = ENV["TEST_UNIT_MAX_DIFF_TARGET_STRING_SIZE"]
1437
+ if size
1438
+ begin
1439
+ size = Integer(size)
1440
+ rescue ArgumentError
1441
+ size = nil
1442
+ end
1443
+ end
1444
+ size || MAX_DIFF_TARGET_STRING_SIZE
1445
+ end
1446
+
1447
+ @@max_diff_target_string_size = nil
1448
+ def max_diff_target_string_size=(size)
1449
+ @@max_diff_target_string_size = size
1450
+ end
1451
+
1452
+ def diff_target_string?(string)
1453
+ if string.respond_to?(:bytesize)
1454
+ string.bytesize < max_diff_target_string_size
1455
+ else
1456
+ string.size < max_diff_target_string_size
1457
+ end
1458
+ end
1459
+
1460
+ def ensure_diffable_string(string)
1461
+ if string.respond_to?(:encoding) and
1462
+ !string.encoding.ascii_compatible?
1463
+ string = string.dup.force_encoding("ASCII-8BIT")
1464
+ end
1465
+ string
1466
+ end
1467
+
1468
+ def prepare_for_diff(from, to)
1469
+ if !from.is_a?(String) or !to.is_a?(String)
1470
+ from = convert(from)
1471
+ to = convert(to)
1472
+ end
1473
+
1474
+ if diff_target_string?(from) and diff_target_string?(to)
1475
+ from = ensure_diffable_string(from)
1476
+ to = ensure_diffable_string(to)
1477
+ [from, to]
1478
+ else
1479
+ [nil, nil]
1480
+ end
1481
+ end
1482
+
1483
+ def delayed_diff(from, to)
1484
+ delayed_literal do
1485
+ from, to = prepare_for_diff(from, to)
1486
+
1487
+ diff = "" if from.nil? or to.nil?
1488
+ diff ||= Diff.readable(from, to)
1489
+ if /^[-+]/ !~ diff
1490
+ diff = ""
1491
+ elsif /^[ ?]/ =~ diff or /(?:.*\n){2,}/ =~ diff
1492
+ diff = "\n\ndiff:\n#{diff}"
1493
+ else
1494
+ diff = ""
1495
+ end
1496
+
1497
+ if Diff.need_fold?(diff)
1498
+ folded_diff = Diff.folded_readable(from, to)
1499
+ diff << "\n\nfolded diff:\n#{folded_diff}"
1500
+ end
1501
+
1502
+ diff
1503
+ end
1504
+ end
1505
+
1506
+ def convert(object)
1507
+ case object
1508
+ when Exception
1509
+ <<EOM.chop
1510
+ Class: <#{convert(object.class)}>
1511
+ Message: <#{convert(object.message)}>
1512
+ ---Backtrace---
1513
+ #{Util::BacktraceFilter.filter_backtrace(object.backtrace).join("\n")}
1514
+ ---------------
1515
+ EOM
1516
+ else
1517
+ inspector = Inspector.new(object)
1518
+ if use_pp
1519
+ begin
1520
+ require 'pp' unless defined?(PP)
1521
+ begin
1522
+ return PP.pp(inspector, '').chomp
1523
+ rescue NameError
1524
+ end
1525
+ rescue LoadError
1526
+ self.use_pp = false
1527
+ end
1528
+ end
1529
+ inspector.inspect
1530
+ end
1531
+ end
1532
+ end
1533
+
1534
+ class Inspector
1535
+ include Comparable
1536
+
1537
+ class << self
1538
+ def cached_new(object, inspected_objects)
1539
+ inspected_objects[object.object_id] ||=
1540
+ new(object, inspected_objects)
1541
+ end
1542
+ end
1543
+
1544
+ attr_reader :object
1545
+ def initialize(object, inspected_objects={})
1546
+ @inspected_objects = inspected_objects
1547
+ @object = object
1548
+ @inspected_objects[@object.object_id] = self
1549
+ @inspect_target = inspect_target
1550
+ end
1551
+
1552
+ alias_method :native_inspect, :inspect
1553
+ def inspect
1554
+ @inspect_target.inspect
1555
+ end
1556
+
1557
+ def pretty_print(q)
1558
+ @inspect_target.pretty_print(q)
1559
+ end
1560
+
1561
+ def pretty_print_cycle(q)
1562
+ @inspect_target.pretty_print_cycle(q)
1563
+ end
1564
+
1565
+ def <=>(other)
1566
+ if other.is_a?(self.class)
1567
+ @object <=> other.object
1568
+ else
1569
+ @object <=> other
1570
+ end
1571
+ end
1572
+
1573
+ private
1574
+ def inspect_target
1575
+ if HashInspector.target?(@object)
1576
+ HashInspector.new(@object, @inspected_objects)
1577
+ elsif ArrayInspector.target?(@object)
1578
+ ArrayInspector.new(@object, @inspected_objects)
1579
+ else
1580
+ @object
1581
+ end
1582
+ end
1583
+ end
1584
+
1585
+ class HashInspector
1586
+ class << self
1587
+ def target?(object)
1588
+ object.is_a?(Hash) or object == ENV
1589
+ end
1590
+ end
1591
+
1592
+ def initialize(hash, inspected_objects)
1593
+ @inspected_objects = inspected_objects
1594
+ @hash = {}
1595
+ hash.each do |key, value|
1596
+ key = Inspector.cached_new(key, @inspected_objects)
1597
+ value = Inspector.cached_new(value, @inspected_objects)
1598
+ @hash[key] = value
1599
+ end
1600
+ end
1601
+
1602
+ def inspect
1603
+ @hash.inspect
1604
+ end
1605
+
1606
+ def pretty_print(q)
1607
+ q.group(1, '{', '}') do
1608
+ q.seplist(self, nil, :each_pair) do |k, v|
1609
+ q.group do
1610
+ q.pp(k)
1611
+ q.text('=>')
1612
+ q.group(1) do
1613
+ q.breakable('')
1614
+ q.pp(v)
1615
+ end
1616
+ end
1617
+ end
1618
+ end
1619
+ end
1620
+
1621
+ def pretty_print_cycle(q)
1622
+ @hash.pretty_print_cycle(q)
1623
+ end
1624
+
1625
+ def each_pair
1626
+ keys = @hash.keys
1627
+ begin
1628
+ keys = keys.sort # FIXME: more cleverly
1629
+ rescue ArgumentError
1630
+ end
1631
+ keys.each do |key|
1632
+ yield(key, @hash[key])
1633
+ end
1634
+ end
1635
+ end
1636
+
1637
+ class ArrayInspector
1638
+ class << self
1639
+ def target?(object)
1640
+ object.is_a?(Array)
1641
+ end
1642
+ end
1643
+
1644
+ def initialize(array, inspected_objects)
1645
+ @inspected_objects = inspected_objects
1646
+ @array = array.collect do |element|
1647
+ Inspector.cached_new(element, @inspected_objects)
1648
+ end
1649
+ end
1650
+
1651
+ def inspect
1652
+ @array.inspect
1653
+ end
1654
+
1655
+ def pretty_print(q)
1656
+ q.group(1, '[', ']') do
1657
+ q.seplist(self) do |v|
1658
+ q.pp(v)
1659
+ end
1660
+ end
1661
+ end
1662
+
1663
+ def pretty_print_cycle(q)
1664
+ @array.pretty_print_cycle(q)
1665
+ end
1666
+
1667
+ def each(&block)
1668
+ @array.each(&block)
1669
+ end
1670
+ end
1671
+
1672
+ class Literal
1673
+ def initialize(value)
1674
+ @value = value
1675
+ end
1676
+
1677
+ def inspect
1678
+ @value.to_s
1679
+ end
1680
+ end
1681
+
1682
+ class DelayedLiteral
1683
+ def initialize(value)
1684
+ @value = value
1685
+ end
1686
+
1687
+ def inspect
1688
+ @value.call.to_s
1689
+ end
1690
+ end
1691
+
1692
+ class MaybeContainer
1693
+ def initialize(value, &formatter)
1694
+ @value = value
1695
+ @formatter = formatter
1696
+ end
1697
+
1698
+ def inspect
1699
+ if @value.is_a?(Array)
1700
+ values = @value.collect do |value|
1701
+ @formatter.call(AssertionMessage.convert(value))
1702
+ end
1703
+ "[#{values.join(', ')}]"
1704
+ else
1705
+ @formatter.call(AssertionMessage.convert(@value))
1706
+ end
1707
+ end
1708
+ end
1709
+
1710
+ class Template
1711
+ def self.create(string)
1712
+ parts = (string ? string.scan(/(?=[^\\])\?|(?:\\\?|[^\?])+/m) : [])
1713
+ self.new(parts)
1714
+ end
1715
+
1716
+ attr_reader :count
1717
+
1718
+ def initialize(parts)
1719
+ @parts = parts
1720
+ @count = parts.find_all{|e| e == '?'}.size
1721
+ end
1722
+
1723
+ def result(parameters)
1724
+ raise "The number of parameters does not match the number of substitutions." if(parameters.size != count)
1725
+ params = parameters.dup
1726
+ @parts.collect{|e| e == '?' ? params.shift : e.gsub(/\\\?/m, '?')}.join('')
1727
+ end
1728
+ end
1729
+
1730
+ include Util::BacktraceFilter
1731
+
1732
+ def initialize(head, template_string, parameters)
1733
+ @head = head
1734
+ @template_string = template_string
1735
+ @parameters = parameters
1736
+ end
1737
+
1738
+ def convert(object)
1739
+ self.class.convert(object)
1740
+ end
1741
+
1742
+ def template
1743
+ @template ||= Template.create(@template_string)
1744
+ end
1745
+
1746
+ def add_period(string)
1747
+ (string =~ /\.\Z/ ? string : string + '.')
1748
+ end
1749
+
1750
+ def to_s
1751
+ message_parts = []
1752
+ if (@head)
1753
+ head = @head.to_s
1754
+ unless(head.empty?)
1755
+ message_parts << add_period(head)
1756
+ end
1757
+ end
1758
+ tail = template.result(@parameters.collect{|e| convert(e)})
1759
+ message_parts << tail unless(tail.empty?)
1760
+ message_parts.join("\n")
1761
+ end
1762
+ end
1763
+
1764
+ class AssertExceptionHelper
1765
+ class WrappedException
1766
+ def initialize(exception)
1767
+ @exception = exception
1768
+ end
1769
+
1770
+ def inspect
1771
+ if default_inspect?
1772
+ "#{@exception.class.inspect}(#{@exception.message.inspect})"
1773
+ else
1774
+ @exception.inspect
1775
+ end
1776
+ end
1777
+
1778
+ def method_missing(name, *args, &block)
1779
+ @exception.__send__(name, *args, &block)
1780
+ end
1781
+
1782
+ private
1783
+ def default_inspect?
1784
+ inspect_method = @exception.method(:inspect)
1785
+ if inspect_method.respond_to?(:owner) and
1786
+ inspect_method.owner == Exception
1787
+ true
1788
+ else
1789
+ default_inspect_method = Exception.instance_method(:inspect)
1790
+ default_inspect_method.bind(@exception).call == @exception.inspect
1791
+ end
1792
+ end
1793
+ end
1794
+
1795
+ def initialize(test_case, expected_exceptions)
1796
+ @test_case = test_case
1797
+ @expected_exceptions = expected_exceptions
1798
+ @expected_classes, @expected_modules, @expected_objects =
1799
+ split_expected_exceptions(expected_exceptions)
1800
+ end
1801
+
1802
+ def expected_exceptions
1803
+ exceptions = @expected_exceptions.collect do |exception|
1804
+ if exception.is_a?(Exception)
1805
+ WrappedException.new(exception)
1806
+ else
1807
+ exception
1808
+ end
1809
+ end
1810
+ if exceptions.size == 1
1811
+ exceptions[0]
1812
+ else
1813
+ exceptions
1814
+ end
1815
+ end
1816
+
1817
+ def expected?(actual_exception, equality=nil)
1818
+ equality ||= :instance_of?
1819
+ expected_class?(actual_exception, equality) or
1820
+ expected_module?(actual_exception) or
1821
+ expected_object?(actual_exception)
1822
+ end
1823
+
1824
+ private
1825
+ def split_expected_exceptions(expected_exceptions)
1826
+ exception_modules = []
1827
+ exception_objects = []
1828
+ exception_classes = []
1829
+ expected_exceptions.each do |exception_type|
1830
+ if exception_type.instance_of?(Module)
1831
+ exception_modules << exception_type
1832
+ elsif exception_type.is_a?(Exception)
1833
+ exception_objects << exception_type
1834
+ else
1835
+ @test_case.__send__(:assert,
1836
+ Exception >= exception_type,
1837
+ "Should expect a class of exception, " +
1838
+ "#{exception_type}")
1839
+ exception_classes << exception_type
1840
+ end
1841
+ end
1842
+ [exception_classes, exception_modules, exception_objects]
1843
+ end
1844
+
1845
+ def expected_class?(actual_exception, equality)
1846
+ @expected_classes.any? do |expected_class|
1847
+ actual_exception.__send__(equality, expected_class)
1848
+ end
1849
+ end
1850
+
1851
+ def expected_module?(actual_exception)
1852
+ @expected_modules.any? do |expected_module|
1853
+ actual_exception.is_a?(expected_module)
1854
+ end
1855
+ end
1856
+
1857
+ def expected_object?(actual_exception)
1858
+ @expected_objects.any? do |expected_object|
1859
+ expected_object == actual_exception or
1860
+ fallback_exception_object_equal(expected_object, actual_exception)
1861
+ end
1862
+ end
1863
+
1864
+ def fallback_exception_object_equal(expected_object, actual_exception)
1865
+ owner = Util::MethodOwnerFinder.find(expected_object, :==)
1866
+ if owner == Kernel or owner == Exception
1867
+ expected_object.class == actual_exception.class and
1868
+ expected_object.message == actual_exception.message
1869
+ else
1870
+ false
1871
+ end
1872
+ end
1873
+ end
1874
+
1875
+ # :startdoc:
1876
+ end
1877
+ end
1878
+ end