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,153 @@
1
+ require 'test/unit/color'
2
+
3
+ module Test
4
+ module Unit
5
+ class ColorScheme
6
+ include Enumerable
7
+
8
+ class << self
9
+ def default
10
+ if available_colors == 256
11
+ default_for_256_colors
12
+ else
13
+ default_for_8_colors
14
+ end
15
+ end
16
+
17
+ @@default_for_8_colors = nil
18
+ def default_for_8_colors
19
+ @@default_for_8_colors ||=
20
+ new("pass" => Color.new("green", :foreground => false) +
21
+ Color.new("white", :bold => true),
22
+ "failure" => Color.new("red", :foreground => false) +
23
+ Color.new("white", :bold => true),
24
+ "pending" => Color.new("magenta", :bold => true),
25
+ "omission" => Color.new("blue", :bold => true),
26
+ "notification" => Color.new("cyan", :bold => true),
27
+ "error" => Color.new("yellow", :bold => true) +
28
+ Color.new("black", :foreground => false),
29
+ "case" => Color.new("white", :bold => true) +
30
+ Color.new("blue", :foreground => false),
31
+ "suite" => Color.new("white", :bold => true) +
32
+ Color.new("green", :foreground => false),
33
+ "diff-inserted-tag" => Color.new("red", :bold => true),
34
+ "diff-deleted-tag" => Color.new("green", :bold => true),
35
+ "diff-difference-tag" => Color.new("cyan", :bold => true),
36
+ "diff-inserted" => Color.new("red", :foreground => false) +
37
+ Color.new("white", :bold => true),
38
+ "diff-deleted" => Color.new("green", :foreground => false) +
39
+ Color.new("white", :bold => true))
40
+ end
41
+
42
+ @@default_for_256_colors = nil
43
+ def default_for_256_colors
44
+ @@default_for_256_colors ||=
45
+ new("pass" => Color.new("030", :foreground => false) +
46
+ Color.new("555", :bold => true),
47
+ "failure" => Color.new("300", :foreground => false) +
48
+ Color.new("555", :bold => true),
49
+ "pending" => Color.new("303", :foreground => false) +
50
+ Color.new("555", :bold => true),
51
+ "omission" => Color.new("001", :foreground => false) +
52
+ Color.new("555", :bold => true),
53
+ "notification" => Color.new("011", :foreground => false) +
54
+ Color.new("555", :bold => true),
55
+ "error" => Color.new("550", :bold => true) +
56
+ Color.new("000", :foreground => false),
57
+ "case" => Color.new("220", :foreground => false) +
58
+ Color.new("555", :bold => true),
59
+ "suite" => Color.new("110", :foreground => false) +
60
+ Color.new("555", :bold => true),
61
+ "diff-inserted-tag" => Color.new("500", :foreground => false) +
62
+ Color.new("000", :bold => true),
63
+ "diff-deleted-tag" => Color.new("050", :foreground => false) +
64
+ Color.new("000", :bold => true),
65
+ "diff-difference-tag" => Color.new("005", :foreground => false) +
66
+ Color.new("555", :bold => true),
67
+ "diff-inserted" => Color.new("300", :foreground => false) +
68
+ Color.new("555", :bold => true),
69
+ "diff-deleted" => Color.new("030", :foreground => false) +
70
+ Color.new("555", :bold => true))
71
+ end
72
+
73
+ @@schemes = {}
74
+ def all
75
+ @@schemes.merge("default" => default)
76
+ end
77
+
78
+ def [](id)
79
+ @@schemes[id.to_s]
80
+ end
81
+
82
+ def []=(id, scheme_or_spec)
83
+ if scheme_or_spec.is_a?(self)
84
+ scheme = scheme_or_spec
85
+ else
86
+ scheme = new(scheme_or_spec)
87
+ end
88
+ @@schemes[id.to_s] = scheme
89
+ end
90
+
91
+ def available_colors
92
+ case ENV["COLORTERM"]
93
+ when "gnome-terminal"
94
+ 256
95
+ else
96
+ case ENV["TERM"]
97
+ when "xterm-256color"
98
+ 256
99
+ else
100
+ 8
101
+ end
102
+ end
103
+ end
104
+ end
105
+
106
+ def initialize(scheme_spec)
107
+ @scheme = {}
108
+ scheme_spec.each do |key, color_spec|
109
+ self[key] = color_spec
110
+ end
111
+ end
112
+
113
+ def [](name)
114
+ @scheme[name.to_s]
115
+ end
116
+
117
+ def []=(name, color_spec)
118
+ @scheme[name.to_s] = make_color(color_spec)
119
+ end
120
+
121
+ def each(&block)
122
+ @scheme.each(&block)
123
+ end
124
+
125
+ def to_hash
126
+ hash = {}
127
+ @scheme.each do |key, color|
128
+ hash[key] = color
129
+ end
130
+ hash
131
+ end
132
+
133
+ private
134
+ def make_color(color_spec)
135
+ if color_spec.is_a?(Color) or color_spec.is_a?(MixColor)
136
+ color_spec
137
+ else
138
+ color_name = nil
139
+ normalized_color_spec = {}
140
+ color_spec.each do |key, value|
141
+ key = key.to_sym
142
+ if key == :name
143
+ color_name = value
144
+ else
145
+ normalized_color_spec[key] = value
146
+ end
147
+ end
148
+ Color.new(color_name, normalized_color_spec)
149
+ end
150
+ end
151
+ end
152
+ end
153
+ end
@@ -0,0 +1,123 @@
1
+ module Test
2
+ module Unit
3
+ class Color
4
+ class Error < StandardError
5
+ end
6
+
7
+ class ParseError < Error
8
+ end
9
+
10
+ class << self
11
+ def parse_256_color(string)
12
+ case string
13
+ when /\A([0-5])([0-5])([0-5])\z/
14
+ red, green, blue = $1, $2, $3
15
+ red.to_i * 36 + green.to_i * 6 + blue.to_i + 16
16
+ else
17
+ message = "must be 'RGB' format and R, G and B " +
18
+ "are in 0-5: #{string.inspect}"
19
+ raise ParseError, message
20
+ end
21
+ end
22
+ end
23
+
24
+ NAMES = ["black", "red", "green", "yellow",
25
+ "blue", "magenta", "cyan", "white"]
26
+
27
+ attr_reader :name
28
+ def initialize(name, options={})
29
+ @name = name
30
+ @foreground = options[:foreground]
31
+ @foreground = true if @foreground.nil?
32
+ @intensity = options[:intensity]
33
+ @bold = options[:bold]
34
+ @italic = options[:italic]
35
+ @underline = options[:underline]
36
+ end
37
+
38
+ def foreground?
39
+ @foreground
40
+ end
41
+
42
+ def intensity?
43
+ @intensity
44
+ end
45
+
46
+ def bold?
47
+ @bold
48
+ end
49
+
50
+ def italic?
51
+ @italic
52
+ end
53
+
54
+ def underline?
55
+ @underline
56
+ end
57
+
58
+ def ==(other)
59
+ self.class === other and
60
+ [name, foreground?, intensity?,
61
+ bold?, italic?, underline?] ==
62
+ [other.name, other.foreground?, other.intensity?,
63
+ other.bold?, other.italic?, other.underline?]
64
+ end
65
+
66
+ def sequence
67
+ sequence = []
68
+ if @name == "none"
69
+ elsif @name == "reset"
70
+ sequence << "0"
71
+ else
72
+ if NAMES.include?(@name)
73
+ foreground_parameter = foreground? ? 3 : 4
74
+ foreground_parameter += 6 if intensity?
75
+ color = NAMES.index(@name)
76
+ sequence << "#{foreground_parameter}#{color}"
77
+ else
78
+ sequence << (foreground? ? "38" : "48")
79
+ sequence << "5"
80
+ sequence << self.class.parse_256_color(@name).to_s
81
+ end
82
+ end
83
+ sequence << "1" if bold?
84
+ sequence << "3" if italic?
85
+ sequence << "4" if underline?
86
+ sequence
87
+ end
88
+
89
+ def escape_sequence
90
+ "\e[#{sequence.join(';')}m"
91
+ end
92
+
93
+ def +(other)
94
+ MixColor.new([self, other])
95
+ end
96
+ end
97
+
98
+ class MixColor
99
+ attr_reader :colors
100
+ def initialize(colors)
101
+ @colors = colors
102
+ end
103
+
104
+ def sequence
105
+ @colors.inject([]) do |result, color|
106
+ result + color.sequence
107
+ end
108
+ end
109
+
110
+ def escape_sequence
111
+ "\e[#{sequence.join(';')}m"
112
+ end
113
+
114
+ def +(other)
115
+ self.class.new([self, other])
116
+ end
117
+
118
+ def ==(other)
119
+ self.class === other and colors == other.colors
120
+ end
121
+ end
122
+ end
123
+ end
@@ -0,0 +1,80 @@
1
+ module Test
2
+ module Unit
3
+ module Data
4
+ class << self
5
+ def included(base)
6
+ base.extend(ClassMethods)
7
+ end
8
+ end
9
+
10
+ module ClassMethods
11
+ # TODO: WRITE ME.
12
+ def data(*arguments, &block)
13
+ n_arguments = arguments.size
14
+ case n_arguments
15
+ when 0
16
+ data_set = block
17
+ when 1
18
+ data_set = arguments[0]
19
+ when 2
20
+ data_set = {arguments[0] => arguments[1]}
21
+ else
22
+ message = "wrong number arguments(#{n_arguments} for 1..2)"
23
+ raise ArgumentError, message
24
+ end
25
+ current_data = current_attribute(:data)[:value] || []
26
+ attribute(:data, current_data + [data_set])
27
+ end
28
+
29
+ # TODO: WRITE ME.
30
+ def load_data(file_name)
31
+ case file_name
32
+ when /\.csv/i
33
+ loader = CSVDataLoader.new(self)
34
+ loader.load(file_name)
35
+ else
36
+ raise ArgumentError, "unsupported file format: <#{file_name}>"
37
+ end
38
+ end
39
+
40
+ class CSVDataLoader
41
+ def initialize(test_case)
42
+ @test_case = test_case
43
+ end
44
+
45
+ def load(file_name)
46
+ require 'csv'
47
+ header = nil
48
+ CSV.foreach(file_name) do |row|
49
+ if header.nil?
50
+ header = row
51
+ next
52
+ end
53
+ label = nil
54
+ data = {}
55
+ header.each_with_index do |key, i|
56
+ if key == "label"
57
+ label = row[i]
58
+ else
59
+ data[key] = normalize_value(row[i])
60
+ end
61
+ end
62
+ @test_case.data(label, data)
63
+ end
64
+ end
65
+
66
+ private
67
+ def normalize_value(value)
68
+ Integer(value)
69
+ rescue ArgumentError
70
+ begin
71
+ Float(value)
72
+ rescue ArgumentError
73
+ value
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,740 @@
1
+ # port of Python's difflib.
2
+ #
3
+ # Copyright (c) 2001-2008 Python Software Foundation; All Rights Reserved
4
+ # Copyright (c) 2008-2010 Kouhei Sutou; All Rights Reserved
5
+ #
6
+ # It is free software, and is distributed under the Ruby
7
+ # license and/or the PSF license. See the COPYING file and
8
+ # PSFL file.
9
+
10
+ module Test
11
+ module Unit
12
+ module Diff
13
+ class SequenceMatcher
14
+ def initialize(from, to, &junk_predicate)
15
+ @from = from
16
+ @to = to
17
+ @junk_predicate = junk_predicate
18
+ update_to_indexes
19
+ end
20
+
21
+ def longest_match(from_start, from_end, to_start, to_end)
22
+ best_info = find_best_match_position(from_start, from_end,
23
+ to_start, to_end)
24
+ unless @junks.empty?
25
+ args = [from_start, from_end, to_start, to_end]
26
+ best_info = adjust_best_info_with_junk_predicate(false, best_info,
27
+ *args)
28
+ best_info = adjust_best_info_with_junk_predicate(true, best_info,
29
+ *args)
30
+ end
31
+
32
+ best_info
33
+ end
34
+
35
+ def blocks
36
+ @blocks ||= compute_blocks
37
+ end
38
+
39
+ def operations
40
+ @operations ||= compute_operations
41
+ end
42
+
43
+ def grouped_operations(context_size=nil)
44
+ context_size ||= 3
45
+ _operations = operations.dup
46
+ _operations = [[:equal, 0, 0, 0, 0]] if _operations.empty?
47
+ expand_edge_equal_operations!(_operations, context_size)
48
+
49
+ group_window = context_size * 2
50
+ groups = []
51
+ group = []
52
+ _operations.each do |tag, from_start, from_end, to_start, to_end|
53
+ if tag == :equal and from_end - from_start > group_window
54
+ group << [tag,
55
+ from_start,
56
+ [from_end, from_start + context_size].min,
57
+ to_start,
58
+ [to_end, to_start + context_size].min]
59
+ groups << group
60
+ group = []
61
+ from_start = [from_start, from_end - context_size].max
62
+ to_start = [to_start, to_end - context_size].max
63
+ end
64
+ group << [tag, from_start, from_end, to_start, to_end]
65
+ end
66
+ groups << group unless group.empty?
67
+ groups
68
+ end
69
+
70
+ def ratio
71
+ @ratio ||= compute_ratio
72
+ end
73
+
74
+ private
75
+ def update_to_indexes
76
+ @to_indexes = {}
77
+ @junks = {}
78
+ if @to.is_a?(String)
79
+ each = " "[0].is_a?(Integer) ? :each_byte : :each_char
80
+ else
81
+ each = :each
82
+ end
83
+ i = 0
84
+ @to.send(each) do |item|
85
+ @to_indexes[item] ||= []
86
+ @to_indexes[item] << i
87
+ i += 1
88
+ end
89
+
90
+ return if @junk_predicate.nil?
91
+ @to_indexes = @to_indexes.reject do |key, value|
92
+ junk = @junk_predicate.call(key)
93
+ @junks[key] = true if junk
94
+ junk
95
+ end
96
+ end
97
+
98
+ def find_best_match_position(from_start, from_end, to_start, to_end)
99
+ best_from, best_to, best_size = from_start, to_start, 0
100
+ sizes = {}
101
+ from_start.upto(from_end) do |from_index|
102
+ _sizes = {}
103
+ (@to_indexes[@from[from_index]] || []).each do |to_index|
104
+ next if to_index < to_start
105
+ break if to_index > to_end
106
+ size = _sizes[to_index] = (sizes[to_index - 1] || 0) + 1
107
+ if size > best_size
108
+ best_from = from_index - size + 1
109
+ best_to = to_index - size + 1
110
+ best_size = size
111
+ end
112
+ end
113
+ sizes = _sizes
114
+ end
115
+ [best_from, best_to, best_size]
116
+ end
117
+
118
+ def adjust_best_info_with_junk_predicate(should_junk, best_info,
119
+ from_start, from_end,
120
+ to_start, to_end)
121
+ best_from, best_to, best_size = best_info
122
+ while best_from > from_start and best_to > to_start and
123
+ (should_junk ?
124
+ @junks.has_key?(@to[best_to - 1]) :
125
+ !@junks.has_key?(@to[best_to - 1])) and
126
+ @from[best_from - 1] == @to[best_to - 1]
127
+ best_from -= 1
128
+ best_to -= 1
129
+ best_size += 1
130
+ end
131
+
132
+ while best_from + best_size < from_end and
133
+ best_to + best_size < to_end and
134
+ (should_junk ?
135
+ @junks.has_key?(@to[best_to + best_size]) :
136
+ !@junks.has_key?(@to[best_to + best_size])) and
137
+ @from[best_from + best_size] == @to[best_to + best_size]
138
+ best_size += 1
139
+ end
140
+
141
+ [best_from, best_to, best_size]
142
+ end
143
+
144
+ def matches
145
+ @matches ||= compute_matches
146
+ end
147
+
148
+ def compute_matches
149
+ matches = []
150
+ queue = [[0, @from.size, 0, @to.size]]
151
+ until queue.empty?
152
+ from_start, from_end, to_start, to_end = queue.pop
153
+ match = longest_match(from_start, from_end - 1, to_start, to_end - 1)
154
+ match_from_index, match_to_index, size = match
155
+ unless size.zero?
156
+ if from_start < match_from_index and
157
+ to_start < match_to_index
158
+ queue.push([from_start, match_from_index,
159
+ to_start, match_to_index])
160
+ end
161
+ matches << match
162
+ if match_from_index + size < from_end and
163
+ match_to_index + size < to_end
164
+ queue.push([match_from_index + size, from_end,
165
+ match_to_index + size, to_end])
166
+ end
167
+ end
168
+ end
169
+ matches.sort_by do |(from_index, to_index, match_size)|
170
+ from_index
171
+ end
172
+ end
173
+
174
+ def compute_blocks
175
+ blocks = []
176
+ current_from_index = current_to_index = current_size = 0
177
+ matches.each do |from_index, to_index, size|
178
+ if current_from_index + current_size == from_index and
179
+ current_to_index + current_size == to_index
180
+ current_size += size
181
+ else
182
+ unless current_size.zero?
183
+ blocks << [current_from_index, current_to_index, current_size]
184
+ end
185
+ current_from_index = from_index
186
+ current_to_index = to_index
187
+ current_size = size
188
+ end
189
+ end
190
+ unless current_size.zero?
191
+ blocks << [current_from_index, current_to_index, current_size]
192
+ end
193
+
194
+ blocks << [@from.size, @to.size, 0]
195
+ blocks
196
+ end
197
+
198
+ def compute_operations
199
+ from_index = to_index = 0
200
+ operations = []
201
+ blocks.each do |match_from_index, match_to_index, size|
202
+ tag = determine_tag(from_index, to_index,
203
+ match_from_index, match_to_index)
204
+ if tag != :equal
205
+ operations << [tag,
206
+ from_index, match_from_index,
207
+ to_index, match_to_index]
208
+ end
209
+
210
+ from_index, to_index = match_from_index + size, match_to_index + size
211
+ if size > 0
212
+ operations << [:equal,
213
+ match_from_index, from_index,
214
+ match_to_index, to_index]
215
+ end
216
+ end
217
+ operations
218
+ end
219
+
220
+ def compute_ratio
221
+ matches = blocks.inject(0) {|result, block| result + block[-1]}
222
+ length = @from.length + @to.length
223
+ if length.zero?
224
+ 1.0
225
+ else
226
+ 2.0 * matches / length
227
+ end
228
+ end
229
+
230
+ def determine_tag(from_index, to_index,
231
+ match_from_index, match_to_index)
232
+ if from_index < match_from_index and to_index < match_to_index
233
+ :replace
234
+ elsif from_index < match_from_index
235
+ :delete
236
+ elsif to_index < match_to_index
237
+ :insert
238
+ else
239
+ :equal
240
+ end
241
+ end
242
+
243
+ def expand_edge_equal_operations!(_operations, context_size)
244
+ tag, from_start, from_end, to_start, to_end = _operations[0]
245
+ if tag == :equal
246
+ _operations[0] = [tag,
247
+ [from_start, from_end - context_size].max,
248
+ from_end,
249
+ [to_start, to_end - context_size].max,
250
+ to_end]
251
+ end
252
+
253
+ tag, from_start, from_end, to_start, to_end = _operations[-1]
254
+ if tag == :equal
255
+ _operations[-1] = [tag,
256
+ from_start,
257
+ [from_end, from_start + context_size].min,
258
+ to_start,
259
+ [to_end, to_start + context_size].min]
260
+ end
261
+ end
262
+ end
263
+
264
+ class Differ
265
+ def initialize(from, to)
266
+ @from = from
267
+ @to = to
268
+ end
269
+
270
+ private
271
+ def tag(mark, contents)
272
+ contents.collect {|content| "#{mark}#{content}"}
273
+ end
274
+ end
275
+
276
+ class UTF8Line
277
+ class << self
278
+ # from http://unicode.org/reports/tr11/
279
+ WIDE_CHARACTERS =
280
+ [0x1100..0x1159, 0x115F..0x115F, 0x2329..0x232A,
281
+ 0x2E80..0x2E99, 0x2E9B..0x2EF3, 0x2F00..0x2FD5,
282
+ 0x2FF0..0x2FFB, 0x3000..0x303E, 0x3041..0x3096,
283
+ 0x3099..0x30FF, 0x3105..0x312D, 0x3131..0x318E,
284
+ 0x3190..0x31B7, 0x31C0..0x31E3, 0x31F0..0x321E,
285
+ 0x3220..0x3243, 0x3250..0x32FE, 0x3300..0x4DB5,
286
+ 0x4E00..0x9FC3, 0xA000..0xA48C, 0xA490..0xA4C6,
287
+ 0xAC00..0xD7A3, 0xF900..0xFA2D, 0xFA30..0xFA6A,
288
+ 0xFA70..0xFAD9, 0xFE10..0xFE19, 0xFE30..0xFE52,
289
+ 0xFE54..0xFE66, 0xFE68..0xFE6B, 0xFF01..0xFF60,
290
+ 0xFFE0..0xFFE6, 0x20000..0x2FFFD, 0x30000..0x3FFFD,
291
+ ]
292
+
293
+ AMBIGUOUS =
294
+ [0x00A1..0x00A1, 0x00A4..0x00A4, 0x00A7..0x00A8,
295
+ 0x00AA..0x00AA, 0x00AD..0x00AE, 0x00B0..0x00B4,
296
+ 0x00B6..0x00BA, 0x00BC..0x00BF, 0x00C6..0x00C6,
297
+ 0x00D0..0x00D0, 0x00D7..0x00D8, 0x00DE..0x00E1,
298
+ 0x00E6..0x00E6, 0x00E8..0x00EA, 0x00EC..0x00ED,
299
+ 0x00F0..0x00F0, 0x00F2..0x00F3, 0x00F7..0x00FA,
300
+ 0x00FC..0x00FC, 0x00FE..0x00FE, 0x0101..0x0101,
301
+ 0x0111..0x0111, 0x0113..0x0113, 0x011B..0x011B,
302
+ 0x0126..0x0127, 0x012B..0x012B, 0x0131..0x0133,
303
+ 0x0138..0x0138, 0x013F..0x0142, 0x0144..0x0144,
304
+ 0x0148..0x014B, 0x014D..0x014D, 0x0152..0x0153,
305
+ 0x0166..0x0167, 0x016B..0x016B, 0x01CE..0x01CE,
306
+ 0x01D0..0x01D0, 0x01D2..0x01D2, 0x01D4..0x01D4,
307
+ 0x01D6..0x01D6, 0x01D8..0x01D8, 0x01DA..0x01DA,
308
+ 0x01DC..0x01DC, 0x0251..0x0251, 0x0261..0x0261,
309
+ 0x02C4..0x02C4, 0x02C7..0x02C7, 0x02C9..0x02CB,
310
+ 0x02CD..0x02CD, 0x02D0..0x02D0, 0x02D8..0x02DB,
311
+ 0x02DD..0x02DD, 0x02DF..0x02DF, 0x0300..0x036F,
312
+ 0x0391..0x03A1, 0x03A3..0x03A9, 0x03B1..0x03C1,
313
+ 0x03C3..0x03C9, 0x0401..0x0401, 0x0410..0x044F,
314
+ 0x0451..0x0451, 0x2010..0x2010, 0x2013..0x2016,
315
+ 0x2018..0x2019, 0x201C..0x201D, 0x2020..0x2022,
316
+ 0x2024..0x2027, 0x2030..0x2030, 0x2032..0x2033,
317
+ 0x2035..0x2035, 0x203B..0x203B, 0x203E..0x203E,
318
+ 0x2074..0x2074, 0x207F..0x207F, 0x2081..0x2084,
319
+ 0x20AC..0x20AC, 0x2103..0x2103, 0x2105..0x2105,
320
+ 0x2109..0x2109, 0x2113..0x2113, 0x2116..0x2116,
321
+ 0x2121..0x2122, 0x2126..0x2126, 0x212B..0x212B,
322
+ 0x2153..0x2154, 0x215B..0x215E, 0x2160..0x216B,
323
+ 0x2170..0x2179, 0x2190..0x2199, 0x21B8..0x21B9,
324
+ 0x21D2..0x21D2, 0x21D4..0x21D4, 0x21E7..0x21E7,
325
+ 0x2200..0x2200, 0x2202..0x2203, 0x2207..0x2208,
326
+ 0x220B..0x220B, 0x220F..0x220F, 0x2211..0x2211,
327
+ 0x2215..0x2215, 0x221A..0x221A, 0x221D..0x2220,
328
+ 0x2223..0x2223, 0x2225..0x2225, 0x2227..0x222C,
329
+ 0x222E..0x222E, 0x2234..0x2237, 0x223C..0x223D,
330
+ 0x2248..0x2248, 0x224C..0x224C, 0x2252..0x2252,
331
+ 0x2260..0x2261, 0x2264..0x2267, 0x226A..0x226B,
332
+ 0x226E..0x226F, 0x2282..0x2283, 0x2286..0x2287,
333
+ 0x2295..0x2295, 0x2299..0x2299, 0x22A5..0x22A5,
334
+ 0x22BF..0x22BF, 0x2312..0x2312, 0x2460..0x24E9,
335
+ 0x24EB..0x254B, 0x2550..0x2573, 0x2580..0x258F,
336
+ 0x2592..0x2595, 0x25A0..0x25A1, 0x25A3..0x25A9,
337
+ 0x25B2..0x25B3, 0x25B6..0x25B7, 0x25BC..0x25BD,
338
+ 0x25C0..0x25C1, 0x25C6..0x25C8, 0x25CB..0x25CB,
339
+ 0x25CE..0x25D1, 0x25E2..0x25E5, 0x25EF..0x25EF,
340
+ 0x2605..0x2606, 0x2609..0x2609, 0x260E..0x260F,
341
+ 0x2614..0x2615, 0x261C..0x261C, 0x261E..0x261E,
342
+ 0x2640..0x2640, 0x2642..0x2642, 0x2660..0x2661,
343
+ 0x2663..0x2665, 0x2667..0x266A, 0x266C..0x266D,
344
+ 0x266F..0x266F, 0x273D..0x273D, 0x2776..0x277F,
345
+ 0xE000..0xF8FF, 0xFE00..0xFE0F, 0xFFFD..0xFFFD,
346
+ 0xE0100..0xE01EF, 0xF0000..0xFFFFD, 0x100000..0x10FFFD,
347
+ ]
348
+
349
+ def wide_character?(character)
350
+ binary_search_ranges(character, WIDE_CHARACTERS) or
351
+ binary_search_ranges(character, AMBIGUOUS)
352
+ end
353
+
354
+ private
355
+ def binary_search_ranges(character, ranges)
356
+ if ranges.size.zero?
357
+ false
358
+ elsif ranges.size == 1
359
+ ranges[0].include?(character)
360
+ else
361
+ half = ranges.size / 2
362
+ range = ranges[half]
363
+ if range.include?(character)
364
+ true
365
+ elsif character < range.begin
366
+ binary_search_ranges(character, ranges[0...half])
367
+ else
368
+ binary_search_ranges(character, ranges[(half + 1)..-1])
369
+ end
370
+ end
371
+ end
372
+ end
373
+
374
+ def initialize(line)
375
+ @line = line
376
+ @characters = @line.unpack("U*")
377
+ end
378
+
379
+ def [](*args)
380
+ result = @characters[*args]
381
+ if result.respond_to?(:pack)
382
+ result.pack("U*")
383
+ else
384
+ result
385
+ end
386
+ end
387
+
388
+ def each(&block)
389
+ @characters.each(&block)
390
+ end
391
+
392
+ def size
393
+ @characters.size
394
+ end
395
+
396
+ def to_s
397
+ @line
398
+ end
399
+
400
+ def compute_width(start, _end)
401
+ width = 0
402
+ start.upto(_end - 1) do |i|
403
+ if self.class.wide_character?(@characters[i])
404
+ width += 2
405
+ else
406
+ width += 1
407
+ end
408
+ end
409
+ width
410
+ end
411
+ end
412
+
413
+ class ReadableDiffer < Differ
414
+ def diff(options={})
415
+ @result = []
416
+ operations.each do |tag, from_start, from_end, to_start, to_end|
417
+ case tag
418
+ when :replace
419
+ diff_lines(from_start, from_end, to_start, to_end)
420
+ when :delete
421
+ tag_deleted(@from[from_start...from_end])
422
+ when :insert
423
+ tag_inserted(@to[to_start...to_end])
424
+ when :equal
425
+ tag_equal(@from[from_start...from_end])
426
+ else
427
+ raise "unknown tag: #{tag}"
428
+ end
429
+ end
430
+ @result
431
+ end
432
+
433
+ private
434
+ def operations
435
+ @operations ||= nil
436
+ if @operations.nil?
437
+ matcher = SequenceMatcher.new(@from, @to)
438
+ @operations = matcher.operations
439
+ end
440
+ @operations
441
+ end
442
+
443
+ def default_ratio
444
+ 0.74
445
+ end
446
+
447
+ def cut_off_ratio
448
+ 0.75
449
+ end
450
+
451
+ def tag(mark, contents)
452
+ contents.each do |content|
453
+ @result << "#{mark}#{content}"
454
+ end
455
+ end
456
+
457
+ def tag_deleted(contents)
458
+ tag("- ", contents)
459
+ end
460
+
461
+ def tag_inserted(contents)
462
+ tag("+ ", contents)
463
+ end
464
+
465
+ def tag_equal(contents)
466
+ tag(" ", contents)
467
+ end
468
+
469
+ def tag_difference(contents)
470
+ tag("? ", contents)
471
+ end
472
+
473
+ def find_diff_line_info(from_start, from_end, to_start, to_end)
474
+ best_ratio = default_ratio
475
+ from_equal_index = to_equal_index = nil
476
+ from_best_index = to_best_index = nil
477
+
478
+ to_start.upto(to_end - 1) do |to_index|
479
+ from_start.upto(from_end - 1) do |from_index|
480
+ if @from[from_index] == @to[to_index]
481
+ from_equal_index ||= from_index
482
+ to_equal_index ||= to_index
483
+ next
484
+ end
485
+
486
+ matcher = SequenceMatcher.new(@from[from_index], @to[to_index],
487
+ &method(:space_character?))
488
+ if matcher.ratio > best_ratio
489
+ best_ratio = matcher.ratio
490
+ from_best_index = from_index
491
+ to_best_index = to_index
492
+ end
493
+ end
494
+ end
495
+
496
+ [best_ratio,
497
+ from_equal_index, to_equal_index,
498
+ from_best_index, to_best_index]
499
+ end
500
+
501
+ def diff_lines(from_start, from_end, to_start, to_end)
502
+ info = find_diff_line_info(from_start, from_end, to_start, to_end)
503
+ best_ratio, from_equal_index, to_equal_index, *info = info
504
+ from_best_index, to_best_index = info
505
+ from_best_index ||= from_start
506
+ to_best_index ||= to_start
507
+
508
+ if best_ratio < cut_off_ratio
509
+ if from_equal_index.nil?
510
+ if to_end - to_start < from_end - from_start
511
+ tag_inserted(@to[to_start...to_end])
512
+ tag_deleted(@from[from_start...from_end])
513
+ else
514
+ tag_deleted(@from[from_start...from_end])
515
+ tag_inserted(@to[to_start...to_end])
516
+ end
517
+ return
518
+ end
519
+ from_best_index = from_equal_index
520
+ to_best_index = to_equal_index
521
+ best_ratio = 1.0
522
+ end
523
+
524
+ _diff_lines(from_start, from_best_index, to_start, to_best_index)
525
+ diff_line(@from[from_best_index], @to[to_best_index])
526
+ _diff_lines(from_best_index + 1, from_end, to_best_index + 1, to_end)
527
+ end
528
+
529
+ def _diff_lines(from_start, from_end, to_start, to_end)
530
+ if from_start < from_end
531
+ if to_start < to_end
532
+ diff_lines(from_start, from_end, to_start, to_end)
533
+ else
534
+ tag_deleted(@from[from_start...from_end])
535
+ end
536
+ else
537
+ tag_inserted(@to[to_start...to_end])
538
+ end
539
+ end
540
+
541
+ def line_operations(from_line, to_line)
542
+ if !from_line.respond_to?(:force_encoding) and $KCODE == "UTF8"
543
+ from_line = UTF8Line.new(from_line)
544
+ to_line = UTF8Line.new(to_line)
545
+ end
546
+ matcher = SequenceMatcher.new(from_line, to_line,
547
+ &method(:space_character?))
548
+ [from_line, to_line, matcher.operations]
549
+ end
550
+
551
+ def compute_width(line, start, _end)
552
+ if line.respond_to?(:encoding) and
553
+ Encoding.compatible?(Encoding::UTF_8, line.encoding)
554
+ utf8_line = line[start..._end].encode(Encoding::UTF_8)
555
+ width = 0
556
+ utf8_line.each_codepoint do |unicode_codepoint|
557
+ if UTF8Line.wide_character?(unicode_codepoint)
558
+ width += 2
559
+ else
560
+ width += 1
561
+ end
562
+ end
563
+ width
564
+ elsif line.is_a?(UTF8Line)
565
+ line.compute_width(start, _end)
566
+ else
567
+ _end - start
568
+ end
569
+ end
570
+
571
+ def diff_line(from_line, to_line)
572
+ from_tags = ""
573
+ to_tags = ""
574
+ from_line, to_line, _operations = line_operations(from_line, to_line)
575
+ _operations.each do |tag, from_start, from_end, to_start, to_end|
576
+ from_width = compute_width(from_line, from_start, from_end)
577
+ to_width = compute_width(to_line, to_start, to_end)
578
+ case tag
579
+ when :replace
580
+ from_tags << "^" * from_width
581
+ to_tags << "^" * to_width
582
+ when :delete
583
+ from_tags << "-" * from_width
584
+ when :insert
585
+ to_tags << "+" * to_width
586
+ when :equal
587
+ from_tags << " " * from_width
588
+ to_tags << " " * to_width
589
+ else
590
+ raise "unknown tag: #{tag}"
591
+ end
592
+ end
593
+ format_diff_point(from_line, to_line, from_tags, to_tags)
594
+ end
595
+
596
+ def format_diff_point(from_line, to_line, from_tags, to_tags)
597
+ common = [n_leading_characters(from_line, ?\t),
598
+ n_leading_characters(to_line, ?\t)].min
599
+ common = [common,
600
+ n_leading_characters(from_tags[0, common], " "[0])].min
601
+ from_tags = from_tags[common..-1].rstrip
602
+ to_tags = to_tags[common..-1].rstrip
603
+
604
+ result = tag_deleted([from_line])
605
+ unless from_tags.empty?
606
+ tag_difference(["#{"\t" * common}#{from_tags}"])
607
+ end
608
+ tag_inserted([to_line])
609
+ unless to_tags.empty?
610
+ tag_difference(["#{"\t" * common}#{to_tags}"])
611
+ end
612
+ end
613
+
614
+ def n_leading_characters(string, character)
615
+ n = 0
616
+ while string[n] == character
617
+ n += 1
618
+ end
619
+ n
620
+ end
621
+
622
+ def space_character?(character)
623
+ [" "[0], "\t"[0]].include?(character)
624
+ end
625
+ end
626
+
627
+ class UnifiedDiffer < Differ
628
+ def diff(options={})
629
+ groups = SequenceMatcher.new(@from, @to).grouped_operations
630
+ return [] if groups.empty?
631
+ return [] if same_content?(groups)
632
+
633
+ show_context = options[:show_context]
634
+ show_context = true if show_context.nil?
635
+ result = ["--- #{options[:from_label]}".rstrip,
636
+ "+++ #{options[:to_label]}".rstrip]
637
+ groups.each do |operations|
638
+ result << format_summary(operations, show_context)
639
+ operations.each do |args|
640
+ operation_tag, from_start, from_end, to_start, to_end = args
641
+ case operation_tag
642
+ when :replace
643
+ result.concat(tag("-", @from[from_start...from_end]))
644
+ result.concat(tag("+", @to[to_start...to_end]))
645
+ when :delete
646
+ result.concat(tag("-", @from[from_start...from_end]))
647
+ when :insert
648
+ result.concat(tag("+", @to[to_start...to_end]))
649
+ when :equal
650
+ result.concat(tag(" ", @from[from_start...from_end]))
651
+ end
652
+ end
653
+ end
654
+ result
655
+ end
656
+
657
+ private
658
+ def same_content?(groups)
659
+ return false if groups.size != 1
660
+ group = groups[0]
661
+ return false if group.size != 1
662
+ tag, from_start, from_end, to_start, to_end = group[0]
663
+
664
+ tag == :equal and [from_start, from_end] == [to_start, to_end]
665
+ end
666
+
667
+ def format_summary(operations, show_context)
668
+ _, first_from_start, _, first_to_start, _ = operations[0]
669
+ _, _, last_from_end, _, last_to_end = operations[-1]
670
+ summary = "@@ -%d,%d +%d,%d @@" % [first_from_start + 1,
671
+ last_from_end - first_from_start,
672
+ first_to_start + 1,
673
+ last_to_end - first_to_start,]
674
+ if show_context
675
+ interesting_line = find_interesting_line(first_from_start,
676
+ first_to_start,
677
+ :define_line?)
678
+ summary << " #{interesting_line}" if interesting_line
679
+ end
680
+ summary
681
+ end
682
+
683
+ def find_interesting_line(from_start, to_start, predicate)
684
+ from_index = from_start
685
+ to_index = to_start
686
+ while from_index >= 0 or to_index >= 0
687
+ [@from[from_index], @to[to_index]].each do |line|
688
+ return line if line and send(predicate, line)
689
+ end
690
+
691
+ from_index -= 1
692
+ to_index -= 1
693
+ end
694
+ nil
695
+ end
696
+
697
+ def define_line?(line)
698
+ /\A(?:[_a-zA-Z$]|\s*(?:class|module|def)\b)/ =~ line
699
+ end
700
+ end
701
+
702
+ module_function
703
+ def need_fold?(diff)
704
+ /^[-+].{79}/ =~ diff
705
+ end
706
+
707
+ def fold(string)
708
+ string.split(/\r?\n/).collect do |line|
709
+ line.gsub(/(.{78})/, "\\1\n")
710
+ end.join("\n")
711
+ end
712
+
713
+ def folded_readable(from, to, options={})
714
+ readable(fold(from), fold(to), options)
715
+ end
716
+
717
+ def readable(from, to, options={})
718
+ diff(ReadableDiffer, from, to, options)
719
+ end
720
+
721
+ def unified(from, to, options={})
722
+ diff(UnifiedDiffer, from, to, options)
723
+ end
724
+
725
+ def diff(differ_class, from, to, options={})
726
+ differ = differ_class.new(from.split(/\r?\n/), to.split(/\r?\n/))
727
+ lines = differ.diff(options)
728
+ if Object.const_defined?(:EncodingError)
729
+ begin
730
+ lines.join("\n")
731
+ rescue EncodingError
732
+ lines.collect {|line| line.force_encoding("ASCII-8BIT")}.join("\n")
733
+ end
734
+ else
735
+ lines.join("\n")
736
+ end
737
+ end
738
+ end
739
+ end
740
+ end