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

Sign up to get free protection for your applications and to get access to all the features.
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