rhodes 3.1.1 → 3.2.0.beta.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2987) hide show
  1. data/CHANGELOG +5 -2
  2. data/doc/alert-api.txt +51 -0
  3. data/doc/build.txt +52 -43
  4. data/doc/configuration.txt +9 -5
  5. data/doc/connect-to-web-services.txt +4 -4
  6. data/doc/device-caps.txt +80 -28
  7. data/doc/extensions.txt +1 -1
  8. data/doc/install.txt +1 -1
  9. data/doc/introduction.txt +1 -1
  10. data/doc/rhodes-api.txt +62 -62
  11. data/doc/rhom.txt +36 -23
  12. data/doc/{rhodes-api/ringtonemanager-api.txt → ringtonemanager-api.txt} +0 -0
  13. data/doc/scanner.txt +507 -0
  14. data/doc/simulator.txt +6 -1
  15. data/doc/synchronization.txt +32 -27
  16. data/doc/{rhodes-api/timer-api.txt → timer-api.txt} +1 -1
  17. data/doc/tutorial.txt +8 -8
  18. data/installer/OLD-README.html +81 -0
  19. data/installer/README.html +6 -4
  20. data/installer/RHOSTUDIO-LICENSE.txt +675 -0
  21. data/installer/rhostudio.nsi +147 -20
  22. data/lib/build/compileRB/compileRB.rb +5 -2
  23. data/lib/build/jake.rb +3 -2
  24. data/lib/extensions/barcode/ext/barcode/platform/android/Rakefile +1 -1
  25. data/lib/extensions/barcode/ext/barcode/platform/bb/Rakefile +1 -1
  26. data/lib/extensions/barcode/ext/barcode/shared/ruby/barcode_wrap.c +391 -111
  27. data/lib/extensions/digest-md5/ext/Rakefile +1 -1
  28. data/lib/extensions/digest-sha1/ext/Rakefile +1 -1
  29. data/lib/extensions/digest/ext/Rakefile +1 -1
  30. data/lib/extensions/fcntl/ext/Rakefile +1 -1
  31. data/lib/extensions/mspec/mspec/expectations/expectations.rb +4 -4
  32. data/lib/extensions/mspec/mspec/expectations/should.rb +9 -8
  33. data/lib/extensions/mspec/mspec/guards.rb +3 -0
  34. data/lib/extensions/mspec/mspec/guards/conflict.rb +7 -2
  35. data/lib/extensions/mspec/mspec/guards/endian.rb +7 -10
  36. data/lib/extensions/mspec/mspec/guards/feature.rb +47 -0
  37. data/lib/extensions/mspec/mspec/guards/guard.rb +18 -13
  38. data/lib/extensions/mspec/mspec/guards/platform.rb +4 -0
  39. data/lib/extensions/mspec/mspec/guards/specified.rb +66 -0
  40. data/lib/extensions/mspec/mspec/guards/user.rb +17 -0
  41. data/lib/extensions/mspec/mspec/helpers.rb +6 -4
  42. data/lib/extensions/mspec/mspec/helpers/const_lookup.rb +2 -1
  43. data/lib/extensions/mspec/mspec/helpers/datetime.rb +30 -0
  44. data/lib/extensions/mspec/mspec/helpers/ducktype.rb +4 -4
  45. data/lib/extensions/mspec/mspec/helpers/encode.rb +21 -0
  46. data/lib/extensions/mspec/mspec/helpers/environment.rb +13 -9
  47. data/lib/extensions/mspec/mspec/helpers/fixture.rb +2 -1
  48. data/lib/extensions/mspec/mspec/helpers/flunk.rb +1 -1
  49. data/lib/extensions/mspec/mspec/helpers/fmode.rb +15 -0
  50. data/lib/extensions/mspec/mspec/helpers/io.rb +21 -2
  51. data/lib/extensions/mspec/mspec/helpers/language_version.rb +13 -3
  52. data/lib/extensions/mspec/mspec/helpers/numeric.rb +89 -0
  53. data/lib/extensions/mspec/mspec/helpers/ruby_exe.rb +138 -123
  54. data/lib/extensions/mspec/mspec/helpers/singleton_class.rb +7 -0
  55. data/lib/extensions/mspec/mspec/helpers/stasy.rb +33 -0
  56. data/lib/extensions/mspec/mspec/helpers/tmp.rb +34 -26
  57. data/lib/extensions/mspec/mspec/matchers.rb +9 -0
  58. data/lib/extensions/mspec/mspec/matchers/base.rb +14 -14
  59. data/lib/extensions/mspec/mspec/matchers/be_computed_by.rb +36 -0
  60. data/lib/extensions/mspec/mspec/matchers/be_computed_by_function.rb +35 -0
  61. data/lib/extensions/mspec/mspec/matchers/be_valid_dns_name.rb +24 -0
  62. data/lib/extensions/mspec/mspec/matchers/equal_utf16.rb +5 -7
  63. data/lib/extensions/mspec/mspec/matchers/have_class_variable.rb +12 -0
  64. data/lib/extensions/mspec/mspec/matchers/have_constant.rb +6 -24
  65. data/lib/extensions/mspec/mspec/matchers/have_data.rb +49 -0
  66. data/lib/extensions/mspec/mspec/matchers/have_instance_method.rb +1 -1
  67. data/lib/extensions/mspec/mspec/matchers/have_instance_variable.rb +12 -0
  68. data/lib/extensions/mspec/mspec/matchers/have_method.rb +1 -1
  69. data/lib/extensions/mspec/mspec/matchers/have_private_instance_method.rb +1 -1
  70. data/lib/extensions/mspec/mspec/matchers/have_private_method.rb +24 -0
  71. data/lib/extensions/mspec/mspec/matchers/have_protected_instance_method.rb +24 -0
  72. data/lib/extensions/mspec/mspec/matchers/have_public_instance_method.rb +1 -1
  73. data/lib/extensions/mspec/mspec/matchers/have_singleton_method.rb +24 -0
  74. data/lib/extensions/mspec/mspec/matchers/output_to_fd.rb +71 -71
  75. data/lib/extensions/mspec/mspec/matchers/raise_error.rb +4 -3
  76. data/lib/extensions/mspec/mspec/matchers/stringsymboladapter.rb +1 -1
  77. data/lib/extensions/mspec/mspec/matchers/variable.rb +28 -0
  78. data/lib/extensions/mspec/mspec/mocks/mock.rb +102 -60
  79. data/lib/extensions/mspec/mspec/mocks/object.rb +5 -1
  80. data/lib/extensions/mspec/mspec/mocks/proxy.rb +41 -6
  81. data/lib/extensions/mspec/mspec/runner.rb +1 -0
  82. data/lib/extensions/mspec/mspec/runner/actions/debug.rb +2 -0
  83. data/lib/extensions/mspec/mspec/runner/context.rb +58 -13
  84. data/lib/extensions/mspec/mspec/runner/exception.rb +7 -6
  85. data/lib/extensions/mspec/mspec/runner/formatters.rb +1 -0
  86. data/lib/extensions/mspec/mspec/runner/formatters/dotted.rb +15 -3
  87. data/lib/extensions/mspec/mspec/runner/formatters/profile.rb +70 -0
  88. data/lib/extensions/mspec/mspec/runner/mspec.rb +32 -19
  89. data/lib/extensions/mspec/mspec/runner/object.rb +4 -0
  90. data/lib/extensions/mspec/mspec/runner/shared.rb +1 -1
  91. data/lib/extensions/mspec/mspec/utils/name_map.rb +8 -1
  92. data/lib/extensions/mspec/mspec/utils/options.rb +25 -8
  93. data/lib/extensions/mspec/mspec/utils/ruby_name.rb +1 -1
  94. data/lib/extensions/mspec/mspec/utils/script.rb +4 -4
  95. data/lib/extensions/mspec/mspec/version.rb +1 -1
  96. data/lib/extensions/nfc/ext/nfc/platform/android/Rakefile +1 -1
  97. data/lib/extensions/nfc/ext/nfc/shared/ruby/nfc_wrap.c +427 -149
  98. data/lib/extensions/set/tsort.rb +242 -0
  99. data/lib/extensions/thread/monitor.rb +277 -0
  100. data/lib/extensions/thread/thread.rb +357 -0
  101. data/lib/framework/base64.rb +4 -4
  102. data/lib/framework/date/format.rb +36 -64
  103. data/lib/framework/dateOrig.rb +40 -23
  104. data/lib/framework/ostruct.rb +14 -8
  105. data/lib/framework/rational.rb +2 -2
  106. data/lib/framework/rbconfig.rb +71 -0
  107. data/lib/framework/rho/rho.rb +46 -43
  108. data/lib/framework/rho/rhocontact.rb +60 -36
  109. data/lib/framework/rho/rhofsconnector.rb +2 -2
  110. data/lib/framework/rho/rhoutils.rb +10 -6
  111. data/lib/framework/rhodes.rb +1 -1
  112. data/lib/framework/rhoframework.rb +0 -13
  113. data/lib/framework/rhom/rhom.rb +64 -1
  114. data/lib/framework/rhom/rhom_object_factory.rb +4 -4
  115. data/lib/framework/rhosystem.rb +27 -25
  116. data/lib/framework/time.rb +48 -16
  117. data/lib/framework/version.rb +1 -1
  118. data/lib/rhodes.rb +1 -1
  119. data/lib/test/framework_test.rb +1 -1
  120. data/platform/android/Rhodes/AndroidManifest.xml +35 -9
  121. data/platform/android/Rhodes/default.properties +1 -1
  122. data/platform/android/Rhodes/jni/Android.mk +5 -4
  123. data/platform/android/Rhodes/jni/include/rhodes.h +65 -3
  124. data/platform/android/Rhodes/jni/include/rhodes/JNIRhodes.h +3 -1
  125. data/platform/android/Rhodes/jni/include/rhodes/jni/com_rhomobile_rhodes_geolocation_GeoLocationImpl.h +12 -2
  126. data/platform/android/Rhodes/jni/src/callbacks.cpp +6 -2
  127. data/platform/android/Rhodes/jni/src/event.cpp +60 -1
  128. data/platform/android/Rhodes/jni/src/geolocation.cpp +42 -13
  129. data/platform/android/Rhodes/jni/src/mapview.cpp +169 -42
  130. data/platform/android/Rhodes/jni/src/phonebook.cpp +90 -74
  131. data/platform/android/Rhodes/jni/src/rhodes.cpp +91 -3
  132. data/platform/android/Rhodes/jni/src/rhodesapp.cpp +1 -1
  133. data/platform/android/Rhodes/res/drawable/callout_a1.png +0 -0
  134. data/platform/android/Rhodes/res/drawable/callout_a2.png +0 -0
  135. data/platform/android/Rhodes/res/drawable/callout_a3.png +0 -0
  136. data/platform/android/Rhodes/res/drawable/callout_b1.png +0 -0
  137. data/platform/android/Rhodes/res/drawable/callout_b2.png +0 -0
  138. data/platform/android/Rhodes/res/drawable/callout_b3.png +0 -0
  139. data/platform/android/Rhodes/res/drawable/callout_c1.png +0 -0
  140. data/platform/android/Rhodes/res/drawable/callout_c2.png +0 -0
  141. data/platform/android/Rhodes/res/drawable/callout_c3.png +0 -0
  142. data/platform/android/Rhodes/res/drawable/callout_d.png +0 -0
  143. data/platform/android/Rhodes/res/drawable/google.png +0 -0
  144. data/platform/android/Rhodes/res/drawable/location.png +0 -0
  145. data/platform/android/Rhodes/src/com/rhomobile/rhodes/AndroidR.java +12 -0
  146. data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesActivity.java +44 -21
  147. data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesService.java +12 -25
  148. data/platform/android/Rhodes/src/com/rhomobile/rhodes/alert/PopupActivity.java +2 -1
  149. data/platform/android/Rhodes/src/com/rhomobile/rhodes/bluetooth/RhoBluetoothDeviceListActivity.java +2 -1
  150. data/platform/android/Rhodes/src/com/rhomobile/rhodes/camera/CameraSettings.java +11 -0
  151. data/platform/android/Rhodes/src/com/rhomobile/rhodes/camera/ImageCapture.java +13 -3
  152. data/platform/android/Rhodes/src/com/rhomobile/rhodes/event/Event.java +7 -0
  153. data/platform/android/Rhodes/src/com/rhomobile/rhodes/event/EventStore.java +127 -37
  154. data/platform/android/Rhodes/src/com/rhomobile/rhodes/geolocation/GeoLocation.java +69 -23
  155. data/platform/android/Rhodes/src/com/rhomobile/rhodes/geolocation/GeoLocationImpl.java +287 -124
  156. data/platform/android/Rhodes/src/com/rhomobile/rhodes/mapview/Annotation.java +6 -0
  157. data/platform/android/Rhodes/src/com/rhomobile/rhodes/mapview/AnnotationsOverlay.java +57 -6
  158. data/platform/android/Rhodes/src/com/rhomobile/rhodes/mapview/Callout.java +296 -0
  159. data/platform/android/Rhodes/src/com/rhomobile/rhodes/mapview/CalloutOverlay.java +143 -0
  160. data/platform/android/Rhodes/src/com/rhomobile/rhodes/mapview/GoogleMapView.java +109 -3
  161. data/platform/android/Rhodes/src/com/rhomobile/rhodes/mapview/MapView.java +53 -5
  162. data/platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/Contact.java +16 -119
  163. data/platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/ContactAccessor.java +4 -1
  164. data/platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/ContactAccessorNew.java +284 -120
  165. data/platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/ContactAccessorOld.java +58 -23
  166. data/platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/Phonebook.java +42 -77
  167. data/platform/android/Rhodes/src/com/rhomobile/rhodes/util/PerformOnUiThread.java +1 -1
  168. data/platform/android/build/RhodesSRC_build.files +2 -0
  169. data/platform/android/build/android.rake +90 -40
  170. data/platform/android/build/android_tools.rb +16 -0
  171. data/platform/android/build/androidcommon.rb +2 -0
  172. data/platform/android/build/librhocommon_build.files +3 -0
  173. data/platform/android/build/libruby_build.files +2 -1
  174. data/platform/bb/RubyVM/src/com/rho/net/AsyncHttp.java +6 -2
  175. data/platform/bb/RubyVM/src/com/rho/sync/ClientRegister.java +3 -2
  176. data/platform/bb/RubyVM/src/com/rho/sync/SyncEngine.java +17 -24
  177. data/platform/bb/RubyVM/src/com/rho/sync/SyncNotify.java +26 -2
  178. data/platform/bb/RubyVM/src/com/rho/sync/SyncProtocol_3.java +6 -1
  179. data/platform/bb/RubyVM/src/com/rho/sync/SyncSource.java +4 -0
  180. data/platform/bb/RubyVM/src/com/rho/sync/SyncThread.java +50 -54
  181. data/platform/bb/build/bb.rake +4 -4
  182. data/platform/bb/rhodes/src/com/rho/rubyext/RhoPhonebook.java +6 -6
  183. data/platform/bb/rhodes/src/rhomobile/camera/Camera.java +7 -0
  184. data/platform/bb/rhodes/src/rhomobile/mapview/MapView.java +10 -0
  185. data/platform/iphone/Classes/AppManager/AppManager.m +29 -0
  186. data/platform/iphone/Classes/Dispatcher/Dispatcher.c +1 -1
  187. data/platform/iphone/Classes/GeoLocation/LocationController.h +2 -1
  188. data/platform/iphone/Classes/GeoLocation/LocationController.m +23 -0
  189. data/platform/iphone/Classes/MapView/MapAnnotation.h +6 -0
  190. data/platform/iphone/Classes/MapView/MapAnnotation.m +5 -1
  191. data/platform/iphone/Classes/MapView/MapViewController.m +48 -4
  192. data/platform/iphone/Classes/MapView/MapViewManager.m +7 -0
  193. data/platform/iphone/Classes/Phonebook/phonebook.m +44 -0
  194. data/platform/iphone/Classes/Rhodes.m +1 -1
  195. data/platform/iphone/Info.plist +1 -1
  196. data/platform/iphone/RhoLib/RhoLib.xcodeproj/project.pbxproj +3 -3
  197. data/platform/iphone/curl/curl.xcodeproj/project.pbxproj +3 -3
  198. data/platform/iphone/rbuild/iphone.rake +3 -1
  199. data/platform/iphone/rhoextlib/rhoextlib.xcodeproj/project.pbxproj +3 -3
  200. data/platform/iphone/rhorubylib/rhorubylib.xcodeproj/project.pbxproj +18 -7
  201. data/platform/iphone/rhorunner.xcodeproj/project.pbxproj +3 -2
  202. data/platform/iphone/rhosynclib/rhosynclib.xcodeproj/project.pbxproj +3 -3
  203. data/platform/linux/files.txt +2 -2
  204. data/platform/linux/target/compiler/rubylinux +0 -0
  205. data/platform/mac/RubyMac/RubyMac.xcodeproj/project.pbxproj +8 -2
  206. data/platform/osx/bin/RhoSimulator/RhoSimulator.app/Contents/MacOS/RhoSimulator +0 -0
  207. data/platform/osx/build/osx.rake +1 -3
  208. data/platform/shared/RhoConnectClient/RhoConnectClient.cpp +65 -26
  209. data/platform/shared/RhoConnectClient/RhoConnectClient.h +5 -1
  210. data/platform/shared/common/Android.mk +3 -0
  211. data/platform/shared/common/AppMenu.cpp +2 -2
  212. data/platform/shared/common/RhoPort.h +2 -2
  213. data/platform/shared/common/RhodesApp.cpp +20 -2
  214. data/platform/shared/common/RhodesApp.h +1 -0
  215. data/platform/shared/common/ThreadQueue.cpp +5 -0
  216. data/platform/shared/common/ThreadQueue.h +1 -0
  217. data/platform/shared/common/map/BaseMapEngine.cpp +1393 -0
  218. data/platform/shared/common/map/BaseMapEngine.h +368 -0
  219. data/platform/shared/common/map/ESRIMapEngine.cpp +23 -896
  220. data/platform/shared/common/map/ESRIMapEngine.h +11 -243
  221. data/platform/shared/common/map/GeocodingMapEngine.cpp +200 -0
  222. data/platform/shared/common/map/GeocodingMapEngine.h +86 -0
  223. data/platform/shared/common/map/GoogleMapEngine.cpp +70 -135
  224. data/platform/shared/common/map/GoogleMapEngine.h +21 -38
  225. data/platform/shared/common/map/MapEngine.cpp +145 -24
  226. data/platform/shared/common/map/MapEngine.h +156 -54
  227. data/platform/shared/common/map/OSMMapEngine.cpp +94 -0
  228. data/platform/shared/common/map/OSMMapEngine.h +65 -0
  229. data/platform/shared/curl/lib/config-symbian.h +3 -1
  230. data/platform/shared/db/DBAdapter.cpp +30 -4
  231. data/platform/shared/db/DBAdapter.h +24 -1
  232. data/platform/shared/logging/RhoLog.h +26 -0
  233. data/platform/shared/net/AsyncHttp.cpp +6 -2
  234. data/platform/shared/net/CompatWince.cpp +1 -0
  235. data/platform/shared/net/HttpServer.cpp +5 -2
  236. data/platform/shared/qt/rhodes/RhoSimulator.h +1 -1
  237. data/platform/shared/qt/rhodes/impl/GeoLocationImpl.cpp +6 -0
  238. data/platform/shared/qt/rhodes/impl/MapViewImpl.cpp +4 -0
  239. data/platform/shared/qt/rhodes/impl/PhonebookImpl.cpp +12 -0
  240. data/platform/shared/qt/rhodes/impl/SystemImpl.cpp +26 -0
  241. data/platform/shared/qt/rholib/rholib.pro +14 -19
  242. data/platform/shared/qt/rubylib/rubylib.pro +7 -4
  243. data/platform/shared/ruby/Android.mk +3 -2
  244. data/platform/shared/ruby/GPL +340 -0
  245. data/platform/shared/ruby/android/ruby/config.h +283 -0
  246. data/platform/shared/ruby/array.c +1318 -595
  247. data/platform/shared/ruby/bignum.c +1092 -278
  248. data/platform/shared/ruby/class.c +689 -201
  249. data/platform/shared/ruby/compar.c +22 -20
  250. data/platform/shared/ruby/compile.c +327 -249
  251. data/platform/shared/ruby/complex.c +593 -138
  252. data/platform/shared/ruby/cont.c +213 -95
  253. data/platform/shared/ruby/debug.c +15 -10
  254. data/platform/shared/ruby/debug.h +1 -1
  255. data/platform/shared/ruby/dir.c +247 -104
  256. data/platform/shared/ruby/dln.c +102 -309
  257. data/platform/shared/ruby/dln.h +3 -3
  258. data/platform/shared/ruby/dln_find.c +305 -0
  259. data/platform/shared/ruby/dmydln.c +7 -2
  260. data/platform/shared/ruby/dmyversion.c +2 -0
  261. data/platform/shared/ruby/enc/Makefile.in +1 -0
  262. data/platform/shared/ruby/enc/big5.c +142 -5
  263. data/platform/shared/ruby/enc/depend +1 -0
  264. data/platform/shared/ruby/enc/emacs_mule.c +1 -1
  265. data/platform/shared/ruby/enc/encdb.c +3 -1
  266. data/platform/shared/ruby/enc/euc_tw.c +1 -10
  267. data/platform/shared/ruby/enc/iso_2022_jp.h +36 -0
  268. data/platform/shared/ruby/enc/iso_8859_5.c +1 -1
  269. data/platform/shared/ruby/enc/koi8_r.c +1 -1
  270. data/platform/shared/ruby/enc/koi8_u.c +1 -1
  271. data/platform/shared/ruby/enc/prelude.rb +1 -1
  272. data/platform/shared/ruby/enc/shift_jis.c +3 -3
  273. data/platform/shared/ruby/enc/trans/big5-hkscs-tbl.rb +18385 -0
  274. data/platform/shared/ruby/enc/trans/big5-uao-tbl.rb +19784 -0
  275. data/platform/shared/ruby/enc/trans/big5.c +53810 -12566
  276. data/platform/shared/ruby/enc/trans/big5.trans +10 -1
  277. data/platform/shared/ruby/enc/trans/chinese.c +113 -71
  278. data/platform/shared/ruby/enc/trans/chinese.trans +6 -4
  279. data/platform/shared/ruby/enc/trans/escape.c +3 -3
  280. data/platform/shared/ruby/enc/trans/escape.trans +3 -3
  281. data/platform/shared/ruby/enc/trans/gb18030-tbl.rb +32 -0
  282. data/platform/shared/ruby/enc/trans/gb18030.c +17431 -91305
  283. data/platform/shared/ruby/enc/trans/gb18030.trans +105 -5
  284. data/platform/shared/ruby/enc/trans/gbk.c +13 -13
  285. data/platform/shared/ruby/enc/trans/iso2022.c +374 -13
  286. data/platform/shared/ruby/enc/trans/iso2022.trans +313 -0
  287. data/platform/shared/ruby/enc/trans/japanese.c +26 -24
  288. data/platform/shared/ruby/enc/trans/japanese_euc.c +30 -30
  289. data/platform/shared/ruby/enc/trans/japanese_sjis.c +282 -276
  290. data/platform/shared/ruby/enc/trans/korean.c +182 -159
  291. data/platform/shared/ruby/enc/trans/newline.c +18 -14
  292. data/platform/shared/ruby/enc/trans/newline.trans +15 -11
  293. data/platform/shared/ruby/enc/trans/single_byte.c +497 -394
  294. data/platform/shared/ruby/enc/trans/single_byte.trans +1 -2
  295. data/platform/shared/ruby/enc/trans/transdb.c +1 -1
  296. data/platform/shared/ruby/enc/trans/utf8_mac-tbl.rb +945 -0
  297. data/platform/shared/ruby/enc/trans/utf8_mac.c +10853 -0
  298. data/platform/shared/ruby/enc/trans/utf8_mac.trans +242 -0
  299. data/platform/shared/ruby/enc/trans/utf_16_32.c +89 -86
  300. data/platform/shared/ruby/enc/unicode.c +30 -8779
  301. data/platform/shared/ruby/enc/unicode/name2ctype.h +17985 -0
  302. data/platform/shared/ruby/enc/unicode/name2ctype.h.blt +17985 -0
  303. data/platform/shared/ruby/enc/unicode/name2ctype.kwd +16711 -0
  304. data/platform/shared/ruby/enc/unicode/name2ctype.src +16711 -0
  305. data/platform/shared/ruby/enc/utf_16be.c +3 -4
  306. data/platform/shared/ruby/enc/utf_16le.c +3 -4
  307. data/platform/shared/ruby/enc/utf_8.c +3 -1
  308. data/platform/shared/ruby/enc/x_emoji.h +26 -0
  309. data/platform/shared/ruby/encdb.h +18 -2
  310. data/platform/shared/ruby/encoding.c +248 -111
  311. data/platform/shared/ruby/enum.c +1006 -200
  312. data/platform/shared/ruby/enumerator.c +555 -254
  313. data/platform/shared/ruby/error.c +478 -79
  314. data/platform/shared/ruby/eval.c +186 -94
  315. data/platform/shared/ruby/eval_error.c +16 -10
  316. data/platform/shared/ruby/eval_intern.h +24 -9
  317. data/platform/shared/ruby/eval_jump.c +2 -1
  318. data/platform/shared/ruby/ext/geolocation/geolocation.i +10 -1
  319. data/platform/shared/ruby/ext/geolocation/geolocation_wrap.c +49 -6
  320. data/platform/shared/ruby/ext/mapview/mapview.i +6 -0
  321. data/platform/shared/ruby/ext/mapview/mapview_wrap.c +279 -0
  322. data/platform/shared/ruby/ext/nativebar/nativebar_wrap.c +402 -124
  323. data/platform/shared/ruby/ext/phonebook/phonebook.i +41 -7
  324. data/platform/shared/ruby/ext/phonebook/phonebook_wrap.c +216 -47
  325. data/platform/shared/ruby/ext/rho/rhoruby.c +9 -5
  326. data/platform/shared/ruby/ext/rho/rhosupport.c +1 -1
  327. data/platform/shared/ruby/ext/socket/getaddrinfo.c +4 -0
  328. data/platform/shared/ruby/ext/sqlite3_api/sqlite3_api_wrap.c +2 -2
  329. data/platform/shared/ruby/ext/syncengine/syncengine.i +14 -5
  330. data/platform/shared/ruby/ext/syncengine/syncengine_wrap.c +55 -7
  331. data/platform/shared/ruby/ext/system/system.i +7 -2
  332. data/platform/shared/ruby/ext/system/system_wrap.c +28 -2
  333. data/platform/shared/ruby/file.c +1243 -683
  334. data/platform/shared/ruby/gc.c +509 -217
  335. data/platform/shared/ruby/gc.h +7 -5
  336. data/platform/shared/ruby/generated/insns.inc +11 -9
  337. data/platform/shared/ruby/generated/insns_info.inc +69 -62
  338. data/platform/shared/ruby/generated/known_errors.inc +360 -245
  339. data/platform/shared/ruby/generated/lex.c +49 -47
  340. data/platform/shared/ruby/generated/node_name.inc +0 -8
  341. data/platform/shared/ruby/generated/optinsn.inc +1 -1
  342. data/platform/shared/ruby/generated/parse.c +4480 -4162
  343. data/platform/shared/ruby/generated/parse.h +13 -14
  344. data/platform/shared/ruby/generated/vm.inc +485 -269
  345. data/platform/shared/ruby/generated/vmtc.inc +2 -1
  346. data/platform/shared/ruby/golf_prelude.c +21 -4
  347. data/platform/shared/ruby/goruby.c +1 -1
  348. data/platform/shared/ruby/hash.c +429 -180
  349. data/platform/shared/ruby/ia64.s +42 -0
  350. data/platform/shared/ruby/id.c +13 -14
  351. data/platform/shared/ruby/id.h +25 -18
  352. data/platform/shared/ruby/include/ruby.h +1 -1
  353. data/platform/shared/ruby/include/ruby/backward/rubysig.h +2 -2
  354. data/platform/shared/ruby/include/ruby/defines.h +50 -29
  355. data/platform/shared/ruby/include/ruby/encoding.h +40 -14
  356. data/platform/shared/ruby/include/ruby/intern.h +81 -24
  357. data/platform/shared/ruby/include/ruby/io.h +4 -4
  358. data/platform/shared/ruby/include/ruby/missing.h +28 -18
  359. data/platform/shared/ruby/include/ruby/oniguruma.h +22 -7
  360. data/platform/shared/ruby/include/ruby/re.h +4 -4
  361. data/platform/shared/ruby/include/ruby/ruby.h +294 -76
  362. data/platform/shared/ruby/include/ruby/st.h +27 -9
  363. data/platform/shared/ruby/include/ruby/util.h +14 -6
  364. data/platform/shared/ruby/include/ruby/version.h +61 -0
  365. data/platform/shared/ruby/include/ruby/vm.h +21 -1
  366. data/platform/shared/ruby/include/ruby/win32.h +223 -63
  367. data/platform/shared/ruby/inits.c +1 -1
  368. data/platform/shared/ruby/insns.def +236 -111
  369. data/platform/shared/ruby/io.c +2188 -774
  370. data/platform/shared/ruby/iphone/ruby/config.h +75 -45
  371. data/platform/shared/ruby/iseq.c +261 -104
  372. data/platform/shared/ruby/iseq.h +13 -11
  373. data/platform/shared/ruby/linux/ruby/config.h +95 -100
  374. data/platform/shared/ruby/load.c +115 -81
  375. data/platform/shared/ruby/main.c +122 -0
  376. data/platform/shared/ruby/marshal.c +418 -230
  377. data/platform/shared/ruby/math.c +219 -152
  378. data/platform/shared/ruby/method.h +103 -0
  379. data/platform/shared/ruby/miniprelude.c +35 -23
  380. data/platform/shared/ruby/missing/acosh.c +4 -4
  381. data/platform/shared/ruby/missing/alloca.c +4 -1
  382. data/platform/shared/ruby/missing/close.c +67 -0
  383. data/platform/shared/ruby/missing/crypt.c +9 -9
  384. data/platform/shared/ruby/missing/dup2.c +0 -1
  385. data/platform/shared/ruby/missing/langinfo.c +4 -3
  386. data/platform/shared/ruby/missing/signbit.c +19 -0
  387. data/platform/shared/ruby/newline.c +18 -14
  388. data/platform/shared/ruby/node.c +921 -0
  389. data/platform/shared/ruby/node.h +14 -47
  390. data/platform/shared/ruby/numeric.c +544 -302
  391. data/platform/shared/ruby/object.c +430 -426
  392. data/platform/shared/ruby/pack.c +677 -628
  393. data/platform/shared/ruby/parse.y +847 -523
  394. data/platform/shared/ruby/proc.c +631 -341
  395. data/platform/shared/ruby/process.c +811 -421
  396. data/platform/shared/ruby/random.c +858 -177
  397. data/platform/shared/ruby/range.c +234 -133
  398. data/platform/shared/ruby/rational.c +936 -173
  399. data/platform/shared/ruby/re.c +351 -192
  400. data/platform/shared/ruby/regcomp.c +125 -138
  401. data/platform/shared/ruby/regenc.c +26 -25
  402. data/platform/shared/ruby/regenc.h +7 -3
  403. data/platform/shared/ruby/regerror.c +44 -34
  404. data/platform/shared/ruby/regexec.c +31 -38
  405. data/platform/shared/ruby/regint.h +16 -17
  406. data/platform/shared/ruby/regparse.c +266 -136
  407. data/platform/shared/ruby/regparse.h +4 -1
  408. data/platform/shared/ruby/regsyntax.c +2 -2
  409. data/platform/shared/ruby/revision.h +0 -1
  410. data/platform/shared/ruby/ruby.c +276 -248
  411. data/platform/shared/ruby/safe.c +14 -8
  412. data/platform/shared/ruby/signal.c +61 -68
  413. data/platform/shared/ruby/sprintf.c +77 -38
  414. data/platform/shared/ruby/st.c +437 -61
  415. data/platform/shared/ruby/strftime.c +252 -110
  416. data/platform/shared/ruby/string.c +1361 -1009
  417. data/platform/shared/ruby/struct.c +200 -133
  418. data/platform/shared/ruby/symbian/ruby/config.h +56 -24
  419. data/platform/shared/ruby/thread.c +732 -247
  420. data/platform/shared/ruby/thread_pthread.c +122 -69
  421. data/platform/shared/ruby/thread_pthread.h +4 -1
  422. data/platform/shared/ruby/thread_win32.c +73 -41
  423. data/platform/shared/ruby/thread_win32.h +1 -1
  424. data/platform/shared/ruby/time.c +3271 -919
  425. data/platform/shared/ruby/timev.h +21 -0
  426. data/platform/shared/ruby/transcode.c +289 -95
  427. data/platform/shared/ruby/transcode_data.h +17 -14
  428. data/platform/shared/ruby/transdb.h +32 -0
  429. data/platform/shared/ruby/util.c +330 -123
  430. data/platform/shared/ruby/variable.c +294 -176
  431. data/platform/shared/ruby/version.c +71 -2
  432. data/platform/shared/ruby/version.h +22 -19
  433. data/platform/shared/ruby/vm.c +368 -203
  434. data/platform/shared/ruby/vm_core.h +110 -66
  435. data/platform/shared/ruby/vm_dump.c +51 -44
  436. data/platform/shared/ruby/vm_eval.c +547 -230
  437. data/platform/shared/ruby/vm_exec.c +3 -3
  438. data/platform/shared/ruby/vm_insnhelper.c +397 -200
  439. data/platform/shared/ruby/vm_insnhelper.h +27 -14
  440. data/platform/shared/ruby/vm_method.c +493 -296
  441. data/platform/shared/ruby/vm_opts.h +1 -1
  442. data/platform/shared/ruby/{missing/vsnprintf.c → vsnprintf.c} +114 -74
  443. data/platform/shared/ruby/win32/dir.h +5 -4
  444. data/platform/shared/ruby/win32/miniprelude.c +34 -21
  445. data/platform/shared/ruby/win32/newline.c +18 -14
  446. data/platform/shared/ruby/win32/ruby/config.h +58 -20
  447. data/platform/shared/ruby/win32/win32.c +1398 -475
  448. data/platform/shared/ruby/wince/direct.c +17 -1
  449. data/platform/shared/ruby/wince/io_wce.c +16 -8
  450. data/platform/shared/ruby/wince/ruby/config.h +54 -24
  451. data/platform/shared/ruby/wince/sys/stat.c +81 -0
  452. data/platform/shared/ruby/wince/time_wce.c +47 -4
  453. data/platform/shared/ruby/wince/wince.h +16 -0
  454. data/platform/shared/rubyext/Android.mk +1 -1
  455. data/platform/shared/rubyext/GeoLocation.cpp +93 -48
  456. data/platform/shared/rubyext/GeoLocation.h +9 -4
  457. data/platform/shared/rubyext/System.cpp +6 -0
  458. data/platform/shared/sync/ClientRegister.cpp +1 -1
  459. data/platform/shared/sync/SyncEngine.cpp +15 -55
  460. data/platform/shared/sync/SyncEngine.h +4 -4
  461. data/platform/shared/sync/SyncProtocol_3.h +6 -1
  462. data/platform/shared/sync/SyncSource.cpp +6 -1
  463. data/platform/shared/sync/SyncSource.h +1 -0
  464. data/platform/shared/sync/SyncThread.cpp +20 -9
  465. data/platform/shared/sync/SyncThread.h +14 -9
  466. data/platform/shared/wtl80/include/atlapp.h +2 -0
  467. data/platform/symbian/build/symbian.rake +56 -5
  468. data/platform/symbian/curl/curl.pro +4 -0
  469. data/platform/symbian/rhodes/rhodes.pro +16 -4
  470. data/platform/symbian/rhodes/src/phonebook/ruby_phonebook.cpp +10 -0
  471. data/platform/symbian/rholib/rholib.pro +4 -0
  472. data/platform/symbian/rubylib/rubylib.pro +6 -2
  473. data/platform/symbian/sqlite3/sqlite3.pro +2 -1
  474. data/platform/symbian/syncengine/syncengine.pro +4 -0
  475. data/platform/win32/RhoSimulator/RhoSimulator.exe +0 -0
  476. data/platform/wm/RhoLib/RhoLib.vcproj +333 -0
  477. data/platform/wm/build/build_inf.js +1 -0
  478. data/platform/wm/build/wm.rake +43 -17
  479. data/platform/wm/rhodes.sln +140 -76
  480. data/platform/wm/rhodes/Alert.cpp +1 -1
  481. data/platform/wm/rhodes/IBrowserEngine.cpp +10 -0
  482. data/platform/wm/rhodes/IBrowserEngine.h +24 -0
  483. data/platform/wm/rhodes/IEBrowserEngine.cpp +179 -0
  484. data/platform/wm/rhodes/IEBrowserEngine.h +36 -0
  485. data/platform/wm/rhodes/MainWindow.cpp +176 -178
  486. data/platform/wm/rhodes/MainWindow.h +78 -20
  487. data/platform/wm/rhodes/MapView/Graphics.h +10 -0
  488. data/platform/wm/rhodes/MapView/MapViewManager.cpp +7 -0
  489. data/platform/wm/rhodes/OutlookApp.cpp +3 -3
  490. data/platform/wm/rhodes/RhoWebKitBrowser.cpp +10 -0
  491. data/platform/wm/rhodes/Rhodes.cpp +499 -443
  492. data/platform/wm/rhodes/bluetooth/Bluetooth.cpp +1 -4
  493. data/platform/wm/rhodes/bluetooth/Bluetooth.h +1 -1
  494. data/platform/wm/rhodes/camera/Camera.cpp +3 -6
  495. data/platform/wm/rhodes/phonebook/phonebook.cpp +20 -11
  496. data/platform/wm/rhodes/phonebook/phonebook.h +4 -2
  497. data/platform/wm/rhodes/rho/net/NetRequestImpl.cpp +3 -3
  498. data/platform/wm/rhodes/rho/rubyext/GeoLocationImpl.cpp +12 -7
  499. data/platform/wm/rhodes/rho/rubyext/GeoLocationImpl.h +1 -1
  500. data/platform/wm/rhodes/rho/rubyext/SystemImpl.cpp +24 -6
  501. data/platform/wm/rhodes/rho/rubyext/WebView.cpp +0 -32
  502. data/platform/wm/rhodes/rho/rubyext/calendar.cpp +1 -1
  503. data/platform/wm/rhodes/rhodes.vcproj +1792 -129
  504. data/platform/wm/rhodes/rhoelements/RhoWKBrowserEngine.cpp +384 -0
  505. data/platform/wm/rhodes/rhoelements/RhoWKBrowserEngine.h +41 -0
  506. data/platform/wm/rhodes/signature/Signature.cpp +4 -8
  507. data/platform/wm/rhodes/signature/Signature.h +1 -1
  508. data/platform/wm/rhodes/simulator/MainWindowQt.cpp +1 -0
  509. data/platform/wm/rhodes/simulator/MainWindowQt.h +2 -0
  510. data/platform/wm/rhodes/stdafx.h +17 -5
  511. data/platform/wm/rhoelements.sln +447 -0
  512. data/platform/wm/rubylib/rubylib.vcproj +355 -10
  513. data/platform/wm/sqlite3/sqlite3.vcproj +305 -0
  514. data/platform/wm/syncengine/syncengine.vcproj +309 -0
  515. data/platform/wp7/IronRuby/bin/Silverlight3Release/IronRuby.Libraries.dll +0 -0
  516. data/platform/wp7/IronRuby/bin/Silverlight3Release/IronRuby.dll +0 -0
  517. data/platform/wp7/RhoAppRunner/Program.cs +2 -2
  518. data/platform/wp7/RhoRubyExtGen/RhoCamera.cs +59 -0
  519. data/platform/wp7/RhoRubyExtGen/RhoNativeBar.cs +3 -20
  520. data/platform/wp7/RhoRubyExtGen/RhoRubyExtGen.csproj +1 -0
  521. data/platform/wp7/RhoRubyLib/Initializers.Generated.cs +6 -9
  522. data/platform/wp7/RhoRubyLib/RhoRubyLib.csproj +2 -1
  523. data/platform/wp7/RhoRubyLib/rubyext/RhoCamera.cs +130 -0
  524. data/platform/wp7/RhoRubyLib/rubyext/RhoNativeBar.cs +5 -73
  525. data/res/build-tools/RhoRuby.exe +0 -0
  526. data/res/build-tools/RubyMac +0 -0
  527. data/res/build-tools/detool.exe +0 -0
  528. data/res/build-tools/rubylinux +0 -0
  529. data/res/generators/rhogen.rb +5 -0
  530. data/res/generators/templates/application/app/helpers/browser_helper.rb +4 -0
  531. data/res/generators/templates/application/app/index.erb +6 -2
  532. data/res/generators/templates/application/app/layout.erb +8 -5
  533. data/res/generators/templates/application/build.yml +3 -1
  534. data/res/generators/templates/application/gitignore +7 -0
  535. data/res/generators/templates/application/public/css/android.css +366 -5
  536. data/res/generators/templates/application/public/css/blackberry.css +16 -5
  537. data/res/generators/templates/application/public/css/iphone.css +349 -5
  538. data/res/generators/templates/application/public/css/windows_mobile.css +105 -0
  539. data/res/generators/templates/application/public/jqmobile/{jquery.mobile-1.0b2.css → jquery.mobile-1.0b3.css} +64 -5
  540. data/res/generators/templates/application/public/jqmobile/{jquery.mobile-1.0b2.js → jquery.mobile-1.0b3.js} +1125 -727
  541. data/res/generators/templates/application/public/jqmobile/jquery.mobile-1.0b3.min.css +8 -0
  542. data/res/generators/templates/application/public/jqmobile/jquery.mobile-1.0b3.min.js +169 -0
  543. data/res/generators/templates/application/public/jquery/{jquery-1.6.2.js → jquery-1.6.3.js} +226 -163
  544. data/res/generators/templates/application/public/jquery/jquery-1.6.3.min.js +4 -0
  545. data/res/generators/templates/application/public/js/wp7.js +5 -0
  546. data/res/generators/templates/model/edit.erb +6 -2
  547. data/res/generators/templates/model/index.erb +8 -4
  548. data/res/generators/templates/model/new.erb +3 -1
  549. data/res/generators/templates/model/show.erb +6 -2
  550. data/rhobuild.yml.example +0 -1
  551. data/rhodes.gemspec +1 -1
  552. data/spec/framework_spec/app/spec/core/argf/argf_spec.rb +1 -1
  553. data/spec/framework_spec/app/spec/core/argf/binmode_spec.rb +19 -7
  554. data/spec/framework_spec/app/spec/core/argf/bytes_spec.rb +3 -3
  555. data/spec/framework_spec/app/spec/core/argf/chars_spec.rb +3 -3
  556. data/spec/framework_spec/app/spec/core/argf/close_spec.rb +31 -5
  557. data/spec/framework_spec/app/spec/core/argf/closed_spec.rb +6 -5
  558. data/spec/framework_spec/app/spec/core/argf/each_byte_spec.rb +2 -2
  559. data/spec/framework_spec/app/spec/core/argf/each_char_spec.rb +3 -3
  560. data/spec/framework_spec/app/spec/core/argf/each_line_spec.rb +2 -2
  561. data/spec/framework_spec/app/spec/core/argf/each_spec.rb +2 -2
  562. data/spec/framework_spec/app/spec/core/argf/eof_spec.rb +2 -2
  563. data/spec/framework_spec/app/spec/core/argf/file_spec.rb +4 -4
  564. data/spec/framework_spec/app/spec/core/argf/filename_spec.rb +2 -2
  565. data/spec/framework_spec/app/spec/core/argf/fileno_spec.rb +2 -2
  566. data/spec/framework_spec/app/spec/core/argf/getc_spec.rb +5 -5
  567. data/spec/framework_spec/app/spec/core/argf/gets_spec.rb +5 -5
  568. data/spec/framework_spec/app/spec/core/argf/lineno_spec.rb +24 -18
  569. data/spec/framework_spec/app/spec/core/argf/path_spec.rb +2 -2
  570. data/spec/framework_spec/app/spec/core/argf/pos_spec.rb +5 -5
  571. data/spec/framework_spec/app/spec/core/argf/read_spec.rb +19 -20
  572. data/spec/framework_spec/app/spec/core/argf/readchar_spec.rb +5 -5
  573. data/spec/framework_spec/app/spec/core/argf/readline_spec.rb +5 -5
  574. data/spec/framework_spec/app/spec/core/argf/readlines_spec.rb +2 -2
  575. data/spec/framework_spec/app/spec/core/argf/rewind_spec.rb +18 -4
  576. data/spec/framework_spec/app/spec/core/argf/seek_spec.rb +6 -4
  577. data/spec/framework_spec/app/spec/core/argf/shared/each_byte.rb +3 -3
  578. data/spec/framework_spec/app/spec/core/argf/shared/each_char.rb +4 -4
  579. data/spec/framework_spec/app/spec/core/argf/shared/each_line.rb +9 -3
  580. data/spec/framework_spec/app/spec/core/argf/shared/eof.rb +3 -3
  581. data/spec/framework_spec/app/spec/core/argf/shared/filename.rb +3 -3
  582. data/spec/framework_spec/app/spec/core/argf/shared/fileno.rb +3 -3
  583. data/spec/framework_spec/app/spec/core/argf/shared/getc.rb +3 -3
  584. data/spec/framework_spec/app/spec/core/argf/shared/gets.rb +41 -43
  585. data/spec/framework_spec/app/spec/core/argf/shared/pos.rb +3 -3
  586. data/spec/framework_spec/app/spec/core/argf/shared/readlines.rb +2 -2
  587. data/spec/framework_spec/app/spec/core/argf/skip_spec.rb +12 -4
  588. data/spec/framework_spec/app/spec/core/argf/tell_spec.rb +2 -2
  589. data/spec/framework_spec/app/spec/core/argf/to_a_spec.rb +2 -2
  590. data/spec/framework_spec/app/spec/core/argf/to_i_spec.rb +2 -2
  591. data/spec/framework_spec/app/spec/core/argf/to_io_spec.rb +4 -4
  592. data/spec/framework_spec/app/spec/core/argf/to_s_spec.rb +4 -4
  593. data/spec/framework_spec/app/spec/core/array/allocate_spec.rb +3 -3
  594. data/spec/framework_spec/app/spec/core/array/append_spec.rb +2 -2
  595. data/spec/framework_spec/app/spec/core/array/array_spec.rb +1 -1
  596. data/spec/framework_spec/app/spec/core/array/assoc_spec.rb +5 -5
  597. data/spec/framework_spec/app/spec/core/array/at_spec.rb +5 -5
  598. data/spec/framework_spec/app/spec/core/array/choice_spec.rb +2 -2
  599. data/spec/framework_spec/app/spec/core/array/clear_spec.rb +3 -3
  600. data/spec/framework_spec/app/spec/core/array/clone_spec.rb +3 -3
  601. data/spec/framework_spec/app/spec/core/array/collect_spec.rb +3 -3
  602. data/spec/framework_spec/app/spec/core/array/combination_spec.rb +38 -13
  603. data/spec/framework_spec/app/spec/core/array/compact_spec.rb +33 -11
  604. data/spec/framework_spec/app/spec/core/array/comparison_spec.rb +11 -5
  605. data/spec/framework_spec/app/spec/core/array/concat_spec.rb +13 -13
  606. data/spec/framework_spec/app/spec/core/array/constructor_spec.rb +4 -4
  607. data/spec/framework_spec/app/spec/core/array/count_spec.rb +7 -0
  608. data/spec/framework_spec/app/spec/core/array/cycle_spec.rb +82 -14
  609. data/spec/framework_spec/app/spec/core/array/delete_at_spec.rb +2 -2
  610. data/spec/framework_spec/app/spec/core/array/delete_if_spec.rb +16 -7
  611. data/spec/framework_spec/app/spec/core/array/delete_spec.rb +8 -2
  612. data/spec/framework_spec/app/spec/core/array/drop_spec.rb +7 -0
  613. data/spec/framework_spec/app/spec/core/array/drop_while_spec.rb +7 -0
  614. data/spec/framework_spec/app/spec/core/array/dup_spec.rb +3 -3
  615. data/spec/framework_spec/app/spec/core/array/each_index_spec.rb +29 -30
  616. data/spec/framework_spec/app/spec/core/array/each_spec.rb +8 -33
  617. data/spec/framework_spec/app/spec/core/array/element_reference_spec.rb +30 -6
  618. data/spec/framework_spec/app/spec/core/array/element_set_spec.rb +19 -2
  619. data/spec/framework_spec/app/spec/core/array/empty_spec.rb +2 -2
  620. data/spec/framework_spec/app/spec/core/array/eql_spec.rb +3 -3
  621. data/spec/framework_spec/app/spec/core/array/equal_value_spec.rb +34 -3
  622. data/spec/framework_spec/app/spec/core/array/fetch_spec.rb +4 -4
  623. data/spec/framework_spec/app/spec/core/array/fill_spec.rb +27 -12
  624. data/spec/framework_spec/app/spec/core/array/find_index_spec.rb +7 -0
  625. data/spec/framework_spec/app/spec/core/array/first_spec.rb +13 -13
  626. data/spec/framework_spec/app/spec/core/array/fixtures/classes.rb +447 -6
  627. data/spec/framework_spec/app/spec/core/array/flatten_spec.rb +42 -19
  628. data/spec/framework_spec/app/spec/core/array/frozen_spec.rb +17 -15
  629. data/spec/framework_spec/app/spec/core/array/hash_spec.rb +22 -3
  630. data/spec/framework_spec/app/spec/core/array/include_spec.rb +3 -3
  631. data/spec/framework_spec/app/spec/core/array/index_spec.rb +1 -1
  632. data/spec/framework_spec/app/spec/core/array/indexes_spec.rb +3 -3
  633. data/spec/framework_spec/app/spec/core/array/indices_spec.rb +3 -3
  634. data/spec/framework_spec/app/spec/core/array/initialize_copy_spec.rb +3 -3
  635. data/spec/framework_spec/app/spec/core/array/initialize_spec.rb +2 -2
  636. data/spec/framework_spec/app/spec/core/array/insert_spec.rb +13 -11
  637. data/spec/framework_spec/app/spec/core/array/inspect_spec.rb +33 -3
  638. data/spec/framework_spec/app/spec/core/array/intersection_spec.rb +13 -13
  639. data/spec/framework_spec/app/spec/core/array/join_spec.rb +24 -4
  640. data/spec/framework_spec/app/spec/core/array/keep_if_spec.rb +12 -0
  641. data/spec/framework_spec/app/spec/core/array/last_spec.rb +11 -11
  642. data/spec/framework_spec/app/spec/core/array/length_spec.rb +3 -3
  643. data/spec/framework_spec/app/spec/core/array/map_spec.rb +3 -3
  644. data/spec/framework_spec/app/spec/core/array/minus_spec.rb +9 -9
  645. data/spec/framework_spec/app/spec/core/array/multiply_spec.rb +23 -10
  646. data/spec/framework_spec/app/spec/core/array/new_spec.rb +4 -4
  647. data/spec/framework_spec/app/spec/core/array/nitems_spec.rb +3 -3
  648. data/spec/framework_spec/app/spec/core/array/pack/a_spec.rb +59 -0
  649. data/spec/framework_spec/app/spec/core/array/pack/at_spec.rb +30 -0
  650. data/spec/framework_spec/app/spec/core/array/pack/b_spec.rb +109 -0
  651. data/spec/framework_spec/app/spec/core/array/pack/c_spec.rb +83 -0
  652. data/spec/framework_spec/app/spec/core/array/pack/comment_spec.rb +25 -0
  653. data/spec/framework_spec/app/spec/core/array/pack/d_spec.rb +39 -0
  654. data/spec/framework_spec/app/spec/core/array/pack/e_spec.rb +25 -0
  655. data/spec/framework_spec/app/spec/core/array/pack/f_spec.rb +39 -0
  656. data/spec/framework_spec/app/spec/core/array/pack/g_spec.rb +25 -0
  657. data/spec/framework_spec/app/spec/core/array/pack/h_spec.rb +201 -0
  658. data/spec/framework_spec/app/spec/core/array/pack/i_spec.rb +73 -0
  659. data/spec/framework_spec/app/spec/core/array/pack/l_spec.rb +193 -0
  660. data/spec/framework_spec/app/spec/core/array/pack/m_spec.rb +337 -0
  661. data/spec/framework_spec/app/spec/core/array/pack/n_spec.rb +25 -0
  662. data/spec/framework_spec/app/spec/core/array/pack/percent_spec.rb +7 -0
  663. data/spec/framework_spec/app/spec/core/array/pack/q_spec.rb +43 -0
  664. data/spec/framework_spec/app/spec/core/array/pack/s_spec.rb +73 -0
  665. data/spec/framework_spec/app/spec/core/array/pack/shared/basic.rb +57 -0
  666. data/spec/framework_spec/app/spec/core/array/pack/shared/encodings.rb +16 -0
  667. data/spec/framework_spec/app/spec/core/array/pack/shared/float.rb +277 -0
  668. data/spec/framework_spec/app/spec/core/array/pack/shared/integer.rb +381 -0
  669. data/spec/framework_spec/app/spec/core/array/pack/shared/numeric_basic.rb +54 -0
  670. data/spec/framework_spec/app/spec/core/array/pack/shared/string.rb +83 -0
  671. data/spec/framework_spec/app/spec/core/array/pack/shared/unicode.rb +89 -0
  672. data/spec/framework_spec/app/spec/core/array/pack/u_spec.rb +130 -0
  673. data/spec/framework_spec/app/spec/core/array/pack/v_spec.rb +25 -0
  674. data/spec/framework_spec/app/spec/core/array/pack/w_spec.rb +44 -0
  675. data/spec/framework_spec/app/spec/core/array/pack/x_spec.rb +64 -0
  676. data/spec/framework_spec/app/spec/core/array/pack/z_spec.rb +32 -0
  677. data/spec/framework_spec/app/spec/core/array/pack_spec.rb +409 -369
  678. data/spec/framework_spec/app/spec/core/array/partition_spec.rb +6 -6
  679. data/spec/framework_spec/app/spec/core/array/permutation_spec.rb +34 -15
  680. data/spec/framework_spec/app/spec/core/array/plus_spec.rb +6 -6
  681. data/spec/framework_spec/app/spec/core/array/pop_spec.rb +17 -4
  682. data/spec/framework_spec/app/spec/core/array/product_spec.rb +49 -5
  683. data/spec/framework_spec/app/spec/core/array/push_spec.rb +4 -4
  684. data/spec/framework_spec/app/spec/core/array/rassoc_spec.rb +2 -2
  685. data/spec/framework_spec/app/spec/core/array/reject_spec.rb +42 -29
  686. data/spec/framework_spec/app/spec/core/array/repeated_combination_spec.rb +59 -0
  687. data/spec/framework_spec/app/spec/core/array/repeated_permutation_spec.rb +72 -0
  688. data/spec/framework_spec/app/spec/core/array/replace_spec.rb +3 -3
  689. data/spec/framework_spec/app/spec/core/array/reverse_each_spec.rb +26 -39
  690. data/spec/framework_spec/app/spec/core/array/reverse_spec.rb +15 -7
  691. data/spec/framework_spec/app/spec/core/array/rindex_spec.rb +28 -16
  692. data/spec/framework_spec/app/spec/core/array/rotate_spec.rb +85 -0
  693. data/spec/framework_spec/app/spec/core/array/sample_spec.rb +4 -10
  694. data/spec/framework_spec/app/spec/core/array/select_spec.rb +16 -3
  695. data/spec/framework_spec/app/spec/core/array/shared/clone.rb +2 -2
  696. data/spec/framework_spec/app/spec/core/array/shared/collect.rb +3 -3
  697. data/spec/framework_spec/app/spec/core/array/shared/enumeratorize.rb +12 -0
  698. data/spec/framework_spec/app/spec/core/array/shared/eql.rb +9 -5
  699. data/spec/framework_spec/app/spec/core/array/shared/indexes.rb +1 -1
  700. data/spec/framework_spec/app/spec/core/array/shared/join.rb +122 -90
  701. data/spec/framework_spec/app/spec/core/array/shared/keep_if.rb +11 -0
  702. data/spec/framework_spec/app/spec/core/array/shared/slice.rb +67 -6
  703. data/spec/framework_spec/app/spec/core/array/shift_spec.rb +18 -4
  704. data/spec/framework_spec/app/spec/core/array/shuffle_spec.rb +23 -14
  705. data/spec/framework_spec/app/spec/core/array/size_spec.rb +3 -3
  706. data/spec/framework_spec/app/spec/core/array/slice_spec.rb +19 -3
  707. data/spec/framework_spec/app/spec/core/array/sort_by_spec.rb +48 -0
  708. data/spec/framework_spec/app/spec/core/array/sort_spec.rb +65 -65
  709. data/spec/framework_spec/app/spec/core/array/take_spec.rb +7 -0
  710. data/spec/framework_spec/app/spec/core/array/take_while_spec.rb +7 -0
  711. data/spec/framework_spec/app/spec/core/array/to_a_spec.rb +7 -8
  712. data/spec/framework_spec/app/spec/core/array/to_ary_spec.rb +2 -2
  713. data/spec/framework_spec/app/spec/core/array/to_s_spec.rb +2 -5
  714. data/spec/framework_spec/app/spec/core/array/transpose_spec.rb +6 -6
  715. data/spec/framework_spec/app/spec/core/array/try_convert_spec.rb +15 -17
  716. data/spec/framework_spec/app/spec/core/array/union_spec.rb +13 -13
  717. data/spec/framework_spec/app/spec/core/array/uniq_spec.rb +41 -15
  718. data/spec/framework_spec/app/spec/core/array/unshift_spec.rb +9 -7
  719. data/spec/framework_spec/app/spec/core/array/values_at_spec.rb +5 -5
  720. data/spec/framework_spec/app/spec/core/array/zip_spec.rb +15 -3
  721. data/spec/framework_spec/app/spec/core/basicobject/__send___spec.rb +9 -0
  722. data/spec/framework_spec/app/spec/core/basicobject/ancestors_spec.rb +9 -0
  723. data/spec/framework_spec/app/spec/core/basicobject/basicobject_spec.rb +67 -0
  724. data/spec/framework_spec/app/spec/core/basicobject/class_spec.rb +9 -0
  725. data/spec/framework_spec/app/spec/core/basicobject/equal_spec.rb +20 -0
  726. data/spec/framework_spec/app/spec/core/basicobject/equal_value_spec.rb +26 -0
  727. data/spec/framework_spec/app/spec/core/basicobject/fixtures/common.rb +5 -0
  728. data/spec/framework_spec/app/spec/core/basicobject/fixtures/remove_method_missing.rb +9 -0
  729. data/spec/framework_spec/app/spec/core/basicobject/initialize_spec.rb +9 -0
  730. data/spec/framework_spec/app/spec/core/basicobject/instance_eval_spec.rb +14 -0
  731. data/spec/framework_spec/app/spec/core/basicobject/instance_exec_spec.rb +19 -0
  732. data/spec/framework_spec/app/spec/core/basicobject/method_missing_spec.rb +15 -0
  733. data/spec/framework_spec/app/spec/core/basicobject/new_spec.rb +7 -5
  734. data/spec/framework_spec/app/spec/core/basicobject/not_equal_spec.rb +26 -0
  735. data/spec/framework_spec/app/spec/core/basicobject/not_spec.rb +13 -0
  736. data/spec/framework_spec/app/spec/core/basicobject/singleton_method_added_spec.rb +8 -0
  737. data/spec/framework_spec/app/spec/core/basicobject/singleton_method_removed_spec.rb +8 -0
  738. data/spec/framework_spec/app/spec/core/basicobject/singleton_method_undefined_spec.rb +7 -0
  739. data/spec/framework_spec/app/spec/core/basicobject/superclass_spec.rb +9 -0
  740. data/spec/framework_spec/app/spec/core/bignum/abs_spec.rb +4 -5
  741. data/spec/framework_spec/app/spec/core/bignum/bit_and_spec.rb +4 -4
  742. data/spec/framework_spec/app/spec/core/bignum/bit_or_spec.rb +5 -5
  743. data/spec/framework_spec/app/spec/core/bignum/bit_xor_spec.rb +5 -5
  744. data/spec/framework_spec/app/spec/core/bignum/case_compare_spec.rb +7 -0
  745. data/spec/framework_spec/app/spec/core/bignum/coerce_spec.rb +1 -1
  746. data/spec/framework_spec/app/spec/core/bignum/comparison_spec.rb +143 -20
  747. data/spec/framework_spec/app/spec/core/bignum/complement_spec.rb +1 -1
  748. data/spec/framework_spec/app/spec/core/bignum/div_spec.rb +2 -2
  749. data/spec/framework_spec/app/spec/core/bignum/divide_spec.rb +2 -2
  750. data/spec/framework_spec/app/spec/core/bignum/divmod_spec.rb +11 -6
  751. data/spec/framework_spec/app/spec/core/bignum/element_reference_spec.rb +4 -4
  752. data/spec/framework_spec/app/spec/core/bignum/eql_spec.rb +1 -1
  753. data/spec/framework_spec/app/spec/core/bignum/equal_value_spec.rb +6 -6
  754. data/spec/framework_spec/app/spec/core/bignum/even_spec.rb +21 -0
  755. data/spec/framework_spec/app/spec/core/bignum/exponent_spec.rb +16 -2
  756. data/spec/framework_spec/app/spec/core/bignum/fdiv_spec.rb +7 -0
  757. data/spec/framework_spec/app/spec/core/bignum/gt_spec.rb +3 -3
  758. data/spec/framework_spec/app/spec/core/bignum/gte_spec.rb +2 -2
  759. data/spec/framework_spec/app/spec/core/bignum/hash_spec.rb +1 -1
  760. data/spec/framework_spec/app/spec/core/bignum/left_shift_spec.rb +64 -40
  761. data/spec/framework_spec/app/spec/core/bignum/lt_spec.rb +5 -5
  762. data/spec/framework_spec/app/spec/core/bignum/lte_spec.rb +2 -2
  763. data/spec/framework_spec/app/spec/core/bignum/magnitude_spec.rb +10 -0
  764. data/spec/framework_spec/app/spec/core/bignum/minus_spec.rb +3 -3
  765. data/spec/framework_spec/app/spec/core/bignum/modulo_spec.rb +2 -2
  766. data/spec/framework_spec/app/spec/core/bignum/multiply_spec.rb +2 -2
  767. data/spec/framework_spec/app/spec/core/bignum/odd_spec.rb +21 -0
  768. data/spec/framework_spec/app/spec/core/bignum/plus_spec.rb +3 -3
  769. data/spec/framework_spec/app/spec/core/bignum/quo_spec.rb +1 -1
  770. data/spec/framework_spec/app/spec/core/bignum/remainder_spec.rb +19 -8
  771. data/spec/framework_spec/app/spec/core/bignum/right_shift_spec.rb +93 -34
  772. data/spec/framework_spec/app/spec/core/bignum/shared/abs.rb +6 -0
  773. data/spec/framework_spec/app/spec/core/bignum/shared/divide.rb +2 -2
  774. data/spec/framework_spec/app/spec/core/bignum/shared/modulo.rb +13 -4
  775. data/spec/framework_spec/app/spec/core/bignum/size_spec.rb +15 -1
  776. data/spec/framework_spec/app/spec/core/bignum/to_f_spec.rb +1 -1
  777. data/spec/framework_spec/app/spec/core/bignum/to_s_spec.rb +4 -4
  778. data/spec/framework_spec/app/spec/core/bignum/uminus_spec.rb +2 -2
  779. data/spec/framework_spec/app/spec/core/binding/clone_spec.rb +7 -8
  780. data/spec/framework_spec/app/spec/core/binding/dup_spec.rb +7 -8
  781. data/spec/framework_spec/app/spec/core/binding/eval_spec.rb +19 -25
  782. data/spec/framework_spec/app/spec/core/binding/fixtures/classes.rb +1 -1
  783. data/spec/framework_spec/app/spec/core/builtin_constants/builtin_constants_spec.rb +57 -0
  784. data/spec/framework_spec/app/spec/core/class/allocate_spec.rb +11 -5
  785. data/spec/framework_spec/app/spec/core/class/dup_spec.rb +72 -0
  786. data/spec/framework_spec/app/spec/core/class/fixtures/classes.rb +5 -5
  787. data/spec/framework_spec/app/spec/core/class/inherited_spec.rb +22 -22
  788. data/spec/framework_spec/app/spec/core/class/initialize_copy_spec.rb +22 -1
  789. data/spec/framework_spec/app/spec/core/class/initialize_spec.rb +37 -6
  790. data/spec/framework_spec/app/spec/core/class/new_spec.rb +11 -2
  791. data/spec/framework_spec/app/spec/core/class/superclass_spec.rb +37 -8
  792. data/spec/framework_spec/app/spec/core/comparable/between_spec.rb +3 -3
  793. data/spec/framework_spec/app/spec/core/comparable/equal_value_spec.rb +11 -11
  794. data/spec/framework_spec/app/spec/core/comparable/fixtures/classes.rb +3 -3
  795. data/spec/framework_spec/app/spec/core/comparable/gt_spec.rb +8 -8
  796. data/spec/framework_spec/app/spec/core/comparable/gte_spec.rb +9 -9
  797. data/spec/framework_spec/app/spec/core/comparable/lt_spec.rb +9 -9
  798. data/spec/framework_spec/app/spec/core/comparable/lte_spec.rb +8 -8
  799. data/spec/framework_spec/app/spec/core/complex/Complex_spec.rb +20 -0
  800. data/spec/framework_spec/app/spec/core/complex/abs2_spec.rb +8 -0
  801. data/spec/framework_spec/app/spec/core/complex/abs_spec.rb +8 -0
  802. data/spec/framework_spec/app/spec/core/complex/angle_spec.rb +10 -0
  803. data/spec/framework_spec/app/spec/core/complex/arg_spec.rb +10 -0
  804. data/spec/framework_spec/app/spec/core/complex/coerce_spec.rb +8 -0
  805. data/spec/framework_spec/app/spec/core/complex/conj_spec.rb +10 -0
  806. data/spec/framework_spec/app/spec/core/complex/conjugate_spec.rb +10 -0
  807. data/spec/framework_spec/app/spec/core/complex/denominator_spec.rb +9 -0
  808. data/spec/framework_spec/app/spec/core/complex/divide_spec.rb +24 -0
  809. data/spec/framework_spec/app/spec/core/complex/eql_spec.rb +7 -0
  810. data/spec/framework_spec/app/spec/core/complex/equal_value_spec.rb +16 -0
  811. data/spec/framework_spec/app/spec/core/complex/exponent_spec.rb +24 -0
  812. data/spec/framework_spec/app/spec/core/complex/fdiv_spec.rb +131 -0
  813. data/spec/framework_spec/app/spec/core/complex/hash_spec.rb +8 -0
  814. data/spec/framework_spec/app/spec/core/complex/imag_spec.rb +7 -0
  815. data/spec/framework_spec/app/spec/core/complex/imaginary_spec.rb +7 -0
  816. data/spec/framework_spec/app/spec/core/complex/inspect_spec.rb +7 -0
  817. data/spec/framework_spec/app/spec/core/complex/integer_spec.rb +13 -0
  818. data/spec/framework_spec/app/spec/core/complex/magnitude_spec.rb +8 -0
  819. data/spec/framework_spec/app/spec/core/complex/marshal_dump_spec.rb +7 -0
  820. data/spec/framework_spec/app/spec/core/complex/marshal_load_spec.rb +7 -0
  821. data/spec/framework_spec/app/spec/core/complex/minus_spec.rb +15 -0
  822. data/spec/framework_spec/app/spec/core/complex/multiply_spec.rb +16 -0
  823. data/spec/framework_spec/app/spec/core/complex/numerator_spec.rb +7 -0
  824. data/spec/framework_spec/app/spec/core/complex/phase_spec.rb +7 -0
  825. data/spec/framework_spec/app/spec/core/complex/plus_spec.rb +16 -0
  826. data/spec/framework_spec/app/spec/core/complex/polar_spec.rb +17 -0
  827. data/spec/framework_spec/app/spec/core/complex/quo_spec.rb +7 -0
  828. data/spec/framework_spec/app/spec/core/complex/rationalize_spec.rb +15 -0
  829. data/spec/framework_spec/app/spec/core/complex/real_spec.rb +26 -0
  830. data/spec/framework_spec/app/spec/core/complex/rect_spec.rb +11 -0
  831. data/spec/framework_spec/app/spec/core/complex/rectangular_spec.rb +14 -0
  832. data/spec/framework_spec/app/spec/core/complex/to_f_spec.rb +7 -0
  833. data/spec/framework_spec/app/spec/core/complex/to_i_spec.rb +7 -0
  834. data/spec/framework_spec/app/spec/core/complex/to_r_spec.rb +7 -0
  835. data/spec/framework_spec/app/spec/core/complex/to_s_spec.rb +12 -0
  836. data/spec/framework_spec/app/spec/core/complex/uminus_spec.rb +7 -0
  837. data/spec/framework_spec/app/spec/core/continuation/call_spec.rb +8 -1
  838. data/spec/framework_spec/app/spec/core/continuation/element_reference_spec.rb +8 -1
  839. data/spec/framework_spec/app/spec/core/continuation/new_spec.rb +8 -0
  840. data/spec/framework_spec/app/spec/core/dir/chdir_spec.rb +64 -17
  841. data/spec/framework_spec/app/spec/core/dir/chroot_spec.rb +50 -26
  842. data/spec/framework_spec/app/spec/core/dir/close_spec.rb +32 -16
  843. data/spec/framework_spec/app/spec/core/dir/delete_spec.rb +11 -3
  844. data/spec/framework_spec/app/spec/core/dir/dir_spec.rb +1 -1
  845. data/spec/framework_spec/app/spec/core/dir/each_spec.rb +24 -8
  846. data/spec/framework_spec/app/spec/core/dir/element_reference_spec.rb +19 -3
  847. data/spec/framework_spec/app/spec/core/dir/entries_spec.rb +19 -3
  848. data/spec/framework_spec/app/spec/core/dir/exist_spec.rb +17 -0
  849. data/spec/framework_spec/app/spec/core/dir/exists_spec.rb +17 -0
  850. data/spec/framework_spec/app/spec/core/dir/fixtures/common.rb +96 -73
  851. data/spec/framework_spec/app/spec/core/dir/foreach_spec.rb +20 -4
  852. data/spec/framework_spec/app/spec/core/dir/getwd_spec.rb +12 -4
  853. data/spec/framework_spec/app/spec/core/dir/glob_spec.rb +60 -8
  854. data/spec/framework_spec/app/spec/core/dir/home_spec.rb +15 -6
  855. data/spec/framework_spec/app/spec/core/dir/initialize_spec.rb +29 -2
  856. data/spec/framework_spec/app/spec/core/dir/inspect_spec.rb +26 -0
  857. data/spec/framework_spec/app/spec/core/dir/mkdir_spec.rb +56 -21
  858. data/spec/framework_spec/app/spec/core/dir/open_spec.rb +11 -3
  859. data/spec/framework_spec/app/spec/core/dir/path_spec.rb +8 -24
  860. data/spec/framework_spec/app/spec/core/dir/pos_spec.rb +28 -4
  861. data/spec/framework_spec/app/spec/core/dir/pwd_spec.rb +44 -20
  862. data/spec/framework_spec/app/spec/core/dir/read_spec.rb +11 -5
  863. data/spec/framework_spec/app/spec/core/dir/rewind_spec.rb +13 -7
  864. data/spec/framework_spec/app/spec/core/dir/rmdir_spec.rb +11 -3
  865. data/spec/framework_spec/app/spec/core/dir/seek_spec.rb +11 -3
  866. data/spec/framework_spec/app/spec/core/dir/shared/chroot.rb +43 -0
  867. data/spec/framework_spec/app/spec/core/dir/shared/delete.rb +27 -8
  868. data/spec/framework_spec/app/spec/core/dir/shared/exists.rb +53 -0
  869. data/spec/framework_spec/app/spec/core/dir/shared/glob.rb +61 -8
  870. data/spec/framework_spec/app/spec/core/dir/shared/open.rb +18 -2
  871. data/spec/framework_spec/app/spec/core/dir/shared/path.rb +29 -0
  872. data/spec/framework_spec/app/spec/core/dir/shared/pos.rb +1 -1
  873. data/spec/framework_spec/app/spec/core/dir/shared/pwd.rb +13 -13
  874. data/spec/framework_spec/app/spec/core/dir/tell_spec.rb +12 -6
  875. data/spec/framework_spec/app/spec/core/dir/to_path.rb +17 -0
  876. data/spec/framework_spec/app/spec/core/dir/to_path_spec.rb +7 -0
  877. data/spec/framework_spec/app/spec/core/dir/unlink_spec.rb +11 -3
  878. data/spec/framework_spec/app/spec/core/encoding/_dump_spec.rb +7 -0
  879. data/spec/framework_spec/app/spec/core/encoding/_load_spec.rb +7 -0
  880. data/spec/framework_spec/app/spec/core/encoding/aliases_spec.rb +45 -0
  881. data/spec/framework_spec/app/spec/core/encoding/ascii_compatible_spec.rb +13 -0
  882. data/spec/framework_spec/app/spec/core/encoding/compatible_spec.rb +26 -0
  883. data/spec/framework_spec/app/spec/core/encoding/converter/asciicompat_encoding_spec.rb +48 -0
  884. data/spec/framework_spec/app/spec/core/encoding/converter/constants_spec.rb +133 -0
  885. data/spec/framework_spec/app/spec/core/encoding/converter/convert_spec.rb +46 -0
  886. data/spec/framework_spec/app/spec/core/encoding/converter/convpath_spec.rb +65 -0
  887. data/spec/framework_spec/app/spec/core/encoding/converter/destination_encoding_spec.rb +13 -0
  888. data/spec/framework_spec/app/spec/core/encoding/converter/finish_spec.rb +38 -0
  889. data/spec/framework_spec/app/spec/core/encoding/converter/insert_output_spec.rb +7 -0
  890. data/spec/framework_spec/app/spec/core/encoding/converter/inspect_spec.rb +7 -0
  891. data/spec/framework_spec/app/spec/core/encoding/converter/last_error_spec.rb +84 -0
  892. data/spec/framework_spec/app/spec/core/encoding/converter/primitive_convert_spec.rb +137 -0
  893. data/spec/framework_spec/app/spec/core/encoding/converter/primitive_errinfo_spec.rb +71 -0
  894. data/spec/framework_spec/app/spec/core/encoding/converter/putback_spec.rb +49 -0
  895. data/spec/framework_spec/app/spec/core/encoding/converter/replacement_spec.rb +63 -0
  896. data/spec/framework_spec/app/spec/core/encoding/converter/search_convpath_spec.rb +73 -0
  897. data/spec/framework_spec/app/spec/core/encoding/converter/source_encoding_spec.rb +13 -0
  898. data/spec/framework_spec/app/spec/core/encoding/default_external_spec.rb +57 -0
  899. data/spec/framework_spec/app/spec/core/encoding/default_internal_spec.rb +83 -0
  900. data/spec/framework_spec/app/spec/core/encoding/dummy_spec.rb +16 -0
  901. data/spec/framework_spec/app/spec/core/encoding/find_spec.rb +82 -0
  902. data/spec/framework_spec/app/spec/core/encoding/fixtures/classes.rb +48 -0
  903. data/spec/framework_spec/app/spec/core/encoding/inspect_spec.rb +21 -0
  904. data/spec/framework_spec/app/spec/core/encoding/invalid_byte_sequence_error/destination_encoding_name_spec.rb +20 -0
  905. data/spec/framework_spec/app/spec/core/encoding/invalid_byte_sequence_error/destination_encoding_spec.rb +20 -0
  906. data/spec/framework_spec/app/spec/core/encoding/invalid_byte_sequence_error/error_bytes_spec.rb +31 -0
  907. data/spec/framework_spec/app/spec/core/encoding/invalid_byte_sequence_error/incomplete_input_spec.rb +30 -0
  908. data/spec/framework_spec/app/spec/core/encoding/invalid_byte_sequence_error/readagain_bytes_spec.rb +31 -0
  909. data/spec/framework_spec/app/spec/core/encoding/invalid_byte_sequence_error/source_encoding_name_spec.rb +30 -0
  910. data/spec/framework_spec/app/spec/core/encoding/invalid_byte_sequence_error/source_encoding_spec.rb +35 -0
  911. data/spec/framework_spec/app/spec/core/encoding/list_spec.rb +43 -0
  912. data/spec/framework_spec/app/spec/core/encoding/locale_charmap_spec.rb +38 -0
  913. data/spec/framework_spec/app/spec/core/encoding/name_list_spec.rb +25 -0
  914. data/spec/framework_spec/app/spec/core/encoding/name_spec.rb +7 -0
  915. data/spec/framework_spec/app/spec/core/encoding/names_spec.rb +37 -0
  916. data/spec/framework_spec/app/spec/core/encoding/replicate_spec.rb +34 -0
  917. data/spec/framework_spec/app/spec/core/encoding/shared/name.rb +15 -0
  918. data/spec/framework_spec/app/spec/core/encoding/to_s_spec.rb +7 -0
  919. data/spec/framework_spec/app/spec/core/encoding/undefined_conversion_error/destination_encoding_name_spec.rb +17 -0
  920. data/spec/framework_spec/app/spec/core/encoding/undefined_conversion_error/destination_encoding_spec.rb +17 -0
  921. data/spec/framework_spec/app/spec/core/encoding/undefined_conversion_error/error_char_spec.rb +29 -0
  922. data/spec/framework_spec/app/spec/core/encoding/undefined_conversion_error/source_encoding_name_spec.rb +30 -0
  923. data/spec/framework_spec/app/spec/core/encoding/undefined_conversion_error/source_encoding_spec.rb +31 -0
  924. data/spec/framework_spec/app/spec/core/enumerable/all_spec.rb +2 -15
  925. data/spec/framework_spec/app/spec/core/enumerable/any_spec.rb +2 -7
  926. data/spec/framework_spec/app/spec/core/enumerable/chunk_spec.rb +44 -0
  927. data/spec/framework_spec/app/spec/core/enumerable/collect_concat_spec.rb +9 -0
  928. data/spec/framework_spec/app/spec/core/enumerable/collect_spec.rb +4 -4
  929. data/spec/framework_spec/app/spec/core/enumerable/count_spec.rb +4 -4
  930. data/spec/framework_spec/app/spec/core/enumerable/cycle_spec.rb +20 -6
  931. data/spec/framework_spec/app/spec/core/enumerable/detect_spec.rb +4 -4
  932. data/spec/framework_spec/app/spec/core/enumerable/drop_spec.rb +2 -2
  933. data/spec/framework_spec/app/spec/core/enumerable/drop_while_spec.rb +5 -5
  934. data/spec/framework_spec/app/spec/core/enumerable/each_cons_spec.rb +8 -8
  935. data/spec/framework_spec/app/spec/core/enumerable/each_entry_spec.rb +40 -0
  936. data/spec/framework_spec/app/spec/core/enumerable/each_slice_spec.rb +8 -8
  937. data/spec/framework_spec/app/spec/core/enumerable/each_with_index_spec.rb +15 -15
  938. data/spec/framework_spec/app/spec/core/enumerable/each_with_object_spec.rb +6 -6
  939. data/spec/framework_spec/app/spec/core/enumerable/entries_spec.rb +5 -5
  940. data/spec/framework_spec/app/spec/core/enumerable/find_all_spec.rb +4 -4
  941. data/spec/framework_spec/app/spec/core/enumerable/{find_index.rb → find_index_spec.rb} +5 -5
  942. data/spec/framework_spec/app/spec/core/enumerable/find_spec.rb +4 -4
  943. data/spec/framework_spec/app/spec/core/enumerable/first_spec.rb +6 -6
  944. data/spec/framework_spec/app/spec/core/enumerable/fixtures/classes.rb +67 -16
  945. data/spec/framework_spec/app/spec/core/enumerable/flat_map_spec.rb +9 -0
  946. data/spec/framework_spec/app/spec/core/enumerable/grep_spec.rb +12 -7
  947. data/spec/framework_spec/app/spec/core/enumerable/group_by_spec.rb +5 -5
  948. data/spec/framework_spec/app/spec/core/enumerable/include_spec.rb +4 -4
  949. data/spec/framework_spec/app/spec/core/enumerable/inject_spec.rb +4 -4
  950. data/spec/framework_spec/app/spec/core/enumerable/map_spec.rb +5 -5
  951. data/spec/framework_spec/app/spec/core/enumerable/max_by_spec.rb +4 -4
  952. data/spec/framework_spec/app/spec/core/enumerable/max_spec.rb +27 -12
  953. data/spec/framework_spec/app/spec/core/enumerable/member_spec.rb +4 -4
  954. data/spec/framework_spec/app/spec/core/enumerable/min_by_spec.rb +4 -4
  955. data/spec/framework_spec/app/spec/core/enumerable/min_spec.rb +27 -11
  956. data/spec/framework_spec/app/spec/core/enumerable/minmax_by_spec.rb +4 -4
  957. data/spec/framework_spec/app/spec/core/enumerable/minmax_spec.rb +26 -10
  958. data/spec/framework_spec/app/spec/core/enumerable/none_spec.rb +42 -0
  959. data/spec/framework_spec/app/spec/core/enumerable/one_spec.rb +5 -0
  960. data/spec/framework_spec/app/spec/core/enumerable/partition_spec.rb +4 -4
  961. data/spec/framework_spec/app/spec/core/enumerable/reduce_spec.rb +4 -4
  962. data/spec/framework_spec/app/spec/core/enumerable/reject_spec.rb +5 -5
  963. data/spec/framework_spec/app/spec/core/enumerable/reverse_each_spec.rb +4 -4
  964. data/spec/framework_spec/app/spec/core/enumerable/select_spec.rb +4 -4
  965. data/spec/framework_spec/app/spec/core/enumerable/shared/collect.rb +13 -5
  966. data/spec/framework_spec/app/spec/core/enumerable/shared/collect_concat.rb +27 -0
  967. data/spec/framework_spec/app/spec/core/enumerable/shared/entries.rb +5 -1
  968. data/spec/framework_spec/app/spec/core/enumerable/shared/find.rb +24 -11
  969. data/spec/framework_spec/app/spec/core/enumerable/shared/find_all.rb +9 -3
  970. data/spec/framework_spec/app/spec/core/enumerable/shared/include.rb +14 -3
  971. data/spec/framework_spec/app/spec/core/enumerable/shared/inject.rb +8 -8
  972. data/spec/framework_spec/app/spec/core/enumerable/shared/take.rb +5 -3
  973. data/spec/framework_spec/app/spec/core/enumerable/slice_before_spec.rb +77 -0
  974. data/spec/framework_spec/app/spec/core/enumerable/sort_by_spec.rb +10 -2
  975. data/spec/framework_spec/app/spec/core/enumerable/sort_spec.rb +22 -9
  976. data/spec/framework_spec/app/spec/core/enumerable/take_spec.rb +5 -5
  977. data/spec/framework_spec/app/spec/core/enumerable/take_while_spec.rb +3 -3
  978. data/spec/framework_spec/app/spec/core/enumerable/to_a_spec.rb +5 -5
  979. data/spec/framework_spec/app/spec/core/enumerable/zip_spec.rb +18 -7
  980. data/spec/framework_spec/app/spec/core/enumerator/each_spec.rb +7 -0
  981. data/spec/framework_spec/app/spec/core/enumerator/each_with_index_spec.rb +25 -0
  982. data/spec/framework_spec/app/spec/core/enumerator/each_with_object_spec.rb +8 -0
  983. data/spec/framework_spec/app/spec/core/enumerator/enum_for_spec.rb +9 -0
  984. data/spec/framework_spec/app/spec/core/enumerator/feed_spec.rb +7 -0
  985. data/spec/framework_spec/app/spec/core/enumerator/generator/each_spec.rb +7 -0
  986. data/spec/framework_spec/app/spec/core/enumerator/inspect_spec.rb +7 -0
  987. data/spec/framework_spec/app/spec/core/enumerator/new_spec.rb +28 -0
  988. data/spec/framework_spec/app/spec/core/enumerator/next_spec.rb +9 -0
  989. data/spec/framework_spec/app/spec/core/enumerator/next_values_spec.rb +7 -0
  990. data/spec/framework_spec/app/spec/core/enumerator/peek_spec.rb +38 -0
  991. data/spec/framework_spec/app/spec/core/enumerator/peek_values_spec.rb +7 -0
  992. data/spec/framework_spec/app/spec/core/enumerator/rewind_spec.rb +27 -0
  993. data/spec/framework_spec/app/spec/core/enumerator/to_enum_spec.rb +9 -0
  994. data/spec/framework_spec/app/spec/core/enumerator/with_index_spec.rb +68 -0
  995. data/spec/framework_spec/app/spec/core/enumerator/with_object_spec.rb +8 -0
  996. data/spec/framework_spec/app/spec/core/enumerator/yielder/append_spec.rb +19 -0
  997. data/spec/framework_spec/app/spec/core/enumerator/yielder/yield_spec.rb +18 -0
  998. data/spec/framework_spec/app/spec/core/env/clear_spec.rb +19 -13
  999. data/spec/framework_spec/app/spec/core/env/delete_if_spec.rb +26 -28
  1000. data/spec/framework_spec/app/spec/core/env/delete_spec.rb +1 -1
  1001. data/spec/framework_spec/app/spec/core/env/each_key_spec.rb +39 -33
  1002. data/spec/framework_spec/app/spec/core/env/each_pair_spec.rb +6 -7
  1003. data/spec/framework_spec/app/spec/core/env/each_spec.rb +6 -7
  1004. data/spec/framework_spec/app/spec/core/env/each_value_spec.rb +39 -33
  1005. data/spec/framework_spec/app/spec/core/env/element_reference_spec.rb +25 -2
  1006. data/spec/framework_spec/app/spec/core/env/element_set_spec.rb +2 -2
  1007. data/spec/framework_spec/app/spec/core/env/empty_spec.rb +23 -24
  1008. data/spec/framework_spec/app/spec/core/env/fetch_spec.rb +6 -1
  1009. data/spec/framework_spec/app/spec/core/env/has_key_spec.rb +2 -2
  1010. data/spec/framework_spec/app/spec/core/env/has_value_spec.rb +6 -7
  1011. data/spec/framework_spec/app/spec/core/env/include_spec.rb +2 -2
  1012. data/spec/framework_spec/app/spec/core/env/index_spec.rb +6 -1
  1013. data/spec/framework_spec/app/spec/core/env/indexes_spec.rb +1 -1
  1014. data/spec/framework_spec/app/spec/core/env/indices_spec.rb +1 -1
  1015. data/spec/framework_spec/app/spec/core/env/inspect_spec.rb +11 -12
  1016. data/spec/framework_spec/app/spec/core/env/invert_spec.rb +12 -13
  1017. data/spec/framework_spec/app/spec/core/env/key_spec.rb +9 -2
  1018. data/spec/framework_spec/app/spec/core/env/keys_spec.rb +16 -9
  1019. data/spec/framework_spec/app/spec/core/env/length_spec.rb +6 -7
  1020. data/spec/framework_spec/app/spec/core/env/member_spec.rb +2 -2
  1021. data/spec/framework_spec/app/spec/core/env/rehash_spec.rb +1 -1
  1022. data/spec/framework_spec/app/spec/core/env/reject_spec.rb +88 -89
  1023. data/spec/framework_spec/app/spec/core/env/replace_spec.rb +15 -16
  1024. data/spec/framework_spec/app/spec/core/env/select_spec.rb +32 -23
  1025. data/spec/framework_spec/app/spec/core/env/shared/each.rb +10 -1
  1026. data/spec/framework_spec/app/spec/core/env/shared/key.rb +15 -0
  1027. data/spec/framework_spec/app/spec/core/env/shared/store.rb +18 -12
  1028. data/spec/framework_spec/app/spec/core/env/shared/value.rb +7 -0
  1029. data/spec/framework_spec/app/spec/core/env/shift_spec.rb +27 -28
  1030. data/spec/framework_spec/app/spec/core/env/size_spec.rb +6 -7
  1031. data/spec/framework_spec/app/spec/core/env/store_spec.rb +2 -2
  1032. data/spec/framework_spec/app/spec/core/env/to_a_spec.rb +21 -13
  1033. data/spec/framework_spec/app/spec/core/env/to_hash_spec.rb +12 -13
  1034. data/spec/framework_spec/app/spec/core/env/to_s_spec.rb +1 -1
  1035. data/spec/framework_spec/app/spec/core/env/update_spec.rb +1 -2
  1036. data/spec/framework_spec/app/spec/core/env/value_spec.rb +6 -7
  1037. data/spec/framework_spec/app/spec/core/env/values_at_spec.rb +7 -1
  1038. data/spec/framework_spec/app/spec/core/env/values_spec.rb +23 -16
  1039. data/spec/framework_spec/app/spec/core/exception/args_spec.rb +5 -0
  1040. data/spec/framework_spec/app/spec/core/exception/arguments_spec.rb +1 -1
  1041. data/spec/framework_spec/app/spec/core/exception/backtrace_spec.rb +51 -1
  1042. data/spec/framework_spec/app/spec/core/exception/case_compare_spec.rb +5 -1
  1043. data/spec/framework_spec/app/spec/core/exception/destination_encoding_name_spec.rb +13 -0
  1044. data/spec/framework_spec/app/spec/core/exception/destination_encoding_spec.rb +13 -0
  1045. data/spec/framework_spec/app/spec/core/exception/equal_value_spec.rb +84 -0
  1046. data/spec/framework_spec/app/spec/core/exception/errno_spec.rb +16 -1
  1047. data/spec/framework_spec/app/spec/core/exception/error_bytes_spec.rb +7 -0
  1048. data/spec/framework_spec/app/spec/core/exception/error_char_spec.rb +7 -0
  1049. data/spec/framework_spec/app/spec/core/exception/exception_spec.rb +69 -5
  1050. data/spec/framework_spec/app/spec/core/exception/exit_value_spec.rb +5 -1
  1051. data/spec/framework_spec/app/spec/core/exception/fixtures/common.rb +33 -1
  1052. data/spec/framework_spec/app/spec/core/exception/incomplete_input_spec.rb +7 -0
  1053. data/spec/framework_spec/app/spec/core/exception/initialize_spec.rb +1 -1
  1054. data/spec/framework_spec/app/spec/core/exception/inspect_spec.rb +2 -2
  1055. data/spec/framework_spec/app/spec/core/exception/io_error_spec.rb +1 -1
  1056. data/spec/framework_spec/app/spec/core/exception/message_spec.rb +14 -4
  1057. data/spec/framework_spec/app/spec/core/exception/name_error_spec.rb +2 -2
  1058. data/spec/framework_spec/app/spec/core/exception/name_spec.rb +5 -1
  1059. data/spec/framework_spec/app/spec/core/exception/new_spec.rb +3 -2
  1060. data/spec/framework_spec/app/spec/core/exception/no_method_error_spec.rb +5 -5
  1061. data/spec/framework_spec/app/spec/core/exception/range_error_spec.rb +1 -1
  1062. data/spec/framework_spec/app/spec/core/exception/readagain_bytes_spec.rb +7 -0
  1063. data/spec/framework_spec/app/spec/core/exception/reason_spec.rb +5 -0
  1064. data/spec/framework_spec/app/spec/core/exception/result_spec.rb +7 -0
  1065. data/spec/framework_spec/app/spec/core/exception/script_error_spec.rb +1 -1
  1066. data/spec/framework_spec/app/spec/core/exception/set_backtrace_spec.rb +10 -1
  1067. data/spec/framework_spec/app/spec/core/exception/shared/new.rb +5 -0
  1068. data/spec/framework_spec/app/spec/core/exception/shared/to_s.rb +3 -3
  1069. data/spec/framework_spec/app/spec/core/exception/signm_spec.rb +5 -0
  1070. data/spec/framework_spec/app/spec/core/exception/signo_spec.rb +5 -0
  1071. data/spec/framework_spec/app/spec/core/exception/source_encoding_name_spec.rb +13 -0
  1072. data/spec/framework_spec/app/spec/core/exception/source_encoding_spec.rb +13 -0
  1073. data/spec/framework_spec/app/spec/core/exception/standard_error_spec.rb +56 -55
  1074. data/spec/framework_spec/app/spec/core/exception/status_spec.rb +5 -0
  1075. data/spec/framework_spec/app/spec/core/exception/success_spec.rb +5 -0
  1076. data/spec/framework_spec/app/spec/core/exception/system_call_error_spec.rb +14 -5
  1077. data/spec/framework_spec/app/spec/core/exception/to_s_spec.rb +7 -3
  1078. data/spec/framework_spec/app/spec/core/exception/to_str_spec.rb +5 -5
  1079. data/spec/framework_spec/app/spec/core/false/and_spec.rb +1 -1
  1080. data/spec/framework_spec/app/spec/core/false/inspect_spec.rb +1 -1
  1081. data/spec/framework_spec/app/spec/core/false/or_spec.rb +1 -1
  1082. data/spec/framework_spec/app/spec/core/false/to_s_spec.rb +1 -1
  1083. data/spec/framework_spec/app/spec/core/false/xor_spec.rb +1 -1
  1084. data/spec/framework_spec/app/spec/core/fiber/new_spec.rb +48 -49
  1085. data/spec/framework_spec/app/spec/core/fiber/resume_spec.rb +39 -23
  1086. data/spec/framework_spec/app/spec/core/fiber/yield_spec.rb +34 -36
  1087. data/spec/framework_spec/app/spec/core/file/absolute_path_spec.rb +31 -0
  1088. data/spec/framework_spec/app/spec/core/file/atime_spec.rb +12 -5
  1089. data/spec/framework_spec/app/spec/core/file/basename_spec.rb +25 -26
  1090. data/spec/framework_spec/app/spec/core/file/blockdev_spec.rb +2 -2
  1091. data/spec/framework_spec/app/spec/core/file/chardev_spec.rb +2 -2
  1092. data/spec/framework_spec/app/spec/core/file/chmod_spec.rb +14 -10
  1093. data/spec/framework_spec/app/spec/core/file/chown_spec.rb +22 -4
  1094. data/spec/framework_spec/app/spec/core/file/constants/constants_spec.rb +7 -7
  1095. data/spec/framework_spec/app/spec/core/file/constants_spec.rb +1 -1
  1096. data/spec/framework_spec/app/spec/core/file/ctime_spec.rb +13 -6
  1097. data/spec/framework_spec/app/spec/core/file/delete_spec.rb +2 -2
  1098. data/spec/framework_spec/app/spec/core/file/directory_spec.rb +6 -2
  1099. data/spec/framework_spec/app/spec/core/file/dirname_spec.rb +12 -2
  1100. data/spec/framework_spec/app/spec/core/file/executable_real_spec.rb +2 -2
  1101. data/spec/framework_spec/app/spec/core/file/executable_spec.rb +2 -2
  1102. data/spec/framework_spec/app/spec/core/file/exist_spec.rb +2 -2
  1103. data/spec/framework_spec/app/spec/core/file/exists_spec.rb +2 -2
  1104. data/spec/framework_spec/app/spec/core/file/expand_path_spec.rb +133 -31
  1105. data/spec/framework_spec/app/spec/core/file/extname_spec.rb +7 -1
  1106. data/spec/framework_spec/app/spec/core/file/file_spec.rb +2 -2
  1107. data/spec/framework_spec/app/spec/core/file/fixtures/common.rb +22 -0
  1108. data/spec/framework_spec/app/spec/core/file/fixtures/file_types.rb +3 -9
  1109. data/spec/framework_spec/app/spec/core/file/flock_spec.rb +56 -18
  1110. data/spec/framework_spec/app/spec/core/file/fnmatch_spec.rb +2 -2
  1111. data/spec/framework_spec/app/spec/core/file/ftype_spec.rb +43 -45
  1112. data/spec/framework_spec/app/spec/core/file/grpowned_spec.rb +2 -2
  1113. data/spec/framework_spec/app/spec/core/file/identical_spec.rb +2 -2
  1114. data/spec/framework_spec/app/spec/core/file/initialize_spec.rb +25 -1
  1115. data/spec/framework_spec/app/spec/core/file/inspect_spec.rb +14 -7
  1116. data/spec/framework_spec/app/spec/core/file/join_spec.rb +37 -10
  1117. data/spec/framework_spec/app/spec/core/file/lchmod_spec.rb +13 -13
  1118. data/spec/framework_spec/app/spec/core/file/lchown_spec.rb +12 -6
  1119. data/spec/framework_spec/app/spec/core/file/link_spec.rb +7 -9
  1120. data/spec/framework_spec/app/spec/core/file/lstat_spec.rb +16 -11
  1121. data/spec/framework_spec/app/spec/core/file/mtime_spec.rb +7 -6
  1122. data/spec/framework_spec/app/spec/core/file/new_spec.rb +60 -44
  1123. data/spec/framework_spec/app/spec/core/file/open_spec.rb +104 -120
  1124. data/spec/framework_spec/app/spec/core/file/owned_spec.rb +26 -3
  1125. data/spec/framework_spec/app/spec/core/file/path_spec.rb +11 -10
  1126. data/spec/framework_spec/app/spec/core/file/pipe_spec.rb +25 -3
  1127. data/spec/framework_spec/app/spec/core/file/read_spec.rb +6 -0
  1128. data/spec/framework_spec/app/spec/core/file/readable_real_spec.rb +2 -2
  1129. data/spec/framework_spec/app/spec/core/file/readable_spec.rb +2 -2
  1130. data/spec/framework_spec/app/spec/core/file/readlink_spec.rb +17 -13
  1131. data/spec/framework_spec/app/spec/core/file/realdirpath_spec.rb +7 -0
  1132. data/spec/framework_spec/app/spec/core/file/realpath_spec.rb +7 -0
  1133. data/spec/framework_spec/app/spec/core/file/rename_spec.rb +24 -27
  1134. data/spec/framework_spec/app/spec/core/file/reopen_spec.rb +27 -0
  1135. data/spec/framework_spec/app/spec/core/file/setgid_spec.rb +21 -21
  1136. data/spec/framework_spec/app/spec/core/file/setuid_spec.rb +21 -21
  1137. data/spec/framework_spec/app/spec/core/file/shared/fnmatch.rb +11 -5
  1138. data/spec/framework_spec/app/spec/core/file/shared/open.rb +9 -0
  1139. data/spec/framework_spec/app/spec/core/file/shared/read.rb +21 -0
  1140. data/spec/framework_spec/app/spec/core/file/shared/stat.rb +31 -17
  1141. data/spec/framework_spec/app/spec/core/file/shared/unlink.rb +8 -4
  1142. data/spec/framework_spec/app/spec/core/file/size_spec.rb +111 -22
  1143. data/spec/framework_spec/app/spec/core/file/socket_spec.rb +24 -3
  1144. data/spec/framework_spec/app/spec/core/file/split_spec.rb +12 -7
  1145. data/spec/framework_spec/app/spec/core/file/stat/atime_spec.rb +6 -6
  1146. data/spec/framework_spec/app/spec/core/file/stat/blksize_spec.rb +6 -5
  1147. data/spec/framework_spec/app/spec/core/file/stat/blockdev_spec.rb +3 -3
  1148. data/spec/framework_spec/app/spec/core/file/stat/blocks_spec.rb +6 -5
  1149. data/spec/framework_spec/app/spec/core/file/stat/chardev_spec.rb +4 -4
  1150. data/spec/framework_spec/app/spec/core/file/stat/comparison_spec.rb +14 -9
  1151. data/spec/framework_spec/app/spec/core/file/stat/ctime_spec.rb +6 -6
  1152. data/spec/framework_spec/app/spec/core/file/stat/dev_major_spec.rb +12 -3
  1153. data/spec/framework_spec/app/spec/core/file/stat/dev_minor_spec.rb +13 -3
  1154. data/spec/framework_spec/app/spec/core/file/stat/dev_spec.rb +10 -2
  1155. data/spec/framework_spec/app/spec/core/file/stat/directory_spec.rb +3 -3
  1156. data/spec/framework_spec/app/spec/core/file/stat/executable_real_spec.rb +3 -3
  1157. data/spec/framework_spec/app/spec/core/file/stat/executable_spec.rb +3 -3
  1158. data/spec/framework_spec/app/spec/core/file/stat/file_spec.rb +3 -3
  1159. data/spec/framework_spec/app/spec/core/file/stat/ftype_spec.rb +14 -17
  1160. data/spec/framework_spec/app/spec/core/file/stat/gid_spec.rb +5 -5
  1161. data/spec/framework_spec/app/spec/core/file/stat/grpowned_spec.rb +3 -3
  1162. data/spec/framework_spec/app/spec/core/file/stat/ino_spec.rb +6 -5
  1163. data/spec/framework_spec/app/spec/core/file/stat/inspect_spec.rb +8 -10
  1164. data/spec/framework_spec/app/spec/core/file/stat/mode_spec.rb +6 -5
  1165. data/spec/framework_spec/app/spec/core/file/stat/mtime_spec.rb +6 -6
  1166. data/spec/framework_spec/app/spec/core/file/stat/new_spec.rb +11 -4
  1167. data/spec/framework_spec/app/spec/core/file/stat/nlink_spec.rb +5 -6
  1168. data/spec/framework_spec/app/spec/core/file/stat/owned_spec.rb +24 -4
  1169. data/spec/framework_spec/app/spec/core/file/stat/pipe_spec.rb +25 -4
  1170. data/spec/framework_spec/app/spec/core/file/stat/rdev_major_spec.rb +11 -3
  1171. data/spec/framework_spec/app/spec/core/file/stat/rdev_minor_spec.rb +13 -3
  1172. data/spec/framework_spec/app/spec/core/file/stat/rdev_spec.rb +10 -2
  1173. data/spec/framework_spec/app/spec/core/file/stat/readable_real_spec.rb +3 -3
  1174. data/spec/framework_spec/app/spec/core/file/stat/readable_spec.rb +3 -3
  1175. data/spec/framework_spec/app/spec/core/file/stat/setgid_spec.rb +3 -3
  1176. data/spec/framework_spec/app/spec/core/file/stat/setuid_spec.rb +3 -3
  1177. data/spec/framework_spec/app/spec/core/file/stat/size_spec.rb +18 -4
  1178. data/spec/framework_spec/app/spec/core/file/stat/socket_spec.rb +3 -3
  1179. data/spec/framework_spec/app/spec/core/file/stat/sticky_spec.rb +3 -3
  1180. data/spec/framework_spec/app/spec/core/file/stat/symlink_spec.rb +3 -3
  1181. data/spec/framework_spec/app/spec/core/file/stat/uid_spec.rb +5 -5
  1182. data/spec/framework_spec/app/spec/core/file/stat/world_readable_spec.rb +15 -0
  1183. data/spec/framework_spec/app/spec/core/file/stat/world_writable_spec.rb +17 -0
  1184. data/spec/framework_spec/app/spec/core/file/stat/writable_real_spec.rb +3 -3
  1185. data/spec/framework_spec/app/spec/core/file/stat/writable_spec.rb +3 -3
  1186. data/spec/framework_spec/app/spec/core/file/stat/zero_spec.rb +3 -3
  1187. data/spec/framework_spec/app/spec/core/file/stat_spec.rb +23 -6
  1188. data/spec/framework_spec/app/spec/core/file/sticky_spec.rb +49 -3
  1189. data/spec/framework_spec/app/spec/core/file/symlink_spec.rb +18 -11
  1190. data/spec/framework_spec/app/spec/core/file/to_path_spec.rb +48 -0
  1191. data/spec/framework_spec/app/spec/core/file/truncate_spec.rb +34 -39
  1192. data/spec/framework_spec/app/spec/core/file/umask_spec.rb +20 -21
  1193. data/spec/framework_spec/app/spec/core/file/unlink_spec.rb +2 -2
  1194. data/spec/framework_spec/app/spec/core/file/utime_spec.rb +20 -5
  1195. data/spec/framework_spec/app/spec/core/file/world_readable_spec.rb +14 -0
  1196. data/spec/framework_spec/app/spec/core/file/world_writable_spec.rb +16 -0
  1197. data/spec/framework_spec/app/spec/core/file/writable_real_spec.rb +2 -2
  1198. data/spec/framework_spec/app/spec/core/file/writable_spec.rb +2 -2
  1199. data/spec/framework_spec/app/spec/core/file/zero_spec.rb +2 -2
  1200. data/spec/framework_spec/app/spec/core/filetest/blockdev_spec.rb +2 -2
  1201. data/spec/framework_spec/app/spec/core/filetest/chardev_spec.rb +3 -3
  1202. data/spec/framework_spec/app/spec/core/filetest/directory_spec.rb +6 -2
  1203. data/spec/framework_spec/app/spec/core/filetest/executable_real_spec.rb +2 -2
  1204. data/spec/framework_spec/app/spec/core/filetest/executable_spec.rb +2 -2
  1205. data/spec/framework_spec/app/spec/core/filetest/exist_spec.rb +2 -2
  1206. data/spec/framework_spec/app/spec/core/filetest/exists_spec.rb +2 -2
  1207. data/spec/framework_spec/app/spec/core/filetest/file_spec.rb +6 -2
  1208. data/spec/framework_spec/app/spec/core/filetest/grpowned_spec.rb +6 -2
  1209. data/spec/framework_spec/app/spec/core/filetest/identical_spec.rb +2 -2
  1210. data/spec/framework_spec/app/spec/core/filetest/owned_spec.rb +6 -2
  1211. data/spec/framework_spec/app/spec/core/filetest/pipe_spec.rb +6 -2
  1212. data/spec/framework_spec/app/spec/core/filetest/readable_real_spec.rb +2 -2
  1213. data/spec/framework_spec/app/spec/core/filetest/readable_spec.rb +2 -2
  1214. data/spec/framework_spec/app/spec/core/filetest/setgid_spec.rb +6 -2
  1215. data/spec/framework_spec/app/spec/core/filetest/setuid_spec.rb +6 -2
  1216. data/spec/framework_spec/app/spec/core/filetest/size_spec.rb +31 -4
  1217. data/spec/framework_spec/app/spec/core/filetest/socket_spec.rb +6 -2
  1218. data/spec/framework_spec/app/spec/core/filetest/sticky_spec.rb +3 -2
  1219. data/spec/framework_spec/app/spec/core/filetest/symlink_spec.rb +5 -2
  1220. data/spec/framework_spec/app/spec/core/filetest/world_readable_spec.rb +7 -0
  1221. data/spec/framework_spec/app/spec/core/filetest/world_writable_spec.rb +7 -0
  1222. data/spec/framework_spec/app/spec/core/filetest/writable_real_spec.rb +2 -2
  1223. data/spec/framework_spec/app/spec/core/filetest/writable_spec.rb +2 -2
  1224. data/spec/framework_spec/app/spec/core/filetest/zero_spec.rb +2 -2
  1225. data/spec/framework_spec/app/spec/core/fixnum/abs_spec.rb +4 -8
  1226. data/spec/framework_spec/app/spec/core/fixnum/bit_and_spec.rb +6 -6
  1227. data/spec/framework_spec/app/spec/core/fixnum/bit_or_spec.rb +6 -6
  1228. data/spec/framework_spec/app/spec/core/fixnum/bit_xor_spec.rb +9 -9
  1229. data/spec/framework_spec/app/spec/core/fixnum/case_compare_spec.rb +7 -0
  1230. data/spec/framework_spec/app/spec/core/fixnum/coerce_spec.rb +2 -2
  1231. data/spec/framework_spec/app/spec/core/fixnum/comparison_spec.rb +3 -3
  1232. data/spec/framework_spec/app/spec/core/fixnum/complement_spec.rb +1 -1
  1233. data/spec/framework_spec/app/spec/core/fixnum/div_spec.rb +17 -7
  1234. data/spec/framework_spec/app/spec/core/fixnum/divide_spec.rb +7 -3
  1235. data/spec/framework_spec/app/spec/core/fixnum/divmod_spec.rb +16 -6
  1236. data/spec/framework_spec/app/spec/core/fixnum/element_reference_spec.rb +45 -19
  1237. data/spec/framework_spec/app/spec/core/fixnum/equal_value_spec.rb +5 -5
  1238. data/spec/framework_spec/app/spec/core/fixnum/even_spec.rb +7 -0
  1239. data/spec/framework_spec/app/spec/core/fixnum/exponent_spec.rb +59 -7
  1240. data/spec/framework_spec/app/spec/core/fixnum/fdiv_spec.rb +7 -0
  1241. data/spec/framework_spec/app/spec/core/fixnum/gt_spec.rb +4 -4
  1242. data/spec/framework_spec/app/spec/core/fixnum/gte_spec.rb +3 -3
  1243. data/spec/framework_spec/app/spec/core/fixnum/hash_spec.rb +1 -1
  1244. data/spec/framework_spec/app/spec/core/fixnum/id2name_spec.rb +15 -13
  1245. data/spec/framework_spec/app/spec/core/fixnum/induced_from_spec.rb +36 -35
  1246. data/spec/framework_spec/app/spec/core/fixnum/left_shift_spec.rb +72 -42
  1247. data/spec/framework_spec/app/spec/core/fixnum/lt_spec.rb +4 -4
  1248. data/spec/framework_spec/app/spec/core/fixnum/lte_spec.rb +3 -3
  1249. data/spec/framework_spec/app/spec/core/fixnum/magnitude_spec.rb +8 -0
  1250. data/spec/framework_spec/app/spec/core/fixnum/minus_spec.rb +3 -3
  1251. data/spec/framework_spec/app/spec/core/fixnum/modulo_spec.rb +2 -2
  1252. data/spec/framework_spec/app/spec/core/fixnum/multiply_spec.rb +3 -3
  1253. data/spec/framework_spec/app/spec/core/fixnum/odd_spec.rb +7 -0
  1254. data/spec/framework_spec/app/spec/core/fixnum/plus_spec.rb +1 -1
  1255. data/spec/framework_spec/app/spec/core/fixnum/quo_spec.rb +16 -6
  1256. data/spec/framework_spec/app/spec/core/fixnum/right_shift_spec.rb +84 -40
  1257. data/spec/framework_spec/app/spec/core/fixnum/shared/abs.rb +9 -0
  1258. data/spec/framework_spec/app/spec/core/fixnum/shared/modulo.rb +17 -7
  1259. data/spec/framework_spec/app/spec/core/fixnum/size_spec.rb +1 -1
  1260. data/spec/framework_spec/app/spec/core/fixnum/succ_spec.rb +7 -0
  1261. data/spec/framework_spec/app/spec/core/fixnum/to_f_spec.rb +1 -1
  1262. data/spec/framework_spec/app/spec/core/fixnum/to_s_spec.rb +2 -2
  1263. data/spec/framework_spec/app/spec/core/fixnum/to_sym_spec.rb +16 -14
  1264. data/spec/framework_spec/app/spec/core/fixnum/uminus_spec.rb +1 -1
  1265. data/spec/framework_spec/app/spec/core/fixnum/zero_spec.rb +2 -2
  1266. data/spec/framework_spec/app/spec/core/float/abs_spec.rb +2 -6
  1267. data/spec/framework_spec/app/spec/core/float/angle_spec.rb +7 -0
  1268. data/spec/framework_spec/app/spec/core/float/arg_spec.rb +7 -0
  1269. data/spec/framework_spec/app/spec/core/float/case_compare_spec.rb +7 -0
  1270. data/spec/framework_spec/app/spec/core/float/ceil_spec.rb +1 -1
  1271. data/spec/framework_spec/app/spec/core/float/coerce_spec.rb +1 -1
  1272. data/spec/framework_spec/app/spec/core/float/comparison_spec.rb +52 -1
  1273. data/spec/framework_spec/app/spec/core/float/constants_spec.rb +25 -17
  1274. data/spec/framework_spec/app/spec/core/float/denominator_spec.rb +31 -0
  1275. data/spec/framework_spec/app/spec/core/float/divide_spec.rb +7 -3
  1276. data/spec/framework_spec/app/spec/core/float/divmod_spec.rb +26 -1
  1277. data/spec/framework_spec/app/spec/core/float/eql_spec.rb +1 -1
  1278. data/spec/framework_spec/app/spec/core/float/equal_value_spec.rb +1 -1
  1279. data/spec/framework_spec/app/spec/core/float/exponent_spec.rb +10 -2
  1280. data/spec/framework_spec/app/spec/core/float/fdiv_spec.rb +68 -0
  1281. data/spec/framework_spec/app/spec/core/float/finite_spec.rb +3 -1
  1282. data/spec/framework_spec/app/spec/core/float/fixtures/coerce.rb +15 -0
  1283. data/spec/framework_spec/app/spec/core/float/floor_spec.rb +1 -1
  1284. data/spec/framework_spec/app/spec/core/float/gt_spec.rb +1 -1
  1285. data/spec/framework_spec/app/spec/core/float/gte_spec.rb +1 -1
  1286. data/spec/framework_spec/app/spec/core/float/hash_spec.rb +1 -1
  1287. data/spec/framework_spec/app/spec/core/float/induced_from_spec.rb +38 -37
  1288. data/spec/framework_spec/app/spec/core/float/infinite_spec.rb +1 -1
  1289. data/spec/framework_spec/app/spec/core/float/lt_spec.rb +1 -1
  1290. data/spec/framework_spec/app/spec/core/float/lte_spec.rb +1 -1
  1291. data/spec/framework_spec/app/spec/core/float/magnitude_spec.rb +7 -0
  1292. data/spec/framework_spec/app/spec/core/float/minus_spec.rb +1 -1
  1293. data/spec/framework_spec/app/spec/core/float/modulo_spec.rb +2 -2
  1294. data/spec/framework_spec/app/spec/core/float/multiply_spec.rb +4 -4
  1295. data/spec/framework_spec/app/spec/core/float/nan_spec.rb +1 -1
  1296. data/spec/framework_spec/app/spec/core/float/numerator_spec.rb +47 -0
  1297. data/spec/framework_spec/app/spec/core/float/phase_spec.rb +7 -0
  1298. data/spec/framework_spec/app/spec/core/float/plus_spec.rb +1 -1
  1299. data/spec/framework_spec/app/spec/core/float/quo_spec.rb +7 -0
  1300. data/spec/framework_spec/app/spec/core/float/rationalize_spec.rb +40 -0
  1301. data/spec/framework_spec/app/spec/core/float/round_spec.rb +32 -6
  1302. data/spec/framework_spec/app/spec/core/float/shared/abs.rb +9 -0
  1303. data/spec/framework_spec/app/spec/core/float/shared/modulo.rb +14 -3
  1304. data/spec/framework_spec/app/spec/core/float/to_f_spec.rb +1 -1
  1305. data/spec/framework_spec/app/spec/core/float/to_i_spec.rb +2 -2
  1306. data/spec/framework_spec/app/spec/core/float/to_int_spec.rb +6 -2
  1307. data/spec/framework_spec/app/spec/core/float/to_r_spec.rb +7 -0
  1308. data/spec/framework_spec/app/spec/core/float/to_s_spec.rb +93 -18
  1309. data/spec/framework_spec/app/spec/core/float/truncate_spec.rb +2 -2
  1310. data/spec/framework_spec/app/spec/core/float/uminus_spec.rb +1 -1
  1311. data/spec/framework_spec/app/spec/core/float/uplus_spec.rb +4 -4
  1312. data/spec/framework_spec/app/spec/core/float/zero_spec.rb +1 -1
  1313. data/spec/framework_spec/app/spec/core/gc/count_spec.rb +7 -0
  1314. data/spec/framework_spec/app/spec/core/gc/disable_spec.rb +17 -1
  1315. data/spec/framework_spec/app/spec/core/gc/enable_spec.rb +12 -1
  1316. data/spec/framework_spec/app/spec/core/gc/garbage_collect_spec.rb +15 -1
  1317. data/spec/framework_spec/app/spec/core/gc/profiler/clear_spec.rb +7 -0
  1318. data/spec/framework_spec/app/spec/core/gc/profiler/disable_spec.rb +7 -0
  1319. data/spec/framework_spec/app/spec/core/gc/profiler/enable_spec.rb +7 -0
  1320. data/spec/framework_spec/app/spec/core/gc/profiler/enabled_spec.rb +7 -0
  1321. data/spec/framework_spec/app/spec/core/gc/profiler/report_spec.rb +7 -0
  1322. data/spec/framework_spec/app/spec/core/gc/profiler/result_spec.rb +7 -0
  1323. data/spec/framework_spec/app/spec/core/gc/profiler/total_time_spec.rb +7 -0
  1324. data/spec/framework_spec/app/spec/core/gc/start_spec.rb +8 -1
  1325. data/spec/framework_spec/app/spec/core/gc/stress_spec.rb +30 -0
  1326. data/spec/framework_spec/app/spec/core/hash/allocate_spec.rb +2 -2
  1327. data/spec/framework_spec/app/spec/core/hash/assoc_spec.rb +43 -0
  1328. data/spec/framework_spec/app/spec/core/hash/clear_spec.rb +2 -2
  1329. data/spec/framework_spec/app/spec/core/hash/clone_spec.rb +1 -1
  1330. data/spec/framework_spec/app/spec/core/hash/compare_by_identity_spec.rb +109 -0
  1331. data/spec/framework_spec/app/spec/core/hash/constructor_spec.rb +8 -4
  1332. data/spec/framework_spec/app/spec/core/hash/default_proc_spec.rb +24 -4
  1333. data/spec/framework_spec/app/spec/core/hash/default_spec.rb +4 -4
  1334. data/spec/framework_spec/app/spec/core/hash/delete_if_spec.rb +3 -3
  1335. data/spec/framework_spec/app/spec/core/hash/delete_spec.rb +2 -2
  1336. data/spec/framework_spec/app/spec/core/hash/each_key_spec.rb +3 -3
  1337. data/spec/framework_spec/app/spec/core/hash/each_pair_spec.rb +5 -5
  1338. data/spec/framework_spec/app/spec/core/hash/each_spec.rb +4 -4
  1339. data/spec/framework_spec/app/spec/core/hash/each_value_spec.rb +3 -3
  1340. data/spec/framework_spec/app/spec/core/hash/element_reference_spec.rb +111 -115
  1341. data/spec/framework_spec/app/spec/core/hash/element_set_spec.rb +7 -8
  1342. data/spec/framework_spec/app/spec/core/hash/empty_spec.rb +2 -2
  1343. data/spec/framework_spec/app/spec/core/hash/eql_spec.rb +18 -19
  1344. data/spec/framework_spec/app/spec/core/hash/equal_value_spec.rb +18 -14
  1345. data/spec/framework_spec/app/spec/core/hash/fetch_spec.rb +2 -2
  1346. data/spec/framework_spec/app/spec/core/hash/fixtures/classes.rb +1 -1
  1347. data/spec/framework_spec/app/spec/core/hash/flatten_spec.rb +64 -0
  1348. data/spec/framework_spec/app/spec/core/hash/has_key_spec.rb +8 -9
  1349. data/spec/framework_spec/app/spec/core/hash/has_value_spec.rb +3 -3
  1350. data/spec/framework_spec/app/spec/core/hash/hash_spec.rb +20 -1
  1351. data/spec/framework_spec/app/spec/core/hash/include_spec.rb +7 -8
  1352. data/spec/framework_spec/app/spec/core/hash/index_spec.rb +3 -3
  1353. data/spec/framework_spec/app/spec/core/hash/indexes_spec.rb +3 -3
  1354. data/spec/framework_spec/app/spec/core/hash/indices_spec.rb +3 -3
  1355. data/spec/framework_spec/app/spec/core/hash/initialize_copy_spec.rb +3 -3
  1356. data/spec/framework_spec/app/spec/core/hash/initialize_spec.rb +8 -3
  1357. data/spec/framework_spec/app/spec/core/hash/inspect_spec.rb +3 -41
  1358. data/spec/framework_spec/app/spec/core/hash/invert_spec.rb +2 -2
  1359. data/spec/framework_spec/app/spec/core/hash/keep_if_spec.rb +31 -0
  1360. data/spec/framework_spec/app/spec/core/hash/key_spec.rb +14 -15
  1361. data/spec/framework_spec/app/spec/core/hash/keys_spec.rb +4 -4
  1362. data/spec/framework_spec/app/spec/core/hash/length_spec.rb +3 -3
  1363. data/spec/framework_spec/app/spec/core/hash/member_spec.rb +7 -8
  1364. data/spec/framework_spec/app/spec/core/hash/merge_spec.rb +10 -17
  1365. data/spec/framework_spec/app/spec/core/hash/new_spec.rb +2 -2
  1366. data/spec/framework_spec/app/spec/core/hash/rassoc_spec.rb +39 -0
  1367. data/spec/framework_spec/app/spec/core/hash/rehash_spec.rb +51 -60
  1368. data/spec/framework_spec/app/spec/core/hash/reject_spec.rb +18 -12
  1369. data/spec/framework_spec/app/spec/core/hash/replace_spec.rb +3 -3
  1370. data/spec/framework_spec/app/spec/core/hash/select_spec.rb +38 -5
  1371. data/spec/framework_spec/app/spec/core/hash/shared/each.rb +46 -6
  1372. data/spec/framework_spec/app/spec/core/hash/shared/eql.rb +14 -1
  1373. data/spec/framework_spec/app/spec/core/hash/shared/index.rb +2 -2
  1374. data/spec/framework_spec/app/spec/core/hash/shared/iteration.rb +2 -2
  1375. data/spec/framework_spec/app/spec/core/hash/shared/key.rb +5 -3
  1376. data/spec/framework_spec/app/spec/core/hash/shared/replace.rb +22 -11
  1377. data/spec/framework_spec/app/spec/core/hash/shared/store.rb +14 -1
  1378. data/spec/framework_spec/app/spec/core/hash/shared/to_s.rb +22 -21
  1379. data/spec/framework_spec/app/spec/core/hash/shared/update.rb +27 -8
  1380. data/spec/framework_spec/app/spec/core/hash/shift_spec.rb +3 -3
  1381. data/spec/framework_spec/app/spec/core/hash/size_spec.rb +3 -3
  1382. data/spec/framework_spec/app/spec/core/hash/sort_spec.rb +2 -2
  1383. data/spec/framework_spec/app/spec/core/hash/store_spec.rb +7 -8
  1384. data/spec/framework_spec/app/spec/core/hash/to_a_spec.rb +16 -3
  1385. data/spec/framework_spec/app/spec/core/hash/to_hash_spec.rb +2 -2
  1386. data/spec/framework_spec/app/spec/core/hash/to_s_spec.rb +5 -5
  1387. data/spec/framework_spec/app/spec/core/hash/try_convert_spec.rb +32 -0
  1388. data/spec/framework_spec/app/spec/core/hash/update_spec.rb +3 -3
  1389. data/spec/framework_spec/app/spec/core/hash/value_spec.rb +3 -3
  1390. data/spec/framework_spec/app/spec/core/hash/values_at_spec.rb +4 -4
  1391. data/spec/framework_spec/app/spec/core/hash/values_spec.rb +3 -3
  1392. data/spec/framework_spec/app/spec/core/integer/ceil_spec.rb +2 -2
  1393. data/spec/framework_spec/app/spec/core/integer/chr_spec.rb +141 -18
  1394. data/spec/framework_spec/app/spec/core/integer/denominator_spec.rb +22 -0
  1395. data/spec/framework_spec/app/spec/core/integer/downto_spec.rb +5 -5
  1396. data/spec/framework_spec/app/spec/core/integer/even_spec.rb +2 -2
  1397. data/spec/framework_spec/app/spec/core/integer/floor_spec.rb +2 -2
  1398. data/spec/framework_spec/app/spec/core/integer/gcd_spec.rb +60 -0
  1399. data/spec/framework_spec/app/spec/core/integer/gcdlcm_spec.rb +55 -0
  1400. data/spec/framework_spec/app/spec/core/integer/induced_from_spec.rb +43 -42
  1401. data/spec/framework_spec/app/spec/core/integer/integer_spec.rb +2 -2
  1402. data/spec/framework_spec/app/spec/core/integer/lcm_spec.rb +60 -0
  1403. data/spec/framework_spec/app/spec/core/integer/next_spec.rb +2 -2
  1404. data/spec/framework_spec/app/spec/core/integer/numerator_spec.rb +20 -0
  1405. data/spec/framework_spec/app/spec/core/integer/odd_spec.rb +1 -1
  1406. data/spec/framework_spec/app/spec/core/integer/ord_spec.rb +4 -4
  1407. data/spec/framework_spec/app/spec/core/integer/pred_spec.rb +3 -3
  1408. data/spec/framework_spec/app/spec/core/integer/rationalize_spec.rb +7 -0
  1409. data/spec/framework_spec/app/spec/core/integer/round_spec.rb +35 -2
  1410. data/spec/framework_spec/app/spec/core/integer/shared/next.rb +1 -1
  1411. data/spec/framework_spec/app/spec/core/integer/succ_spec.rb +2 -2
  1412. data/spec/framework_spec/app/spec/core/integer/times_spec.rb +9 -9
  1413. data/spec/framework_spec/app/spec/core/integer/to_i_spec.rb +2 -2
  1414. data/spec/framework_spec/app/spec/core/integer/to_int_spec.rb +2 -2
  1415. data/spec/framework_spec/app/spec/core/integer/to_r_spec.rb +28 -0
  1416. data/spec/framework_spec/app/spec/core/integer/truncate_spec.rb +2 -2
  1417. data/spec/framework_spec/app/spec/core/integer/upto_spec.rb +8 -8
  1418. data/spec/framework_spec/app/spec/core/io/binmode_spec.rb +21 -5
  1419. data/spec/framework_spec/app/spec/core/io/binread_spec.rb +7 -0
  1420. data/spec/framework_spec/app/spec/core/io/bytes_spec.rb +27 -16
  1421. data/spec/framework_spec/app/spec/core/io/chars_spec.rb +35 -19
  1422. data/spec/framework_spec/app/spec/core/io/close_on_exec_spec.rb +13 -0
  1423. data/spec/framework_spec/app/spec/core/io/close_read_spec.rb +29 -29
  1424. data/spec/framework_spec/app/spec/core/io/close_spec.rb +15 -19
  1425. data/spec/framework_spec/app/spec/core/io/close_write_spec.rb +13 -14
  1426. data/spec/framework_spec/app/spec/core/io/closed_spec.rb +15 -7
  1427. data/spec/framework_spec/app/spec/core/io/codepoints_spec.rb +29 -0
  1428. data/spec/framework_spec/app/spec/core/io/constants_spec.rb +1 -1
  1429. data/spec/framework_spec/app/spec/core/io/copy_stream_spec.rb +50 -0
  1430. data/spec/framework_spec/app/spec/core/io/dup_spec.rb +5 -5
  1431. data/spec/framework_spec/app/spec/core/io/each_byte_spec.rb +32 -26
  1432. data/spec/framework_spec/app/spec/core/io/each_char_spec.rb +35 -22
  1433. data/spec/framework_spec/app/spec/core/io/each_codepoint_spec.rb +34 -0
  1434. data/spec/framework_spec/app/spec/core/io/each_line_spec.rb +7 -5
  1435. data/spec/framework_spec/app/spec/core/io/each_spec.rb +8 -6
  1436. data/spec/framework_spec/app/spec/core/io/eof_spec.rb +59 -45
  1437. data/spec/framework_spec/app/spec/core/io/external_encoding_spec.rb +7 -0
  1438. data/spec/framework_spec/app/spec/core/io/fcntl_spec.rb +5 -5
  1439. data/spec/framework_spec/app/spec/core/io/fdatasync_spec.rb +7 -0
  1440. data/spec/framework_spec/app/spec/core/io/fileno_spec.rb +5 -5
  1441. data/spec/framework_spec/app/spec/core/io/fixtures/classes.rb +57 -15
  1442. data/spec/framework_spec/app/spec/core/io/fixtures/empty.txt +0 -0
  1443. data/spec/framework_spec/app/spec/core/io/fixtures/{gets.txt → lines.txt} +0 -0
  1444. data/spec/framework_spec/app/spec/core/io/fixtures/reopen_stdout.rb +3 -0
  1445. data/spec/framework_spec/app/spec/core/io/flush_spec.rb +5 -5
  1446. data/spec/framework_spec/app/spec/core/io/for_fd_spec.rb +6 -2
  1447. data/spec/framework_spec/app/spec/core/io/foreach_spec.rb +132 -90
  1448. data/spec/framework_spec/app/spec/core/io/fsync_spec.rb +15 -15
  1449. data/spec/framework_spec/app/spec/core/io/getbyte_spec.rb +27 -21
  1450. data/spec/framework_spec/app/spec/core/io/getc_spec.rb +30 -24
  1451. data/spec/framework_spec/app/spec/core/io/gets_spec.rb +144 -127
  1452. data/spec/framework_spec/app/spec/core/io/initialize_copy_spec.rb +1 -1
  1453. data/spec/framework_spec/app/spec/core/io/initialize_spec.rb +33 -16
  1454. data/spec/framework_spec/app/spec/core/io/inspect_spec.rb +4 -15
  1455. data/spec/framework_spec/app/spec/core/io/internal_encoding_spec.rb +7 -0
  1456. data/spec/framework_spec/app/spec/core/io/io_spec.rb +1 -5
  1457. data/spec/framework_spec/app/spec/core/io/ioctl_spec.rb +42 -5
  1458. data/spec/framework_spec/app/spec/core/io/isatty_spec.rb +2 -2
  1459. data/spec/framework_spec/app/spec/core/io/lineno_spec.rb +65 -52
  1460. data/spec/framework_spec/app/spec/core/io/lines_spec.rb +28 -22
  1461. data/spec/framework_spec/app/spec/core/io/new_spec.rb +6 -2
  1462. data/spec/framework_spec/app/spec/core/io/open_spec.rb +52 -49
  1463. data/spec/framework_spec/app/spec/core/io/output_spec.rb +22 -14
  1464. data/spec/framework_spec/app/spec/core/io/pid_spec.rb +20 -11
  1465. data/spec/framework_spec/app/spec/core/io/pipe_spec.rb +10 -1
  1466. data/spec/framework_spec/app/spec/core/io/popen_spec.rb +107 -37
  1467. data/spec/framework_spec/app/spec/core/io/pos_spec.rb +5 -44
  1468. data/spec/framework_spec/app/spec/core/io/print_spec.rb +56 -59
  1469. data/spec/framework_spec/app/spec/core/io/printf_spec.rb +25 -19
  1470. data/spec/framework_spec/app/spec/core/io/putc_spec.rb +5 -43
  1471. data/spec/framework_spec/app/spec/core/io/puts_spec.rb +28 -16
  1472. data/spec/framework_spec/app/spec/core/io/read_nonblock_spec.rb +54 -3
  1473. data/spec/framework_spec/app/spec/core/io/read_spec.rb +127 -50
  1474. data/spec/framework_spec/app/spec/core/io/readbyte_spec.rb +29 -0
  1475. data/spec/framework_spec/app/spec/core/io/readchar_spec.rb +31 -31
  1476. data/spec/framework_spec/app/spec/core/io/readline_spec.rb +29 -25
  1477. data/spec/framework_spec/app/spec/core/io/readlines_spec.rb +174 -146
  1478. data/spec/framework_spec/app/spec/core/io/readpartial_spec.rb +16 -4
  1479. data/spec/framework_spec/app/spec/core/io/reopen_spec.rb +226 -82
  1480. data/spec/framework_spec/app/spec/core/io/rewind_spec.rb +8 -9
  1481. data/spec/framework_spec/app/spec/core/io/seek_spec.rb +21 -29
  1482. data/spec/framework_spec/app/spec/core/io/select_spec.rb +34 -7
  1483. data/spec/framework_spec/app/spec/core/io/set_encoding_spec.rb +7 -0
  1484. data/spec/framework_spec/app/spec/core/io/shared/codepoints.rb +46 -0
  1485. data/spec/framework_spec/app/spec/core/io/shared/each.rb +97 -112
  1486. data/spec/framework_spec/app/spec/core/io/shared/gets_ascii.rb +27 -0
  1487. data/spec/framework_spec/app/spec/core/io/shared/new.rb +74 -99
  1488. data/spec/framework_spec/app/spec/core/io/shared/pos.rb +43 -4
  1489. data/spec/framework_spec/app/spec/core/io/shared/tty.rb +10 -7
  1490. data/spec/framework_spec/app/spec/core/io/shared/write.rb +4 -4
  1491. data/spec/framework_spec/app/spec/core/io/stat_spec.rb +20 -7
  1492. data/spec/framework_spec/app/spec/core/io/sync_spec.rb +12 -10
  1493. data/spec/framework_spec/app/spec/core/io/sysopen_spec.rb +32 -14
  1494. data/spec/framework_spec/app/spec/core/io/sysread_spec.rb +12 -10
  1495. data/spec/framework_spec/app/spec/core/io/sysseek_spec.rb +17 -42
  1496. data/spec/framework_spec/app/spec/core/io/syswrite_spec.rb +10 -9
  1497. data/spec/framework_spec/app/spec/core/io/tell_spec.rb +3 -3
  1498. data/spec/framework_spec/app/spec/core/io/to_i_spec.rb +5 -5
  1499. data/spec/framework_spec/app/spec/core/io/to_io_spec.rb +15 -10
  1500. data/spec/framework_spec/app/spec/core/io/try_convert_spec.rb +47 -0
  1501. data/spec/framework_spec/app/spec/core/io/tty_spec.rb +2 -2
  1502. data/spec/framework_spec/app/spec/core/io/ungetbyte_spec.rb +7 -0
  1503. data/spec/framework_spec/app/spec/core/io/ungetc_spec.rb +55 -48
  1504. data/spec/framework_spec/app/spec/core/io/write_nonblock_spec.rb +6 -5
  1505. data/spec/framework_spec/app/spec/core/io/write_spec.rb +17 -12
  1506. data/spec/framework_spec/app/spec/core/kernel/Array_spec.rb +76 -31
  1507. data/spec/framework_spec/app/spec/core/kernel/Complex_spec.rb +7 -0
  1508. data/spec/framework_spec/app/spec/core/kernel/Float_spec.rb +18 -13
  1509. data/spec/framework_spec/app/spec/core/kernel/Integer_spec.rb +243 -7
  1510. data/spec/framework_spec/app/spec/core/kernel/Rational_spec.rb +7 -0
  1511. data/spec/framework_spec/app/spec/core/kernel/String_spec.rb +65 -33
  1512. data/spec/framework_spec/app/spec/core/kernel/__callee___spec.rb +9 -0
  1513. data/spec/framework_spec/app/spec/core/kernel/__id___spec.rb +4 -4
  1514. data/spec/framework_spec/app/spec/core/kernel/__method___spec.rb +41 -0
  1515. data/spec/framework_spec/app/spec/core/kernel/__send___spec.rb +2 -2
  1516. data/spec/framework_spec/app/spec/core/kernel/abort_spec.rb +6 -3
  1517. data/spec/framework_spec/app/spec/core/kernel/at_exit_spec.rb +16 -11
  1518. data/spec/framework_spec/app/spec/core/kernel/autoload_spec.rb +127 -114
  1519. data/spec/framework_spec/app/spec/core/kernel/backtick_spec.rb +24 -24
  1520. data/spec/framework_spec/app/spec/core/kernel/binding_spec.rb +45 -23
  1521. data/spec/framework_spec/app/spec/core/kernel/block_given_spec.rb +3 -3
  1522. data/spec/framework_spec/app/spec/core/kernel/callcc_spec.rb +9 -65
  1523. data/spec/framework_spec/app/spec/core/kernel/caller_spec.rb +162 -91
  1524. data/spec/framework_spec/app/spec/core/kernel/case_compare_spec.rb +2 -2
  1525. data/spec/framework_spec/app/spec/core/kernel/catch_spec.rb +70 -13
  1526. data/spec/framework_spec/app/spec/core/kernel/chomp_spec.rb +19 -15
  1527. data/spec/framework_spec/app/spec/core/kernel/chop_spec.rb +19 -15
  1528. data/spec/framework_spec/app/spec/core/kernel/class_spec.rb +2 -2
  1529. data/spec/framework_spec/app/spec/core/kernel/clone_spec.rb +8 -2
  1530. data/spec/framework_spec/app/spec/core/kernel/comparison_spec.rb +33 -0
  1531. data/spec/framework_spec/app/spec/core/kernel/const_lookup_spec.rb +7 -0
  1532. data/spec/framework_spec/app/spec/core/kernel/{define_singleton_method.rb → define_singleton_method_spec.rb} +31 -9
  1533. data/spec/framework_spec/app/spec/core/kernel/display_spec.rb +2 -2
  1534. data/spec/framework_spec/app/spec/core/kernel/dup_spec.rb +2 -2
  1535. data/spec/framework_spec/app/spec/core/kernel/enum_for_spec.rb +7 -0
  1536. data/spec/framework_spec/app/spec/core/kernel/eql_spec.rb +5 -5
  1537. data/spec/framework_spec/app/spec/core/kernel/equal_spec.rb +32 -3
  1538. data/spec/framework_spec/app/spec/core/kernel/equal_value_spec.rb +4 -4
  1539. data/spec/framework_spec/app/spec/core/kernel/eval_spec.rb +285 -182
  1540. data/spec/framework_spec/app/spec/core/kernel/exec_spec.rb +18 -5
  1541. data/spec/framework_spec/app/spec/core/kernel/exit_spec.rb +70 -4
  1542. data/spec/framework_spec/app/spec/core/kernel/extend_spec.rb +29 -7
  1543. data/spec/framework_spec/app/spec/core/kernel/fail_spec.rb +4 -4
  1544. data/spec/framework_spec/app/spec/core/kernel/fixtures/__method__.rb +25 -0
  1545. data/spec/framework_spec/app/spec/core/kernel/fixtures/autoload_d.rb +5 -0
  1546. data/spec/framework_spec/app/spec/core/kernel/fixtures/caller_fixture1.rb +1 -1
  1547. data/spec/framework_spec/app/spec/core/kernel/fixtures/classes.rb +173 -67
  1548. data/spec/framework_spec/app/spec/core/kernel/fixtures/eval_locals.rb +6 -0
  1549. data/spec/framework_spec/app/spec/core/kernel/fixtures/test.rb +80 -80
  1550. data/spec/framework_spec/app/spec/core/kernel/fork_spec.rb +10 -8
  1551. data/spec/framework_spec/app/spec/core/kernel/format_spec.rb +2 -2
  1552. data/spec/framework_spec/app/spec/core/kernel/freeze_spec.rb +75 -37
  1553. data/spec/framework_spec/app/spec/core/kernel/frozen_spec.rb +2 -2
  1554. data/spec/framework_spec/app/spec/core/kernel/getc_spec.rb +10 -8
  1555. data/spec/framework_spec/app/spec/core/kernel/gets_spec.rb +2 -2
  1556. data/spec/framework_spec/app/spec/core/kernel/global_variables_spec.rb +24 -12
  1557. data/spec/framework_spec/app/spec/core/kernel/gsub_spec.rb +76 -72
  1558. data/spec/framework_spec/app/spec/core/kernel/hash_spec.rb +2 -2
  1559. data/spec/framework_spec/app/spec/core/kernel/id_spec.rb +2 -2
  1560. data/spec/framework_spec/app/spec/core/kernel/initialize_clone_spec.rb +7 -0
  1561. data/spec/framework_spec/app/spec/core/kernel/initialize_copy_spec.rb +2 -2
  1562. data/spec/framework_spec/app/spec/core/kernel/initialize_dup_spec.rb +7 -0
  1563. data/spec/framework_spec/app/spec/core/kernel/inspect_spec.rb +2 -2
  1564. data/spec/framework_spec/app/spec/core/kernel/instance_eval_spec.rb +154 -113
  1565. data/spec/framework_spec/app/spec/core/kernel/instance_of_spec.rb +1 -1
  1566. data/spec/framework_spec/app/spec/core/kernel/instance_variable_defined_spec.rb +1 -1
  1567. data/spec/framework_spec/app/spec/core/kernel/instance_variable_get_spec.rb +16 -2
  1568. data/spec/framework_spec/app/spec/core/kernel/instance_variable_set_spec.rb +25 -12
  1569. data/spec/framework_spec/app/spec/core/kernel/instance_variables_spec.rb +48 -3
  1570. data/spec/framework_spec/app/spec/core/kernel/is_a_spec.rb +1 -1
  1571. data/spec/framework_spec/app/spec/core/kernel/iterator_spec.rb +2 -2
  1572. data/spec/framework_spec/app/spec/core/kernel/kind_of_spec.rb +1 -1
  1573. data/spec/framework_spec/app/spec/core/kernel/lambda_spec.rb +68 -7
  1574. data/spec/framework_spec/app/spec/core/kernel/load_spec.rb +22 -217
  1575. data/spec/framework_spec/app/spec/core/kernel/local_variables_spec.rb +38 -18
  1576. data/spec/framework_spec/app/spec/core/kernel/loop_spec.rb +3 -3
  1577. data/spec/framework_spec/app/spec/core/kernel/match_spec.rb +2 -2
  1578. data/spec/framework_spec/app/spec/core/kernel/method_missing_spec.rb +9 -54
  1579. data/spec/framework_spec/app/spec/core/kernel/method_spec.rb +29 -31
  1580. data/spec/framework_spec/app/spec/core/kernel/methods_spec.rb +93 -78
  1581. data/spec/framework_spec/app/spec/core/kernel/nil_spec.rb +2 -2
  1582. data/spec/framework_spec/app/spec/core/kernel/not_match_spec.rb +7 -0
  1583. data/spec/framework_spec/app/spec/core/kernel/object_id_spec.rb +4 -4
  1584. data/spec/framework_spec/app/spec/core/kernel/open_spec.rb +30 -32
  1585. data/spec/framework_spec/app/spec/core/kernel/p_spec.rb +29 -29
  1586. data/spec/framework_spec/app/spec/core/kernel/print_spec.rb +2 -2
  1587. data/spec/framework_spec/app/spec/core/kernel/printf_spec.rb +2 -2
  1588. data/spec/framework_spec/app/spec/core/kernel/private_methods_spec.rb +82 -14
  1589. data/spec/framework_spec/app/spec/core/kernel/proc_spec.rb +22 -4
  1590. data/spec/framework_spec/app/spec/core/kernel/protected_methods_spec.rb +44 -2
  1591. data/spec/framework_spec/app/spec/core/kernel/public_method_spec.rb +37 -0
  1592. data/spec/framework_spec/app/spec/core/kernel/public_methods_spec.rb +70 -12
  1593. data/spec/framework_spec/app/spec/core/kernel/public_send_spec.rb +76 -0
  1594. data/spec/framework_spec/app/spec/core/kernel/putc_spec.rb +31 -4
  1595. data/spec/framework_spec/app/spec/core/kernel/puts_spec.rb +100 -87
  1596. data/spec/framework_spec/app/spec/core/kernel/raise_spec.rb +3 -3
  1597. data/spec/framework_spec/app/spec/core/kernel/rand_spec.rb +39 -13
  1598. data/spec/framework_spec/app/spec/core/kernel/readline_spec.rb +2 -2
  1599. data/spec/framework_spec/app/spec/core/kernel/readlines_spec.rb +2 -2
  1600. data/spec/framework_spec/app/spec/core/kernel/remove_instance_variable_spec.rb +32 -2
  1601. data/spec/framework_spec/app/spec/core/kernel/require_relative_spec.rb +154 -0
  1602. data/spec/framework_spec/app/spec/core/kernel/require_spec.rb +20 -289
  1603. data/spec/framework_spec/app/spec/core/kernel/respond_to_missing_spec.rb +88 -0
  1604. data/spec/framework_spec/app/spec/core/kernel/respond_to_spec.rb +41 -33
  1605. data/spec/framework_spec/app/spec/core/kernel/scan_spec.rb +10 -8
  1606. data/spec/framework_spec/app/spec/core/kernel/select_spec.rb +2 -2
  1607. data/spec/framework_spec/app/spec/core/kernel/send_spec.rb +31 -65
  1608. data/spec/framework_spec/app/spec/core/kernel/set_trace_func_spec.rb +2 -2
  1609. data/spec/framework_spec/app/spec/core/kernel/shared/__method__.rb +6 -7
  1610. data/spec/framework_spec/app/spec/core/kernel/shared/abort.rb +26 -0
  1611. data/spec/framework_spec/app/spec/core/kernel/shared/lambda.rb +12 -25
  1612. data/spec/framework_spec/app/spec/core/kernel/shared/load.rb +93 -0
  1613. data/spec/framework_spec/app/spec/core/kernel/shared/method.rb +59 -0
  1614. data/spec/framework_spec/app/spec/core/kernel/shared/object_id.rb +22 -6
  1615. data/spec/framework_spec/app/spec/core/kernel/shared/require.rb +529 -0
  1616. data/spec/framework_spec/app/spec/core/kernel/shared/send.rb +110 -0
  1617. data/spec/framework_spec/app/spec/core/kernel/singleton_class_spec.rb +30 -0
  1618. data/spec/framework_spec/app/spec/core/kernel/singleton_method_added_spec.rb +6 -5
  1619. data/spec/framework_spec/app/spec/core/kernel/singleton_method_removed_spec.rb +5 -5
  1620. data/spec/framework_spec/app/spec/core/kernel/singleton_method_undefined_spec.rb +4 -5
  1621. data/spec/framework_spec/app/spec/core/kernel/singleton_methods_spec.rb +179 -58
  1622. data/spec/framework_spec/app/spec/core/kernel/sleep_spec.rb +18 -19
  1623. data/spec/framework_spec/app/spec/core/kernel/spawn_spec.rb +152 -0
  1624. data/spec/framework_spec/app/spec/core/kernel/split_spec.rb +10 -8
  1625. data/spec/framework_spec/app/spec/core/kernel/sprintf_spec.rb +351 -5
  1626. data/spec/framework_spec/app/spec/core/kernel/srand_spec.rb +33 -6
  1627. data/spec/framework_spec/app/spec/core/kernel/sub_spec.rb +19 -15
  1628. data/spec/framework_spec/app/spec/core/kernel/syscall_spec.rb +2 -2
  1629. data/spec/framework_spec/app/spec/core/kernel/system_spec.rb +90 -61
  1630. data/spec/framework_spec/app/spec/core/kernel/taint_spec.rb +9 -4
  1631. data/spec/framework_spec/app/spec/core/kernel/tainted_spec.rb +3 -3
  1632. data/spec/framework_spec/app/spec/core/kernel/tap_spec.rb +5 -5
  1633. data/spec/framework_spec/app/spec/core/kernel/test_spec.rb +36 -16
  1634. data/spec/framework_spec/app/spec/core/kernel/throw_spec.rb +29 -24
  1635. data/spec/framework_spec/app/spec/core/kernel/to_a_spec.rb +17 -15
  1636. data/spec/framework_spec/app/spec/core/kernel/to_enum_spec.rb +7 -0
  1637. data/spec/framework_spec/app/spec/core/kernel/to_s_spec.rb +2 -2
  1638. data/spec/framework_spec/app/spec/core/kernel/trace_var_spec.rb +2 -2
  1639. data/spec/framework_spec/app/spec/core/kernel/trap_spec.rb +2 -2
  1640. data/spec/framework_spec/app/spec/core/kernel/trust_spec.rb +2 -2
  1641. data/spec/framework_spec/app/spec/core/kernel/type_spec.rb +2 -2
  1642. data/spec/framework_spec/app/spec/core/kernel/untaint_spec.rb +2 -2
  1643. data/spec/framework_spec/app/spec/core/kernel/untrace_var_spec.rb +2 -2
  1644. data/spec/framework_spec/app/spec/core/kernel/untrust_spec.rb +2 -2
  1645. data/spec/framework_spec/app/spec/core/kernel/untrusted_spec.rb +2 -2
  1646. data/spec/framework_spec/app/spec/core/kernel/warn_spec.rb +59 -60
  1647. data/spec/framework_spec/app/spec/core/marshal/dump_spec.rb +314 -70
  1648. data/spec/framework_spec/app/spec/core/marshal/fixtures/marshal_data.rb +165 -0
  1649. data/spec/framework_spec/app/spec/core/marshal/fixtures/random.dump +0 -0
  1650. data/spec/framework_spec/app/spec/core/marshal/load_spec.rb +483 -170
  1651. data/spec/framework_spec/app/spec/core/marshal/restore_spec.rb +5 -1
  1652. data/spec/framework_spec/app/spec/core/matchdata/begin_spec.rb +1 -1
  1653. data/spec/framework_spec/app/spec/core/matchdata/captures_spec.rb +1 -1
  1654. data/spec/framework_spec/app/spec/core/matchdata/element_reference_spec.rb +3 -1
  1655. data/spec/framework_spec/app/spec/core/matchdata/end_spec.rb +2 -2
  1656. data/spec/framework_spec/app/spec/core/matchdata/eql_spec.rb +8 -0
  1657. data/spec/framework_spec/app/spec/core/matchdata/equal_value_spec.rb +8 -0
  1658. data/spec/framework_spec/app/spec/core/matchdata/hash_spec.rb +7 -0
  1659. data/spec/framework_spec/app/spec/core/matchdata/initialize_copy_spec.rb +1 -1
  1660. data/spec/framework_spec/app/spec/core/matchdata/inspect_spec.rb +19 -1
  1661. data/spec/framework_spec/app/spec/core/matchdata/length_spec.rb +2 -2
  1662. data/spec/framework_spec/app/spec/core/matchdata/names_spec.rb +3 -0
  1663. data/spec/framework_spec/app/spec/core/matchdata/offset_spec.rb +1 -1
  1664. data/spec/framework_spec/app/spec/core/matchdata/post_match_spec.rb +2 -2
  1665. data/spec/framework_spec/app/spec/core/matchdata/pre_match_spec.rb +1 -1
  1666. data/spec/framework_spec/app/spec/core/matchdata/regexp_spec.rb +15 -0
  1667. data/spec/framework_spec/app/spec/core/matchdata/select_spec.rb +1 -1
  1668. data/spec/framework_spec/app/spec/core/matchdata/shared/eql.rb +26 -0
  1669. data/spec/framework_spec/app/spec/core/matchdata/size_spec.rb +2 -2
  1670. data/spec/framework_spec/app/spec/core/matchdata/string_spec.rb +1 -1
  1671. data/spec/framework_spec/app/spec/core/matchdata/to_a_spec.rb +2 -2
  1672. data/spec/framework_spec/app/spec/core/matchdata/to_s_spec.rb +1 -1
  1673. data/spec/framework_spec/app/spec/core/matchdata/values_at_spec.rb +1 -1
  1674. data/spec/framework_spec/app/spec/core/matchdata/versions/element_reference_1.9.rb +35 -0
  1675. data/spec/framework_spec/app/spec/core/matchdata/versions/names_1.9.rb +33 -0
  1676. data/spec/framework_spec/app/spec/core/math/acos_spec.rb +31 -31
  1677. data/spec/framework_spec/app/spec/core/math/acosh_spec.rb +6 -6
  1678. data/spec/framework_spec/app/spec/core/math/asin_spec.rb +15 -15
  1679. data/spec/framework_spec/app/spec/core/math/asinh_spec.rb +7 -7
  1680. data/spec/framework_spec/app/spec/core/math/atan2_spec.rb +6 -6
  1681. data/spec/framework_spec/app/spec/core/math/atan_spec.rb +13 -13
  1682. data/spec/framework_spec/app/spec/core/math/atanh_spec.rb +8 -64
  1683. data/spec/framework_spec/app/spec/core/math/cbrt_spec.rb +7 -0
  1684. data/spec/framework_spec/app/spec/core/math/constants_spec.rb +3 -3
  1685. data/spec/framework_spec/app/spec/core/math/cos_spec.rb +13 -13
  1686. data/spec/framework_spec/app/spec/core/math/cosh_spec.rb +7 -7
  1687. data/spec/framework_spec/app/spec/core/math/erf_spec.rb +14 -14
  1688. data/spec/framework_spec/app/spec/core/math/erfc_spec.rb +12 -12
  1689. data/spec/framework_spec/app/spec/core/math/exp_spec.rb +7 -7
  1690. data/spec/framework_spec/app/spec/core/math/fixtures/classes.rb +2 -2
  1691. data/spec/framework_spec/app/spec/core/math/frexp_spec.rb +6 -6
  1692. data/spec/framework_spec/app/spec/core/math/gamma_spec.rb +71 -0
  1693. data/spec/framework_spec/app/spec/core/math/hypot_spec.rb +11 -11
  1694. data/spec/framework_spec/app/spec/core/math/ldexp_spec.rb +10 -10
  1695. data/spec/framework_spec/app/spec/core/math/lgamma_spec.rb +87 -0
  1696. data/spec/framework_spec/app/spec/core/math/log10_spec.rb +7 -7
  1697. data/spec/framework_spec/app/spec/core/math/log2_spec.rb +30 -3
  1698. data/spec/framework_spec/app/spec/core/math/log_spec.rb +30 -11
  1699. data/spec/framework_spec/app/spec/core/math/sin_spec.rb +15 -15
  1700. data/spec/framework_spec/app/spec/core/math/sinh_spec.rb +8 -8
  1701. data/spec/framework_spec/app/spec/core/math/sqrt_spec.rb +5 -5
  1702. data/spec/framework_spec/app/spec/core/math/tan_spec.rb +6 -6
  1703. data/spec/framework_spec/app/spec/core/math/tanh_spec.rb +6 -6
  1704. data/spec/framework_spec/app/spec/core/method/arity_spec.rb +9 -2
  1705. data/spec/framework_spec/app/spec/core/method/call_spec.rb +3 -3
  1706. data/spec/framework_spec/app/spec/core/method/clone_spec.rb +2 -2
  1707. data/spec/framework_spec/app/spec/core/method/element_reference_spec.rb +3 -3
  1708. data/spec/framework_spec/app/spec/core/method/eql_spec.rb +8 -0
  1709. data/spec/framework_spec/app/spec/core/method/equal_value_spec.rb +3 -40
  1710. data/spec/framework_spec/app/spec/core/method/fixtures/classes.rb +104 -13
  1711. data/spec/framework_spec/app/spec/core/method/fixtures/classes_1.9.rb +12 -0
  1712. data/spec/framework_spec/app/spec/core/method/hash_spec.rb +7 -0
  1713. data/spec/framework_spec/app/spec/core/method/inspect_spec.rb +2 -2
  1714. data/spec/framework_spec/app/spec/core/method/name_spec.rb +19 -5
  1715. data/spec/framework_spec/app/spec/core/method/owner_spec.rb +4 -4
  1716. data/spec/framework_spec/app/spec/core/method/parameters_spec.rb +3 -0
  1717. data/spec/framework_spec/app/spec/core/method/receiver_spec.rb +4 -4
  1718. data/spec/framework_spec/app/spec/core/method/shared/call.rb +2 -2
  1719. data/spec/framework_spec/app/spec/core/method/shared/eql.rb +102 -0
  1720. data/spec/framework_spec/app/spec/core/method/shared/to_s.rb +5 -5
  1721. data/spec/framework_spec/app/spec/core/method/source_location_spec.rb +50 -0
  1722. data/spec/framework_spec/app/spec/core/method/to_proc_spec.rb +20 -2
  1723. data/spec/framework_spec/app/spec/core/method/to_s_spec.rb +2 -2
  1724. data/spec/framework_spec/app/spec/core/method/unbind_spec.rb +3 -3
  1725. data/spec/framework_spec/app/spec/core/method/versions/parameters_1.9.rb +189 -0
  1726. data/spec/framework_spec/app/spec/core/module/alias_method_spec.rb +20 -8
  1727. data/spec/framework_spec/app/spec/core/module/allocate_spec.rb +2 -2
  1728. data/spec/framework_spec/app/spec/core/module/ancestors_spec.rb +3 -3
  1729. data/spec/framework_spec/app/spec/core/module/append_features_spec.rb +15 -4
  1730. data/spec/framework_spec/app/spec/core/module/attr_accessor_spec.rb +16 -7
  1731. data/spec/framework_spec/app/spec/core/module/attr_reader_spec.rb +14 -5
  1732. data/spec/framework_spec/app/spec/core/module/attr_spec.rb +61 -63
  1733. data/spec/framework_spec/app/spec/core/module/attr_writer_spec.rb +23 -12
  1734. data/spec/framework_spec/app/spec/core/module/autoload_spec.rb +177 -84
  1735. data/spec/framework_spec/app/spec/core/module/case_compare_spec.rb +4 -4
  1736. data/spec/framework_spec/app/spec/core/module/class_eval_spec.rb +7 -8
  1737. data/spec/framework_spec/app/spec/core/module/class_exec_spec.rb +7 -0
  1738. data/spec/framework_spec/app/spec/core/module/class_variable_defined_spec.rb +22 -7
  1739. data/spec/framework_spec/app/spec/core/module/class_variable_get_spec.rb +27 -12
  1740. data/spec/framework_spec/app/spec/core/module/class_variable_set_spec.rb +37 -15
  1741. data/spec/framework_spec/app/spec/core/module/class_variables_spec.rb +50 -17
  1742. data/spec/framework_spec/app/spec/core/module/comparison_spec.rb +6 -6
  1743. data/spec/framework_spec/app/spec/core/module/const_defined_spec.rb +41 -5
  1744. data/spec/framework_spec/app/spec/core/module/const_get_spec.rb +14 -2
  1745. data/spec/framework_spec/app/spec/core/module/const_missing_spec.rb +8 -2
  1746. data/spec/framework_spec/app/spec/core/module/const_set_spec.rb +2 -2
  1747. data/spec/framework_spec/app/spec/core/module/constants_spec.rb +26 -2
  1748. data/spec/framework_spec/app/spec/core/module/define_method_spec.rb +283 -15
  1749. data/spec/framework_spec/app/spec/core/module/eql_spec.rb +3 -3
  1750. data/spec/framework_spec/app/spec/core/module/equal_spec.rb +3 -3
  1751. data/spec/framework_spec/app/spec/core/module/equal_value_spec.rb +3 -3
  1752. data/spec/framework_spec/app/spec/core/module/extend_object_spec.rb +23 -28
  1753. data/spec/framework_spec/app/spec/core/module/extended_spec.rb +18 -10
  1754. data/spec/framework_spec/app/spec/core/module/fixtures/autoload.rb +1 -1
  1755. data/spec/framework_spec/app/spec/core/module/fixtures/autoload_ex1.rb +16 -0
  1756. data/spec/framework_spec/app/spec/core/module/fixtures/autoload_k.rb +3 -1
  1757. data/spec/framework_spec/app/spec/core/module/fixtures/autoload_s.rb +5 -0
  1758. data/spec/framework_spec/app/spec/core/module/fixtures/autoload_w2.rb +1 -0
  1759. data/spec/framework_spec/app/spec/core/module/fixtures/classes.rb +97 -0
  1760. data/spec/framework_spec/app/spec/core/module/fixtures/name.rb +10 -0
  1761. data/spec/framework_spec/app/spec/core/module/freeze_spec.rb +33 -13
  1762. data/spec/framework_spec/app/spec/core/module/gt_spec.rb +5 -5
  1763. data/spec/framework_spec/app/spec/core/module/gte_spec.rb +4 -4
  1764. data/spec/framework_spec/app/spec/core/module/include_spec.rb +159 -33
  1765. data/spec/framework_spec/app/spec/core/module/included_modules_spec.rb +2 -2
  1766. data/spec/framework_spec/app/spec/core/module/included_spec.rb +12 -4
  1767. data/spec/framework_spec/app/spec/core/module/initialize_copy_spec.rb +2 -2
  1768. data/spec/framework_spec/app/spec/core/module/initialize_spec.rb +3 -3
  1769. data/spec/framework_spec/app/spec/core/module/instance_method_spec.rb +16 -7
  1770. data/spec/framework_spec/app/spec/core/module/instance_methods_spec.rb +51 -17
  1771. data/spec/framework_spec/app/spec/core/module/lt_spec.rb +5 -5
  1772. data/spec/framework_spec/app/spec/core/module/lte_spec.rb +4 -4
  1773. data/spec/framework_spec/app/spec/core/module/method_added_spec.rb +8 -8
  1774. data/spec/framework_spec/app/spec/core/module/method_defined_spec.rb +13 -6
  1775. data/spec/framework_spec/app/spec/core/module/method_removed_spec.rb +4 -4
  1776. data/spec/framework_spec/app/spec/core/module/method_undefined_spec.rb +4 -4
  1777. data/spec/framework_spec/app/spec/core/module/module_eval_spec.rb +7 -8
  1778. data/spec/framework_spec/app/spec/core/module/module_exec_spec.rb +7 -0
  1779. data/spec/framework_spec/app/spec/core/module/module_function_spec.rb +82 -76
  1780. data/spec/framework_spec/app/spec/core/module/name_spec.rb +24 -6
  1781. data/spec/framework_spec/app/spec/core/module/nesting_spec.rb +13 -9
  1782. data/spec/framework_spec/app/spec/core/module/new_spec.rb +3 -3
  1783. data/spec/framework_spec/app/spec/core/module/private_class_method_spec.rb +4 -4
  1784. data/spec/framework_spec/app/spec/core/module/private_instance_methods_spec.rb +26 -2
  1785. data/spec/framework_spec/app/spec/core/module/private_method_defined_spec.rb +16 -6
  1786. data/spec/framework_spec/app/spec/core/module/private_spec.rb +21 -3
  1787. data/spec/framework_spec/app/spec/core/module/protected_instance_methods_spec.rb +66 -18
  1788. data/spec/framework_spec/app/spec/core/module/protected_method_defined_spec.rb +40 -18
  1789. data/spec/framework_spec/app/spec/core/module/protected_spec.rb +24 -7
  1790. data/spec/framework_spec/app/spec/core/module/public_class_method_spec.rb +3 -3
  1791. data/spec/framework_spec/app/spec/core/module/public_instance_method_spec.rb +7 -0
  1792. data/spec/framework_spec/app/spec/core/module/public_instance_methods_spec.rb +38 -14
  1793. data/spec/framework_spec/app/spec/core/module/public_method_defined_spec.rb +28 -6
  1794. data/spec/framework_spec/app/spec/core/module/public_spec.rb +26 -2
  1795. data/spec/framework_spec/app/spec/core/module/remove_class_variable_spec.rb +46 -2
  1796. data/spec/framework_spec/app/spec/core/module/remove_const_spec.rb +10 -3
  1797. data/spec/framework_spec/app/spec/core/module/remove_method_spec.rb +10 -10
  1798. data/spec/framework_spec/app/spec/core/module/shared/class_eval.rb +36 -14
  1799. data/spec/framework_spec/app/spec/core/module/shared/class_exec.rb +24 -0
  1800. data/spec/framework_spec/app/spec/core/module/shared/equal_value.rb +1 -1
  1801. data/spec/framework_spec/app/spec/core/module/to_s_spec.rb +6 -2
  1802. data/spec/framework_spec/app/spec/core/module/undef_method_spec.rb +2 -2
  1803. data/spec/framework_spec/app/spec/core/mutex/lock_spec.rb +7 -0
  1804. data/spec/framework_spec/app/spec/core/mutex/locked_spec.rb +7 -0
  1805. data/spec/framework_spec/app/spec/core/mutex/sleep_spec.rb +7 -0
  1806. data/spec/framework_spec/app/spec/core/mutex/synchronize_spec.rb +7 -0
  1807. data/spec/framework_spec/app/spec/core/mutex/try_lock_spec.rb +7 -0
  1808. data/spec/framework_spec/app/spec/core/mutex/unlock_spec.rb +7 -0
  1809. data/spec/framework_spec/app/spec/core/nil/and_spec.rb +1 -1
  1810. data/spec/framework_spec/app/spec/core/nil/inspect_spec.rb +1 -1
  1811. data/spec/framework_spec/app/spec/core/nil/nil_spec.rb +1 -1
  1812. data/spec/framework_spec/app/spec/core/nil/or_spec.rb +1 -1
  1813. data/spec/framework_spec/app/spec/core/nil/rationalize_spec.rb +13 -0
  1814. data/spec/framework_spec/app/spec/core/nil/to_a_spec.rb +1 -1
  1815. data/spec/framework_spec/app/spec/core/nil/to_c_spec.rb +7 -0
  1816. data/spec/framework_spec/app/spec/core/nil/to_f_spec.rb +2 -2
  1817. data/spec/framework_spec/app/spec/core/nil/to_i_spec.rb +2 -2
  1818. data/spec/framework_spec/app/spec/core/nil/to_r_spec.rb +9 -0
  1819. data/spec/framework_spec/app/spec/core/nil/to_s_spec.rb +1 -1
  1820. data/spec/framework_spec/app/spec/core/nil/xor_spec.rb +1 -1
  1821. data/spec/framework_spec/app/spec/core/numeric/abs2_spec.rb +36 -0
  1822. data/spec/framework_spec/app/spec/core/numeric/abs_spec.rb +3 -17
  1823. data/spec/framework_spec/app/spec/core/numeric/angle_spec.rb +8 -0
  1824. data/spec/framework_spec/app/spec/core/numeric/arg_spec.rb +8 -0
  1825. data/spec/framework_spec/app/spec/core/numeric/ceil_spec.rb +10 -9
  1826. data/spec/framework_spec/app/spec/core/numeric/coerce_spec.rb +23 -6
  1827. data/spec/framework_spec/app/spec/core/numeric/comparison_spec.rb +35 -6
  1828. data/spec/framework_spec/app/spec/core/numeric/conj_spec.rb +8 -0
  1829. data/spec/framework_spec/app/spec/core/numeric/conjugate_spec.rb +8 -0
  1830. data/spec/framework_spec/app/spec/core/numeric/denominator_spec.rb +26 -0
  1831. data/spec/framework_spec/app/spec/core/numeric/div_spec.rb +22 -10
  1832. data/spec/framework_spec/app/spec/core/numeric/divmod_spec.rb +19 -8
  1833. data/spec/framework_spec/app/spec/core/numeric/eql_spec.rb +5 -5
  1834. data/spec/framework_spec/app/spec/core/numeric/fdiv_spec.rb +37 -0
  1835. data/spec/framework_spec/app/spec/core/numeric/fixtures/classes.rb +16 -4
  1836. data/spec/framework_spec/app/spec/core/numeric/floor_spec.rb +5 -5
  1837. data/spec/framework_spec/app/spec/core/numeric/i_spec.rb +17 -0
  1838. data/spec/framework_spec/app/spec/core/numeric/imag_spec.rb +8 -0
  1839. data/spec/framework_spec/app/spec/core/numeric/imaginary_spec.rb +8 -0
  1840. data/spec/framework_spec/app/spec/core/numeric/initialize_copy_spec.rb +5 -5
  1841. data/spec/framework_spec/app/spec/core/numeric/integer_spec.rb +5 -5
  1842. data/spec/framework_spec/app/spec/core/numeric/magnitude_spec.rb +7 -0
  1843. data/spec/framework_spec/app/spec/core/numeric/modulo_spec.rb +33 -9
  1844. data/spec/framework_spec/app/spec/core/numeric/nonzero_spec.rb +6 -6
  1845. data/spec/framework_spec/app/spec/core/numeric/numerator_spec.rb +35 -0
  1846. data/spec/framework_spec/app/spec/core/numeric/phase_spec.rb +8 -0
  1847. data/spec/framework_spec/app/spec/core/numeric/polar_spec.rb +8 -0
  1848. data/spec/framework_spec/app/spec/core/numeric/quo_spec.rb +5 -5
  1849. data/spec/framework_spec/app/spec/core/numeric/rationalize_spec.rb +32 -0
  1850. data/spec/framework_spec/app/spec/core/numeric/real_spec.rb +14 -0
  1851. data/spec/framework_spec/app/spec/core/numeric/rect_spec.rb +8 -0
  1852. data/spec/framework_spec/app/spec/core/numeric/rectangular_spec.rb +8 -0
  1853. data/spec/framework_spec/app/spec/core/numeric/remainder_spec.rb +11 -11
  1854. data/spec/framework_spec/app/spec/core/numeric/round_spec.rb +5 -5
  1855. data/spec/framework_spec/app/spec/core/numeric/shared/abs.rb +19 -0
  1856. data/spec/framework_spec/app/spec/core/numeric/shared/rect.rb +48 -0
  1857. data/spec/framework_spec/app/spec/core/numeric/singleton_method_added_spec.rb +9 -9
  1858. data/spec/framework_spec/app/spec/core/numeric/step_spec.rb +215 -162
  1859. data/spec/framework_spec/app/spec/core/numeric/to_c_spec.rb +47 -0
  1860. data/spec/framework_spec/app/spec/core/numeric/to_int_spec.rb +5 -5
  1861. data/spec/framework_spec/app/spec/core/numeric/truncate_spec.rb +4 -4
  1862. data/spec/framework_spec/app/spec/core/numeric/uminus_spec.rb +9 -9
  1863. data/spec/framework_spec/app/spec/core/numeric/uplus_spec.rb +4 -4
  1864. data/spec/framework_spec/app/spec/core/numeric/zero_spec.rb +5 -5
  1865. data/spec/framework_spec/app/spec/core/object/clone_spec.rb +2 -2
  1866. data/spec/framework_spec/app/spec/core/object/dup_spec.rb +2 -2
  1867. data/spec/framework_spec/app/spec/core/object/fixtures/classes.rb +17 -0
  1868. data/spec/framework_spec/app/spec/core/object/initialize_spec.rb +1 -1
  1869. data/spec/framework_spec/app/spec/core/object/instance_exec_spec.rb +101 -0
  1870. data/spec/framework_spec/app/spec/core/object/instance_of_spec.rb +6 -6
  1871. data/spec/framework_spec/app/spec/core/object/is_a_spec.rb +2 -2
  1872. data/spec/framework_spec/app/spec/core/object/kind_of_spec.rb +2 -2
  1873. data/spec/framework_spec/app/spec/core/object/match_spec.rb +25 -10
  1874. data/spec/framework_spec/app/spec/core/object/metaclass_spec.rb +9 -9
  1875. data/spec/framework_spec/app/spec/core/object/new_spec.rb +18 -2
  1876. data/spec/framework_spec/app/spec/core/object/shared/kind_of.rb +3 -3
  1877. data/spec/framework_spec/app/spec/core/objectspace/_id2ref_spec.rb +1 -1
  1878. data/spec/framework_spec/app/spec/core/objectspace/add_finalizer_spec.rb +5 -1
  1879. data/spec/framework_spec/app/spec/core/objectspace/call_finalizer_spec.rb +5 -1
  1880. data/spec/framework_spec/app/spec/core/objectspace/count_objects_spec.rb +7 -0
  1881. data/spec/framework_spec/app/spec/core/objectspace/define_finalizer_spec.rb +44 -3
  1882. data/spec/framework_spec/app/spec/core/objectspace/each_object_spec.rb +27 -5
  1883. data/spec/framework_spec/app/spec/core/objectspace/finalizers_spec.rb +5 -1
  1884. data/spec/framework_spec/app/spec/core/objectspace/fixtures.rb +5 -0
  1885. data/spec/framework_spec/app/spec/core/objectspace/garbage_collect_spec.rb +22 -1
  1886. data/spec/framework_spec/app/spec/core/objectspace/remove_finalizer_spec.rb +5 -1
  1887. data/spec/framework_spec/app/spec/core/objectspace/undefine_finalizer_spec.rb +5 -1
  1888. data/spec/framework_spec/app/spec/core/precision/included_spec.rb +14 -12
  1889. data/spec/framework_spec/app/spec/core/precision/prec_f_spec.rb +9 -8
  1890. data/spec/framework_spec/app/spec/core/precision/prec_i_spec.rb +10 -8
  1891. data/spec/framework_spec/app/spec/core/precision/prec_spec.rb +19 -14
  1892. data/spec/framework_spec/app/spec/core/proc/arity_spec.rb +104 -53
  1893. data/spec/framework_spec/app/spec/core/proc/binding_spec.rb +14 -14
  1894. data/spec/framework_spec/app/spec/core/proc/block_pass_spec.rb +21 -1
  1895. data/spec/framework_spec/app/spec/core/proc/call_spec.rb +9 -2
  1896. data/spec/framework_spec/app/spec/core/proc/case_compare_spec.rb +19 -0
  1897. data/spec/framework_spec/app/spec/core/proc/clone_spec.rb +3 -3
  1898. data/spec/framework_spec/app/spec/core/proc/curry_spec.rb +142 -0
  1899. data/spec/framework_spec/app/spec/core/proc/dup_spec.rb +3 -3
  1900. data/spec/framework_spec/app/spec/core/proc/element_reference_spec.rb +8 -2
  1901. data/spec/framework_spec/app/spec/core/proc/eql_spec.rb +8 -0
  1902. data/spec/framework_spec/app/spec/core/proc/equal_value_spec.rb +4 -12
  1903. data/spec/framework_spec/app/spec/core/proc/fixtures/common.rb +42 -0
  1904. data/spec/framework_spec/app/spec/core/proc/fixtures/source_location.rb +51 -0
  1905. data/spec/framework_spec/app/spec/core/proc/hash_spec.rb +24 -0
  1906. data/spec/framework_spec/app/spec/core/proc/lambda_spec.rb +62 -0
  1907. data/spec/framework_spec/app/spec/core/proc/new_spec.rb +135 -46
  1908. data/spec/framework_spec/app/spec/core/proc/parameters_spec.rb +2 -0
  1909. data/spec/framework_spec/app/spec/core/proc/shared/call.rb +86 -34
  1910. data/spec/framework_spec/app/spec/core/proc/shared/call_arguments.rb +7 -0
  1911. data/spec/framework_spec/app/spec/core/proc/shared/equal.rb +93 -0
  1912. data/spec/framework_spec/app/spec/core/proc/source_location_spec.rb +64 -0
  1913. data/spec/framework_spec/app/spec/core/proc/to_proc_spec.rb +1 -1
  1914. data/spec/framework_spec/app/spec/core/proc/to_s_spec.rb +16 -5
  1915. data/spec/framework_spec/app/spec/core/proc/versions/call_1.8.7.rb +1 -0
  1916. data/spec/framework_spec/app/spec/core/proc/versions/call_1.9.rb +1 -0
  1917. data/spec/framework_spec/app/spec/core/proc/versions/parameters_1.9.rb +73 -0
  1918. data/spec/framework_spec/app/spec/core/proc/yield_spec.rb +19 -0
  1919. data/spec/framework_spec/app/spec/core/process/abort_spec.rb +16 -9
  1920. data/spec/framework_spec/app/spec/core/process/constants_spec.rb +6 -6
  1921. data/spec/framework_spec/app/spec/core/process/daemon_spec.rb +7 -0
  1922. data/spec/framework_spec/app/spec/core/process/detach_spec.rb +5 -9
  1923. data/spec/framework_spec/app/spec/core/process/egid_spec.rb +5 -1
  1924. data/spec/framework_spec/app/spec/core/process/euid_spec.rb +6 -2
  1925. data/spec/framework_spec/app/spec/core/process/exec_spec.rb +7 -0
  1926. data/spec/framework_spec/app/spec/core/process/exit_spec.rb +9 -1
  1927. data/spec/framework_spec/app/spec/core/process/fork_spec.rb +38 -26
  1928. data/spec/framework_spec/app/spec/core/process/getpgid_spec.rb +5 -5
  1929. data/spec/framework_spec/app/spec/core/process/getpgrp_spec.rb +5 -1
  1930. data/spec/framework_spec/app/spec/core/process/getpriority_spec.rb +8 -9
  1931. data/spec/framework_spec/app/spec/core/process/getrlimit_spec.rb +5 -1
  1932. data/spec/framework_spec/app/spec/core/process/gid/change_privilege_spec.rb +5 -0
  1933. data/spec/framework_spec/app/spec/core/process/gid/eid_spec.rb +9 -0
  1934. data/spec/framework_spec/app/spec/core/process/gid/grant_privilege_spec.rb +5 -0
  1935. data/spec/framework_spec/app/spec/core/process/gid/re_exchange_spec.rb +5 -0
  1936. data/spec/framework_spec/app/spec/core/process/gid/re_exchangeable_spec.rb +5 -0
  1937. data/spec/framework_spec/app/spec/core/process/gid/rid_spec.rb +5 -0
  1938. data/spec/framework_spec/app/spec/core/process/gid/sid_available_spec.rb +5 -0
  1939. data/spec/framework_spec/app/spec/core/process/gid/switch_spec.rb +5 -0
  1940. data/spec/framework_spec/app/spec/core/process/gid_spec.rb +11 -7
  1941. data/spec/framework_spec/app/spec/core/process/groups_spec.rb +15 -17
  1942. data/spec/framework_spec/app/spec/core/process/initgroups_spec.rb +3 -6
  1943. data/spec/framework_spec/app/spec/core/process/kill_spec.rb +21 -17
  1944. data/spec/framework_spec/app/spec/core/process/maxgroups_spec.rb +12 -5
  1945. data/spec/framework_spec/app/spec/core/process/pid_spec.rb +3 -3
  1946. data/spec/framework_spec/app/spec/core/process/ppid_spec.rb +16 -15
  1947. data/spec/framework_spec/app/spec/core/process/setpgid_spec.rb +16 -21
  1948. data/spec/framework_spec/app/spec/core/process/setpgrp_spec.rb +3 -8
  1949. data/spec/framework_spec/app/spec/core/process/setpriority_spec.rb +42 -60
  1950. data/spec/framework_spec/app/spec/core/process/setrlimit_spec.rb +38 -46
  1951. data/spec/framework_spec/app/spec/core/process/setsid_spec.rb +20 -22
  1952. data/spec/framework_spec/app/spec/core/process/spawn_spec.rb +32 -0
  1953. data/spec/framework_spec/app/spec/core/process/status/_spec.rb +5 -0
  1954. data/spec/framework_spec/app/spec/core/process/status/coredump_spec.rb +5 -0
  1955. data/spec/framework_spec/app/spec/core/process/status/equal_value_spec.rb +5 -0
  1956. data/spec/framework_spec/app/spec/core/process/status/exited_spec.rb +38 -0
  1957. data/spec/framework_spec/app/spec/core/process/status/exitstatus_spec.rb +13 -0
  1958. data/spec/framework_spec/app/spec/core/process/status/inspect_spec.rb +5 -0
  1959. data/spec/framework_spec/app/spec/core/process/status/pid_spec.rb +13 -0
  1960. data/spec/framework_spec/app/spec/core/process/status/right_shift_spec.rb +5 -0
  1961. data/spec/framework_spec/app/spec/core/process/status/signaled_spec.rb +36 -0
  1962. data/spec/framework_spec/app/spec/core/process/status/stopped_spec.rb +5 -0
  1963. data/spec/framework_spec/app/spec/core/process/status/stopsig_spec.rb +5 -0
  1964. data/spec/framework_spec/app/spec/core/process/status/success_spec.rb +53 -0
  1965. data/spec/framework_spec/app/spec/core/process/status/termsig_spec.rb +41 -0
  1966. data/spec/framework_spec/app/spec/core/process/status/to_i_spec.rb +5 -0
  1967. data/spec/framework_spec/app/spec/core/process/status/to_int_spec.rb +5 -0
  1968. data/spec/framework_spec/app/spec/core/process/status/to_s_spec.rb +5 -0
  1969. data/spec/framework_spec/app/spec/core/process/sys/getegid_spec.rb +5 -0
  1970. data/spec/framework_spec/app/spec/core/process/sys/geteuid_spec.rb +5 -0
  1971. data/spec/framework_spec/app/spec/core/process/sys/getgid_spec.rb +5 -0
  1972. data/spec/framework_spec/app/spec/core/process/sys/getuid_spec.rb +5 -0
  1973. data/spec/framework_spec/app/spec/core/process/sys/issetugid_spec.rb +5 -0
  1974. data/spec/framework_spec/app/spec/core/process/sys/setegid_spec.rb +5 -0
  1975. data/spec/framework_spec/app/spec/core/process/sys/seteuid_spec.rb +5 -0
  1976. data/spec/framework_spec/app/spec/core/process/sys/setgid_spec.rb +5 -0
  1977. data/spec/framework_spec/app/spec/core/process/sys/setregid_spec.rb +5 -0
  1978. data/spec/framework_spec/app/spec/core/process/sys/setresgid_spec.rb +5 -0
  1979. data/spec/framework_spec/app/spec/core/process/sys/setresuid_spec.rb +5 -0
  1980. data/spec/framework_spec/app/spec/core/process/sys/setreuid_spec.rb +5 -0
  1981. data/spec/framework_spec/app/spec/core/process/sys/setrgid_spec.rb +5 -0
  1982. data/spec/framework_spec/app/spec/core/process/sys/setruid_spec.rb +5 -0
  1983. data/spec/framework_spec/app/spec/core/process/sys/setuid_spec.rb +5 -0
  1984. data/spec/framework_spec/app/spec/core/process/times_spec.rb +2 -2
  1985. data/spec/framework_spec/app/spec/core/process/uid/change_privilege_spec.rb +5 -0
  1986. data/spec/framework_spec/app/spec/core/process/uid/eid_spec.rb +9 -0
  1987. data/spec/framework_spec/app/spec/core/process/uid/grant_privilege_spec.rb +5 -0
  1988. data/spec/framework_spec/app/spec/core/process/uid/re_exchange_spec.rb +5 -0
  1989. data/spec/framework_spec/app/spec/core/process/uid/re_exchangeable_spec.rb +5 -0
  1990. data/spec/framework_spec/app/spec/core/process/uid/rid_spec.rb +5 -0
  1991. data/spec/framework_spec/app/spec/core/process/uid/sid_available_spec.rb +5 -0
  1992. data/spec/framework_spec/app/spec/core/process/uid/switch_spec.rb +5 -0
  1993. data/spec/framework_spec/app/spec/core/process/uid_spec.rb +11 -7
  1994. data/spec/framework_spec/app/spec/core/process/wait2_spec.rb +7 -6
  1995. data/spec/framework_spec/app/spec/core/process/wait_spec.rb +25 -7
  1996. data/spec/framework_spec/app/spec/core/process/waitall_spec.rb +10 -8
  1997. data/spec/framework_spec/app/spec/core/process/waitpid2_spec.rb +5 -1
  1998. data/spec/framework_spec/app/spec/core/process/waitpid_spec.rb +5 -1
  1999. data/spec/framework_spec/app/spec/core/random/bytes_spec.rb +40 -0
  2000. data/spec/framework_spec/app/spec/core/random/equal_value_spec.rb +39 -0
  2001. data/spec/framework_spec/app/spec/core/random/new_seed_spec.rb +27 -0
  2002. data/spec/framework_spec/app/spec/core/random/new_spec.rb +33 -0
  2003. data/spec/framework_spec/app/spec/core/random/rand_spec.rb +218 -0
  2004. data/spec/framework_spec/app/spec/core/random/seed_spec.rb +32 -0
  2005. data/spec/framework_spec/app/spec/core/random/srand_spec.rb +43 -0
  2006. data/spec/framework_spec/app/spec/core/range/begin_spec.rb +2 -2
  2007. data/spec/framework_spec/app/spec/core/range/case_compare_spec.rb +2 -2
  2008. data/spec/framework_spec/app/spec/core/range/cover_spec.rb +57 -0
  2009. data/spec/framework_spec/app/spec/core/range/each_spec.rb +5 -4
  2010. data/spec/framework_spec/app/spec/core/range/end_spec.rb +2 -2
  2011. data/spec/framework_spec/app/spec/core/range/eql_spec.rb +2 -2
  2012. data/spec/framework_spec/app/spec/core/range/equal_value_spec.rb +2 -2
  2013. data/spec/framework_spec/app/spec/core/range/exclude_end_spec.rb +1 -1
  2014. data/spec/framework_spec/app/spec/core/range/first_spec.rb +2 -2
  2015. data/spec/framework_spec/app/spec/core/range/hash_spec.rb +2 -2
  2016. data/spec/framework_spec/app/spec/core/range/include_spec.rb +2 -2
  2017. data/spec/framework_spec/app/spec/core/range/initialize_spec.rb +1 -1
  2018. data/spec/framework_spec/app/spec/core/range/inspect_spec.rb +2 -2
  2019. data/spec/framework_spec/app/spec/core/range/last_spec.rb +2 -2
  2020. data/spec/framework_spec/app/spec/core/range/max_spec.rb +55 -0
  2021. data/spec/framework_spec/app/spec/core/range/member_spec.rb +2 -2
  2022. data/spec/framework_spec/app/spec/core/range/min_spec.rb +55 -0
  2023. data/spec/framework_spec/app/spec/core/range/new_spec.rb +9 -9
  2024. data/spec/framework_spec/app/spec/core/range/shared/equal_value.rb +2 -2
  2025. data/spec/framework_spec/app/spec/core/range/shared/include.rb +9 -0
  2026. data/spec/framework_spec/app/spec/core/range/step_spec.rb +4 -3
  2027. data/spec/framework_spec/app/spec/core/range/to_a_spec.rb +10 -3
  2028. data/spec/framework_spec/app/spec/core/range/to_s_spec.rb +1 -1
  2029. data/spec/framework_spec/app/spec/core/rational/Rational_spec.rb +35 -0
  2030. data/spec/framework_spec/app/spec/core/rational/abs_spec.rb +7 -0
  2031. data/spec/framework_spec/app/spec/core/rational/ceil_spec.rb +7 -0
  2032. data/spec/framework_spec/app/spec/core/rational/coerce_spec.rb +7 -0
  2033. data/spec/framework_spec/app/spec/core/rational/comparison_spec.rb +23 -0
  2034. data/spec/framework_spec/app/spec/core/rational/denominator_spec.rb +7 -0
  2035. data/spec/framework_spec/app/spec/core/rational/div_spec.rb +19 -0
  2036. data/spec/framework_spec/app/spec/core/rational/divide_spec.rb +19 -0
  2037. data/spec/framework_spec/app/spec/core/rational/divmod_spec.rb +15 -0
  2038. data/spec/framework_spec/app/spec/core/rational/equal_value_spec.rb +19 -0
  2039. data/spec/framework_spec/app/spec/core/rational/exponent_spec.rb +19 -0
  2040. data/spec/framework_spec/app/spec/core/rational/fdiv_spec.rb +7 -0
  2041. data/spec/framework_spec/app/spec/core/rational/floor_spec.rb +7 -0
  2042. data/spec/framework_spec/app/spec/core/rational/hash_spec.rb +7 -0
  2043. data/spec/framework_spec/app/spec/core/rational/initialize_spec.rb +7 -0
  2044. data/spec/framework_spec/app/spec/core/rational/inspect_spec.rb +7 -0
  2045. data/spec/framework_spec/app/spec/core/rational/integer_spec.rb +13 -0
  2046. data/spec/framework_spec/app/spec/core/rational/magnitude_spec.rb +7 -0
  2047. data/spec/framework_spec/app/spec/core/rational/marshal_dump_spec.rb +7 -0
  2048. data/spec/framework_spec/app/spec/core/rational/marshal_load_spec.rb +7 -0
  2049. data/spec/framework_spec/app/spec/core/rational/minus_spec.rb +7 -0
  2050. data/spec/framework_spec/app/spec/core/rational/modulo_spec.rb +7 -0
  2051. data/spec/framework_spec/app/spec/core/rational/multiply_spec.rb +19 -0
  2052. data/spec/framework_spec/app/spec/core/rational/numerator_spec.rb +7 -0
  2053. data/spec/framework_spec/app/spec/core/rational/plus_spec.rb +18 -0
  2054. data/spec/framework_spec/app/spec/core/rational/quo_spec.rb +7 -0
  2055. data/spec/framework_spec/app/spec/core/rational/rationalize_spec.rb +33 -0
  2056. data/spec/framework_spec/app/spec/core/rational/remainder_spec.rb +7 -0
  2057. data/spec/framework_spec/app/spec/core/rational/round_spec.rb +7 -0
  2058. data/spec/framework_spec/app/spec/core/rational/to_f_spec.rb +7 -0
  2059. data/spec/framework_spec/app/spec/core/rational/to_i_spec.rb +7 -0
  2060. data/spec/framework_spec/app/spec/core/rational/to_r_spec.rb +7 -0
  2061. data/spec/framework_spec/app/spec/core/rational/to_s_spec.rb +7 -0
  2062. data/spec/framework_spec/app/spec/core/rational/truncate_spec.rb +7 -0
  2063. data/spec/framework_spec/app/spec/core/rational/zero_spec.rb +15 -0
  2064. data/spec/framework_spec/app/spec/core/regexp/case_compare_spec.rb +2 -2
  2065. data/spec/framework_spec/app/spec/core/regexp/casefold_spec.rb +1 -1
  2066. data/spec/framework_spec/app/spec/core/regexp/compile_spec.rb +2 -2
  2067. data/spec/framework_spec/app/spec/core/regexp/encoding_spec.rb +56 -0
  2068. data/spec/framework_spec/app/spec/core/regexp/eql_spec.rb +2 -2
  2069. data/spec/framework_spec/app/spec/core/regexp/equal_value_spec.rb +2 -2
  2070. data/spec/framework_spec/app/spec/core/regexp/escape_spec.rb +6 -2
  2071. data/spec/framework_spec/app/spec/core/regexp/fixed_encoding_spec.rb +36 -0
  2072. data/spec/framework_spec/app/spec/core/regexp/hash_spec.rb +1 -1
  2073. data/spec/framework_spec/app/spec/core/regexp/initialize_copy_spec.rb +1 -1
  2074. data/spec/framework_spec/app/spec/core/regexp/initialize_spec.rb +1 -1
  2075. data/spec/framework_spec/app/spec/core/regexp/inspect_spec.rb +9 -1
  2076. data/spec/framework_spec/app/spec/core/regexp/kcode_spec.rb +17 -16
  2077. data/spec/framework_spec/app/spec/core/regexp/last_match_spec.rb +4 -4
  2078. data/spec/framework_spec/app/spec/core/regexp/match_spec.rb +31 -3
  2079. data/spec/framework_spec/app/spec/core/regexp/named_captures_spec.rb +1 -0
  2080. data/spec/framework_spec/app/spec/core/regexp/names_spec.rb +1 -0
  2081. data/spec/framework_spec/app/spec/core/regexp/new_spec.rb +2 -2
  2082. data/spec/framework_spec/app/spec/core/regexp/options_spec.rb +3 -3
  2083. data/spec/framework_spec/app/spec/core/regexp/quote_spec.rb +3 -3
  2084. data/spec/framework_spec/app/spec/core/regexp/shared/match.rb +2 -2
  2085. data/spec/framework_spec/app/spec/core/regexp/shared/new.rb +65 -53
  2086. data/spec/framework_spec/app/spec/core/regexp/source_spec.rb +1 -1
  2087. data/spec/framework_spec/app/spec/core/regexp/to_s_spec.rb +1 -1
  2088. data/spec/framework_spec/app/spec/core/regexp/try_convert_spec.rb +21 -0
  2089. data/spec/framework_spec/app/spec/core/regexp/union_spec.rb +18 -2
  2090. data/spec/framework_spec/app/spec/core/regexp/versions/named_captures_1.9.rb +35 -0
  2091. data/spec/framework_spec/app/spec/core/regexp/versions/names_1.9.rb +29 -0
  2092. data/spec/framework_spec/app/spec/core/signal/list_spec.rb +1 -1
  2093. data/spec/framework_spec/app/spec/core/signal/trap_spec.rb +106 -1
  2094. data/spec/framework_spec/app/spec/core/string/allocate_spec.rb +2 -2
  2095. data/spec/framework_spec/app/spec/core/string/append_spec.rb +3 -3
  2096. data/spec/framework_spec/app/spec/core/string/ascii_only_spec.rb +44 -29
  2097. data/spec/framework_spec/app/spec/core/string/bytes_spec.rb +25 -18
  2098. data/spec/framework_spec/app/spec/core/string/bytesize_spec.rb +12 -12
  2099. data/spec/framework_spec/app/spec/core/string/capitalize_spec.rb +6 -6
  2100. data/spec/framework_spec/app/spec/core/string/case_compare_spec.rb +7 -0
  2101. data/spec/framework_spec/app/spec/core/string/casecmp_spec.rb +117 -64
  2102. data/spec/framework_spec/app/spec/core/string/center_spec.rb +24 -18
  2103. data/spec/framework_spec/app/spec/core/string/chars_spec.rb +7 -0
  2104. data/spec/framework_spec/app/spec/core/string/chomp_spec.rb +68 -39
  2105. data/spec/framework_spec/app/spec/core/string/chop_spec.rb +34 -56
  2106. data/spec/framework_spec/app/spec/core/string/chr_spec.rb +44 -0
  2107. data/spec/framework_spec/app/spec/core/string/clear_spec.rb +39 -0
  2108. data/spec/framework_spec/app/spec/core/string/codepoints_spec.rb +8 -0
  2109. data/spec/framework_spec/app/spec/core/string/comparison_spec.rb +6 -6
  2110. data/spec/framework_spec/app/spec/core/string/concat_spec.rb +3 -3
  2111. data/spec/framework_spec/app/spec/core/string/count_spec.rb +26 -11
  2112. data/spec/framework_spec/app/spec/core/string/crypt_spec.rb +35 -35
  2113. data/spec/framework_spec/app/spec/core/string/delete_spec.rb +25 -8
  2114. data/spec/framework_spec/app/spec/core/string/downcase_spec.rb +6 -6
  2115. data/spec/framework_spec/app/spec/core/string/dump_spec.rb +13 -4
  2116. data/spec/framework_spec/app/spec/core/string/each_byte_spec.rb +3 -3
  2117. data/spec/framework_spec/app/spec/core/string/each_char_spec.rb +3 -29
  2118. data/spec/framework_spec/app/spec/core/string/each_codepoint_spec.rb +8 -0
  2119. data/spec/framework_spec/app/spec/core/string/each_line_spec.rb +3 -3
  2120. data/spec/framework_spec/app/spec/core/string/each_spec.rb +3 -3
  2121. data/spec/framework_spec/app/spec/core/string/element_reference_spec.rb +9 -3
  2122. data/spec/framework_spec/app/spec/core/string/element_set_spec.rb +54 -10
  2123. data/spec/framework_spec/app/spec/core/string/empty_spec.rb +2 -2
  2124. data/spec/framework_spec/app/spec/core/string/encode_spec.rb +114 -0
  2125. data/spec/framework_spec/app/spec/core/string/encoding_spec.rb +181 -0
  2126. data/spec/framework_spec/app/spec/core/string/end_with_spec.rb +3 -3
  2127. data/spec/framework_spec/app/spec/core/string/entries_spec.rb +2 -2
  2128. data/spec/framework_spec/app/spec/core/string/eql_spec.rb +5 -5
  2129. data/spec/framework_spec/app/spec/core/string/equal_value_spec.rb +7 -3
  2130. data/spec/framework_spec/app/spec/core/string/fixtures/classes.rb +12 -9
  2131. data/spec/framework_spec/app/spec/core/string/fixtures/iso-8859-9-encoding.rb +9 -0
  2132. data/spec/framework_spec/app/spec/core/string/fixtures/utf-8-encoding.rb +7 -0
  2133. data/spec/framework_spec/app/spec/core/string/force_encoding_spec.rb +61 -0
  2134. data/spec/framework_spec/app/spec/core/string/getbyte_spec.rb +63 -0
  2135. data/spec/framework_spec/app/spec/core/string/gsub_spec.rb +228 -75
  2136. data/spec/framework_spec/app/spec/core/string/hash_spec.rb +2 -2
  2137. data/spec/framework_spec/app/spec/core/string/hex_spec.rb +23 -9
  2138. data/spec/framework_spec/app/spec/core/string/include_spec.rb +7 -7
  2139. data/spec/framework_spec/app/spec/core/string/index_spec.rb +46 -52
  2140. data/spec/framework_spec/app/spec/core/string/initialize_spec.rb +19 -21
  2141. data/spec/framework_spec/app/spec/core/string/insert_spec.rb +4 -4
  2142. data/spec/framework_spec/app/spec/core/string/inspect_spec.rb +661 -41
  2143. data/spec/framework_spec/app/spec/core/string/intern_spec.rb +4 -4
  2144. data/spec/framework_spec/app/spec/core/string/length_spec.rb +4 -4
  2145. data/spec/framework_spec/app/spec/core/string/lines_spec.rb +9 -0
  2146. data/spec/framework_spec/app/spec/core/string/ljust_spec.rb +18 -12
  2147. data/spec/framework_spec/app/spec/core/string/lstrip_spec.rb +23 -14
  2148. data/spec/framework_spec/app/spec/core/string/match_spec.rb +11 -11
  2149. data/spec/framework_spec/app/spec/core/string/modulo_spec.rb +103 -45
  2150. data/spec/framework_spec/app/spec/core/string/multiply_spec.rb +10 -10
  2151. data/spec/framework_spec/app/spec/core/string/new_spec.rb +3 -3
  2152. data/spec/framework_spec/app/spec/core/string/next_spec.rb +4 -4
  2153. data/spec/framework_spec/app/spec/core/string/oct_spec.rb +59 -16
  2154. data/spec/framework_spec/app/spec/core/string/ord_spec.rb +32 -0
  2155. data/spec/framework_spec/app/spec/core/string/partition_spec.rb +7 -3
  2156. data/spec/framework_spec/app/spec/core/string/plus_spec.rb +9 -9
  2157. data/spec/framework_spec/app/spec/core/string/replace_spec.rb +18 -13
  2158. data/spec/framework_spec/app/spec/core/string/reverse_spec.rb +16 -11
  2159. data/spec/framework_spec/app/spec/core/string/rindex_spec.rb +75 -69
  2160. data/spec/framework_spec/app/spec/core/string/rjust_spec.rb +18 -12
  2161. data/spec/framework_spec/app/spec/core/string/rpartition_spec.rb +8 -3
  2162. data/spec/framework_spec/app/spec/core/string/rstrip_spec.rb +52 -20
  2163. data/spec/framework_spec/app/spec/core/string/scan_spec.rb +48 -23
  2164. data/spec/framework_spec/app/spec/core/string/setbyte_spec.rb +55 -0
  2165. data/spec/framework_spec/app/spec/core/string/shared/chars.rb +70 -0
  2166. data/spec/framework_spec/app/spec/core/string/shared/codepoints.rb +66 -0
  2167. data/spec/framework_spec/app/spec/core/string/shared/concat.rb +9 -6
  2168. data/spec/framework_spec/app/spec/core/string/shared/each_line.rb +27 -6
  2169. data/spec/framework_spec/app/spec/core/string/shared/encode.rb +112 -0
  2170. data/spec/framework_spec/app/spec/core/string/shared/slice.rb +13 -11
  2171. data/spec/framework_spec/app/spec/core/string/shared/succ.rb +3 -3
  2172. data/spec/framework_spec/app/spec/core/string/shared/to_s.rb +1 -1
  2173. data/spec/framework_spec/app/spec/core/string/shared/to_sym.rb +32 -0
  2174. data/spec/framework_spec/app/spec/core/string/shared/versions/slice_1.9.rb +78 -0
  2175. data/spec/framework_spec/app/spec/core/string/size_spec.rb +4 -4
  2176. data/spec/framework_spec/app/spec/core/string/slice_spec.rb +54 -42
  2177. data/spec/framework_spec/app/spec/core/string/split_spec.rb +109 -60
  2178. data/spec/framework_spec/app/spec/core/string/squeeze_spec.rb +21 -7
  2179. data/spec/framework_spec/app/spec/core/string/start_with_spec.rb +4 -4
  2180. data/spec/framework_spec/app/spec/core/string/strip_spec.rb +49 -12
  2181. data/spec/framework_spec/app/spec/core/string/sub_spec.rb +91 -43
  2182. data/spec/framework_spec/app/spec/core/string/succ_spec.rb +4 -4
  2183. data/spec/framework_spec/app/spec/core/string/sum_spec.rb +7 -2
  2184. data/spec/framework_spec/app/spec/core/string/swapcase_spec.rb +5 -5
  2185. data/spec/framework_spec/app/spec/core/string/to_a_spec.rb +2 -2
  2186. data/spec/framework_spec/app/spec/core/string/to_c_spec.rb +101 -0
  2187. data/spec/framework_spec/app/spec/core/string/to_f_spec.rb +8 -16
  2188. data/spec/framework_spec/app/spec/core/string/to_i_spec.rb +38 -16
  2189. data/spec/framework_spec/app/spec/core/string/to_r_spec.rb +60 -0
  2190. data/spec/framework_spec/app/spec/core/string/to_s_spec.rb +4 -4
  2191. data/spec/framework_spec/app/spec/core/string/to_str_spec.rb +4 -4
  2192. data/spec/framework_spec/app/spec/core/string/to_sym_spec.rb +4 -4
  2193. data/spec/framework_spec/app/spec/core/string/tr_s_spec.rb +8 -8
  2194. data/spec/framework_spec/app/spec/core/string/tr_spec.rb +37 -5
  2195. data/spec/framework_spec/app/spec/core/string/try_convert_spec.rb +15 -17
  2196. data/spec/framework_spec/app/spec/core/string/unpack/a_spec.rb +51 -0
  2197. data/spec/framework_spec/app/spec/core/string/unpack/at_spec.rb +29 -0
  2198. data/spec/framework_spec/app/spec/core/string/unpack/b_spec.rb +184 -0
  2199. data/spec/framework_spec/app/spec/core/string/unpack/c_spec.rb +63 -0
  2200. data/spec/framework_spec/app/spec/core/string/unpack/comment_spec.rb +25 -0
  2201. data/spec/framework_spec/app/spec/core/string/unpack/d_spec.rb +28 -0
  2202. data/spec/framework_spec/app/spec/core/string/unpack/e_spec.rb +14 -0
  2203. data/spec/framework_spec/app/spec/core/string/unpack/f_spec.rb +28 -0
  2204. data/spec/framework_spec/app/spec/core/string/unpack/g_spec.rb +14 -0
  2205. data/spec/framework_spec/app/spec/core/string/unpack/h_spec.rb +124 -0
  2206. data/spec/framework_spec/app/spec/core/string/unpack/i_spec.rb +72 -0
  2207. data/spec/framework_spec/app/spec/core/string/unpack/l_spec.rb +216 -0
  2208. data/spec/framework_spec/app/spec/core/string/unpack/m_spec.rb +165 -0
  2209. data/spec/framework_spec/app/spec/core/string/unpack/n_spec.rb +18 -0
  2210. data/spec/framework_spec/app/spec/core/string/unpack/percent_spec.rb +7 -0
  2211. data/spec/framework_spec/app/spec/core/string/unpack/q_spec.rb +42 -0
  2212. data/spec/framework_spec/app/spec/core/string/unpack/s_spec.rb +72 -0
  2213. data/spec/framework_spec/app/spec/core/string/unpack/shared/basic.rb +25 -0
  2214. data/spec/framework_spec/app/spec/core/string/unpack/shared/float.rb +267 -0
  2215. data/spec/framework_spec/app/spec/core/string/unpack/shared/integer.rb +343 -0
  2216. data/spec/framework_spec/app/spec/core/string/unpack/shared/string.rb +51 -0
  2217. data/spec/framework_spec/app/spec/core/string/unpack/shared/unicode.rb +60 -0
  2218. data/spec/framework_spec/app/spec/core/string/unpack/u_spec.rb +78 -0
  2219. data/spec/framework_spec/app/spec/core/string/unpack/v_spec.rb +18 -0
  2220. data/spec/framework_spec/app/spec/core/string/unpack/w_spec.rb +25 -0
  2221. data/spec/framework_spec/app/spec/core/string/unpack/x_spec.rb +62 -0
  2222. data/spec/framework_spec/app/spec/core/string/unpack/z_spec.rb +21 -0
  2223. data/spec/framework_spec/app/spec/core/string/unpack_spec.rb +121 -32
  2224. data/spec/framework_spec/app/spec/core/string/upcase_spec.rb +5 -5
  2225. data/spec/framework_spec/app/spec/core/string/upto_spec.rb +21 -11
  2226. data/spec/framework_spec/app/spec/core/string/valid_encoding_spec.rb +122 -0
  2227. data/spec/framework_spec/app/spec/core/struct/each_pair_spec.rb +6 -6
  2228. data/spec/framework_spec/app/spec/core/struct/each_spec.rb +6 -6
  2229. data/spec/framework_spec/app/spec/core/struct/element_reference_spec.rb +7 -7
  2230. data/spec/framework_spec/app/spec/core/struct/element_set_spec.rb +4 -4
  2231. data/spec/framework_spec/app/spec/core/struct/eql_spec.rb +10 -4
  2232. data/spec/framework_spec/app/spec/core/struct/equal_value_spec.rb +3 -3
  2233. data/spec/framework_spec/app/spec/core/struct/fixtures/classes.rb +24 -8
  2234. data/spec/framework_spec/app/spec/core/struct/hash_spec.rb +24 -10
  2235. data/spec/framework_spec/app/spec/core/struct/initialize_copy_spec.rb +2 -2
  2236. data/spec/framework_spec/app/spec/core/struct/initialize_spec.rb +9 -5
  2237. data/spec/framework_spec/app/spec/core/struct/inspect_spec.rb +13 -6
  2238. data/spec/framework_spec/app/spec/core/struct/length_spec.rb +4 -4
  2239. data/spec/framework_spec/app/spec/core/struct/members_spec.rb +17 -7
  2240. data/spec/framework_spec/app/spec/core/struct/new_spec.rb +61 -32
  2241. data/spec/framework_spec/app/spec/core/struct/select_spec.rb +9 -9
  2242. data/spec/framework_spec/app/spec/core/struct/shared/equal_value.rb +20 -5
  2243. data/spec/framework_spec/app/spec/core/struct/shared/inspect.rb +13 -0
  2244. data/spec/framework_spec/app/spec/core/struct/size_spec.rb +3 -3
  2245. data/spec/framework_spec/app/spec/core/struct/struct_spec.rb +6 -6
  2246. data/spec/framework_spec/app/spec/core/struct/tms/cstime_spec.rb +9 -0
  2247. data/spec/framework_spec/app/spec/core/struct/tms/cutime_spec.rb +9 -0
  2248. data/spec/framework_spec/app/spec/core/struct/tms/element_reference_spec.rb +5 -0
  2249. data/spec/framework_spec/app/spec/core/struct/tms/members_spec.rb +5 -0
  2250. data/spec/framework_spec/app/spec/core/struct/tms/new_spec.rb +5 -0
  2251. data/spec/framework_spec/app/spec/core/struct/tms/stime_spec.rb +9 -0
  2252. data/spec/framework_spec/app/spec/core/struct/tms/utime_spec.rb +9 -0
  2253. data/spec/framework_spec/app/spec/core/struct/to_a_spec.rb +4 -4
  2254. data/spec/framework_spec/app/spec/core/struct/to_s_spec.rb +6 -3
  2255. data/spec/framework_spec/app/spec/core/struct/values_at_spec.rb +3 -3
  2256. data/spec/framework_spec/app/spec/core/struct/values_spec.rb +4 -4
  2257. data/spec/framework_spec/app/spec/core/symbol/all_symbols_spec.rb +7 -7
  2258. data/spec/framework_spec/app/spec/core/symbol/capitalize_spec.rb +44 -0
  2259. data/spec/framework_spec/app/spec/core/symbol/case_compare_spec.rb +2 -2
  2260. data/spec/framework_spec/app/spec/core/symbol/casecmp_spec.rb +65 -0
  2261. data/spec/framework_spec/app/spec/core/symbol/comparison_spec.rb +52 -0
  2262. data/spec/framework_spec/app/spec/core/symbol/downcase_spec.rb +26 -0
  2263. data/spec/framework_spec/app/spec/core/symbol/element_reference_spec.rb +7 -0
  2264. data/spec/framework_spec/app/spec/core/symbol/empty_spec.rb +14 -0
  2265. data/spec/framework_spec/app/spec/core/symbol/encoding_spec.rb +7 -0
  2266. data/spec/framework_spec/app/spec/core/symbol/equal_value_spec.rb +2 -2
  2267. data/spec/framework_spec/app/spec/core/symbol/id2name_spec.rb +2 -2
  2268. data/spec/framework_spec/app/spec/core/symbol/inspect_spec.rb +19 -7
  2269. data/spec/framework_spec/app/spec/core/symbol/intern_spec.rb +11 -0
  2270. data/spec/framework_spec/app/spec/core/symbol/length_spec.rb +7 -0
  2271. data/spec/framework_spec/app/spec/core/symbol/match_spec.rb +13 -0
  2272. data/spec/framework_spec/app/spec/core/symbol/next_spec.rb +7 -0
  2273. data/spec/framework_spec/app/spec/core/symbol/size_spec.rb +7 -0
  2274. data/spec/framework_spec/app/spec/core/symbol/slice_spec.rb +7 -0
  2275. data/spec/framework_spec/app/spec/core/symbol/succ_spec.rb +7 -0
  2276. data/spec/framework_spec/app/spec/core/symbol/swapcase_spec.rb +34 -0
  2277. data/spec/framework_spec/app/spec/core/symbol/to_i_spec.rb +2 -2
  2278. data/spec/framework_spec/app/spec/core/symbol/to_int_spec.rb +2 -2
  2279. data/spec/framework_spec/app/spec/core/symbol/to_proc_spec.rb +3 -3
  2280. data/spec/framework_spec/app/spec/core/symbol/to_s_spec.rb +2 -2
  2281. data/spec/framework_spec/app/spec/core/symbol/to_sym_spec.rb +1 -1
  2282. data/spec/framework_spec/app/spec/core/symbol/upcase_spec.rb +22 -0
  2283. data/spec/framework_spec/app/spec/core/systemexit/initialize_spec.rb +1 -1
  2284. data/spec/framework_spec/app/spec/core/thread/abort_on_exception_spec.rb +14 -2
  2285. data/spec/framework_spec/app/spec/core/thread/add_trace_func_spec.rb +7 -0
  2286. data/spec/framework_spec/app/spec/core/thread/alive_spec.rb +18 -4
  2287. data/spec/framework_spec/app/spec/core/thread/allocate_spec.rb +9 -0
  2288. data/spec/framework_spec/app/spec/core/thread/backtrace_spec.rb +7 -0
  2289. data/spec/framework_spec/app/spec/core/thread/critical_spec.rb +77 -75
  2290. data/spec/framework_spec/app/spec/core/thread/current_spec.rb +3 -3
  2291. data/spec/framework_spec/app/spec/core/thread/element_reference_spec.rb +14 -5
  2292. data/spec/framework_spec/app/spec/core/thread/element_set_spec.rb +14 -5
  2293. data/spec/framework_spec/app/spec/core/thread/exclusive_spec.rb +7 -0
  2294. data/spec/framework_spec/app/spec/core/thread/exit_spec.rb +15 -5
  2295. data/spec/framework_spec/app/spec/core/thread/fixtures/classes.rb +53 -40
  2296. data/spec/framework_spec/app/spec/core/thread/fork_spec.rb +9 -2
  2297. data/spec/framework_spec/app/spec/core/thread/group_spec.rb +5 -2
  2298. data/spec/framework_spec/app/spec/core/thread/initialize_spec.rb +2 -2
  2299. data/spec/framework_spec/app/spec/core/thread/inspect_spec.rb +8 -4
  2300. data/spec/framework_spec/app/spec/core/thread/join_spec.rb +17 -6
  2301. data/spec/framework_spec/app/spec/core/thread/key_spec.rb +16 -5
  2302. data/spec/framework_spec/app/spec/core/thread/keys_spec.rb +2 -2
  2303. data/spec/framework_spec/app/spec/core/thread/kill_spec.rb +11 -3
  2304. data/spec/framework_spec/app/spec/core/thread/list_spec.rb +7 -2
  2305. data/spec/framework_spec/app/spec/core/thread/main_spec.rb +2 -2
  2306. data/spec/framework_spec/app/spec/core/thread/new_spec.rb +40 -3
  2307. data/spec/framework_spec/app/spec/core/thread/pass_spec.rb +2 -2
  2308. data/spec/framework_spec/app/spec/core/thread/priority_spec.rb +9 -2
  2309. data/spec/framework_spec/app/spec/core/thread/raise_spec.rb +41 -27
  2310. data/spec/framework_spec/app/spec/core/thread/run_spec.rb +3 -3
  2311. data/spec/framework_spec/app/spec/core/thread/safe_level_spec.rb +6 -2
  2312. data/spec/framework_spec/app/spec/core/thread/set_trace_func_spec.rb +7 -0
  2313. data/spec/framework_spec/app/spec/core/thread/shared/exit.rb +38 -30
  2314. data/spec/framework_spec/app/spec/core/thread/shared/start.rb +51 -0
  2315. data/spec/framework_spec/app/spec/core/thread/shared/wakeup.rb +25 -13
  2316. data/spec/framework_spec/app/spec/core/thread/start_spec.rb +9 -2
  2317. data/spec/framework_spec/app/spec/core/thread/status_spec.rb +8 -4
  2318. data/spec/framework_spec/app/spec/core/thread/stop_spec.rb +12 -8
  2319. data/spec/framework_spec/app/spec/core/thread/terminate_spec.rb +7 -3
  2320. data/spec/framework_spec/app/spec/core/thread/value_spec.rb +21 -8
  2321. data/spec/framework_spec/app/spec/core/thread/wakeup_spec.rb +3 -3
  2322. data/spec/framework_spec/app/spec/core/threadgroup/add_spec.rb +36 -37
  2323. data/spec/framework_spec/app/spec/core/threadgroup/enclose_spec.rb +5 -1
  2324. data/spec/framework_spec/app/spec/core/threadgroup/enclosed_spec.rb +5 -1
  2325. data/spec/framework_spec/app/spec/core/threadgroup/list_spec.rb +24 -25
  2326. data/spec/framework_spec/app/spec/core/time/_dump_spec.rb +13 -2
  2327. data/spec/framework_spec/app/spec/core/time/_load_spec.rb +24 -2
  2328. data/spec/framework_spec/app/spec/core/time/asctime_spec.rb +3 -3
  2329. data/spec/framework_spec/app/spec/core/time/at_spec.rb +34 -14
  2330. data/spec/framework_spec/app/spec/core/time/comparison_spec.rb +4 -4
  2331. data/spec/framework_spec/app/spec/core/time/ctime_spec.rb +3 -3
  2332. data/spec/framework_spec/app/spec/core/time/day_spec.rb +3 -3
  2333. data/spec/framework_spec/app/spec/core/time/dst_spec.rb +3 -3
  2334. data/spec/framework_spec/app/spec/core/time/dup_spec.rb +10 -2
  2335. data/spec/framework_spec/app/spec/core/time/eql_spec.rb +9 -3
  2336. data/spec/framework_spec/app/spec/core/time/fixtures/classes.rb +5 -0
  2337. data/spec/framework_spec/app/spec/core/time/fixtures/methods.rb +1 -29
  2338. data/spec/framework_spec/app/spec/core/time/friday_spec.rb +7 -0
  2339. data/spec/framework_spec/app/spec/core/time/getgm_spec.rb +3 -3
  2340. data/spec/framework_spec/app/spec/core/time/getlocal_spec.rb +2 -2
  2341. data/spec/framework_spec/app/spec/core/time/getutc_spec.rb +3 -3
  2342. data/spec/framework_spec/app/spec/core/time/gm_spec.rb +4 -4
  2343. data/spec/framework_spec/app/spec/core/time/gmt_offset_spec.rb +3 -3
  2344. data/spec/framework_spec/app/spec/core/time/gmt_spec.rb +2 -2
  2345. data/spec/framework_spec/app/spec/core/time/gmtime_spec.rb +3 -3
  2346. data/spec/framework_spec/app/spec/core/time/gmtoff_spec.rb +3 -3
  2347. data/spec/framework_spec/app/spec/core/time/hash_spec.rb +5 -5
  2348. data/spec/framework_spec/app/spec/core/time/hour_spec.rb +2 -2
  2349. data/spec/framework_spec/app/spec/core/time/initialize_copy_spec.rb +2 -2
  2350. data/spec/framework_spec/app/spec/core/time/initialize_spec.rb +3 -3
  2351. data/spec/framework_spec/app/spec/core/time/inspect_spec.rb +11 -2
  2352. data/spec/framework_spec/app/spec/core/time/isdst_spec.rb +4 -4
  2353. data/spec/framework_spec/app/spec/core/time/local_spec.rb +4 -4
  2354. data/spec/framework_spec/app/spec/core/time/localtime_spec.rb +2 -2
  2355. data/spec/framework_spec/app/spec/core/time/mday_spec.rb +3 -3
  2356. data/spec/framework_spec/app/spec/core/time/min_spec.rb +2 -2
  2357. data/spec/framework_spec/app/spec/core/time/minus_spec.rb +53 -33
  2358. data/spec/framework_spec/app/spec/core/time/mktime_spec.rb +4 -4
  2359. data/spec/framework_spec/app/spec/core/time/mon_spec.rb +3 -3
  2360. data/spec/framework_spec/app/spec/core/time/monday_spec.rb +7 -0
  2361. data/spec/framework_spec/app/spec/core/time/month_spec.rb +3 -3
  2362. data/spec/framework_spec/app/spec/core/time/now_spec.rb +3 -3
  2363. data/spec/framework_spec/app/spec/core/time/nsec_spec.rb +7 -0
  2364. data/spec/framework_spec/app/spec/core/time/plus_spec.rb +64 -19
  2365. data/spec/framework_spec/app/spec/core/time/round_spec.rb +7 -0
  2366. data/spec/framework_spec/app/spec/core/time/saturday_spec.rb +7 -0
  2367. data/spec/framework_spec/app/spec/core/time/sec_spec.rb +2 -2
  2368. data/spec/framework_spec/app/spec/core/time/shared/gmt_offset.rb +23 -0
  2369. data/spec/framework_spec/app/spec/core/time/shared/inspect.rb +25 -0
  2370. data/spec/framework_spec/app/spec/core/time/shared/isdst.rb +1 -1
  2371. data/spec/framework_spec/app/spec/core/time/shared/local.rb +8 -0
  2372. data/spec/framework_spec/app/spec/core/time/shared/now.rb +12 -4
  2373. data/spec/framework_spec/app/spec/core/time/shared/time_params.rb +134 -35
  2374. data/spec/framework_spec/app/spec/core/time/strftime_spec.rb +141 -2
  2375. data/spec/framework_spec/app/spec/core/time/subsec_spec.rb +7 -0
  2376. data/spec/framework_spec/app/spec/core/time/succ_spec.rb +3 -3
  2377. data/spec/framework_spec/app/spec/core/time/sunday_spec.rb +7 -0
  2378. data/spec/framework_spec/app/spec/core/time/thursday_spec.rb +7 -0
  2379. data/spec/framework_spec/app/spec/core/time/times_spec.rb +2 -2
  2380. data/spec/framework_spec/app/spec/core/time/to_a_spec.rb +4 -3
  2381. data/spec/framework_spec/app/spec/core/time/to_f_spec.rb +2 -2
  2382. data/spec/framework_spec/app/spec/core/time/to_i_spec.rb +3 -3
  2383. data/spec/framework_spec/app/spec/core/time/to_r_spec.rb +13 -0
  2384. data/spec/framework_spec/app/spec/core/time/to_s_spec.rb +11 -2
  2385. data/spec/framework_spec/app/spec/core/time/tuesday_spec.rb +7 -0
  2386. data/spec/framework_spec/app/spec/core/time/tv_nsec_spec.rb +7 -0
  2387. data/spec/framework_spec/app/spec/core/time/tv_sec_spec.rb +3 -3
  2388. data/spec/framework_spec/app/spec/core/time/tv_usec_spec.rb +6 -2
  2389. data/spec/framework_spec/app/spec/core/time/usec_spec.rb +8 -2
  2390. data/spec/framework_spec/app/spec/core/time/utc_offset_spec.rb +3 -3
  2391. data/spec/framework_spec/app/spec/core/time/utc_spec.rb +7 -7
  2392. data/spec/framework_spec/app/spec/core/time/wday_spec.rb +2 -2
  2393. data/spec/framework_spec/app/spec/core/time/wednesday_spec.rb +7 -0
  2394. data/spec/framework_spec/app/spec/core/time/yday_spec.rb +2 -2
  2395. data/spec/framework_spec/app/spec/core/time/year_spec.rb +3 -3
  2396. data/spec/framework_spec/app/spec/core/time/zone_spec.rb +4 -3
  2397. data/spec/framework_spec/app/spec/core/true/and_spec.rb +1 -1
  2398. data/spec/framework_spec/app/spec/core/true/inspect_spec.rb +1 -1
  2399. data/spec/framework_spec/app/spec/core/true/or_spec.rb +1 -1
  2400. data/spec/framework_spec/app/spec/core/true/to_s_spec.rb +1 -1
  2401. data/spec/framework_spec/app/spec/core/true/xor_spec.rb +1 -1
  2402. data/spec/framework_spec/app/spec/core/unboundmethod/arity_spec.rb +2 -2
  2403. data/spec/framework_spec/app/spec/core/unboundmethod/bind_spec.rb +26 -6
  2404. data/spec/framework_spec/app/spec/core/unboundmethod/clone_spec.rb +2 -2
  2405. data/spec/framework_spec/app/spec/core/unboundmethod/eql_spec.rb +7 -0
  2406. data/spec/framework_spec/app/spec/core/unboundmethod/equal_value_spec.rb +4 -4
  2407. data/spec/framework_spec/app/spec/core/unboundmethod/fixtures/classes.rb +4 -1
  2408. data/spec/framework_spec/app/spec/core/unboundmethod/hash_spec.rb +7 -0
  2409. data/spec/framework_spec/app/spec/core/unboundmethod/inspect_spec.rb +3 -3
  2410. data/spec/framework_spec/app/spec/core/unboundmethod/name_spec.rb +19 -5
  2411. data/spec/framework_spec/app/spec/core/unboundmethod/owner_spec.rb +4 -4
  2412. data/spec/framework_spec/app/spec/core/unboundmethod/parameters_spec.rb +7 -0
  2413. data/spec/framework_spec/app/spec/core/unboundmethod/shared/to_s.rb +4 -4
  2414. data/spec/framework_spec/app/spec/core/unboundmethod/source_location_spec.rb +31 -0
  2415. data/spec/framework_spec/app/spec/core/unboundmethod/to_s_spec.rb +3 -3
  2416. data/spec/framework_spec/app/spec/fixtures/class.rb +39 -16
  2417. data/spec/framework_spec/app/spec/fixtures/class_variables.rb +7 -7
  2418. data/spec/framework_spec/app/spec/fixtures/code/file_fixture.rb +1 -0
  2419. data/spec/framework_spec/app/spec/fixtures/code/line_fixture.rb +5 -0
  2420. data/spec/framework_spec/app/spec/fixtures/code/load_ext_fixture.rb +1 -0
  2421. data/spec/framework_spec/app/spec/fixtures/code/load_fixture +1 -0
  2422. data/spec/framework_spec/app/spec/fixtures/code/load_fixture.bundle +1 -0
  2423. data/spec/framework_spec/app/spec/fixtures/code/load_fixture.dll +1 -0
  2424. data/spec/framework_spec/app/spec/fixtures/code/load_fixture.dylib +1 -0
  2425. data/spec/framework_spec/app/spec/fixtures/code/load_fixture.ext +1 -0
  2426. data/spec/framework_spec/app/spec/fixtures/code/load_fixture.ext.bundle +1 -0
  2427. data/spec/framework_spec/app/spec/fixtures/code/load_fixture.ext.dll +1 -0
  2428. data/spec/framework_spec/app/spec/fixtures/code/load_fixture.ext.dylib +1 -0
  2429. data/spec/framework_spec/app/spec/fixtures/code/load_fixture.ext.rb +1 -0
  2430. data/spec/framework_spec/app/spec/fixtures/code/load_fixture.ext.so +1 -0
  2431. data/spec/framework_spec/app/spec/fixtures/code/load_fixture.rb +1 -0
  2432. data/spec/framework_spec/app/spec/fixtures/code/load_fixture.so +1 -0
  2433. data/spec/framework_spec/app/spec/fixtures/code/methods_fixture.rb +364 -0
  2434. data/spec/framework_spec/app/spec/fixtures/code/raise_fixture.rb +1 -0
  2435. data/spec/framework_spec/app/spec/fixtures/code/recursive_load_fixture.rb +5 -0
  2436. data/spec/framework_spec/app/spec/fixtures/code/recursive_require_fixture.rb +3 -0
  2437. data/spec/framework_spec/app/spec/fixtures/code/wrap_fixture.rb +3 -0
  2438. data/spec/framework_spec/app/spec/fixtures/code_loading.rb +30 -0
  2439. data/spec/framework_spec/app/spec/fixtures/enumerator/classes.rb +15 -0
  2440. data/spec/framework_spec/app/spec/fixtures/kernel/callcc.rb +17 -0
  2441. data/spec/framework_spec/app/spec/fixtures/kernel/classes.rb +56 -0
  2442. data/spec/framework_spec/app/spec/fixtures/math/common.rb +3 -0
  2443. data/spec/framework_spec/app/spec/fixtures/reflection.rb +352 -0
  2444. data/spec/framework_spec/app/spec/language/BEGIN_spec.rb +57 -0
  2445. data/spec/framework_spec/app/spec/language/README +1 -1
  2446. data/spec/framework_spec/app/spec/language/alias_spec.rb +33 -20
  2447. data/spec/framework_spec/app/spec/language/and_spec.rb +8 -8
  2448. data/spec/framework_spec/app/spec/language/array_spec.rb +5 -5
  2449. data/spec/framework_spec/app/spec/language/block_spec.rb +408 -27
  2450. data/spec/framework_spec/app/spec/language/break_spec.rb +210 -280
  2451. data/spec/framework_spec/app/spec/language/case_spec.rb +37 -38
  2452. data/spec/framework_spec/app/spec/language/class_spec.rb +52 -70
  2453. data/spec/framework_spec/app/spec/language/class_variable_spec.rb +6 -6
  2454. data/spec/framework_spec/app/spec/language/{constants_spec_dontrun.rb → constants_spec.rb} +14 -0
  2455. data/spec/framework_spec/app/spec/language/def_spec.rb +83 -68
  2456. data/spec/framework_spec/app/spec/language/defined_spec.rb +1181 -142
  2457. data/spec/framework_spec/app/spec/language/encoding_spec.rb +19 -20
  2458. data/spec/framework_spec/app/spec/language/ensure_spec.rb +32 -37
  2459. data/spec/framework_spec/app/spec/language/execution_spec.rb +9 -11
  2460. data/spec/framework_spec/app/spec/language/file_spec.rb +21 -39
  2461. data/spec/framework_spec/app/spec/language/fixtures/block.rb +26 -15
  2462. data/spec/framework_spec/app/spec/language/fixtures/break.rb +240 -0
  2463. data/spec/framework_spec/app/spec/language/fixtures/break_lambda_toplevel.rb +9 -0
  2464. data/spec/framework_spec/app/spec/language/fixtures/break_lambda_toplevel_block.rb +23 -0
  2465. data/spec/framework_spec/app/spec/language/fixtures/break_lambda_toplevel_method.rb +17 -0
  2466. data/spec/framework_spec/app/spec/language/fixtures/classes.rb +8 -8
  2467. data/spec/framework_spec/app/spec/language/fixtures/defined.rb +270 -0
  2468. data/spec/framework_spec/app/spec/language/fixtures/ensure.rb +6 -6
  2469. data/spec/framework_spec/app/spec/language/fixtures/file.rb +1 -1
  2470. data/spec/framework_spec/app/spec/language/fixtures/literal_lambda.rb +7 -0
  2471. data/spec/framework_spec/app/spec/language/fixtures/next.rb +128 -0
  2472. data/spec/framework_spec/app/spec/language/fixtures/private.rb +3 -3
  2473. data/spec/framework_spec/app/spec/language/fixtures/return.rb +44 -0
  2474. data/spec/framework_spec/app/spec/language/fixtures/rubyopt.rb +1 -0
  2475. data/spec/framework_spec/app/spec/language/fixtures/send.rb +110 -0
  2476. data/spec/framework_spec/app/spec/language/fixtures/send_1.9.rb +20 -0
  2477. data/spec/framework_spec/app/spec/language/fixtures/super.rb +38 -7
  2478. data/spec/framework_spec/app/spec/language/fixtures/variables.rb +1 -1
  2479. data/spec/framework_spec/app/spec/language/fixtures/yield.rb +20 -2
  2480. data/spec/framework_spec/app/spec/language/for_spec.rb +63 -39
  2481. data/spec/framework_spec/app/spec/language/hash_spec.rb +26 -1
  2482. data/spec/framework_spec/app/spec/language/if_spec.rb +32 -2
  2483. data/spec/framework_spec/app/spec/language/line_spec.rb +42 -17
  2484. data/spec/framework_spec/app/spec/language/literal_lambda_spec.rb +1 -0
  2485. data/spec/framework_spec/app/spec/language/loop_spec.rb +7 -8
  2486. data/spec/framework_spec/app/spec/language/magic_comment_spec.rb +60 -61
  2487. data/spec/framework_spec/app/spec/language/metaclass_spec.rb +21 -24
  2488. data/spec/framework_spec/app/spec/language/module_spec.rb +46 -1
  2489. data/spec/framework_spec/app/spec/language/next_spec.rb +241 -7
  2490. data/spec/framework_spec/app/spec/language/not_spec.rb +22 -2
  2491. data/spec/framework_spec/app/spec/language/numbers_spec.rb +5 -6
  2492. data/spec/framework_spec/app/spec/language/or_spec.rb +33 -7
  2493. data/spec/framework_spec/app/spec/language/order_spec.rb +3 -3
  2494. data/spec/framework_spec/app/spec/language/precedence_spec.rb +31 -33
  2495. data/spec/framework_spec/app/spec/language/predefined/data_spec.rb +45 -0
  2496. data/spec/framework_spec/app/spec/language/{fixtures/predefined.rb → predefined/fixtures/data1.rb} +2 -0
  2497. data/spec/framework_spec/app/spec/language/predefined/fixtures/data2.rb +4 -0
  2498. data/spec/framework_spec/app/spec/language/predefined/fixtures/data3.rb +7 -0
  2499. data/spec/framework_spec/app/spec/language/predefined/fixtures/data4.rb +4 -0
  2500. data/spec/framework_spec/app/spec/{core/io/data/fixtures/data2.rb → language/predefined/fixtures/data_flock.rb} +1 -1
  2501. data/spec/framework_spec/app/spec/language/predefined/fixtures/data_only.rb +2 -0
  2502. data/spec/framework_spec/app/spec/language/predefined/fixtures/print_data.rb +3 -0
  2503. data/spec/framework_spec/app/spec/language/predefined_spec.rb +599 -283
  2504. data/spec/framework_spec/app/spec/language/private_spec.rb +4 -4
  2505. data/spec/framework_spec/app/spec/language/proc_spec.rb +238 -0
  2506. data/spec/framework_spec/app/spec/language/redo_spec.rb +2 -2
  2507. data/spec/framework_spec/app/spec/language/regexp/anchors_spec.rb +163 -0
  2508. data/spec/framework_spec/app/spec/language/regexp/back-references_spec.rb +50 -0
  2509. data/spec/framework_spec/app/spec/language/regexp/character_classes_spec.rb +96 -0
  2510. data/spec/framework_spec/app/spec/language/regexp/encoding_spec.rb +129 -0
  2511. data/spec/framework_spec/app/spec/language/regexp/escapes_spec.rb +80 -0
  2512. data/spec/framework_spec/app/spec/language/regexp/grouping_spec.rb +23 -0
  2513. data/spec/framework_spec/app/spec/language/regexp/interpolation_spec.rb +55 -0
  2514. data/spec/framework_spec/app/spec/language/regexp/modifiers_spec.rb +132 -0
  2515. data/spec/framework_spec/app/spec/language/regexp/repetition_spec.rb +47 -0
  2516. data/spec/framework_spec/app/spec/language/regexp/versions/character_classes_1.9.rb +499 -0
  2517. data/spec/framework_spec/app/spec/language/regexp_spec.rb +42 -677
  2518. data/spec/framework_spec/app/spec/language/rescue_spec.rb +57 -8
  2519. data/spec/framework_spec/app/spec/language/retry_spec.rb +4 -4
  2520. data/spec/framework_spec/app/spec/language/return_spec.rb +11 -2
  2521. data/spec/framework_spec/app/spec/language/send_spec.rb +227 -0
  2522. data/spec/framework_spec/app/spec/language/shared/__FILE__.rb +37 -0
  2523. data/spec/framework_spec/app/spec/language/shared/__LINE__.rb +17 -0
  2524. data/spec/framework_spec/app/spec/language/singleton_class_spec.rb +299 -0
  2525. data/spec/framework_spec/app/spec/language/splat_spec.rb +188 -0
  2526. data/spec/framework_spec/app/spec/language/string_spec.rb +42 -7
  2527. data/spec/framework_spec/app/spec/language/super_spec.rb +11 -5
  2528. data/spec/framework_spec/app/spec/language/symbol_spec.rb +18 -11
  2529. data/spec/framework_spec/app/spec/language/throw_spec.rb +3 -3
  2530. data/spec/framework_spec/app/spec/language/undef_spec.rb +1 -1
  2531. data/spec/framework_spec/app/spec/language/unless_spec.rb +8 -8
  2532. data/spec/framework_spec/app/spec/language/until_spec.rb +27 -27
  2533. data/spec/framework_spec/app/spec/language/variables_spec.rb +57 -61
  2534. data/spec/framework_spec/app/spec/language/versions/array_1.9.rb +8 -0
  2535. data/spec/framework_spec/app/spec/language/versions/block_1.9.rb +80 -17
  2536. data/spec/framework_spec/app/spec/language/versions/case_1.9.rb +5 -5
  2537. data/spec/framework_spec/app/spec/language/versions/hash_1.9.rb +19 -0
  2538. data/spec/framework_spec/app/spec/language/versions/literal_lambda_1.9.rb +143 -0
  2539. data/spec/framework_spec/app/spec/language/versions/not_1.9.rb +22 -0
  2540. data/spec/framework_spec/app/spec/language/versions/regexp_1.9.rb +3 -3
  2541. data/spec/framework_spec/app/spec/language/versions/send_1.9.rb +196 -0
  2542. data/spec/framework_spec/app/spec/language/versions/symbol_1.9.rb +10 -2
  2543. data/spec/framework_spec/app/spec/language/versions/variables_1.9.rb +8 -0
  2544. data/spec/framework_spec/app/spec/language/while_spec.rb +24 -24
  2545. data/spec/framework_spec/app/spec/language/yield_spec.rb +105 -84
  2546. data/spec/framework_spec/app/spec/library/base64/b64encode_spec.rb +36 -0
  2547. data/spec/framework_spec/app/spec/library/base64/decode64_spec.rb +9 -0
  2548. data/spec/framework_spec/app/spec/library/base64/decode_b_spec.rb +19 -0
  2549. data/spec/framework_spec/app/spec/library/base64/encode64_spec.rb +14 -0
  2550. data/spec/framework_spec/app/spec/library/digest/hexencode_spec.rb +31 -0
  2551. data/spec/framework_spec/app/spec/library/digest/md5/append_spec.rb +3 -3
  2552. data/spec/framework_spec/app/spec/library/digest/md5/block_length_spec.rb +2 -2
  2553. data/spec/framework_spec/app/spec/library/digest/md5/digest_bang_spec.rb +2 -2
  2554. data/spec/framework_spec/app/spec/library/digest/md5/digest_length_spec.rb +2 -2
  2555. data/spec/framework_spec/app/spec/library/digest/md5/digest_spec.rb +2 -2
  2556. data/spec/framework_spec/app/spec/library/digest/md5/equal_spec.rb +2 -2
  2557. data/spec/framework_spec/app/spec/library/digest/md5/file_spec.rb +48 -0
  2558. data/spec/framework_spec/app/spec/library/digest/md5/hexdigest_bang_spec.rb +2 -2
  2559. data/spec/framework_spec/app/spec/library/digest/md5/hexdigest_spec.rb +2 -2
  2560. data/spec/framework_spec/app/spec/library/digest/md5/inspect_spec.rb +2 -2
  2561. data/spec/framework_spec/app/spec/library/digest/md5/length_spec.rb +3 -3
  2562. data/spec/framework_spec/app/spec/library/digest/md5/reset_spec.rb +2 -2
  2563. data/spec/framework_spec/app/spec/library/digest/md5/shared/constants.rb +1 -1
  2564. data/spec/framework_spec/app/spec/library/digest/md5/shared/sample.rb +1 -1
  2565. data/spec/framework_spec/app/spec/library/digest/md5/size_spec.rb +3 -3
  2566. data/spec/framework_spec/app/spec/library/digest/md5/to_s_spec.rb +2 -2
  2567. data/spec/framework_spec/app/spec/library/digest/md5/update_spec.rb +3 -3
  2568. data/spec/framework_spec/app/spec/library/digest/sha1/digest_spec.rb +2 -2
  2569. data/spec/framework_spec/app/spec/library/digest/sha1/file_spec.rb +43 -0
  2570. data/spec/framework_spec/app/spec/library/digest/sha1/shared/constants.rb +1 -1
  2571. data/spec/framework_spec/app/spec/library/set/add_spec.rb +27 -0
  2572. data/spec/framework_spec/app/spec/library/set/append_spec.rb +7 -0
  2573. data/spec/framework_spec/app/spec/library/set/classify_spec.rb +35 -0
  2574. data/spec/framework_spec/app/spec/library/set/clear_spec.rb +17 -0
  2575. data/spec/framework_spec/app/spec/library/set/collect_spec.rb +7 -0
  2576. data/spec/framework_spec/app/spec/library/set/constructor_spec.rb +15 -0
  2577. data/spec/framework_spec/app/spec/library/set/delete_if_spec.rb +46 -0
  2578. data/spec/framework_spec/app/spec/library/set/delete_spec.rb +37 -0
  2579. data/spec/framework_spec/app/spec/library/set/difference_spec.rb +7 -0
  2580. data/spec/framework_spec/app/spec/library/set/divide_spec.rb +34 -0
  2581. data/spec/framework_spec/app/spec/library/set/each_spec.rb +34 -0
  2582. data/spec/framework_spec/app/spec/library/set/empty_spec.rb +10 -0
  2583. data/spec/framework_spec/app/spec/library/set/enumerable/to_set_spec.rb +19 -0
  2584. data/spec/framework_spec/app/spec/library/set/eql_spec.rb +17 -0
  2585. data/spec/framework_spec/app/spec/library/set/equal_value_spec.rb +38 -0
  2586. data/spec/framework_spec/app/spec/library/set/exclusion_spec.rb +18 -0
  2587. data/spec/framework_spec/app/spec/library/set/flatten_merge_spec.rb +23 -0
  2588. data/spec/framework_spec/app/spec/library/set/flatten_spec.rb +40 -0
  2589. data/spec/framework_spec/app/spec/library/set/hash_spec.rb +15 -0
  2590. data/spec/framework_spec/app/spec/library/set/include_spec.rb +7 -0
  2591. data/spec/framework_spec/app/spec/library/set/initialize_copy_spec.rb +18 -0
  2592. data/spec/framework_spec/app/spec/library/set/initialize_spec.rb +24 -0
  2593. data/spec/framework_spec/app/spec/library/set/inspect_spec.rb +18 -0
  2594. data/spec/framework_spec/app/spec/library/set/intersection_spec.rb +11 -0
  2595. data/spec/framework_spec/app/spec/library/set/keep_if_spec.rb +41 -0
  2596. data/spec/framework_spec/app/spec/library/set/length_spec.rb +7 -0
  2597. data/spec/framework_spec/app/spec/library/set/map_spec.rb +7 -0
  2598. data/spec/framework_spec/app/spec/library/set/member_spec.rb +7 -0
  2599. data/spec/framework_spec/app/spec/library/set/merge_spec.rb +19 -0
  2600. data/spec/framework_spec/app/spec/library/set/minus_spec.rb +7 -0
  2601. data/spec/framework_spec/app/spec/library/set/plus_spec.rb +7 -0
  2602. data/spec/framework_spec/app/spec/library/set/pretty_print_cycle_spec.rb +10 -0
  2603. data/spec/framework_spec/app/spec/library/set/pretty_print_spec.rb +17 -0
  2604. data/spec/framework_spec/app/spec/library/set/proper_subset_spec.rb +34 -0
  2605. data/spec/framework_spec/app/spec/library/set/proper_superset_spec.rb +34 -0
  2606. data/spec/framework_spec/app/spec/library/set/reject_spec.rb +50 -0
  2607. data/spec/framework_spec/app/spec/library/set/replace_spec.rb +17 -0
  2608. data/spec/framework_spec/app/spec/library/set/select_spec.rb +45 -0
  2609. data/spec/framework_spec/app/spec/library/set/shared/add.rb +14 -0
  2610. data/spec/framework_spec/app/spec/library/set/shared/collect.rb +20 -0
  2611. data/spec/framework_spec/app/spec/library/set/shared/difference.rb +15 -0
  2612. data/spec/framework_spec/app/spec/library/set/shared/include.rb +7 -0
  2613. data/spec/framework_spec/app/spec/library/set/shared/intersection.rb +15 -0
  2614. data/spec/framework_spec/app/spec/library/set/shared/length.rb +6 -0
  2615. data/spec/framework_spec/app/spec/library/set/shared/union.rb +15 -0
  2616. data/spec/framework_spec/app/spec/library/set/size_spec.rb +7 -0
  2617. data/spec/framework_spec/app/spec/library/set/sortedset/add_spec.rb +36 -0
  2618. data/spec/framework_spec/app/spec/library/set/sortedset/append_spec.rb +7 -0
  2619. data/spec/framework_spec/app/spec/library/set/sortedset/classify_spec.rb +35 -0
  2620. data/spec/framework_spec/app/spec/library/set/sortedset/clear_spec.rb +17 -0
  2621. data/spec/framework_spec/app/spec/library/set/sortedset/collect_spec.rb +7 -0
  2622. data/spec/framework_spec/app/spec/library/set/sortedset/constructor_spec.rb +15 -0
  2623. data/spec/framework_spec/app/spec/library/set/sortedset/delete_if_spec.rb +48 -0
  2624. data/spec/framework_spec/app/spec/library/set/sortedset/delete_spec.rb +37 -0
  2625. data/spec/framework_spec/app/spec/library/set/sortedset/difference_spec.rb +7 -0
  2626. data/spec/framework_spec/app/spec/library/set/sortedset/divide_spec.rb +34 -0
  2627. data/spec/framework_spec/app/spec/library/set/sortedset/each_spec.rb +36 -0
  2628. data/spec/framework_spec/app/spec/library/set/sortedset/empty_spec.rb +10 -0
  2629. data/spec/framework_spec/app/spec/library/set/sortedset/eql_spec.rb +18 -0
  2630. data/spec/framework_spec/app/spec/library/set/sortedset/equal_value_spec.rb +13 -0
  2631. data/spec/framework_spec/app/spec/library/set/sortedset/exclusion_spec.rb +18 -0
  2632. data/spec/framework_spec/app/spec/library/set/sortedset/flatten_merge_spec.rb +8 -0
  2633. data/spec/framework_spec/app/spec/library/set/sortedset/flatten_spec.rb +48 -0
  2634. data/spec/framework_spec/app/spec/library/set/sortedset/hash_spec.rb +15 -0
  2635. data/spec/framework_spec/app/spec/library/set/sortedset/include_spec.rb +7 -0
  2636. data/spec/framework_spec/app/spec/library/set/sortedset/initialize_copy_spec.rb +18 -0
  2637. data/spec/framework_spec/app/spec/library/set/sortedset/initialize_spec.rb +32 -0
  2638. data/spec/framework_spec/app/spec/library/set/sortedset/inspect_spec.rb +10 -0
  2639. data/spec/framework_spec/app/spec/library/set/sortedset/intersection_spec.rb +11 -0
  2640. data/spec/framework_spec/app/spec/library/set/sortedset/keep_if_spec.rb +34 -0
  2641. data/spec/framework_spec/app/spec/library/set/sortedset/length_spec.rb +7 -0
  2642. data/spec/framework_spec/app/spec/library/set/sortedset/map_spec.rb +7 -0
  2643. data/spec/framework_spec/app/spec/library/set/sortedset/member_spec.rb +7 -0
  2644. data/spec/framework_spec/app/spec/library/set/sortedset/merge_spec.rb +19 -0
  2645. data/spec/framework_spec/app/spec/library/set/sortedset/minus_spec.rb +7 -0
  2646. data/spec/framework_spec/app/spec/library/set/sortedset/plus_spec.rb +7 -0
  2647. data/spec/framework_spec/app/spec/library/set/sortedset/pretty_print_cycle_spec.rb +10 -0
  2648. data/spec/framework_spec/app/spec/library/set/sortedset/pretty_print_spec.rb +17 -0
  2649. data/spec/framework_spec/app/spec/library/set/sortedset/proper_subset_spec.rb +33 -0
  2650. data/spec/framework_spec/app/spec/library/set/sortedset/proper_superset_spec.rb +33 -0
  2651. data/spec/framework_spec/app/spec/library/set/sortedset/reject_spec.rb +52 -0
  2652. data/spec/framework_spec/app/spec/library/set/sortedset/replace_spec.rb +17 -0
  2653. data/spec/framework_spec/app/spec/library/set/sortedset/select_spec.rb +38 -0
  2654. data/spec/framework_spec/app/spec/library/set/sortedset/shared/add.rb +14 -0
  2655. data/spec/framework_spec/app/spec/library/set/sortedset/shared/collect.rb +20 -0
  2656. data/spec/framework_spec/app/spec/library/set/sortedset/shared/difference.rb +15 -0
  2657. data/spec/framework_spec/app/spec/library/set/sortedset/shared/include.rb +7 -0
  2658. data/spec/framework_spec/app/spec/library/set/sortedset/shared/intersection.rb +15 -0
  2659. data/spec/framework_spec/app/spec/library/set/sortedset/shared/length.rb +6 -0
  2660. data/spec/framework_spec/app/spec/library/set/sortedset/shared/union.rb +15 -0
  2661. data/spec/framework_spec/app/spec/library/set/sortedset/size_spec.rb +7 -0
  2662. data/spec/framework_spec/app/spec/library/set/sortedset/subset_spec.rb +33 -0
  2663. data/spec/framework_spec/app/spec/library/set/sortedset/subtract_spec.rb +17 -0
  2664. data/spec/framework_spec/app/spec/library/set/sortedset/superset_spec.rb +33 -0
  2665. data/spec/framework_spec/app/spec/library/set/sortedset/to_a_spec.rb +8 -0
  2666. data/spec/framework_spec/app/spec/library/set/sortedset/union_spec.rb +11 -0
  2667. data/spec/framework_spec/app/spec/library/set/subset_spec.rb +34 -0
  2668. data/spec/framework_spec/app/spec/library/set/subtract_spec.rb +17 -0
  2669. data/spec/framework_spec/app/spec/library/set/superset_spec.rb +34 -0
  2670. data/spec/framework_spec/app/spec/library/set/to_a_spec.rb +8 -0
  2671. data/spec/framework_spec/app/spec/library/set/union_spec.rb +11 -0
  2672. data/spec/framework_spec/app/spec/library/stringio/append_spec.rb +84 -0
  2673. data/spec/framework_spec/app/spec/library/stringio/binmode_spec.rb +9 -0
  2674. data/spec/framework_spec/app/spec/library/stringio/bytes_spec.rb +13 -0
  2675. data/spec/framework_spec/app/spec/library/stringio/chars_spec.rb +13 -0
  2676. data/spec/framework_spec/app/spec/library/stringio/close_read_spec.rb +31 -0
  2677. data/spec/framework_spec/app/spec/library/stringio/close_spec.rb +23 -0
  2678. data/spec/framework_spec/app/spec/library/stringio/close_write_spec.rb +31 -0
  2679. data/spec/framework_spec/app/spec/library/stringio/closed_read_spec.rb +12 -0
  2680. data/spec/framework_spec/app/spec/library/stringio/closed_spec.rb +16 -0
  2681. data/spec/framework_spec/app/spec/library/stringio/closed_write_spec.rb +12 -0
  2682. data/spec/framework_spec/app/spec/library/stringio/codepoints.rb +11 -0
  2683. data/spec/framework_spec/app/spec/library/stringio/each_byte_spec.rb +11 -0
  2684. data/spec/framework_spec/app/spec/library/stringio/each_char_spec.rb +13 -0
  2685. data/spec/framework_spec/app/spec/library/stringio/each_codepoint.rb +12 -0
  2686. data/spec/framework_spec/app/spec/library/stringio/each_line_spec.rb +15 -0
  2687. data/spec/framework_spec/app/spec/library/stringio/each_spec.rb +15 -0
  2688. data/spec/framework_spec/app/spec/library/stringio/eof_spec.rb +11 -0
  2689. data/spec/framework_spec/app/spec/library/stringio/external_encoding.rb +12 -0
  2690. data/spec/framework_spec/app/spec/library/stringio/fcntl_spec.rb +8 -0
  2691. data/spec/framework_spec/app/spec/library/stringio/fileno_spec.rb +9 -0
  2692. data/spec/framework_spec/app/spec/library/stringio/fixtures/classes.rb +15 -0
  2693. data/spec/framework_spec/app/spec/library/stringio/flush_spec.rb +9 -0
  2694. data/spec/framework_spec/app/spec/library/stringio/fsync_spec.rb +9 -0
  2695. data/spec/framework_spec/app/spec/library/stringio/getbyte_spec.rb +21 -0
  2696. data/spec/framework_spec/app/spec/library/stringio/getc_spec.rb +19 -0
  2697. data/spec/framework_spec/app/spec/library/stringio/gets_spec.rb +139 -0
  2698. data/spec/framework_spec/app/spec/library/stringio/initialize_copy_spec.rb +96 -0
  2699. data/spec/framework_spec/app/spec/library/stringio/initialize_spec.rb +194 -0
  2700. data/spec/framework_spec/app/spec/library/stringio/internal_encoding.rb +12 -0
  2701. data/spec/framework_spec/app/spec/library/stringio/isatty_spec.rb +7 -0
  2702. data/spec/framework_spec/app/spec/library/stringio/length_spec.rb +7 -0
  2703. data/spec/framework_spec/app/spec/library/stringio/lineno_spec.rb +30 -0
  2704. data/spec/framework_spec/app/spec/library/stringio/lines_spec.rb +17 -0
  2705. data/spec/framework_spec/app/spec/library/stringio/open_spec.rb +216 -0
  2706. data/spec/framework_spec/app/spec/library/stringio/path_spec.rb +16 -0
  2707. data/spec/framework_spec/app/spec/library/stringio/pid_spec.rb +8 -0
  2708. data/spec/framework_spec/app/spec/library/stringio/pos_spec.rb +28 -0
  2709. data/spec/framework_spec/app/spec/library/stringio/print_spec.rb +114 -0
  2710. data/spec/framework_spec/app/spec/library/stringio/printf_spec.rb +61 -0
  2711. data/spec/framework_spec/app/spec/library/stringio/putc_spec.rb +88 -0
  2712. data/spec/framework_spec/app/spec/library/stringio/puts_spec.rb +159 -0
  2713. data/spec/framework_spec/app/spec/library/stringio/read_spec.rb +62 -0
  2714. data/spec/framework_spec/app/spec/library/stringio/readbyte_spec.rb +22 -0
  2715. data/spec/framework_spec/app/spec/library/stringio/readchar_spec.rb +20 -0
  2716. data/spec/framework_spec/app/spec/library/stringio/readline_spec.rb +128 -0
  2717. data/spec/framework_spec/app/spec/library/stringio/readlines_spec.rb +94 -0
  2718. data/spec/framework_spec/app/spec/library/stringio/readpartial_spec.rb +83 -0
  2719. data/spec/framework_spec/app/spec/library/stringio/reopen_spec.rb +304 -0
  2720. data/spec/framework_spec/app/spec/library/stringio/rewind_spec.rb +24 -0
  2721. data/spec/framework_spec/app/spec/library/stringio/seek_spec.rb +76 -0
  2722. data/spec/framework_spec/app/spec/library/stringio/set_encoding.rb +12 -0
  2723. data/spec/framework_spec/app/spec/library/stringio/shared/codepoints.rb +45 -0
  2724. data/spec/framework_spec/app/spec/library/stringio/shared/each.rb +115 -0
  2725. data/spec/framework_spec/app/spec/library/stringio/shared/each_byte.rb +60 -0
  2726. data/spec/framework_spec/app/spec/library/stringio/shared/each_char.rb +50 -0
  2727. data/spec/framework_spec/app/spec/library/stringio/shared/eof.rb +24 -0
  2728. data/spec/framework_spec/app/spec/library/stringio/shared/getc.rb +43 -0
  2729. data/spec/framework_spec/app/spec/library/stringio/shared/isatty.rb +5 -0
  2730. data/spec/framework_spec/app/spec/library/stringio/shared/length.rb +5 -0
  2731. data/spec/framework_spec/app/spec/library/stringio/shared/read.rb +125 -0
  2732. data/spec/framework_spec/app/spec/library/stringio/shared/readchar.rb +29 -0
  2733. data/spec/framework_spec/app/spec/library/stringio/shared/tell.rb +12 -0
  2734. data/spec/framework_spec/app/spec/library/stringio/shared/write.rb +87 -0
  2735. data/spec/framework_spec/app/spec/library/stringio/size_spec.rb +7 -0
  2736. data/spec/framework_spec/app/spec/library/stringio/string_spec.rb +50 -0
  2737. data/spec/framework_spec/app/spec/library/stringio/stringio_spec.rb +9 -0
  2738. data/spec/framework_spec/app/spec/library/stringio/sync_spec.rb +19 -0
  2739. data/spec/framework_spec/app/spec/library/stringio/sysread_spec.rb +54 -0
  2740. data/spec/framework_spec/app/spec/library/stringio/syswrite_spec.rb +19 -0
  2741. data/spec/framework_spec/app/spec/library/stringio/tell_spec.rb +7 -0
  2742. data/spec/framework_spec/app/spec/library/stringio/truncate_spec.rb +70 -0
  2743. data/spec/framework_spec/app/spec/library/stringio/tty_spec.rb +7 -0
  2744. data/spec/framework_spec/app/spec/library/stringio/ungetc_spec.rb +99 -0
  2745. data/spec/framework_spec/app/spec/library/stringio/write_spec.rb +19 -0
  2746. data/spec/framework_spec/app/spec/library/stringscanner/append_spec.rb +11 -0
  2747. data/spec/framework_spec/app/spec/library/stringscanner/beginning_of_line_spec.rb +7 -0
  2748. data/spec/framework_spec/app/spec/library/stringscanner/bol_spec.rb +7 -0
  2749. data/spec/framework_spec/app/spec/library/stringscanner/check_spec.rb +16 -0
  2750. data/spec/framework_spec/app/spec/library/stringscanner/check_until_spec.rb +15 -0
  2751. data/spec/framework_spec/app/spec/library/stringscanner/clear_spec.rb +26 -0
  2752. data/spec/framework_spec/app/spec/library/stringscanner/concat_spec.rb +11 -0
  2753. data/spec/framework_spec/app/spec/library/stringscanner/dup_spec.rb +39 -0
  2754. data/spec/framework_spec/app/spec/library/stringscanner/element_reference_spec.rb +49 -0
  2755. data/spec/framework_spec/app/spec/library/stringscanner/empty_spec.rb +26 -0
  2756. data/spec/framework_spec/app/spec/library/stringscanner/eos_spec.rb +7 -0
  2757. data/spec/framework_spec/app/spec/library/stringscanner/exist_spec.rb +24 -0
  2758. data/spec/framework_spec/app/spec/library/stringscanner/get_byte_spec.rb +7 -0
  2759. data/spec/framework_spec/app/spec/library/stringscanner/getbyte_spec.rb +29 -0
  2760. data/spec/framework_spec/app/spec/library/stringscanner/getch_spec.rb +44 -0
  2761. data/spec/framework_spec/app/spec/library/stringscanner/initialize_spec.rb +28 -0
  2762. data/spec/framework_spec/app/spec/library/stringscanner/inspect_spec.rb +20 -0
  2763. data/spec/framework_spec/app/spec/library/stringscanner/match_spec.rb +28 -0
  2764. data/spec/framework_spec/app/spec/library/stringscanner/matched_size_spec.rb +7 -0
  2765. data/spec/framework_spec/app/spec/library/stringscanner/matched_spec.rb +41 -0
  2766. data/spec/framework_spec/app/spec/library/stringscanner/matchedsize_spec.rb +27 -0
  2767. data/spec/framework_spec/app/spec/library/stringscanner/must_C_version_spec.rb +8 -0
  2768. data/spec/framework_spec/app/spec/library/stringscanner/peek_spec.rb +8 -0
  2769. data/spec/framework_spec/app/spec/library/stringscanner/peep_spec.rb +26 -0
  2770. data/spec/framework_spec/app/spec/library/stringscanner/pointer_spec.rb +11 -0
  2771. data/spec/framework_spec/app/spec/library/stringscanner/pos_spec.rb +11 -0
  2772. data/spec/framework_spec/app/spec/library/stringscanner/post_match_spec.rb +28 -0
  2773. data/spec/framework_spec/app/spec/library/stringscanner/pre_match_spec.rb +41 -0
  2774. data/spec/framework_spec/app/spec/library/stringscanner/reset_spec.rb +15 -0
  2775. data/spec/framework_spec/app/spec/library/stringscanner/rest_size_spec.rb +7 -0
  2776. data/spec/framework_spec/app/spec/library/stringscanner/rest_spec.rb +48 -0
  2777. data/spec/framework_spec/app/spec/library/stringscanner/restsize_spec.rb +26 -0
  2778. data/spec/framework_spec/app/spec/library/stringscanner/scan_full_spec.rb +30 -0
  2779. data/spec/framework_spec/app/spec/library/stringscanner/scan_spec.rb +43 -0
  2780. data/spec/framework_spec/app/spec/library/stringscanner/scan_until_spec.rb +23 -0
  2781. data/spec/framework_spec/app/spec/library/stringscanner/search_full_spec.rb +30 -0
  2782. data/spec/framework_spec/app/spec/library/stringscanner/shared/bol.rb +25 -0
  2783. data/spec/framework_spec/app/spec/library/stringscanner/shared/concat.rb +30 -0
  2784. data/spec/framework_spec/app/spec/library/stringscanner/shared/eos.rb +17 -0
  2785. data/spec/framework_spec/app/spec/library/stringscanner/shared/extract_range.rb +22 -0
  2786. data/spec/framework_spec/app/spec/library/stringscanner/shared/extract_range_matched.rb +22 -0
  2787. data/spec/framework_spec/app/spec/library/stringscanner/shared/get_byte.rb +28 -0
  2788. data/spec/framework_spec/app/spec/library/stringscanner/shared/matched_size.rb +21 -0
  2789. data/spec/framework_spec/app/spec/library/stringscanner/shared/peek.rb +44 -0
  2790. data/spec/framework_spec/app/spec/library/stringscanner/shared/pos.rb +52 -0
  2791. data/spec/framework_spec/app/spec/library/stringscanner/shared/rest_size.rb +18 -0
  2792. data/spec/framework_spec/app/spec/library/stringscanner/shared/terminate.rb +8 -0
  2793. data/spec/framework_spec/app/spec/library/stringscanner/skip_spec.rb +18 -0
  2794. data/spec/framework_spec/app/spec/library/stringscanner/skip_until_spec.rb +18 -0
  2795. data/spec/framework_spec/app/spec/library/stringscanner/string_spec.rb +40 -0
  2796. data/spec/framework_spec/app/spec/library/stringscanner/terminate_spec.rb +7 -0
  2797. data/spec/framework_spec/app/spec/library/stringscanner/unscan_spec.rb +29 -0
  2798. data/spec/framework_spec/app/spec/shared/complex/Complex.rb +76 -0
  2799. data/spec/framework_spec/app/spec/shared/complex/abs.rb +12 -0
  2800. data/spec/framework_spec/app/spec/shared/complex/abs2.rb +12 -0
  2801. data/spec/framework_spec/app/spec/shared/complex/arg.rb +9 -0
  2802. data/spec/framework_spec/app/spec/shared/complex/coerce.rb +41 -0
  2803. data/spec/framework_spec/app/spec/shared/complex/conjugate.rb +8 -0
  2804. data/spec/framework_spec/app/spec/shared/complex/denominator.rb +13 -0
  2805. data/spec/framework_spec/app/spec/shared/complex/divide.rb +57 -0
  2806. data/spec/framework_spec/app/spec/shared/complex/equal_value.rb +64 -0
  2807. data/spec/framework_spec/app/spec/shared/complex/exponent.rb +54 -0
  2808. data/spec/framework_spec/app/spec/shared/complex/hash.rb +16 -0
  2809. data/spec/framework_spec/app/spec/shared/complex/image.rb +10 -0
  2810. data/spec/framework_spec/app/spec/shared/complex/inspect.rb +29 -0
  2811. data/spec/framework_spec/app/spec/shared/complex/minus.rb +25 -0
  2812. data/spec/framework_spec/app/spec/shared/complex/modulo.rb +25 -0
  2813. data/spec/framework_spec/app/spec/shared/complex/multiply.rb +24 -0
  2814. data/spec/framework_spec/app/spec/shared/complex/numerator.rb +19 -0
  2815. data/spec/framework_spec/app/spec/shared/complex/numeric/arg.rb +43 -0
  2816. data/spec/framework_spec/app/spec/shared/complex/numeric/conj.rb +26 -0
  2817. data/spec/framework_spec/app/spec/shared/complex/numeric/imag.rb +26 -0
  2818. data/spec/framework_spec/app/spec/shared/complex/numeric/polar.rb +52 -0
  2819. data/spec/framework_spec/app/spec/shared/complex/numeric/real.rb +30 -0
  2820. data/spec/framework_spec/app/spec/shared/complex/plus.rb +25 -0
  2821. data/spec/framework_spec/app/spec/shared/complex/polar.rb +22 -0
  2822. data/spec/framework_spec/app/spec/shared/complex/real.rb +8 -0
  2823. data/spec/framework_spec/app/spec/shared/complex/rect.rb +45 -0
  2824. data/spec/framework_spec/app/spec/shared/complex/to_s.rb +39 -0
  2825. data/spec/framework_spec/app/spec/shared/continuation/call.rb +76 -0
  2826. data/spec/framework_spec/app/spec/shared/continuation/new.rb +5 -0
  2827. data/spec/framework_spec/app/spec/shared/enumerator/each.rb +45 -0
  2828. data/spec/framework_spec/app/spec/shared/enumerator/enum_cons.rb +12 -0
  2829. data/spec/framework_spec/app/spec/shared/enumerator/enum_for.rb +15 -0
  2830. data/spec/framework_spec/app/spec/shared/enumerator/new.rb +42 -0
  2831. data/spec/framework_spec/app/spec/shared/enumerator/next.rb +30 -0
  2832. data/spec/framework_spec/app/spec/shared/enumerator/rewind.rb +32 -0
  2833. data/spec/framework_spec/app/spec/shared/enumerator/with_index.rb +35 -0
  2834. data/spec/framework_spec/app/spec/shared/enumerator/with_object.rb +19 -0
  2835. data/spec/framework_spec/app/spec/shared/fiber/resume.rb +65 -0
  2836. data/spec/framework_spec/app/spec/shared/file/blockdev.rb +7 -1
  2837. data/spec/framework_spec/app/spec/shared/file/chardev.rb +7 -1
  2838. data/spec/framework_spec/app/spec/shared/file/directory.rb +59 -21
  2839. data/spec/framework_spec/app/spec/shared/file/executable.rb +10 -14
  2840. data/spec/framework_spec/app/spec/shared/file/executable_real.rb +15 -9
  2841. data/spec/framework_spec/app/spec/shared/file/exist.rb +9 -3
  2842. data/spec/framework_spec/app/spec/shared/file/file.rb +12 -10
  2843. data/spec/framework_spec/app/spec/shared/file/grpowned.rb +12 -6
  2844. data/spec/framework_spec/app/spec/shared/file/identical.rb +21 -16
  2845. data/spec/framework_spec/app/spec/shared/file/owned.rb +4 -0
  2846. data/spec/framework_spec/app/spec/shared/file/pipe.rb +4 -0
  2847. data/spec/framework_spec/app/spec/shared/file/readable.rb +16 -13
  2848. data/spec/framework_spec/app/spec/shared/file/readable_real.rb +7 -1
  2849. data/spec/framework_spec/app/spec/shared/file/size.rb +107 -15
  2850. data/spec/framework_spec/app/spec/shared/file/socket.rb +4 -0
  2851. data/spec/framework_spec/app/spec/shared/file/sticky.rb +30 -0
  2852. data/spec/framework_spec/app/spec/shared/file/symlink.rb +20 -14
  2853. data/spec/framework_spec/app/spec/shared/file/world_readable.rb +48 -0
  2854. data/spec/framework_spec/app/spec/shared/file/world_writable.rb +48 -0
  2855. data/spec/framework_spec/app/spec/shared/file/writable.rb +10 -7
  2856. data/spec/framework_spec/app/spec/shared/file/writable_real.rb +7 -1
  2857. data/spec/framework_spec/app/spec/shared/file/zero.rb +16 -17
  2858. data/spec/framework_spec/app/spec/shared/io/putc.rb +57 -0
  2859. data/spec/framework_spec/app/spec/shared/kernel/callcc.rb +68 -0
  2860. data/spec/framework_spec/app/spec/shared/kernel/method_missing.rb +60 -0
  2861. data/spec/framework_spec/app/spec/shared/kernel/singleton_method_added.rb +7 -0
  2862. data/spec/framework_spec/app/spec/shared/kernel/singleton_method_removed.rb +7 -0
  2863. data/spec/framework_spec/app/spec/shared/kernel/singleton_method_undefined.rb +7 -0
  2864. data/spec/framework_spec/app/spec/shared/math/atanh.rb +142 -0
  2865. data/spec/framework_spec/app/spec/shared/process/times.rb +8 -8
  2866. data/spec/framework_spec/app/spec/shared/rational/Rational.rb +113 -0
  2867. data/spec/framework_spec/app/spec/shared/rational/abs.rb +12 -0
  2868. data/spec/framework_spec/app/spec/shared/rational/ceil.rb +41 -0
  2869. data/spec/framework_spec/app/spec/shared/rational/coerce.rb +41 -0
  2870. data/spec/framework_spec/app/spec/shared/rational/comparison.rb +86 -0
  2871. data/spec/framework_spec/app/spec/shared/rational/denominator.rb +15 -0
  2872. data/spec/framework_spec/app/spec/shared/rational/div.rb +81 -0
  2873. data/spec/framework_spec/app/spec/shared/rational/divide.rb +72 -0
  2874. data/spec/framework_spec/app/spec/shared/rational/divmod.rb +53 -0
  2875. data/spec/framework_spec/app/spec/shared/rational/equal_value.rb +62 -0
  2876. data/spec/framework_spec/app/spec/shared/rational/exponent.rb +144 -0
  2877. data/spec/framework_spec/app/spec/shared/rational/fdiv.rb +5 -0
  2878. data/spec/framework_spec/app/spec/shared/rational/floor.rb +5 -0
  2879. data/spec/framework_spec/app/spec/shared/rational/hash.rb +10 -0
  2880. data/spec/framework_spec/app/spec/shared/rational/initialize.rb +25 -0
  2881. data/spec/framework_spec/app/spec/shared/rational/inspect.rb +24 -0
  2882. data/spec/framework_spec/app/spec/shared/rational/marshal_dump.rb +5 -0
  2883. data/spec/framework_spec/app/spec/shared/rational/marshal_load.rb +5 -0
  2884. data/spec/framework_spec/app/spec/shared/rational/minus.rb +49 -0
  2885. data/spec/framework_spec/app/spec/shared/rational/modulo.rb +52 -0
  2886. data/spec/framework_spec/app/spec/shared/rational/multiply.rb +63 -0
  2887. data/spec/framework_spec/app/spec/shared/rational/new.rb +21 -0
  2888. data/spec/framework_spec/app/spec/shared/rational/numerator.rb +11 -0
  2889. data/spec/framework_spec/app/spec/shared/rational/plus.rb +49 -0
  2890. data/spec/framework_spec/app/spec/shared/rational/quo.rb +5 -0
  2891. data/spec/framework_spec/app/spec/shared/rational/reduce.rb +31 -0
  2892. data/spec/framework_spec/app/spec/shared/rational/remainder.rb +5 -0
  2893. data/spec/framework_spec/app/spec/shared/rational/round.rb +5 -0
  2894. data/spec/framework_spec/app/spec/shared/rational/to_f.rb +11 -0
  2895. data/spec/framework_spec/app/spec/shared/rational/to_i.rb +15 -0
  2896. data/spec/framework_spec/app/spec/shared/rational/to_r.rb +14 -0
  2897. data/spec/framework_spec/app/spec/shared/rational/to_s.rb +24 -0
  2898. data/spec/framework_spec/app/spec/shared/rational/truncate.rb +5 -0
  2899. data/spec/framework_spec/app/spec/spec_helper.rb +1 -37
  2900. data/spec/framework_spec/app/spec/version.rb +3 -0
  2901. data/spec/framework_spec/app/spec_runner.rb +50 -80
  2902. data/spec/framework_spec/build.yml +3 -4
  2903. data/spec/framework_spec/rhoconfig.txt +4 -1
  2904. data/spec/phone_spec/app/spec/contacts_spec.rb +8 -4
  2905. data/spec/phone_spec/app/spec/date_spec.rb +17 -0
  2906. data/spec/phone_spec/app/spec/rhom_object_spec.rb +11 -0
  2907. data/spec/phone_spec/app/spec/syncengine_spec.rb +63 -1
  2908. data/spec/phone_spec/app/spec/uri_spec.rb +2 -0
  2909. data/spec/phone_spec/app/spec/xml_spec.rb +10 -3
  2910. data/spec/phone_spec/app/spec_runner.rb +1 -1
  2911. data/spec/phone_spec/build.yml +2 -2
  2912. data/spec/phone_spec/rhoconfig.txt +1 -0
  2913. metadata +1059 -91
  2914. data/Manifest.txt +0 -6338
  2915. data/doc/rhodes-api/alert-api.txt +0 -102
  2916. data/lib/extensions/mspec/mspec/fileutils.rb +0 -1589
  2917. data/lib/extensions/mspec/mspec/helpers/bignum.rb +0 -5
  2918. data/lib/extensions/mspec/mspec/helpers/infinity.rb +0 -5
  2919. data/lib/extensions/mspec/mspec/helpers/metaclass.rb +0 -7
  2920. data/lib/extensions/mspec/mspec/helpers/nan.rb +0 -5
  2921. data/platform/shared/ruby/blockinlining.c +0 -464
  2922. data/res/generators/templates/application/public/jqmobile/jquery.mobile-1.0b2.min.css +0 -8
  2923. data/res/generators/templates/application/public/jqmobile/jquery.mobile-1.0b2.min.js +0 -155
  2924. data/res/generators/templates/application/public/jquery/jquery-1.6.2.min.js +0 -18
  2925. data/spec/framework_spec/app/spec/core/basicobject/basic_object_class_spec.rb +0 -18
  2926. data/spec/framework_spec/app/spec/core/basicobject/basic_object_spec.rb +0 -23
  2927. data/spec/framework_spec/app/spec/core/basicobject/basic_object_subclass_spec.rb +0 -25
  2928. data/spec/framework_spec/app/spec/core/basicobject/metaclass_spec.rb +0 -27
  2929. data/spec/framework_spec/app/spec/core/basicobject/remove_method_missing.rb +0 -14
  2930. data/spec/framework_spec/app/spec/core/basicobject/shared/behavior.rb +0 -16
  2931. data/spec/framework_spec/app/spec/core/builtin_constants/builtin_constants.rb +0 -13
  2932. data/spec/framework_spec/app/spec/core/continuation/continuation_spec.rb +0 -109
  2933. data/spec/framework_spec/app/spec/core/dir/new_spec.rb +0 -2
  2934. data/spec/framework_spec/app/spec/core/enumerable/each_spec.rb +0 -14
  2935. data/spec/framework_spec/app/spec/core/fiber/alive_spec.rb +0 -54
  2936. data/spec/framework_spec/app/spec/core/fiber/current_spec.rb +0 -63
  2937. data/spec/framework_spec/app/spec/core/fiber/shared/resume.rb +0 -71
  2938. data/spec/framework_spec/app/spec/core/fiber/transfer_spec.rb +0 -45
  2939. data/spec/framework_spec/app/spec/core/io/data/data_spec.rb +0 -13
  2940. data/spec/framework_spec/app/spec/core/io/data/fixtures/data1.rb +0 -3
  2941. data/spec/framework_spec/app/spec/core/io/data/flock_spec.rb +0 -22
  2942. data/spec/framework_spec/app/spec/core/io/fixtures/paragraphs.txt +0 -7
  2943. data/spec/framework_spec/app/spec/core/io/fixtures/readlines.txt +0 -6
  2944. data/spec/framework_spec/app/spec/core/kernel/__callee__spec.rb +0 -9
  2945. data/spec/framework_spec/app/spec/core/kernel/__method__spec.rb +0 -9
  2946. data/spec/framework_spec/app/spec/core/proc/fixtures/procs.rb +0 -5
  2947. data/spec/framework_spec/app/spec/find_spec.rb +0 -56
  2948. data/spec/framework_spec/app/spec/fixtures/load/load_spec +0 -1
  2949. data/spec/framework_spec/app/spec/fixtures/load/load_spec.rooby +0 -1
  2950. data/spec/framework_spec/app/spec/fixtures/load/load_spec_1.rb +0 -1
  2951. data/spec/framework_spec/app/spec/fixtures/load/load_spec_10.rb +0 -1
  2952. data/spec/framework_spec/app/spec/fixtures/load/load_spec_2.rb +0 -1
  2953. data/spec/framework_spec/app/spec/fixtures/load/load_spec_3.rb +0 -1
  2954. data/spec/framework_spec/app/spec/fixtures/load/load_spec_4.rb +0 -12
  2955. data/spec/framework_spec/app/spec/fixtures/load/load_spec_5.rb +0 -2
  2956. data/spec/framework_spec/app/spec/fixtures/load/load_spec_6.rb +0 -2
  2957. data/spec/framework_spec/app/spec/fixtures/load/load_spec_7.rb +0 -2
  2958. data/spec/framework_spec/app/spec/fixtures/load/load_spec_8.rb +0 -1
  2959. data/spec/framework_spec/app/spec/fixtures/load/load_spec_9.rb +0 -1
  2960. data/spec/framework_spec/app/spec/fixtures/load/load_spec_wrap.rb +0 -7
  2961. data/spec/framework_spec/app/spec/fixtures/load/load_spec_wrap2.rb +0 -7
  2962. data/spec/framework_spec/app/spec/fixtures/load/load_spec_wrap_2.rb +0 -7
  2963. data/spec/framework_spec/app/spec/fixtures/matrix.rb +0 -5
  2964. data/spec/framework_spec/app/spec/fixtures/require/masked_require_spec_2.rb +0 -1
  2965. data/spec/framework_spec/app/spec/fixtures/require/masked_require_spec_3.rb +0 -1
  2966. data/spec/framework_spec/app/spec/fixtures/require/require_spec +0 -1
  2967. data/spec/framework_spec/app/spec/fixtures/require/require_spec.rb +0 -1
  2968. data/spec/framework_spec/app/spec/fixtures/require/require_spec.rooby +0 -1
  2969. data/spec/framework_spec/app/spec/fixtures/require/require_spec.rooby.rb +0 -1
  2970. data/spec/framework_spec/app/spec/fixtures/require/require_spec_1.rb +0 -1
  2971. data/spec/framework_spec/app/spec/fixtures/require/require_spec_10.rb +0 -1
  2972. data/spec/framework_spec/app/spec/fixtures/require/require_spec_2.rb +0 -1
  2973. data/spec/framework_spec/app/spec/fixtures/require/require_spec_3.rb +0 -1
  2974. data/spec/framework_spec/app/spec/fixtures/require/require_spec_4.rb +0 -12
  2975. data/spec/framework_spec/app/spec/fixtures/require/require_spec_6.rb +0 -1
  2976. data/spec/framework_spec/app/spec/fixtures/require/require_spec_7.rb +0 -1
  2977. data/spec/framework_spec/app/spec/fixtures/require/require_spec_8.rb +0 -1
  2978. data/spec/framework_spec/app/spec/fixtures/require/require_spec_9.rb +0 -1
  2979. data/spec/framework_spec/app/spec/fixtures/require/require_spec_raises.rb +0 -3
  2980. data/spec/framework_spec/app/spec/fixtures/require/require_spec_recursive.rb +0 -2
  2981. data/spec/framework_spec/app/spec/language/catch_spec.rb +0 -84
  2982. data/spec/framework_spec/app/spec/language/eigenclass_spec.rb +0 -317
  2983. data/spec/framework_spec/app/spec/language/else_spec.rb +0 -1
  2984. data/spec/framework_spec/app/spec/language/method_spec.rb +0 -273
  2985. data/spec/framework_spec/app/spec/language/versions/array_1.8.rb +0 -13
  2986. data/spec/framework_spec/app/spec/language/versions/method_1.9.rb +0 -137
  2987. data/spec/framework_spec/app/spec/language/versions/symbol_1.8.rb +0 -5
@@ -59,9 +59,7 @@ struct timeval rb_time_interval(VALUE);
59
59
  #undef HAVE_GETPGRP
60
60
  #endif
61
61
 
62
- /* RHO BEGIN */
63
- #include <common/stat.h>
64
- /* RHO END */
62
+ #include <sys/stat.h>
65
63
 
66
64
  #ifdef HAVE_SYS_TIMES_H
67
65
  #include <sys/times.h>
@@ -141,7 +139,7 @@ static VALUE rb_cProcessTms;
141
139
 
142
140
  /*
143
141
  * call-seq:
144
- * Process.pid => fixnum
142
+ * Process.pid -> fixnum
145
143
  *
146
144
  * Returns the process id of this process. Not available on all
147
145
  * platforms.
@@ -159,7 +157,7 @@ get_pid(void)
159
157
 
160
158
  /*
161
159
  * call-seq:
162
- * Process.ppid => fixnum
160
+ * Process.ppid -> fixnum
163
161
  *
164
162
  * Returns the process id of the parent of this process. Returns
165
163
  * untrustworthy value on Win32/64. Not available on all platforms.
@@ -236,8 +234,8 @@ rb_last_status_clear(void)
236
234
 
237
235
  /*
238
236
  * call-seq:
239
- * stat.to_i => fixnum
240
- * stat.to_int => fixnum
237
+ * stat.to_i -> fixnum
238
+ * stat.to_int -> fixnum
241
239
  *
242
240
  * Returns the bits in _stat_ as a <code>Fixnum</code>. Poking
243
241
  * around in these bits is platform dependent.
@@ -257,7 +255,7 @@ pst_to_i(VALUE st)
257
255
 
258
256
  /*
259
257
  * call-seq:
260
- * stat.pid => fixnum
258
+ * stat.pid -> fixnum
261
259
  *
262
260
  * Returns the process ID that this status object represents.
263
261
  *
@@ -309,7 +307,7 @@ pst_message(VALUE str, rb_pid_t pid, int status)
309
307
 
310
308
  /*
311
309
  * call-seq:
312
- * stat.to_s => string
310
+ * stat.to_s -> string
313
311
  *
314
312
  * Show pid and exit status as a string.
315
313
  */
@@ -321,7 +319,7 @@ pst_to_s(VALUE st)
321
319
  int status;
322
320
  VALUE str;
323
321
 
324
- pid = NUM2LONG(pst_pid(st));
322
+ pid = NUM2PIDT(pst_pid(st));
325
323
  status = PST2INT(st);
326
324
 
327
325
  str = rb_str_buf_new(0);
@@ -332,7 +330,7 @@ pst_to_s(VALUE st)
332
330
 
333
331
  /*
334
332
  * call-seq:
335
- * stat.inspect => string
333
+ * stat.inspect -> string
336
334
  *
337
335
  * Override the inspection method.
338
336
  */
@@ -348,7 +346,7 @@ pst_inspect(VALUE st)
348
346
  if (NIL_P(vpid)) {
349
347
  return rb_sprintf("#<%s: uninitialized>", rb_class2name(CLASS_OF(st)));
350
348
  }
351
- pid = NUM2LONG(vpid);
349
+ pid = NUM2PIDT(vpid);
352
350
  status = PST2INT(st);
353
351
 
354
352
  str = rb_sprintf("#<%s: ", rb_class2name(CLASS_OF(st)));
@@ -360,7 +358,7 @@ pst_inspect(VALUE st)
360
358
 
361
359
  /*
362
360
  * call-seq:
363
- * stat == other => true or false
361
+ * stat == other -> true or false
364
362
  *
365
363
  * Returns +true+ if the integer value of _stat_
366
364
  * equals <em>other</em>.
@@ -376,7 +374,7 @@ pst_equal(VALUE st1, VALUE st2)
376
374
 
377
375
  /*
378
376
  * call-seq:
379
- * stat & num => fixnum
377
+ * stat & num -> fixnum
380
378
  *
381
379
  * Logical AND of the bits in _stat_ with <em>num</em>.
382
380
  *
@@ -397,7 +395,7 @@ pst_bitand(VALUE st1, VALUE st2)
397
395
 
398
396
  /*
399
397
  * call-seq:
400
- * stat >> num => fixnum
398
+ * stat >> num -> fixnum
401
399
  *
402
400
  * Shift the bits in _stat_ right <em>num</em> places.
403
401
  *
@@ -418,7 +416,7 @@ pst_rshift(VALUE st1, VALUE st2)
418
416
 
419
417
  /*
420
418
  * call-seq:
421
- * stat.stopped? => true or false
419
+ * stat.stopped? -> true or false
422
420
  *
423
421
  * Returns +true+ if this process is stopped. This is only
424
422
  * returned if the corresponding <code>wait</code> call had the
@@ -439,7 +437,7 @@ pst_wifstopped(VALUE st)
439
437
 
440
438
  /*
441
439
  * call-seq:
442
- * stat.stopsig => fixnum or nil
440
+ * stat.stopsig -> fixnum or nil
443
441
  *
444
442
  * Returns the number of the signal that caused _stat_ to stop
445
443
  * (or +nil+ if self is not stopped).
@@ -458,7 +456,7 @@ pst_wstopsig(VALUE st)
458
456
 
459
457
  /*
460
458
  * call-seq:
461
- * stat.signaled? => true or false
459
+ * stat.signaled? -> true or false
462
460
  *
463
461
  * Returns +true+ if _stat_ terminated because of
464
462
  * an uncaught signal.
@@ -478,7 +476,7 @@ pst_wifsignaled(VALUE st)
478
476
 
479
477
  /*
480
478
  * call-seq:
481
- * stat.termsig => fixnum or nil
479
+ * stat.termsig -> fixnum or nil
482
480
  *
483
481
  * Returns the number of the signal that caused _stat_ to
484
482
  * terminate (or +nil+ if self was not terminated by an
@@ -498,7 +496,7 @@ pst_wtermsig(VALUE st)
498
496
 
499
497
  /*
500
498
  * call-seq:
501
- * stat.exited? => true or false
499
+ * stat.exited? -> true or false
502
500
  *
503
501
  * Returns +true+ if _stat_ exited normally (for
504
502
  * example using an <code>exit()</code> call or finishing the
@@ -519,7 +517,7 @@ pst_wifexited(VALUE st)
519
517
 
520
518
  /*
521
519
  * call-seq:
522
- * stat.exitstatus => fixnum or nil
520
+ * stat.exitstatus -> fixnum or nil
523
521
  *
524
522
  * Returns the least significant eight bits of the return code of
525
523
  * _stat_. Only available if <code>exited?</code> is
@@ -549,7 +547,7 @@ pst_wexitstatus(VALUE st)
549
547
 
550
548
  /*
551
549
  * call-seq:
552
- * stat.success? => true, false or nil
550
+ * stat.success? -> true, false or nil
553
551
  *
554
552
  * Returns +true+ if _stat_ is successful, +false+ if not.
555
553
  * Returns +nil+ if <code>exited?</code> is not +true+.
@@ -568,7 +566,7 @@ pst_success_p(VALUE st)
568
566
 
569
567
  /*
570
568
  * call-seq:
571
- * stat.coredump? => true or false
569
+ * stat.coredump? -> true or false
572
570
  *
573
571
  * Returns +true+ if _stat_ generated a coredump
574
572
  * when it terminated. Not available on all platforms.
@@ -727,9 +725,9 @@ rb_waitpid(rb_pid_t pid, int *st, int flags)
727
725
 
728
726
  /*
729
727
  * call-seq:
730
- * Process.wait() => fixnum
731
- * Process.wait(pid=-1, flags=0) => fixnum
732
- * Process.waitpid(pid=-1, flags=0) => fixnum
728
+ * Process.wait() -> fixnum
729
+ * Process.wait(pid=-1, flags=0) -> fixnum
730
+ * Process.waitpid(pid=-1, flags=0) -> fixnum
733
731
  *
734
732
  * Waits for a child process to exit, returns its process id, and
735
733
  * sets <code>$?</code> to a <code>Process::Status</code> object
@@ -800,8 +798,8 @@ proc_wait(int argc, VALUE *argv)
800
798
 
801
799
  /*
802
800
  * call-seq:
803
- * Process.wait2(pid=-1, flags=0) => [pid, status]
804
- * Process.waitpid2(pid=-1, flags=0) => [pid, status]
801
+ * Process.wait2(pid=-1, flags=0) -> [pid, status]
802
+ * Process.waitpid2(pid=-1, flags=0) -> [pid, status]
805
803
  *
806
804
  * Waits for a child process to exit (see Process::waitpid for exact
807
805
  * semantics) and returns an array containing the process id and the
@@ -826,7 +824,7 @@ proc_wait2(int argc, VALUE *argv)
826
824
 
827
825
  /*
828
826
  * call-seq:
829
- * Process.waitall => [ [pid1,status1], ...]
827
+ * Process.waitall -> [ [pid1,status1], ...]
830
828
  *
831
829
  * Waits for all children, returning an array of
832
830
  * _pid_/_status_ pairs (where _status_ is a
@@ -924,7 +922,7 @@ rb_detach_process(rb_pid_t pid)
924
922
 
925
923
  /*
926
924
  * call-seq:
927
- * Process.detach(pid) => thread
925
+ * Process.detach(pid) -> thread
928
926
  *
929
927
  * Some operating systems retain the status of terminated child
930
928
  * processes until the parent collects that status (normally using
@@ -941,6 +939,8 @@ rb_detach_process(rb_pid_t pid)
941
939
  * know the result. If specified _pid_ is not a valid child process
942
940
  * ID, the thread returns +nil+ immediately.
943
941
  *
942
+ * The waiting thread has <code>pid</code> method which returns the pid.
943
+ *
944
944
  * In this first example, we don't reap the first child process, so
945
945
  * it appears as a zombie in the process status display.
946
946
  *
@@ -1229,6 +1229,7 @@ enum {
1229
1229
  EXEC_OPTION_DUP2,
1230
1230
  EXEC_OPTION_CLOSE,
1231
1231
  EXEC_OPTION_OPEN,
1232
+ EXEC_OPTION_DUP2_CHILD,
1232
1233
  EXEC_OPTION_CLOSE_OTHERS
1233
1234
  };
1234
1235
 
@@ -1240,6 +1241,17 @@ check_exec_redirect_fd(VALUE v)
1240
1241
  if (FIXNUM_P(v)) {
1241
1242
  fd = FIX2INT(v);
1242
1243
  }
1244
+ else if (SYMBOL_P(v)) {
1245
+ ID id = SYM2ID(v);
1246
+ if (id == rb_intern("in"))
1247
+ fd = 0;
1248
+ else if (id == rb_intern("out"))
1249
+ fd = 1;
1250
+ else if (id == rb_intern("err"))
1251
+ fd = 2;
1252
+ else
1253
+ goto wrong;
1254
+ }
1243
1255
  else if (!NIL_P(tmp = rb_check_convert_type(v, T_FILE, "IO", "to_io"))) {
1244
1256
  rb_io_t *fptr;
1245
1257
  GetOpenFile(tmp, fptr);
@@ -1251,6 +1263,7 @@ check_exec_redirect_fd(VALUE v)
1251
1263
  rb_raise(rb_eArgError, "wrong exec redirect");
1252
1264
  }
1253
1265
  if (fd < 0) {
1266
+ wrong:
1254
1267
  rb_raise(rb_eArgError, "negative file descriptor");
1255
1268
  }
1256
1269
  return INT2FIX(fd);
@@ -1271,6 +1284,18 @@ check_exec_redirect(VALUE key, VALUE val, VALUE options)
1271
1284
  index = EXEC_OPTION_CLOSE;
1272
1285
  param = Qnil;
1273
1286
  }
1287
+ else if (id == rb_intern("in")) {
1288
+ index = EXEC_OPTION_DUP2;
1289
+ param = INT2FIX(0);
1290
+ }
1291
+ else if (id == rb_intern("out")) {
1292
+ index = EXEC_OPTION_DUP2;
1293
+ param = INT2FIX(1);
1294
+ }
1295
+ else if (id == rb_intern("err")) {
1296
+ index = EXEC_OPTION_DUP2;
1297
+ param = INT2FIX(2);
1298
+ }
1274
1299
  else {
1275
1300
  rb_raise(rb_eArgError, "wrong exec redirect symbol: %s",
1276
1301
  rb_id2name(id));
@@ -1286,20 +1311,27 @@ check_exec_redirect(VALUE key, VALUE val, VALUE options)
1286
1311
  break;
1287
1312
 
1288
1313
  case T_ARRAY:
1289
- index = EXEC_OPTION_OPEN;
1290
1314
  path = rb_ary_entry(val, 0);
1291
- FilePathValue(path);
1292
- flags = rb_ary_entry(val, 1);
1293
- if (NIL_P(flags))
1294
- flags = INT2NUM(O_RDONLY);
1295
- else if (TYPE(flags) == T_STRING)
1296
- flags = INT2NUM(rb_io_modestr_oflags(StringValueCStr(flags)));
1297
- else
1298
- flags = rb_to_int(flags);
1299
- perm = rb_ary_entry(val, 2);
1300
- perm = NIL_P(perm) ? INT2FIX(0644) : rb_to_int(perm);
1301
- param = hide_obj(rb_ary_new3(3, hide_obj(rb_str_dup(path)),
1302
- flags, perm));
1315
+ if (RARRAY_LEN(val) == 2 && SYMBOL_P(path) &&
1316
+ SYM2ID(path) == rb_intern("child")) {
1317
+ index = EXEC_OPTION_DUP2_CHILD;
1318
+ param = check_exec_redirect_fd(rb_ary_entry(val, 1));
1319
+ }
1320
+ else {
1321
+ index = EXEC_OPTION_OPEN;
1322
+ FilePathValue(path);
1323
+ flags = rb_ary_entry(val, 1);
1324
+ if (NIL_P(flags))
1325
+ flags = INT2NUM(O_RDONLY);
1326
+ else if (TYPE(flags) == T_STRING)
1327
+ flags = INT2NUM(rb_io_modestr_oflags(StringValueCStr(flags)));
1328
+ else
1329
+ flags = rb_to_int(flags);
1330
+ perm = rb_ary_entry(val, 2);
1331
+ perm = NIL_P(perm) ? INT2FIX(0644) : rb_to_int(perm);
1332
+ param = hide_obj(rb_ary_new3(3, hide_obj(rb_str_dup(path)),
1333
+ flags, perm));
1334
+ }
1303
1335
  break;
1304
1336
 
1305
1337
  case T_STRING:
@@ -1486,7 +1518,7 @@ check_exec_fds(VALUE options)
1486
1518
  int index, i;
1487
1519
  int maxhint = -1;
1488
1520
 
1489
- for (index = EXEC_OPTION_DUP2; index <= EXEC_OPTION_OPEN; index++) {
1521
+ for (index = EXEC_OPTION_DUP2; index <= EXEC_OPTION_DUP2_CHILD; index++) {
1490
1522
  ary = rb_ary_entry(options, index);
1491
1523
  if (NIL_P(ary))
1492
1524
  continue;
@@ -1496,16 +1528,53 @@ check_exec_fds(VALUE options)
1496
1528
  if (RTEST(rb_hash_lookup(h, INT2FIX(fd)))) {
1497
1529
  rb_raise(rb_eArgError, "fd %d specified twice", fd);
1498
1530
  }
1499
- rb_hash_aset(h, INT2FIX(fd), Qtrue);
1531
+ if (index == EXEC_OPTION_OPEN || index == EXEC_OPTION_DUP2)
1532
+ rb_hash_aset(h, INT2FIX(fd), Qtrue);
1533
+ else if (index == EXEC_OPTION_DUP2_CHILD)
1534
+ rb_hash_aset(h, INT2FIX(fd), RARRAY_PTR(elt)[1]);
1535
+ else /* index == EXEC_OPTION_CLOSE */
1536
+ rb_hash_aset(h, INT2FIX(fd), INT2FIX(-1));
1500
1537
  if (maxhint < fd)
1501
1538
  maxhint = fd;
1502
- if (index == EXEC_OPTION_DUP2) {
1539
+ if (index == EXEC_OPTION_DUP2 || index == EXEC_OPTION_DUP2_CHILD) {
1503
1540
  fd = FIX2INT(RARRAY_PTR(elt)[1]);
1504
1541
  if (maxhint < fd)
1505
1542
  maxhint = fd;
1506
1543
  }
1507
1544
  }
1508
1545
  }
1546
+
1547
+ ary = rb_ary_entry(options, EXEC_OPTION_DUP2_CHILD);
1548
+ if (!NIL_P(ary)) {
1549
+ for (i = 0; i < RARRAY_LEN(ary); i++) {
1550
+ VALUE elt = RARRAY_PTR(ary)[i];
1551
+ int newfd = FIX2INT(RARRAY_PTR(elt)[0]);
1552
+ int oldfd = FIX2INT(RARRAY_PTR(elt)[1]);
1553
+ int lastfd = oldfd;
1554
+ VALUE val = rb_hash_lookup(h, INT2FIX(lastfd));
1555
+ long depth = 0;
1556
+ while (FIXNUM_P(val) && 0 <= FIX2INT(val)) {
1557
+ lastfd = FIX2INT(val);
1558
+ val = rb_hash_lookup(h, val);
1559
+ if (RARRAY_LEN(ary) < depth)
1560
+ rb_raise(rb_eArgError, "cyclic child fd redirection from %d", oldfd);
1561
+ depth++;
1562
+ }
1563
+ if (val != Qtrue)
1564
+ rb_raise(rb_eArgError, "child fd %d is not redirected", oldfd);
1565
+ if (oldfd != lastfd) {
1566
+ VALUE val2;
1567
+ rb_ary_store(elt, 1, INT2FIX(lastfd));
1568
+ rb_hash_aset(h, INT2FIX(newfd), INT2FIX(lastfd));
1569
+ val = INT2FIX(oldfd);
1570
+ while (FIXNUM_P(val2 = rb_hash_lookup(h, val))) {
1571
+ rb_hash_aset(h, val, INT2FIX(lastfd));
1572
+ val = val2;
1573
+ }
1574
+ }
1575
+ }
1576
+ }
1577
+
1509
1578
  if (rb_ary_entry(options, EXEC_OPTION_CLOSE_OTHERS) != Qfalse) {
1510
1579
  rb_ary_store(options, EXEC_OPTION_CLOSE_OTHERS, INT2FIX(maxhint));
1511
1580
  }
@@ -1655,25 +1724,38 @@ rb_exec_arg_fixup(struct rb_exec_arg *e)
1655
1724
 
1656
1725
  /*
1657
1726
  * call-seq:
1658
- * exec([env,] command [, arg, ...] [,options])
1727
+ * exec([env,] command... [,options])
1659
1728
  *
1660
1729
  * Replaces the current process by running the given external _command_.
1661
- * If optional arguments, sequence of +arg+, are not given, that argument is
1662
- * taken as a line that is subject to shell expansion before being
1663
- * executed. If one or more +arg+ given, they
1664
- * are passed as parameters to _command_ with no shell
1665
- * expansion. If +command+ is a two-element array, the first
1666
- * element is the command to be executed, and the second argument is
1667
- * used as the <code>argv[0]</code> value, which may show up in process
1668
- * listings. In order to execute the command, one of the <code>exec(2)</code>
1669
- * system calls is used, so the running command may inherit some of the environment
1670
- * of the original program (including open file descriptors).
1730
+ * _command..._ is one of following forms.
1671
1731
  *
1672
- * The hash arguments, env and options, are same as
1673
- * <code>system</code> and <code>spawn</code>.
1732
+ * commandline : command line string which is passed to the standard shell
1733
+ * cmdname, arg1, ... : command name and one or more arguments (no shell)
1734
+ * [cmdname, argv0], arg1, ... : command name, argv[0] and zero or more arguments (no shell)
1735
+ *
1736
+ * If single string is given as the command,
1737
+ * it is taken as a command line that is subject to shell expansion before being executed.
1738
+ *
1739
+ * The standard shell means always <code>"/bin/sh"</code> on Unix-like systems,
1740
+ * <code>ENV["RUBYSHELL"]</code> or <code>ENV["COMSPEC"]</code> on Windows NT series, and
1741
+ * similar.
1742
+ *
1743
+ * If two or more +string+ given,
1744
+ * the first is taken as a command name and
1745
+ * the rest are passed as parameters to command with no shell expansion.
1746
+ *
1747
+ * If a two-element array at the beginning of the command,
1748
+ * the first element is the command to be executed,
1749
+ * and the second argument is used as the <code>argv[0]</code> value,
1750
+ * which may show up in process listings.
1751
+ *
1752
+ * In order to execute the command, one of the <code>exec(2)</code>
1753
+ * system calls is used, so the running command may inherit some of the environment
1754
+ * of the original program (including open file descriptors).
1755
+ * This behavior is modified by env and options.
1674
1756
  * See <code>spawn</code> for details.
1675
1757
  *
1676
- * Raises SystemCallError if the _command_ couldn't execute (typically
1758
+ * Raises SystemCallError if the command couldn't execute (typically
1677
1759
  * <code>Errno::ENOENT</code> when it was not found).
1678
1760
  *
1679
1761
  * exec "echo *" # echoes list of files in current directory
@@ -1688,17 +1770,23 @@ VALUE
1688
1770
  rb_f_exec(int argc, VALUE *argv)
1689
1771
  {
1690
1772
  struct rb_exec_arg earg;
1773
+ #define CHILD_ERRMSG_BUFLEN 80
1774
+ char errmsg[CHILD_ERRMSG_BUFLEN] = { '\0' };
1691
1775
 
1692
- rb_exec_arg_init(argc, argv, Qtrue, &earg);
1776
+ rb_exec_arg_init(argc, argv, TRUE, &earg);
1693
1777
  if (NIL_P(rb_ary_entry(earg.options, EXEC_OPTION_CLOSE_OTHERS)))
1694
1778
  rb_exec_arg_addopt(&earg, ID2SYM(rb_intern("close_others")), Qfalse);
1695
1779
  rb_exec_arg_fixup(&earg);
1696
1780
 
1697
- rb_exec(&earg);
1781
+ rb_exec_err(&earg, errmsg, sizeof(errmsg));
1782
+ if (errmsg[0])
1783
+ rb_sys_fail(errmsg);
1698
1784
  rb_sys_fail(earg.prog);
1699
1785
  return Qnil; /* dummy */
1700
1786
  }
1701
1787
 
1788
+ #define ERRMSG(str) do { if (errmsg && 0 < errmsg_buflen) strlcpy(errmsg, (str), errmsg_buflen); } while (0)
1789
+
1702
1790
  /*#define DEBUG_REDIRECT*/
1703
1791
  #if defined(DEBUG_REDIRECT)
1704
1792
 
@@ -1710,7 +1798,11 @@ ttyprintf(const char *fmt, ...)
1710
1798
  va_list ap;
1711
1799
  FILE *tty;
1712
1800
  int save = errno;
1801
+ #ifdef _WIN32
1802
+ tty = fopen("con", "w");
1803
+ #else
1713
1804
  tty = fopen("/dev/tty", "w");
1805
+ #endif
1714
1806
  if (!tty)
1715
1807
  return;
1716
1808
 
@@ -1765,12 +1857,17 @@ redirect_open(const char *pathname, int flags, mode_t perm)
1765
1857
  #endif
1766
1858
 
1767
1859
  static int
1768
- save_redirect_fd(int fd, VALUE save)
1860
+ save_redirect_fd(int fd, VALUE save, char *errmsg, size_t errmsg_buflen)
1769
1861
  {
1770
1862
  if (!NIL_P(save)) {
1771
1863
  VALUE newary;
1772
1864
  int save_fd = redirect_dup(fd);
1773
- if (save_fd == -1) return -1;
1865
+ if (save_fd == -1) {
1866
+ if (errno == EBADF)
1867
+ return 0;
1868
+ ERRMSG("dup");
1869
+ return -1;
1870
+ }
1774
1871
  newary = rb_ary_entry(save, EXEC_OPTION_DUP2);
1775
1872
  if (NIL_P(newary)) {
1776
1873
  newary = hide_obj(rb_ary_new());
@@ -1819,20 +1916,30 @@ intcmp(const void *a, const void *b)
1819
1916
  }
1820
1917
 
1821
1918
  static int
1822
- run_exec_dup2(VALUE ary, VALUE save)
1919
+ intrcmp(const void *a, const void *b)
1920
+ {
1921
+ return *(int*)b - *(int*)a;
1922
+ }
1923
+
1924
+ static int
1925
+ run_exec_dup2(VALUE ary, VALUE save, char *errmsg, size_t errmsg_buflen)
1823
1926
  {
1824
- int n, i;
1927
+ long n, i;
1825
1928
  int ret;
1826
1929
  int extra_fd = -1;
1827
1930
  struct fd_pair {
1828
1931
  int oldfd;
1829
1932
  int newfd;
1830
- int older_index;
1831
- int num_newer;
1933
+ long older_index;
1934
+ long num_newer;
1832
1935
  } *pairs = 0;
1833
1936
 
1834
1937
  n = RARRAY_LEN(ary);
1835
- pairs = ALLOC_N(struct fd_pair, n);
1938
+ pairs = (struct fd_pair *)malloc(sizeof(struct fd_pair) * n);
1939
+ if (pairs == NULL) {
1940
+ ERRMSG("malloc");
1941
+ return -1;
1942
+ }
1836
1943
 
1837
1944
  /* initialize oldfd and newfd: O(n) */
1838
1945
  for (i = 0; i < n; i++) {
@@ -1843,7 +1950,10 @@ run_exec_dup2(VALUE ary, VALUE save)
1843
1950
  }
1844
1951
 
1845
1952
  /* sort the table by oldfd: O(n log n) */
1846
- qsort(pairs, n, sizeof(struct fd_pair), intcmp);
1953
+ if (!RTEST(save))
1954
+ qsort(pairs, n, sizeof(struct fd_pair), intcmp);
1955
+ else
1956
+ qsort(pairs, n, sizeof(struct fd_pair), intrcmp);
1847
1957
 
1848
1958
  /* initialize older_index and num_newer: O(n log n) */
1849
1959
  for (i = 0; i < n; i++) {
@@ -1865,13 +1975,15 @@ run_exec_dup2(VALUE ary, VALUE save)
1865
1975
 
1866
1976
  /* non-cyclic redirection: O(n) */
1867
1977
  for (i = 0; i < n; i++) {
1868
- int j = i;
1978
+ long j = i;
1869
1979
  while (j != -1 && pairs[j].oldfd != -1 && pairs[j].num_newer == 0) {
1870
- if (save_redirect_fd(pairs[j].newfd, save) < 0)
1980
+ if (save_redirect_fd(pairs[j].newfd, save, errmsg, errmsg_buflen) < 0)
1871
1981
  goto fail;
1872
1982
  ret = redirect_dup2(pairs[j].oldfd, pairs[j].newfd);
1873
- if (ret == -1)
1983
+ if (ret == -1) {
1984
+ ERRMSG("dup2");
1874
1985
  goto fail;
1986
+ }
1875
1987
  pairs[j].oldfd = -1;
1876
1988
  j = pairs[j].older_index;
1877
1989
  if (j != -1)
@@ -1881,20 +1993,24 @@ run_exec_dup2(VALUE ary, VALUE save)
1881
1993
 
1882
1994
  /* cyclic redirection: O(n) */
1883
1995
  for (i = 0; i < n; i++) {
1884
- int j;
1996
+ long j;
1885
1997
  if (pairs[i].oldfd == -1)
1886
1998
  continue;
1887
1999
  if (pairs[i].oldfd == pairs[i].newfd) { /* self cycle */
1888
2000
  #ifdef F_GETFD
1889
2001
  int fd = pairs[i].oldfd;
1890
2002
  ret = fcntl(fd, F_GETFD);
1891
- if (ret == -1)
2003
+ if (ret == -1) {
2004
+ ERRMSG("fcntl(F_GETFD)");
1892
2005
  goto fail;
2006
+ }
1893
2007
  if (ret & FD_CLOEXEC) {
1894
2008
  ret &= ~FD_CLOEXEC;
1895
2009
  ret = fcntl(fd, F_SETFD, ret);
1896
- if (ret == -1)
2010
+ if (ret == -1) {
2011
+ ERRMSG("fcntl(F_SETFD)");
1897
2012
  goto fail;
2013
+ }
1898
2014
  }
1899
2015
  #endif
1900
2016
  pairs[i].oldfd = -1;
@@ -1902,29 +2018,37 @@ run_exec_dup2(VALUE ary, VALUE save)
1902
2018
  }
1903
2019
  if (extra_fd == -1) {
1904
2020
  extra_fd = redirect_dup(pairs[i].oldfd);
1905
- if (extra_fd == -1)
2021
+ if (extra_fd == -1) {
2022
+ ERRMSG("dup");
1906
2023
  goto fail;
2024
+ }
1907
2025
  }
1908
2026
  else {
1909
2027
  ret = redirect_dup2(pairs[i].oldfd, extra_fd);
1910
- if (ret == -1)
2028
+ if (ret == -1) {
2029
+ ERRMSG("dup2");
1911
2030
  goto fail;
2031
+ }
1912
2032
  }
1913
2033
  pairs[i].oldfd = extra_fd;
1914
2034
  j = pairs[i].older_index;
1915
2035
  pairs[i].older_index = -1;
1916
2036
  while (j != -1) {
1917
2037
  ret = redirect_dup2(pairs[j].oldfd, pairs[j].newfd);
1918
- if (ret == -1)
2038
+ if (ret == -1) {
2039
+ ERRMSG("dup2");
1919
2040
  goto fail;
2041
+ }
1920
2042
  pairs[j].oldfd = -1;
1921
2043
  j = pairs[j].older_index;
1922
2044
  }
1923
2045
  }
1924
2046
  if (extra_fd != -1) {
1925
2047
  ret = redirect_close(extra_fd);
1926
- if (ret == -1)
2048
+ if (ret == -1) {
2049
+ ERRMSG("close");
1927
2050
  goto fail;
2051
+ }
1928
2052
  }
1929
2053
 
1930
2054
  xfree(pairs);
@@ -1936,7 +2060,7 @@ run_exec_dup2(VALUE ary, VALUE save)
1936
2060
  }
1937
2061
 
1938
2062
  static int
1939
- run_exec_close(VALUE ary)
2063
+ run_exec_close(VALUE ary, char *errmsg, size_t errmsg_buflen)
1940
2064
  {
1941
2065
  int i, ret;
1942
2066
 
@@ -1944,14 +2068,16 @@ run_exec_close(VALUE ary)
1944
2068
  VALUE elt = RARRAY_PTR(ary)[i];
1945
2069
  int fd = FIX2INT(RARRAY_PTR(elt)[0]);
1946
2070
  ret = redirect_close(fd);
1947
- if (ret == -1)
2071
+ if (ret == -1) {
2072
+ ERRMSG("close");
1948
2073
  return -1;
2074
+ }
1949
2075
  }
1950
2076
  return 0;
1951
2077
  }
1952
2078
 
1953
2079
  static int
1954
- run_exec_open(VALUE ary, VALUE save)
2080
+ run_exec_open(VALUE ary, VALUE save, char *errmsg, size_t errmsg_buflen)
1955
2081
  {
1956
2082
  int i, ret;
1957
2083
 
@@ -1964,7 +2090,10 @@ run_exec_open(VALUE ary, VALUE save)
1964
2090
  int perm = NUM2INT(RARRAY_PTR(param)[2]);
1965
2091
  int need_close = 1;
1966
2092
  int fd2 = redirect_open(path, flags, perm);
1967
- if (fd2 == -1) return -1;
2093
+ if (fd2 == -1) {
2094
+ ERRMSG("open");
2095
+ return -1;
2096
+ }
1968
2097
  while (i < RARRAY_LEN(ary) &&
1969
2098
  (elt = RARRAY_PTR(ary)[i], RARRAY_PTR(elt)[1] == param)) {
1970
2099
  fd = FIX2INT(RARRAY_PTR(elt)[0]);
@@ -1972,16 +2101,42 @@ run_exec_open(VALUE ary, VALUE save)
1972
2101
  need_close = 0;
1973
2102
  }
1974
2103
  else {
1975
- if (save_redirect_fd(fd, save) < 0)
2104
+ if (save_redirect_fd(fd, save, errmsg, errmsg_buflen) < 0)
1976
2105
  return -1;
1977
2106
  ret = redirect_dup2(fd2, fd);
1978
- if (ret == -1) return -1;
2107
+ if (ret == -1) {
2108
+ ERRMSG("dup2");
2109
+ return -1;
2110
+ }
1979
2111
  }
1980
2112
  i++;
1981
2113
  }
1982
2114
  if (need_close) {
1983
2115
  ret = redirect_close(fd2);
1984
- if (ret == -1) return -1;
2116
+ if (ret == -1) {
2117
+ ERRMSG("close");
2118
+ return -1;
2119
+ }
2120
+ }
2121
+ }
2122
+ return 0;
2123
+ }
2124
+
2125
+ static int
2126
+ run_exec_dup2_child(VALUE ary, VALUE save, char *errmsg, size_t errmsg_buflen)
2127
+ {
2128
+ int i, ret;
2129
+ for (i = 0; i < RARRAY_LEN(ary); i++) {
2130
+ VALUE elt = RARRAY_PTR(ary)[i];
2131
+ int newfd = FIX2INT(RARRAY_PTR(elt)[0]);
2132
+ int oldfd = FIX2INT(RARRAY_PTR(elt)[1]);
2133
+
2134
+ if (save_redirect_fd(newfd, save, errmsg, errmsg_buflen) < 0)
2135
+ return -1;
2136
+ ret = redirect_dup2(oldfd, newfd);
2137
+ if (ret == -1) {
2138
+ ERRMSG("dup2");
2139
+ return -1;
1985
2140
  }
1986
2141
  }
1987
2142
  return 0;
@@ -1989,7 +2144,7 @@ run_exec_open(VALUE ary, VALUE save)
1989
2144
 
1990
2145
  #ifdef HAVE_SETPGID
1991
2146
  static int
1992
- run_exec_pgroup(VALUE obj, VALUE save)
2147
+ run_exec_pgroup(VALUE obj, VALUE save, char *errmsg, size_t errmsg_buflen)
1993
2148
  {
1994
2149
  /*
1995
2150
  * If FD_CLOEXEC is available, rb_fork waits the child's execve.
@@ -1997,6 +2152,7 @@ run_exec_pgroup(VALUE obj, VALUE save)
1997
2152
  * No race condition, even without setpgid from the parent.
1998
2153
  * (Is there an environment which has setpgid but FD_CLOEXEC?)
1999
2154
  */
2155
+ int ret;
2000
2156
  pid_t pgroup;
2001
2157
  if (!NIL_P(save)) {
2002
2158
  /* maybe meaningless with no fork environment... */
@@ -2006,13 +2162,15 @@ run_exec_pgroup(VALUE obj, VALUE save)
2006
2162
  if (pgroup == 0) {
2007
2163
  pgroup = getpid();
2008
2164
  }
2009
- return setpgid(getpid(), pgroup);
2165
+ ret = setpgid(getpid(), pgroup);
2166
+ if (ret == -1) ERRMSG("setpgid");
2167
+ return ret;
2010
2168
  }
2011
2169
  #endif
2012
2170
 
2013
2171
  #ifdef RLIM2NUM
2014
2172
  static int
2015
- run_exec_rlimit(VALUE ary, VALUE save)
2173
+ run_exec_rlimit(VALUE ary, VALUE save, char *errmsg, size_t errmsg_buflen)
2016
2174
  {
2017
2175
  int i;
2018
2176
  for (i = 0; i < RARRAY_LEN(ary); i++) {
@@ -2021,8 +2179,10 @@ run_exec_rlimit(VALUE ary, VALUE save)
2021
2179
  struct rlimit rlim;
2022
2180
  if (!NIL_P(save)) {
2023
2181
  VALUE tmp, newary;
2024
- if (getrlimit(rtype, &rlim) == -1)
2182
+ if (getrlimit(rtype, &rlim) == -1) {
2183
+ ERRMSG("getrlimit");
2025
2184
  return -1;
2185
+ }
2026
2186
  tmp = hide_obj(rb_ary_new3(3, RARRAY_PTR(elt)[0],
2027
2187
  RLIM2NUM(rlim.rlim_cur),
2028
2188
  RLIM2NUM(rlim.rlim_max)));
@@ -2035,15 +2195,17 @@ run_exec_rlimit(VALUE ary, VALUE save)
2035
2195
  }
2036
2196
  rlim.rlim_cur = NUM2RLIM(RARRAY_PTR(elt)[1]);
2037
2197
  rlim.rlim_max = NUM2RLIM(RARRAY_PTR(elt)[2]);
2038
- if (setrlimit(rtype, &rlim) == -1)
2198
+ if (setrlimit(rtype, &rlim) == -1) {
2199
+ ERRMSG("setrlimit");
2039
2200
  return -1;
2201
+ }
2040
2202
  }
2041
2203
  return 0;
2042
2204
  }
2043
2205
  #endif
2044
2206
 
2045
2207
  int
2046
- rb_run_exec_options(const struct rb_exec_arg *e, struct rb_exec_arg *s)
2208
+ rb_run_exec_options_err(const struct rb_exec_arg *e, struct rb_exec_arg *s, char *errmsg, size_t errmsg_buflen)
2047
2209
  {
2048
2210
  VALUE options = e->options;
2049
2211
  VALUE soptions = Qnil;
@@ -2063,7 +2225,7 @@ rb_run_exec_options(const struct rb_exec_arg *e, struct rb_exec_arg *s)
2063
2225
  #ifdef HAVE_SETPGID
2064
2226
  obj = rb_ary_entry(options, EXEC_OPTION_PGROUP);
2065
2227
  if (RTEST(obj)) {
2066
- if (run_exec_pgroup(obj, soptions) == -1)
2228
+ if (run_exec_pgroup(obj, soptions, errmsg, errmsg_buflen) == -1)
2067
2229
  return -1;
2068
2230
  }
2069
2231
  #endif
@@ -2071,7 +2233,7 @@ rb_run_exec_options(const struct rb_exec_arg *e, struct rb_exec_arg *s)
2071
2233
  #ifdef RLIM2NUM
2072
2234
  obj = rb_ary_entry(options, EXEC_OPTION_RLIMIT);
2073
2235
  if (!NIL_P(obj)) {
2074
- if (run_exec_rlimit(obj, soptions) == -1)
2236
+ if (run_exec_rlimit(obj, soptions, errmsg, errmsg_buflen) == -1)
2075
2237
  return -1;
2076
2238
  }
2077
2239
  #endif
@@ -2105,8 +2267,10 @@ rb_run_exec_options(const struct rb_exec_arg *e, struct rb_exec_arg *s)
2105
2267
  hide_obj(rb_str_new2(cwd)));
2106
2268
  xfree(cwd);
2107
2269
  }
2108
- if (chdir(RSTRING_PTR(obj)) == -1)
2270
+ if (chdir(RSTRING_PTR(obj)) == -1) {
2271
+ ERRMSG("chdir");
2109
2272
  return -1;
2273
+ }
2110
2274
  }
2111
2275
 
2112
2276
  obj = rb_ary_entry(options, EXEC_OPTION_UMASK);
@@ -2119,7 +2283,7 @@ rb_run_exec_options(const struct rb_exec_arg *e, struct rb_exec_arg *s)
2119
2283
 
2120
2284
  obj = rb_ary_entry(options, EXEC_OPTION_DUP2);
2121
2285
  if (!NIL_P(obj)) {
2122
- if (run_exec_dup2(obj, soptions) == -1)
2286
+ if (run_exec_dup2(obj, soptions, errmsg, errmsg_buflen) == -1)
2123
2287
  return -1;
2124
2288
  }
2125
2289
 
@@ -2128,7 +2292,7 @@ rb_run_exec_options(const struct rb_exec_arg *e, struct rb_exec_arg *s)
2128
2292
  if (!NIL_P(soptions))
2129
2293
  rb_warn("cannot close fd before spawn");
2130
2294
  else {
2131
- if (run_exec_close(obj) == -1)
2295
+ if (run_exec_close(obj, errmsg, errmsg_buflen) == -1)
2132
2296
  return -1;
2133
2297
  }
2134
2298
  }
@@ -2136,13 +2300,19 @@ rb_run_exec_options(const struct rb_exec_arg *e, struct rb_exec_arg *s)
2136
2300
  #ifdef HAVE_FORK
2137
2301
  obj = rb_ary_entry(options, EXEC_OPTION_CLOSE_OTHERS);
2138
2302
  if (obj != Qfalse) {
2139
- rb_close_before_exec(3, FIX2LONG(obj), e->redirect_fds);
2303
+ rb_close_before_exec(3, FIX2INT(obj), e->redirect_fds);
2140
2304
  }
2141
2305
  #endif
2142
2306
 
2143
2307
  obj = rb_ary_entry(options, EXEC_OPTION_OPEN);
2144
2308
  if (!NIL_P(obj)) {
2145
- if (run_exec_open(obj, soptions) == -1)
2309
+ if (run_exec_open(obj, soptions, errmsg, errmsg_buflen) == -1)
2310
+ return -1;
2311
+ }
2312
+
2313
+ obj = rb_ary_entry(options, EXEC_OPTION_DUP2_CHILD);
2314
+ if (!NIL_P(obj)) {
2315
+ if (run_exec_dup2_child(obj, soptions, errmsg, errmsg_buflen) == -1)
2146
2316
  return -1;
2147
2317
  }
2148
2318
 
@@ -2150,13 +2320,19 @@ rb_run_exec_options(const struct rb_exec_arg *e, struct rb_exec_arg *s)
2150
2320
  }
2151
2321
 
2152
2322
  int
2153
- rb_exec(const struct rb_exec_arg *e)
2323
+ rb_run_exec_options(const struct rb_exec_arg *e, struct rb_exec_arg *s)
2324
+ {
2325
+ return rb_run_exec_options_err(e, s, NULL, 0);
2326
+ }
2327
+
2328
+ int
2329
+ rb_exec_err(const struct rb_exec_arg *e, char *errmsg, size_t errmsg_buflen)
2154
2330
  {
2155
2331
  int argc = e->argc;
2156
2332
  VALUE *argv = e->argv;
2157
2333
  const char *prog = e->prog;
2158
2334
 
2159
- if (rb_run_exec_options(e, NULL) < 0) {
2335
+ if (rb_run_exec_options_err(e, NULL, errmsg, errmsg_buflen) < 0) {
2160
2336
  return -1;
2161
2337
  }
2162
2338
 
@@ -2166,21 +2342,36 @@ rb_exec(const struct rb_exec_arg *e)
2166
2342
  else {
2167
2343
  rb_proc_exec_n(argc, argv, prog);
2168
2344
  }
2169
- #ifndef FD_CLOEXEC
2170
- preserving_errno({
2171
- fprintf(stderr, "%s:%d: command not found: %s\n",
2172
- rb_sourcefile(), rb_sourceline(), prog);
2173
- });
2174
- #endif
2175
2345
  return -1;
2176
2346
  }
2177
2347
 
2348
+ int
2349
+ rb_exec(const struct rb_exec_arg *e)
2350
+ {
2351
+ #if !defined FD_CLOEXEC && !defined HAVE_SPAWNV
2352
+ char errmsg[80] = { '\0' };
2353
+ int ret = rb_exec_err(e, errmsg, sizeof(errmsg));
2354
+ preserving_errno(
2355
+ if (errmsg[0]) {
2356
+ fprintf(stderr, "%s\n", errmsg);
2357
+ }
2358
+ else {
2359
+ fprintf(stderr, "%s:%d: command not found: %s\n",
2360
+ rb_sourcefile(), rb_sourceline(), e->prog);
2361
+ }
2362
+ );
2363
+ return ret;
2364
+ #else
2365
+ return rb_exec_err(e, NULL, 0);
2366
+ #endif
2367
+ }
2368
+
2178
2369
  #ifdef HAVE_FORK
2179
2370
  static int
2180
- rb_exec_atfork(void* arg)
2371
+ rb_exec_atfork(void* arg, char *errmsg, size_t errmsg_buflen)
2181
2372
  {
2182
2373
  rb_thread_atfork_before_exec();
2183
- return rb_exec(arg);
2374
+ return rb_exec_err(arg, errmsg, errmsg_buflen);
2184
2375
  }
2185
2376
  #endif
2186
2377
 
@@ -2263,7 +2454,8 @@ pipe_nocrash(int filedes[2], VALUE fds)
2263
2454
  * +chfunc+ must not raise any exceptions.
2264
2455
  */
2265
2456
  rb_pid_t
2266
- rb_fork(int *status, int (*chfunc)(void*), void *charg, VALUE fds)
2457
+ rb_fork_err(int *status, int (*chfunc)(void*, char *, size_t), void *charg, VALUE fds,
2458
+ char *errmsg, size_t errmsg_buflen)
2267
2459
  {
2268
2460
  rb_pid_t pid;
2269
2461
  int err, state = 0;
@@ -2318,10 +2510,14 @@ rb_fork(int *status, int (*chfunc)(void*), void *charg, VALUE fds)
2318
2510
  #ifdef FD_CLOEXEC
2319
2511
  close(ep[0]);
2320
2512
  #endif
2321
- if (!(*chfunc)(charg)) _exit(EXIT_SUCCESS);
2513
+ if (!(*chfunc)(charg, errmsg, errmsg_buflen)) _exit(EXIT_SUCCESS);
2322
2514
  #ifdef FD_CLOEXEC
2323
2515
  err = errno;
2324
- write(ep[1], &err, sizeof(err));
2516
+ (void)write(ep[1], &err, sizeof(err));
2517
+ if (errmsg && 0 < errmsg_buflen) {
2518
+ errmsg[errmsg_buflen-1] = '\0';
2519
+ (void)write(ep[1], errmsg, strlen(errmsg));
2520
+ }
2325
2521
  #endif
2326
2522
  #if EXIT_SUCCESS == 127
2327
2523
  _exit(EXIT_FAILURE);
@@ -2333,12 +2529,21 @@ rb_fork(int *status, int (*chfunc)(void*), void *charg, VALUE fds)
2333
2529
  after_fork();
2334
2530
  #ifdef FD_CLOEXEC
2335
2531
  if (pid && chfunc) {
2532
+ ssize_t size;
2336
2533
  close(ep[1]);
2337
- if ((state = read(ep[0], &err, sizeof(err))) < 0) {
2534
+ if ((size = read(ep[0], &err, sizeof(err))) < 0) {
2338
2535
  err = errno;
2339
2536
  }
2537
+ if (size == sizeof(err) &&
2538
+ errmsg && 0 < errmsg_buflen) {
2539
+ ssize_t ret;
2540
+ ret = read(ep[0], errmsg, errmsg_buflen-1);
2541
+ if (0 <= ret) {
2542
+ errmsg[ret] = '\0';
2543
+ }
2544
+ }
2340
2545
  close(ep[0]);
2341
- if (state) {
2546
+ if (size) {
2342
2547
  if (status) {
2343
2548
  rb_protect(proc_syswait, (VALUE)pid, status);
2344
2549
  }
@@ -2352,12 +2557,41 @@ rb_fork(int *status, int (*chfunc)(void*), void *charg, VALUE fds)
2352
2557
  #endif
2353
2558
  return pid;
2354
2559
  }
2560
+
2561
+ struct chfunc_wrapper_t {
2562
+ int (*chfunc)(void*);
2563
+ void *arg;
2564
+ };
2565
+
2566
+ static int
2567
+ chfunc_wrapper(void *arg_, char *errmsg, size_t errmsg_buflen)
2568
+ {
2569
+ struct chfunc_wrapper_t *arg = arg_;
2570
+ return arg->chfunc(arg->arg);
2571
+ }
2572
+
2573
+ rb_pid_t
2574
+ rb_fork(int *status, int (*chfunc)(void*), void *charg, VALUE fds)
2575
+ {
2576
+ if (chfunc) {
2577
+ struct chfunc_wrapper_t warg;
2578
+ warg.chfunc = chfunc;
2579
+ warg.arg = charg;
2580
+ return rb_fork_err(status, chfunc_wrapper, &warg, fds, NULL, 0);
2581
+ }
2582
+ else {
2583
+ return rb_fork_err(status, NULL, NULL, fds, NULL, 0);
2584
+ }
2585
+
2586
+ }
2587
+
2355
2588
  #endif
2356
2589
 
2590
+ #if defined(HAVE_FORK) && !defined(CANNOT_FORK_WITH_PTHREAD)
2357
2591
  /*
2358
2592
  * call-seq:
2359
- * Kernel.fork [{ block }] => fixnum or nil
2360
- * Process.fork [{ block }] => fixnum or nil
2593
+ * Kernel.fork [{ block }] -> fixnum or nil
2594
+ * Process.fork [{ block }] -> fixnum or nil
2361
2595
  *
2362
2596
  * Creates a subprocess. If a block is specified, that block is run
2363
2597
  * in the subprocess, and the subprocess terminates with a status of
@@ -2373,21 +2607,19 @@ rb_fork(int *status, int (*chfunc)(void*), void *charg, VALUE fds)
2373
2607
  *
2374
2608
  * The thread calling fork is the only thread in the created child process.
2375
2609
  * fork doesn't copy other threads.
2610
+ *
2611
+ * If fork is not usable, Process.respond_to?(:fork) returns false.
2376
2612
  */
2377
2613
 
2378
2614
  static VALUE
2379
2615
  rb_f_fork(VALUE obj)
2380
2616
  {
2381
- #if defined(HAVE_FORK) && !defined(CANNOT_FORK_WITH_PTHREAD)
2382
2617
  rb_pid_t pid;
2383
2618
 
2384
2619
  rb_secure(2);
2385
2620
 
2386
2621
  switch (pid = rb_fork(0, 0, 0, Qnil)) {
2387
2622
  case 0:
2388
- #ifdef linux
2389
- after_exec();
2390
- #endif
2391
2623
  rb_thread_atfork();
2392
2624
  if (rb_block_given_p()) {
2393
2625
  int status;
@@ -2404,21 +2636,20 @@ rb_f_fork(VALUE obj)
2404
2636
  default:
2405
2637
  return PIDT2NUM(pid);
2406
2638
  }
2639
+ }
2407
2640
  #else
2408
- rb_notimplement();
2641
+ #define rb_f_fork rb_f_notimplement
2409
2642
  #endif
2410
- }
2411
-
2412
2643
 
2413
2644
  /*
2414
2645
  * call-seq:
2415
- * Process.exit!(fixnum=-1)
2646
+ * Process.exit!(status=false)
2416
2647
  *
2417
2648
  * Exits the process immediately. No exit handlers are
2418
- * run. <em>fixnum</em> is returned to the underlying system as the
2649
+ * run. <em>status</em> is returned to the underlying system as the
2419
2650
  * exit status.
2420
2651
  *
2421
- * Process.exit!(0)
2652
+ * Process.exit!(true)
2422
2653
  */
2423
2654
 
2424
2655
  static VALUE
@@ -2466,15 +2697,18 @@ rb_exit(int status)
2466
2697
 
2467
2698
  /*
2468
2699
  * call-seq:
2469
- * exit(integer=0)
2470
- * Kernel::exit(integer=0)
2471
- * Process::exit(integer=0)
2472
- *
2700
+ * exit(status=true)
2701
+ * Kernel::exit(status=true)
2702
+ * Process::exit(status=true)
2703
+ *
2473
2704
  * Initiates the termination of the Ruby script by raising the
2474
2705
  * <code>SystemExit</code> exception. This exception may be caught. The
2475
2706
  * optional parameter is used to return a status code to the invoking
2476
2707
  * environment.
2477
- *
2708
+ * +true+ and +FALSE+ of _status_ means success and failure
2709
+ * respectively. The interpretation of other integer values are
2710
+ * system dependent.
2711
+ *
2478
2712
  * begin
2479
2713
  * exit
2480
2714
  * puts "never get here"
@@ -2482,22 +2716,22 @@ rb_exit(int status)
2482
2716
  * puts "rescued a SystemExit exception"
2483
2717
  * end
2484
2718
  * puts "after begin block"
2485
- *
2719
+ *
2486
2720
  * <em>produces:</em>
2487
- *
2721
+ *
2488
2722
  * rescued a SystemExit exception
2489
2723
  * after begin block
2490
- *
2724
+ *
2491
2725
  * Just prior to termination, Ruby executes any <code>at_exit</code> functions
2492
2726
  * (see Kernel::at_exit) and runs any object finalizers (see
2493
2727
  * ObjectSpace::define_finalizer).
2494
- *
2728
+ *
2495
2729
  * at_exit { puts "at_exit function" }
2496
2730
  * ObjectSpace.define_finalizer("string", proc { puts "in finalizer" })
2497
2731
  * exit
2498
- *
2732
+ *
2499
2733
  * <em>produces:</em>
2500
- *
2734
+ *
2501
2735
  * at_exit function
2502
2736
  * in finalizer
2503
2737
  */
@@ -2537,11 +2771,11 @@ rb_f_exit(int argc, VALUE *argv)
2537
2771
  /*
2538
2772
  * call-seq:
2539
2773
  * abort
2540
- * Kernel::abort
2541
- * Process::abort
2542
- *
2774
+ * Kernel::abort([msg])
2775
+ * Process::abort([msg])
2776
+ *
2543
2777
  * Terminate execution immediately, effectively by calling
2544
- * <code>Kernel.exit(1)</code>. If _msg_ is given, it is written
2778
+ * <code>Kernel.exit(false)</code>. If _msg_ is given, it is written
2545
2779
  * to STDERR prior to terminating.
2546
2780
  */
2547
2781
 
@@ -2586,7 +2820,7 @@ rb_syswait(rb_pid_t pid)
2586
2820
  #endif
2587
2821
  RETSIGTYPE (*ifunc)(int) = 0;
2588
2822
  int status;
2589
- int i, hooked = Qfalse;
2823
+ int i, hooked = FALSE;
2590
2824
 
2591
2825
  if (!overriding) {
2592
2826
  #ifdef SIGHUP
@@ -2596,8 +2830,8 @@ rb_syswait(rb_pid_t pid)
2596
2830
  qfunc = signal(SIGQUIT, SIG_IGN);
2597
2831
  #endif
2598
2832
  ifunc = signal(SIGINT, SIG_IGN);
2599
- overriding = Qtrue;
2600
- hooked = Qtrue;
2833
+ overriding = TRUE;
2834
+ hooked = TRUE;
2601
2835
  }
2602
2836
 
2603
2837
  do {
@@ -2612,47 +2846,54 @@ rb_syswait(rb_pid_t pid)
2612
2846
  signal(SIGQUIT, qfunc);
2613
2847
  #endif
2614
2848
  signal(SIGINT, ifunc);
2615
- overriding = Qfalse;
2849
+ overriding = FALSE;
2616
2850
  }
2617
2851
  }
2618
2852
 
2853
+ static VALUE
2854
+ rb_exec_arg_prepare(struct rb_exec_arg *earg, int argc, VALUE *argv, int default_close_others)
2855
+ {
2856
+ VALUE prog = rb_exec_arg_init(argc, argv, TRUE, earg);
2857
+ if (NIL_P(rb_ary_entry(earg->options, EXEC_OPTION_CLOSE_OTHERS))) {
2858
+ VALUE v = default_close_others ? Qtrue : Qfalse;
2859
+ rb_exec_arg_addopt(earg, ID2SYM(rb_intern("close_others")), v);
2860
+ }
2861
+ rb_exec_arg_fixup(earg);
2862
+ return prog;
2863
+ }
2864
+
2619
2865
  static rb_pid_t
2620
- rb_spawn_internal(int argc, VALUE *argv, int default_close_others)
2866
+ rb_spawn_process(struct rb_exec_arg *earg, VALUE prog, char *errmsg, size_t errmsg_buflen)
2621
2867
  {
2622
- rb_pid_t status;
2623
- VALUE prog;
2624
- struct rb_exec_arg earg;
2868
+ rb_pid_t pid;
2869
+ #if defined HAVE_FORK || !defined HAVE_SPAWNV
2870
+ int status;
2871
+ #endif
2625
2872
  #if !defined HAVE_FORK
2626
2873
  struct rb_exec_arg sarg;
2874
+ int argc;
2875
+ VALUE *argv;
2627
2876
  #endif
2628
2877
 
2629
- prog = rb_exec_arg_init(argc, argv, Qtrue, &earg);
2630
- if (NIL_P(rb_ary_entry(earg.options, EXEC_OPTION_CLOSE_OTHERS))) {
2631
- VALUE v = default_close_others ? Qtrue : Qfalse;
2632
- rb_exec_arg_addopt(&earg, ID2SYM(rb_intern("close_others")), v);
2633
- }
2634
- rb_exec_arg_fixup(&earg);
2635
-
2636
2878
  #if defined HAVE_FORK
2637
- status = rb_fork(&status, rb_exec_atfork, &earg, earg.redirect_fds);
2638
- if (prog && earg.argc) earg.argv[0] = prog;
2879
+ pid = rb_fork_err(&status, rb_exec_atfork, earg, earg->redirect_fds, errmsg, errmsg_buflen);
2639
2880
  #else
2640
- if (rb_run_exec_options(&earg, &sarg) < 0) {
2881
+ if (rb_run_exec_options_err(earg, &sarg, errmsg, errmsg_buflen) < 0) {
2641
2882
  return -1;
2642
2883
  }
2643
2884
 
2644
- argc = earg.argc;
2645
- argv = earg.argv;
2885
+ argc = earg->argc;
2886
+ argv = earg->argv;
2646
2887
  if (prog && argc) argv[0] = prog;
2647
2888
  # if defined HAVE_SPAWNV
2648
2889
  if (!argc) {
2649
- status = proc_spawn(RSTRING_PTR(prog));
2890
+ pid = proc_spawn(RSTRING_PTR(prog));
2650
2891
  }
2651
2892
  else {
2652
- status = proc_spawn_n(argc, argv, prog);
2893
+ pid = proc_spawn_n(argc, argv, prog);
2653
2894
  }
2654
2895
  # if defined(_WIN32)
2655
- if (status == -1)
2896
+ if (pid == -1)
2656
2897
  rb_last_status_set(0x7f << 8, 0);
2657
2898
  # endif
2658
2899
  # else
@@ -2661,30 +2902,53 @@ rb_spawn_internal(int argc, VALUE *argv, int default_close_others)
2661
2902
  rb_last_status_set((status & 0xff) << 8, 0);
2662
2903
  # endif
2663
2904
 
2664
- rb_run_exec_options(&sarg, NULL);
2905
+ rb_run_exec_options_err(&sarg, NULL, errmsg, errmsg_buflen);
2665
2906
  #endif
2666
- return status;
2907
+ return pid;
2908
+ }
2909
+
2910
+ static rb_pid_t
2911
+ rb_spawn_internal(int argc, VALUE *argv, int default_close_others,
2912
+ char *errmsg, size_t errmsg_buflen)
2913
+ {
2914
+ struct rb_exec_arg earg;
2915
+ VALUE prog = rb_exec_arg_prepare(&earg, argc, argv, default_close_others);
2916
+ return rb_spawn_process(&earg, prog, errmsg, errmsg_buflen);
2917
+ }
2918
+
2919
+ rb_pid_t
2920
+ rb_spawn_err(int argc, VALUE *argv, char *errmsg, size_t errmsg_buflen)
2921
+ {
2922
+ return rb_spawn_internal(argc, argv, TRUE, errmsg, errmsg_buflen);
2667
2923
  }
2668
2924
 
2669
2925
  rb_pid_t
2670
2926
  rb_spawn(int argc, VALUE *argv)
2671
2927
  {
2672
- return rb_spawn_internal(argc, argv, Qtrue);
2928
+ return rb_spawn_internal(argc, argv, TRUE, NULL, 0);
2673
2929
  }
2674
2930
 
2675
2931
  /*
2676
2932
  * call-seq:
2677
- * system([env,] cmd [, arg, ...] [,options]) => true, false or nil
2933
+ * system([env,] command... [,options]) -> true, false or nil
2678
2934
  *
2679
- * Executes _cmd_ in a subshell, returning +true+ if the command
2680
- * gives zero exit status, +false+ for non zero exit status. Returns
2681
- * +nil+ if command execution fails. An error status is available in
2682
- * <code>$?</code>. The arguments are processed in the same way as
2683
- * for <code>Kernel::exec</code>.
2935
+ * Executes _command..._ in a subshell.
2936
+ * _command..._ is one of following forms.
2937
+ *
2938
+ * commandline : command line string which is passed to the standard shell
2939
+ * cmdname, arg1, ... : command name and one or more arguments (no shell)
2940
+ * [cmdname, argv0], arg1, ... : command name, argv[0] and zero or more arguments (no shell)
2941
+ *
2942
+ * system returns +true+ if the command gives zero exit status,
2943
+ * +false+ for non zero exit status.
2944
+ * Returns +nil+ if command execution fails.
2945
+ * An error status is available in <code>$?</code>.
2946
+ * The arguments are processed in the same way as
2947
+ * for <code>Kernel.spawn</code>.
2684
2948
  *
2685
2949
  * The hash arguments, env and options, are same as
2686
2950
  * <code>exec</code> and <code>spawn</code>.
2687
- * See <code>spawn</code> for details.
2951
+ * See <code>Kernel.spawn</code> for details.
2688
2952
  *
2689
2953
  * system("echo *")
2690
2954
  * system("echo", "*")
@@ -2693,11 +2957,14 @@ rb_spawn(int argc, VALUE *argv)
2693
2957
  *
2694
2958
  * config.h main.rb
2695
2959
  * *
2960
+ *
2961
+ * See <code>Kernel.exec</code> for the standard shell.
2696
2962
  */
2697
2963
 
2698
2964
  static VALUE
2699
2965
  rb_f_system(int argc, VALUE *argv)
2700
2966
  {
2967
+ rb_pid_t pid;
2701
2968
  int status;
2702
2969
 
2703
2970
  #if defined(SIGCLD) && !defined(SIGCHLD)
@@ -2709,16 +2976,16 @@ rb_f_system(int argc, VALUE *argv)
2709
2976
 
2710
2977
  chfunc = signal(SIGCHLD, SIG_DFL);
2711
2978
  #endif
2712
- status = rb_spawn_internal(argc, argv, Qfalse);
2979
+ pid = rb_spawn_internal(argc, argv, FALSE, NULL, 0);
2713
2980
  #if defined(HAVE_FORK) || defined(HAVE_SPAWNV)
2714
- if (status > 0) {
2715
- rb_syswait(status);
2981
+ if (pid > 0) {
2982
+ rb_syswait(pid);
2716
2983
  }
2717
2984
  #endif
2718
2985
  #ifdef SIGCHLD
2719
2986
  signal(SIGCHLD, chfunc);
2720
2987
  #endif
2721
- if (status < 0) {
2988
+ if (pid < 0) {
2722
2989
  return Qnil;
2723
2990
  }
2724
2991
  status = PST2INT(rb_last_status_get());
@@ -2728,10 +2995,64 @@ rb_f_system(int argc, VALUE *argv)
2728
2995
 
2729
2996
  /*
2730
2997
  * call-seq:
2731
- * spawn([env,] cmd [, arg, ...] [,options]) => pid
2732
- *
2733
- * Similar to <code>Kernel::system</code> except for not waiting for
2734
- * end of _cmd_, but returns its <i>pid</i>.
2998
+ * spawn([env,] command... [,options]) -> pid
2999
+ * Process.spawn([env,] command... [,options]) -> pid
3000
+ *
3001
+ * spawn executes specified command and return its pid.
3002
+ *
3003
+ * This method doesn't wait for end of the command.
3004
+ * The parent process should
3005
+ * use <code>Process.wait</code> to collect
3006
+ * the termination status of its child or
3007
+ * use <code>Process.detach</code> to register
3008
+ * disinterest in their status;
3009
+ * otherwise, the operating system may accumulate zombie processes.
3010
+ *
3011
+ * spawn has bunch of options to specify process attributes:
3012
+ *
3013
+ * env: hash
3014
+ * name => val : set the environment variable
3015
+ * name => nil : unset the environment variable
3016
+ * command...:
3017
+ * commandline : command line string which is passed to the standard shell
3018
+ * cmdname, arg1, ... : command name and one or more arguments (no shell)
3019
+ * [cmdname, argv0], arg1, ... : command name, argv[0] and zero or more arguments (no shell)
3020
+ * options: hash
3021
+ * clearing environment variables:
3022
+ * :unsetenv_others => true : clear environment variables except specified by env
3023
+ * :unsetenv_others => false : don't clear (default)
3024
+ * process group:
3025
+ * :pgroup => true or 0 : make a new process group
3026
+ * :pgroup => pgid : join to specified process group
3027
+ * :pgroup => nil : don't change the process group (default)
3028
+ * resource limit: resourcename is core, cpu, data, etc. See Process.setrlimit.
3029
+ * :rlimit_resourcename => limit
3030
+ * :rlimit_resourcename => [cur_limit, max_limit]
3031
+ * current directory:
3032
+ * :chdir => str
3033
+ * umask:
3034
+ * :umask => int
3035
+ * redirection:
3036
+ * key:
3037
+ * FD : single file descriptor in child process
3038
+ * [FD, FD, ...] : multiple file descriptor in child process
3039
+ * value:
3040
+ * FD : redirect to the file descriptor in parent process
3041
+ * string : redirect to file with open(string, "r" or "w")
3042
+ * [string] : redirect to file with open(string, File::RDONLY)
3043
+ * [string, open_mode] : redirect to file with open(string, open_mode, 0644)
3044
+ * [string, open_mode, perm] : redirect to file with open(string, open_mode, perm)
3045
+ * [:child, FD] : redirect to the redirected file descriptor
3046
+ * :close : close the file descriptor in child process
3047
+ * FD is one of follows
3048
+ * :in : the file descriptor 0 which is the standard input
3049
+ * :out : the file descriptor 1 which is the standard output
3050
+ * :err : the file descriptor 2 which is the standard error
3051
+ * integer : the file descriptor of specified the integer
3052
+ * io : the file descriptor specified as io.fileno
3053
+ * file descriptor inheritance: close non-redirected non-standard fds (3, 4, 5, ...) or not
3054
+ * :close_others => false : inherit fds (default for system and exec)
3055
+ * :close_others => true : don't inherit (default for spawn and IO.popen)
2735
3056
  *
2736
3057
  * If a hash is given as +env+, the environment is
2737
3058
  * updated by +env+ before <code>exec(2)</code> in the child process.
@@ -2743,7 +3064,7 @@ rb_f_system(int argc, VALUE *argv)
2743
3064
  * If a hash is given as +options+,
2744
3065
  * it specifies
2745
3066
  * process group,
2746
- * resource limit,
3067
+ * resource limit,
2747
3068
  * current directory,
2748
3069
  * umask and
2749
3070
  * redirects for the child process.
@@ -2757,22 +3078,23 @@ rb_f_system(int argc, VALUE *argv)
2757
3078
  *
2758
3079
  * The <code>:pgroup</code> key in +options+ specifies a process group.
2759
3080
  * The corresponding value should be true, zero or positive integer.
2760
- * true and zero means the process should be a process leader.
3081
+ * true and zero means the process should be a process leader of a new
3082
+ * process group.
2761
3083
  * Other values specifies a process group to be belongs.
2762
3084
  *
2763
3085
  * pid = spawn(command, :pgroup=>true) # process leader
2764
3086
  * pid = spawn(command, :pgroup=>10) # belongs to the process group 10
2765
3087
  *
2766
3088
  * The <code>:rlimit_</code><em>foo</em> key specifies a resource limit.
2767
- * <em>foo</em> should be one of resource types such as <code>core</code>
3089
+ * <em>foo</em> should be one of resource types such as <code>core</code>.
2768
3090
  * The corresponding value should be an integer or an array which have one or
2769
3091
  * two integers: same as cur_limit and max_limit arguments for
2770
3092
  * Process.setrlimit.
2771
3093
  *
2772
- * pid = spawn(command, :rlimit_core=>0) # never dump core.
2773
3094
  * cur, max = Process.getrlimit(:CORE)
2774
3095
  * pid = spawn(command, :rlimit_core=>[0,max]) # disable core temporary.
2775
3096
  * pid = spawn(command, :rlimit_core=>max) # enable core dump
3097
+ * pid = spawn(command, :rlimit_core=>0) # never dump core.
2776
3098
  *
2777
3099
  * The <code>:chdir</code> key in +options+ specifies the current directory.
2778
3100
  *
@@ -2782,59 +3104,80 @@ rb_f_system(int argc, VALUE *argv)
2782
3104
  *
2783
3105
  * pid = spawn(command, :umask=>077)
2784
3106
  *
2785
- * The :in, :out, :err, a fixnum, an IO and an array key specifies a redirect.
3107
+ * The :in, :out, :err, a fixnum, an IO and an array key specifies a redirection.
2786
3108
  * The redirection maps a file descriptor in the child process.
2787
3109
  *
2788
- * For example, stderr can be merged into stdout:
3110
+ * For example, stderr can be merged into stdout as follows:
2789
3111
  *
2790
3112
  * pid = spawn(command, :err=>:out)
2791
- * pid = spawn(command, STDERR=>STDOUT)
2792
3113
  * pid = spawn(command, 2=>1)
3114
+ * pid = spawn(command, STDERR=>:out)
3115
+ * pid = spawn(command, STDERR=>STDOUT)
2793
3116
  *
2794
3117
  * The hash keys specifies a file descriptor
2795
3118
  * in the child process started by <code>spawn</code>.
2796
- * :err, STDERR and 2 specifies the standard error stream.
3119
+ * :err, 2 and STDERR specifies the standard error stream (stderr).
2797
3120
  *
2798
3121
  * The hash values specifies a file descriptor
2799
3122
  * in the parent process which invokes <code>spawn</code>.
2800
- * :out, STDOUT and 1 specifies the standard output stream.
3123
+ * :out, 1 and STDOUT specifies the standard output stream (stdout).
2801
3124
  *
2802
- * The standard output in the child process is not specified.
3125
+ * In the above example,
3126
+ * the standard output in the child process is not specified.
2803
3127
  * So it is inherited from the parent process.
2804
3128
  *
2805
- * The standard input stream can be specifed by :in, STDIN and 0.
2806
- *
3129
+ * The standard input stream (stdin) can be specified by :in, 0 and STDIN.
3130
+ *
2807
3131
  * A filename can be specified as a hash value.
2808
3132
  *
2809
- * pid = spawn(command, STDIN=>"/dev/null") # read mode
2810
- * pid = spawn(command, STDOUT=>"/dev/null") # write mode
2811
- * pid = spawn(command, STDERR=>"log") # write mode
3133
+ * pid = spawn(command, :in=>"/dev/null") # read mode
3134
+ * pid = spawn(command, :out=>"/dev/null") # write mode
3135
+ * pid = spawn(command, :err=>"log") # write mode
2812
3136
  * pid = spawn(command, 3=>"/dev/null") # read mode
2813
3137
  *
2814
- * For standard output and standard error,
3138
+ * For stdout and stderr,
2815
3139
  * it is opened in write mode.
2816
3140
  * Otherwise read mode is used.
2817
3141
  *
2818
3142
  * For specifying flags and permission of file creation explicitly,
2819
3143
  * an array is used instead.
2820
3144
  *
2821
- * pid = spawn(command, STDIN=>["file"]) # read mode is assumed
2822
- * pid = spawn(command, STDIN=>["file", "r"])
2823
- * pid = spawn(command, STDOUT=>["log", "w"]) # 0644 assumed
2824
- * pid = spawn(command, STDOUT=>["log", "w", 0600])
2825
- * pid = spawn(command, STDOUT=>["log", File::WRONLY|File::EXCL|File::CREAT, 0600])
3145
+ * pid = spawn(command, :in=>["file"]) # read mode is assumed
3146
+ * pid = spawn(command, :in=>["file", "r"])
3147
+ * pid = spawn(command, :out=>["log", "w"]) # 0644 assumed
3148
+ * pid = spawn(command, :out=>["log", "w", 0600])
3149
+ * pid = spawn(command, :out=>["log", File::WRONLY|File::EXCL|File::CREAT, 0600])
2826
3150
  *
2827
3151
  * The array specifies a filename, flags and permission.
2828
3152
  * The flags can be a string or an integer.
2829
- * If the flags is ommitted or nil, File::RDONLY is assumed.
3153
+ * If the flags is omitted or nil, File::RDONLY is assumed.
2830
3154
  * The permission should be an integer.
2831
- * If the permission is ommitted or nil, 0644 is assumed.
3155
+ * If the permission is omitted or nil, 0644 is assumed.
2832
3156
  *
2833
3157
  * If an array of IOs and integers are specified as a hash key,
2834
- * all the elemetns are redirected.
3158
+ * all the elements are redirected.
3159
+ *
3160
+ * # stdout and stderr is redirected to log file.
3161
+ * # The file "log" is opened just once.
3162
+ * pid = spawn(command, [:out, :err]=>["log", "w"])
3163
+ *
3164
+ * Another way to merge multiple file descriptors is [:child, fd].
3165
+ * \[:child, fd] means the file descriptor in the child process.
3166
+ * This is different from fd.
3167
+ * For example, :err=>:out means redirecting child stderr to parent stdout.
3168
+ * But :err=>[:child, :out] means redirecting child stderr to child stdout.
3169
+ * They differs if stdout is redirected in the child process as follows.
3170
+ *
3171
+ * # stdout and stderr is redirected to log file.
3172
+ * # The file "log" is opened just once.
3173
+ * pid = spawn(command, :out=>["log", "w"], :err=>[:child, :out])
3174
+ *
3175
+ * \[:child, :out] can be used to merge stderr into stdout in IO.popen.
3176
+ * In this case, IO.popen redirects stdout to a pipe in the child process
3177
+ * and [:child, :out] refers the redirected stdout.
2835
3178
  *
2836
- * # standard output and standard error is redirected to log file.
2837
- * pid = spawn(command, [STDOUT, STDERR]=>["log", "w"])
3179
+ * io = IO.popen(["sh", "-c", "echo out; echo err >&2", :err=>[:child, :out]])
3180
+ * p io.read #=> "out\nerr\n"
2838
3181
  *
2839
3182
  * spawn closes all non-standard unspecified descriptors by default.
2840
3183
  * The "standard" descriptors are 0, 1 and 2.
@@ -2851,33 +3194,52 @@ rb_f_system(int argc, VALUE *argv)
2851
3194
  *
2852
3195
  * # similar to r = IO.popen(command)
2853
3196
  * r, w = IO.pipe
2854
- * pid = spawn(command, STDOUT=>w) # r, w is closed in the child process.
3197
+ * pid = spawn(command, :out=>w) # r, w is closed in the child process.
2855
3198
  * w.close
2856
3199
  *
2857
- * :close is specified as a hash value to close a fd individualy.
3200
+ * :close is specified as a hash value to close a fd individually.
2858
3201
  *
2859
3202
  * f = open(foo)
2860
3203
  * system(command, f=>:close) # don't inherit f.
2861
3204
  *
3205
+ * If a file descriptor need to be inherited,
3206
+ * io=>io can be used.
3207
+ *
3208
+ * # valgrind has --log-fd option for log destination.
3209
+ * # log_w=>log_w indicates log_w.fileno inherits to child process.
3210
+ * log_r, log_w = IO.pipe
3211
+ * pid = spawn("valgrind", "--log-fd=#{log_w.fileno}", "echo", "a", log_w=>log_w)
3212
+ * log_w.close
3213
+ * p log_r.read
3214
+ *
2862
3215
  * It is also possible to exchange file descriptors.
2863
3216
  *
2864
- * pid = spawn(command, STDOUT=>STDERR, STDERR=>STDOUT)
3217
+ * pid = spawn(command, :out=>:err, :err=>:out)
2865
3218
  *
2866
3219
  * The hash keys specify file descriptors in the child process.
2867
3220
  * The hash values specifies file descriptors in the parent process.
2868
- * So the above specifies exchanging STDOUT and STDERR.
3221
+ * So the above specifies exchanging stdout and stderr.
2869
3222
  * Internally, +spawn+ uses an extra file descriptor to resolve such cyclic
2870
3223
  * file descriptor mapping.
2871
3224
  *
3225
+ * See <code>Kernel.exec</code> for the standard shell.
2872
3226
  */
2873
3227
 
2874
3228
  static VALUE
2875
3229
  rb_f_spawn(int argc, VALUE *argv)
2876
3230
  {
2877
3231
  rb_pid_t pid;
3232
+ char errmsg[CHILD_ERRMSG_BUFLEN] = { '\0' };
3233
+ struct rb_exec_arg earg;
2878
3234
 
2879
- pid = rb_spawn(argc, argv);
2880
- if (pid == -1) rb_sys_fail(RSTRING_PTR(argv[0]));
3235
+ pid = rb_spawn_process(&earg, rb_exec_arg_prepare(&earg, argc, argv, TRUE), errmsg, sizeof(errmsg));
3236
+ if (pid == -1) {
3237
+ const char *prog = errmsg;
3238
+ if (!prog[0] && !(prog = earg.prog) && earg.argc) {
3239
+ prog = RSTRING_PTR(earg.argv[0]);
3240
+ }
3241
+ rb_sys_fail(prog);
3242
+ }
2881
3243
  #if defined(HAVE_FORK) || defined(HAVE_SPAWNV)
2882
3244
  return PIDT2NUM(pid);
2883
3245
  #else
@@ -2887,13 +3249,13 @@ rb_f_spawn(int argc, VALUE *argv)
2887
3249
 
2888
3250
  /*
2889
3251
  * call-seq:
2890
- * sleep([duration]) => fixnum
3252
+ * sleep([duration]) -> fixnum
2891
3253
  *
2892
3254
  * Suspends the current thread for _duration_ seconds (which may be any number,
2893
3255
  * including a +Float+ with fractional seconds). Returns the actual number of
2894
3256
  * seconds slept (rounded), which may be less than that asked for if another
2895
- * thread calls <code>Thread#run</code>. Zero arguments causes +sleep+ to sleep
2896
- * forever.
3257
+ * thread calls <code>Thread#run</code>. Called without an argument, sleep()
3258
+ * will sleep forever.
2897
3259
  *
2898
3260
  * Time.new #=> 2008-03-08 19:56:19 +0900
2899
3261
  * sleep 1.2 #=> 1
@@ -2915,7 +3277,7 @@ rb_f_sleep(int argc, VALUE *argv)
2915
3277
  rb_thread_wait_for(rb_time_interval(argv[0]));
2916
3278
  }
2917
3279
  else {
2918
- rb_raise(rb_eArgError, "wrong number of arguments");
3280
+ rb_raise(rb_eArgError, "wrong number of arguments (%d for 0..1)", argc);
2919
3281
  }
2920
3282
 
2921
3283
  end = time(0) - beg;
@@ -2924,9 +3286,10 @@ rb_f_sleep(int argc, VALUE *argv)
2924
3286
  }
2925
3287
 
2926
3288
 
3289
+ #if (defined(HAVE_GETPGRP) && defined(GETPGRP_VOID)) || defined(HAVE_GETPGID)
2927
3290
  /*
2928
3291
  * call-seq:
2929
- * Process.getpgrp => integer
3292
+ * Process.getpgrp -> integer
2930
3293
  *
2931
3294
  * Returns the process group ID for this process. Not available on
2932
3295
  * all platforms.
@@ -2938,30 +3301,28 @@ rb_f_sleep(int argc, VALUE *argv)
2938
3301
  static VALUE
2939
3302
  proc_getpgrp(void)
2940
3303
  {
2941
- #if defined(HAVE_GETPGRP) && defined(GETPGRP_VOID) || defined(HAVE_GETPGID)
2942
3304
  rb_pid_t pgrp;
2943
- #endif
2944
3305
 
2945
3306
  rb_secure(2);
2946
3307
  #if defined(HAVE_GETPGRP) && defined(GETPGRP_VOID)
2947
3308
  pgrp = getpgrp();
2948
3309
  if (pgrp < 0) rb_sys_fail(0);
2949
3310
  return PIDT2NUM(pgrp);
2950
- #else
2951
- # ifdef HAVE_GETPGID
3311
+ #else /* defined(HAVE_GETPGID) */
2952
3312
  pgrp = getpgid(0);
2953
3313
  if (pgrp < 0) rb_sys_fail(0);
2954
3314
  return PIDT2NUM(pgrp);
2955
- # else
2956
- rb_notimplement();
2957
- # endif
2958
3315
  #endif
2959
3316
  }
3317
+ #else
3318
+ #define proc_getpgrp rb_f_notimplement
3319
+ #endif
2960
3320
 
2961
3321
 
3322
+ #if defined(HAVE_SETPGID) || (defined(HAVE_SETPGRP) && defined(SETPGRP_VOID))
2962
3323
  /*
2963
3324
  * call-seq:
2964
- * Process.setpgrp => 0
3325
+ * Process.setpgrp -> 0
2965
3326
  *
2966
3327
  * Equivalent to <code>setpgid(0,0)</code>. Not available on all
2967
3328
  * platforms.
@@ -2979,16 +3340,18 @@ proc_setpgrp(void)
2979
3340
  if (setpgid(0,0) < 0) rb_sys_fail(0);
2980
3341
  #elif defined(HAVE_SETPGRP) && defined(SETPGRP_VOID)
2981
3342
  if (setpgrp() < 0) rb_sys_fail(0);
2982
- #else
2983
- rb_notimplement();
2984
3343
  #endif
2985
3344
  return INT2FIX(0);
2986
3345
  }
3346
+ #else
3347
+ #define proc_setpgrp rb_f_notimplement
3348
+ #endif
2987
3349
 
2988
3350
 
3351
+ #if defined(HAVE_GETPGID)
2989
3352
  /*
2990
3353
  * call-seq:
2991
- * Process.getpgid(pid) => integer
3354
+ * Process.getpgid(pid) -> integer
2992
3355
  *
2993
3356
  * Returns the process group ID for the given process id. Not
2994
3357
  * available on all platforms.
@@ -2999,22 +3362,22 @@ proc_setpgrp(void)
2999
3362
  static VALUE
3000
3363
  proc_getpgid(VALUE obj, VALUE pid)
3001
3364
  {
3002
- #if defined(HAVE_GETPGID) && !defined(__CHECKER__)
3003
3365
  rb_pid_t i;
3004
3366
 
3005
3367
  rb_secure(2);
3006
3368
  i = getpgid(NUM2PIDT(pid));
3007
3369
  if (i < 0) rb_sys_fail(0);
3008
3370
  return PIDT2NUM(i);
3371
+ }
3009
3372
  #else
3010
- rb_notimplement();
3373
+ #define proc_getpgid rb_f_notimplement
3011
3374
  #endif
3012
- }
3013
3375
 
3014
3376
 
3377
+ #ifdef HAVE_SETPGID
3015
3378
  /*
3016
3379
  * call-seq:
3017
- * Process.setpgid(pid, integer) => 0
3380
+ * Process.setpgid(pid, integer) -> 0
3018
3381
  *
3019
3382
  * Sets the process group ID of _pid_ (0 indicates this
3020
3383
  * process) to <em>integer</em>. Not available on all platforms.
@@ -3023,7 +3386,6 @@ proc_getpgid(VALUE obj, VALUE pid)
3023
3386
  static VALUE
3024
3387
  proc_setpgid(VALUE obj, VALUE pid, VALUE pgrp)
3025
3388
  {
3026
- #ifdef HAVE_SETPGID
3027
3389
  rb_pid_t ipid, ipgrp;
3028
3390
 
3029
3391
  rb_secure(2);
@@ -3032,15 +3394,20 @@ proc_setpgid(VALUE obj, VALUE pid, VALUE pgrp)
3032
3394
 
3033
3395
  if (setpgid(ipid, ipgrp) < 0) rb_sys_fail(0);
3034
3396
  return INT2FIX(0);
3397
+ }
3035
3398
  #else
3036
- rb_notimplement();
3399
+ #define proc_setpgid rb_f_notimplement
3037
3400
  #endif
3038
- }
3039
3401
 
3040
3402
 
3403
+ #if defined(HAVE_SETSID) || (defined(HAVE_SETPGRP) && defined(TIOCNOTTY))
3404
+ #if !defined(HAVE_SETSID)
3405
+ static rb_pid_t ruby_setsid(void);
3406
+ #define setsid() ruby_setsid()
3407
+ #endif
3041
3408
  /*
3042
3409
  * call-seq:
3043
- * Process.setsid => fixnum
3410
+ * Process.setsid -> fixnum
3044
3411
  *
3045
3412
  * Establishes this process as a new session and process group
3046
3413
  * leader, with no controlling tty. Returns the session id. Not
@@ -3052,18 +3419,22 @@ proc_setpgid(VALUE obj, VALUE pid, VALUE pgrp)
3052
3419
  static VALUE
3053
3420
  proc_setsid(void)
3054
3421
  {
3055
- #if defined(HAVE_SETSID)
3056
3422
  rb_pid_t pid;
3057
3423
 
3058
3424
  rb_secure(2);
3059
3425
  pid = setsid();
3060
3426
  if (pid < 0) rb_sys_fail(0);
3061
3427
  return PIDT2NUM(pid);
3062
- #elif defined(HAVE_SETPGRP) && defined(TIOCNOTTY)
3428
+ }
3429
+
3430
+ #if !defined(HAVE_SETSID)
3431
+ #define HAVE_SETSID 1
3432
+ static rb_pid_t
3433
+ ruby_setsid(void)
3434
+ {
3063
3435
  rb_pid_t pid;
3064
3436
  int ret;
3065
3437
 
3066
- rb_secure(2);
3067
3438
  pid = getpid();
3068
3439
  #if defined(SETPGRP_VOID)
3069
3440
  ret = setpgrp();
@@ -3073,22 +3444,24 @@ proc_setsid(void)
3073
3444
  #else
3074
3445
  ret = setpgrp(0, pid);
3075
3446
  #endif
3076
- if (ret == -1) rb_sys_fail(0);
3447
+ if (ret == -1) return -1;
3077
3448
 
3078
3449
  if ((fd = open("/dev/tty", O_RDWR)) >= 0) {
3079
3450
  ioctl(fd, TIOCNOTTY, NULL);
3080
3451
  close(fd);
3081
3452
  }
3082
- return PIDT2NUM(pid);
3453
+ return pid;
3454
+ }
3455
+ #endif
3083
3456
  #else
3084
- rb_notimplement();
3457
+ #define proc_setsid rb_f_notimplement
3085
3458
  #endif
3086
- }
3087
3459
 
3088
3460
 
3461
+ #ifdef HAVE_GETPRIORITY
3089
3462
  /*
3090
3463
  * call-seq:
3091
- * Process.getpriority(kind, integer) => fixnum
3464
+ * Process.getpriority(kind, integer) -> fixnum
3092
3465
  *
3093
3466
  * Gets the scheduling priority for specified process, process group,
3094
3467
  * or user. <em>kind</em> indicates the kind of entity to find: one
@@ -3106,7 +3479,6 @@ proc_setsid(void)
3106
3479
  static VALUE
3107
3480
  proc_getpriority(VALUE obj, VALUE which, VALUE who)
3108
3481
  {
3109
- #ifdef HAVE_GETPRIORITY
3110
3482
  int prio, iwhich, iwho;
3111
3483
 
3112
3484
  rb_secure(2);
@@ -3117,15 +3489,16 @@ proc_getpriority(VALUE obj, VALUE which, VALUE who)
3117
3489
  prio = getpriority(iwhich, iwho);
3118
3490
  if (errno) rb_sys_fail(0);
3119
3491
  return INT2FIX(prio);
3492
+ }
3120
3493
  #else
3121
- rb_notimplement();
3494
+ #define proc_getpriority rb_f_notimplement
3122
3495
  #endif
3123
- }
3124
3496
 
3125
3497
 
3498
+ #ifdef HAVE_GETPRIORITY
3126
3499
  /*
3127
3500
  * call-seq:
3128
- * Process.setpriority(kind, integer, priority) => 0
3501
+ * Process.setpriority(kind, integer, priority) -> 0
3129
3502
  *
3130
3503
  * See <code>Process#getpriority</code>.
3131
3504
  *
@@ -3138,7 +3511,6 @@ proc_getpriority(VALUE obj, VALUE which, VALUE who)
3138
3511
  static VALUE
3139
3512
  proc_setpriority(VALUE obj, VALUE which, VALUE who, VALUE prio)
3140
3513
  {
3141
- #ifdef HAVE_GETPRIORITY
3142
3514
  int iwhich, iwho, iprio;
3143
3515
 
3144
3516
  rb_secure(2);
@@ -3149,10 +3521,10 @@ proc_setpriority(VALUE obj, VALUE which, VALUE who, VALUE prio)
3149
3521
  if (setpriority(iwhich, iwho, iprio) < 0)
3150
3522
  rb_sys_fail(0);
3151
3523
  return INT2FIX(0);
3524
+ }
3152
3525
  #else
3153
- rb_notimplement();
3526
+ #define proc_setpriority rb_f_notimplement
3154
3527
  #endif
3155
- }
3156
3528
 
3157
3529
  #if defined(RLIM2NUM)
3158
3530
  static int
@@ -3161,7 +3533,7 @@ rlimit_resource_name2int(const char *name, int casetype)
3161
3533
  size_t len = strlen(name);
3162
3534
  if (16 < len) return -1;
3163
3535
  if (casetype == 1) {
3164
- int i;
3536
+ size_t i;
3165
3537
  char *name2 = ALLOCA_N(char, len+1);
3166
3538
  for (i = 0; i < len; i++) {
3167
3539
  if (!ISLOWER(name[i]))
@@ -3318,9 +3690,10 @@ rlimit_resource_value(VALUE rval)
3318
3690
  }
3319
3691
  #endif
3320
3692
 
3693
+ #if defined(HAVE_GETRLIMIT) && defined(RLIM2NUM)
3321
3694
  /*
3322
3695
  * call-seq:
3323
- * Process.getrlimit(resource) => [cur_limit, max_limit]
3696
+ * Process.getrlimit(resource) -> [cur_limit, max_limit]
3324
3697
  *
3325
3698
  * Gets the resource limit of the process.
3326
3699
  * _cur_limit_ means current (soft) limit and
@@ -3341,7 +3714,6 @@ rlimit_resource_value(VALUE rval)
3341
3714
  static VALUE
3342
3715
  proc_getrlimit(VALUE obj, VALUE resource)
3343
3716
  {
3344
- #if defined(HAVE_GETRLIMIT) && defined(RLIM2NUM)
3345
3717
  struct rlimit rlim;
3346
3718
 
3347
3719
  rb_secure(2);
@@ -3350,15 +3722,16 @@ proc_getrlimit(VALUE obj, VALUE resource)
3350
3722
  rb_sys_fail("getrlimit");
3351
3723
  }
3352
3724
  return rb_assoc_new(RLIM2NUM(rlim.rlim_cur), RLIM2NUM(rlim.rlim_max));
3725
+ }
3353
3726
  #else
3354
- rb_notimplement();
3727
+ #define proc_getrlimit rb_f_notimplement
3355
3728
  #endif
3356
- }
3357
3729
 
3730
+ #if defined(HAVE_SETRLIMIT) && defined(NUM2RLIM)
3358
3731
  /*
3359
3732
  * call-seq:
3360
- * Process.setrlimit(resource, cur_limit, max_limit) => nil
3361
- * Process.setrlimit(resource, cur_limit) => nil
3733
+ * Process.setrlimit(resource, cur_limit, max_limit) -> nil
3734
+ * Process.setrlimit(resource, cur_limit) -> nil
3362
3735
  *
3363
3736
  * Sets the resource limit of the process.
3364
3737
  * _cur_limit_ means current (soft) limit and
@@ -3404,7 +3777,6 @@ proc_getrlimit(VALUE obj, VALUE resource)
3404
3777
  static VALUE
3405
3778
  proc_setrlimit(int argc, VALUE *argv, VALUE obj)
3406
3779
  {
3407
- #if defined(HAVE_SETRLIMIT) && defined(NUM2RLIM)
3408
3780
  VALUE resource, rlim_cur, rlim_max;
3409
3781
  struct rlimit rlim;
3410
3782
 
@@ -3421,10 +3793,10 @@ proc_setrlimit(int argc, VALUE *argv, VALUE obj)
3421
3793
  rb_sys_fail("setrlimit");
3422
3794
  }
3423
3795
  return Qnil;
3796
+ }
3424
3797
  #else
3425
- rb_notimplement();
3798
+ #define proc_setrlimit rb_f_notimplement
3426
3799
  #endif
3427
- }
3428
3800
 
3429
3801
  static int under_uid_switch = 0;
3430
3802
  static void
@@ -3458,9 +3830,10 @@ check_gid_switch(void)
3458
3830
  */
3459
3831
 
3460
3832
 
3833
+ #if defined HAVE_SETUID
3461
3834
  /*
3462
3835
  * call-seq:
3463
- * Process::Sys.setuid(integer) => nil
3836
+ * Process::Sys.setuid(integer) -> nil
3464
3837
  *
3465
3838
  * Set the user ID of the current process to _integer_. Not
3466
3839
  * available on all platforms.
@@ -3470,20 +3843,19 @@ check_gid_switch(void)
3470
3843
  static VALUE
3471
3844
  p_sys_setuid(VALUE obj, VALUE id)
3472
3845
  {
3473
- #if defined HAVE_SETUID
3474
3846
  check_uid_switch();
3475
3847
  if (setuid(NUM2UIDT(id)) != 0) rb_sys_fail(0);
3476
- #else
3477
- rb_notimplement();
3478
- #endif
3479
3848
  return Qnil;
3480
3849
  }
3850
+ #else
3851
+ #define p_sys_setuid rb_f_notimplement
3852
+ #endif
3481
3853
 
3482
3854
 
3483
-
3855
+ #if defined HAVE_SETRUID
3484
3856
  /*
3485
3857
  * call-seq:
3486
- * Process::Sys.setruid(integer) => nil
3858
+ * Process::Sys.setruid(integer) -> nil
3487
3859
  *
3488
3860
  * Set the real user ID of the calling process to _integer_.
3489
3861
  * Not available on all platforms.
@@ -3493,19 +3865,19 @@ p_sys_setuid(VALUE obj, VALUE id)
3493
3865
  static VALUE
3494
3866
  p_sys_setruid(VALUE obj, VALUE id)
3495
3867
  {
3496
- #if defined HAVE_SETRUID
3497
3868
  check_uid_switch();
3498
3869
  if (setruid(NUM2UIDT(id)) != 0) rb_sys_fail(0);
3499
- #else
3500
- rb_notimplement();
3501
- #endif
3502
3870
  return Qnil;
3503
3871
  }
3872
+ #else
3873
+ #define p_sys_setruid rb_f_notimplement
3874
+ #endif
3504
3875
 
3505
3876
 
3877
+ #if defined HAVE_SETEUID
3506
3878
  /*
3507
3879
  * call-seq:
3508
- * Process::Sys.seteuid(integer) => nil
3880
+ * Process::Sys.seteuid(integer) -> nil
3509
3881
  *
3510
3882
  * Set the effective user ID of the calling process to
3511
3883
  * _integer_. Not available on all platforms.
@@ -3515,19 +3887,19 @@ p_sys_setruid(VALUE obj, VALUE id)
3515
3887
  static VALUE
3516
3888
  p_sys_seteuid(VALUE obj, VALUE id)
3517
3889
  {
3518
- #if defined HAVE_SETEUID
3519
3890
  check_uid_switch();
3520
3891
  if (seteuid(NUM2UIDT(id)) != 0) rb_sys_fail(0);
3521
- #else
3522
- rb_notimplement();
3523
- #endif
3524
3892
  return Qnil;
3525
3893
  }
3894
+ #else
3895
+ #define p_sys_seteuid rb_f_notimplement
3896
+ #endif
3526
3897
 
3527
3898
 
3899
+ #if defined HAVE_SETREUID
3528
3900
  /*
3529
3901
  * call-seq:
3530
- * Process::Sys.setreuid(rid, eid) => nil
3902
+ * Process::Sys.setreuid(rid, eid) -> nil
3531
3903
  *
3532
3904
  * Sets the (integer) real and/or effective user IDs of the current
3533
3905
  * process to _rid_ and _eid_, respectively. A value of
@@ -3539,19 +3911,19 @@ p_sys_seteuid(VALUE obj, VALUE id)
3539
3911
  static VALUE
3540
3912
  p_sys_setreuid(VALUE obj, VALUE rid, VALUE eid)
3541
3913
  {
3542
- #if defined HAVE_SETREUID
3543
3914
  check_uid_switch();
3544
3915
  if (setreuid(NUM2UIDT(rid),NUM2UIDT(eid)) != 0) rb_sys_fail(0);
3545
- #else
3546
- rb_notimplement();
3547
- #endif
3548
3916
  return Qnil;
3549
3917
  }
3918
+ #else
3919
+ #define p_sys_setreuid rb_f_notimplement
3920
+ #endif
3550
3921
 
3551
3922
 
3923
+ #if defined HAVE_SETRESUID
3552
3924
  /*
3553
3925
  * call-seq:
3554
- * Process::Sys.setresuid(rid, eid, sid) => nil
3926
+ * Process::Sys.setresuid(rid, eid, sid) -> nil
3555
3927
  *
3556
3928
  * Sets the (integer) real, effective, and saved user IDs of the
3557
3929
  * current process to _rid_, _eid_, and _sid_ respectively. A
@@ -3563,21 +3935,20 @@ p_sys_setreuid(VALUE obj, VALUE rid, VALUE eid)
3563
3935
  static VALUE
3564
3936
  p_sys_setresuid(VALUE obj, VALUE rid, VALUE eid, VALUE sid)
3565
3937
  {
3566
- #if defined HAVE_SETRESUID
3567
3938
  check_uid_switch();
3568
3939
  if (setresuid(NUM2UIDT(rid),NUM2UIDT(eid),NUM2UIDT(sid)) != 0) rb_sys_fail(0);
3569
- #else
3570
- rb_notimplement();
3571
- #endif
3572
3940
  return Qnil;
3573
3941
  }
3942
+ #else
3943
+ #define p_sys_setresuid rb_f_notimplement
3944
+ #endif
3574
3945
 
3575
3946
 
3576
3947
  /*
3577
3948
  * call-seq:
3578
- * Process.uid => fixnum
3579
- * Process::UID.rid => fixnum
3580
- * Process::Sys.getuid => fixnum
3949
+ * Process.uid -> fixnum
3950
+ * Process::UID.rid -> fixnum
3951
+ * Process::Sys.getuid -> fixnum
3581
3952
  *
3582
3953
  * Returns the (real) user ID of this process.
3583
3954
  *
@@ -3592,9 +3963,10 @@ proc_getuid(VALUE obj)
3592
3963
  }
3593
3964
 
3594
3965
 
3966
+ #if defined(HAVE_SETRESUID) || defined(HAVE_SETREUID) || defined(HAVE_SETRUID) || defined(HAVE_SETUID)
3595
3967
  /*
3596
3968
  * call-seq:
3597
- * Process.uid= integer => numeric
3969
+ * Process.uid= integer -> numeric
3598
3970
  *
3599
3971
  * Sets the (integer) user ID for this process. Not available on all
3600
3972
  * platforms.
@@ -3608,7 +3980,7 @@ proc_setuid(VALUE obj, VALUE id)
3608
3980
  check_uid_switch();
3609
3981
 
3610
3982
  uid = NUM2UIDT(id);
3611
- #if defined(HAVE_SETRESUID) && !defined(__CHECKER__)
3983
+ #if defined(HAVE_SETRESUID)
3612
3984
  if (setresuid(uid, -1, -1) < 0) rb_sys_fail(0);
3613
3985
  #elif defined HAVE_SETREUID
3614
3986
  if (setreuid(uid, -1) < 0) rb_sys_fail(0);
@@ -3623,11 +3995,12 @@ proc_setuid(VALUE obj, VALUE id)
3623
3995
  rb_notimplement();
3624
3996
  }
3625
3997
  }
3626
- #else
3627
- rb_notimplement();
3628
3998
  #endif
3629
3999
  return id;
3630
4000
  }
4001
+ #else
4002
+ #define proc_setuid rb_f_notimplement
4003
+ #endif
3631
4004
 
3632
4005
 
3633
4006
  /********************************************************************
@@ -3659,7 +4032,7 @@ setreuid(rb_uid_t ruid, rb_uid_t euid)
3659
4032
 
3660
4033
  /*
3661
4034
  * call-seq:
3662
- * Process::UID.change_privilege(integer) => fixnum
4035
+ * Process::UID.change_privilege(integer) -> fixnum
3663
4036
  *
3664
4037
  * Change the current process's real and effective user ID to that
3665
4038
  * specified by _integer_. Returns the new user ID. Not
@@ -3810,9 +4183,10 @@ p_uid_change_privilege(VALUE obj, VALUE id)
3810
4183
 
3811
4184
 
3812
4185
 
4186
+ #if defined HAVE_SETGID
3813
4187
  /*
3814
4188
  * call-seq:
3815
- * Process::Sys.setgid(integer) => nil
4189
+ * Process::Sys.setgid(integer) -> nil
3816
4190
  *
3817
4191
  * Set the group ID of the current process to _integer_. Not
3818
4192
  * available on all platforms.
@@ -3822,19 +4196,19 @@ p_uid_change_privilege(VALUE obj, VALUE id)
3822
4196
  static VALUE
3823
4197
  p_sys_setgid(VALUE obj, VALUE id)
3824
4198
  {
3825
- #if defined HAVE_SETGID
3826
4199
  check_gid_switch();
3827
4200
  if (setgid(NUM2GIDT(id)) != 0) rb_sys_fail(0);
3828
- #else
3829
- rb_notimplement();
3830
- #endif
3831
4201
  return Qnil;
3832
4202
  }
4203
+ #else
4204
+ #define p_sys_setgid rb_f_notimplement
4205
+ #endif
3833
4206
 
3834
4207
 
4208
+ #if defined HAVE_SETRGID
3835
4209
  /*
3836
4210
  * call-seq:
3837
- * Process::Sys.setrgid(integer) => nil
4211
+ * Process::Sys.setrgid(integer) -> nil
3838
4212
  *
3839
4213
  * Set the real group ID of the calling process to _integer_.
3840
4214
  * Not available on all platforms.
@@ -3844,20 +4218,19 @@ p_sys_setgid(VALUE obj, VALUE id)
3844
4218
  static VALUE
3845
4219
  p_sys_setrgid(VALUE obj, VALUE id)
3846
4220
  {
3847
- #if defined HAVE_SETRGID
3848
4221
  check_gid_switch();
3849
4222
  if (setrgid(NUM2GIDT(id)) != 0) rb_sys_fail(0);
3850
- #else
3851
- rb_notimplement();
3852
- #endif
3853
4223
  return Qnil;
3854
4224
  }
4225
+ #else
4226
+ #define p_sys_setrgid rb_f_notimplement
4227
+ #endif
3855
4228
 
3856
4229
 
3857
-
4230
+ #if defined HAVE_SETEGID
3858
4231
  /*
3859
4232
  * call-seq:
3860
- * Process::Sys.setegid(integer) => nil
4233
+ * Process::Sys.setegid(integer) -> nil
3861
4234
  *
3862
4235
  * Set the effective group ID of the calling process to
3863
4236
  * _integer_. Not available on all platforms.
@@ -3867,19 +4240,19 @@ p_sys_setrgid(VALUE obj, VALUE id)
3867
4240
  static VALUE
3868
4241
  p_sys_setegid(VALUE obj, VALUE id)
3869
4242
  {
3870
- #if defined HAVE_SETEGID
3871
4243
  check_gid_switch();
3872
4244
  if (setegid(NUM2GIDT(id)) != 0) rb_sys_fail(0);
3873
- #else
3874
- rb_notimplement();
3875
- #endif
3876
4245
  return Qnil;
3877
4246
  }
4247
+ #else
4248
+ #define p_sys_setegid rb_f_notimplement
4249
+ #endif
3878
4250
 
3879
4251
 
4252
+ #if defined HAVE_SETREGID
3880
4253
  /*
3881
4254
  * call-seq:
3882
- * Process::Sys.setregid(rid, eid) => nil
4255
+ * Process::Sys.setregid(rid, eid) -> nil
3883
4256
  *
3884
4257
  * Sets the (integer) real and/or effective group IDs of the current
3885
4258
  * process to <em>rid</em> and <em>eid</em>, respectively. A value of
@@ -3891,18 +4264,18 @@ p_sys_setegid(VALUE obj, VALUE id)
3891
4264
  static VALUE
3892
4265
  p_sys_setregid(VALUE obj, VALUE rid, VALUE eid)
3893
4266
  {
3894
- #if defined HAVE_SETREGID
3895
4267
  check_gid_switch();
3896
4268
  if (setregid(NUM2GIDT(rid),NUM2GIDT(eid)) != 0) rb_sys_fail(0);
3897
- #else
3898
- rb_notimplement();
3899
- #endif
3900
4269
  return Qnil;
3901
4270
  }
4271
+ #else
4272
+ #define p_sys_setregid rb_f_notimplement
4273
+ #endif
3902
4274
 
4275
+ #if defined HAVE_SETRESGID
3903
4276
  /*
3904
4277
  * call-seq:
3905
- * Process::Sys.setresgid(rid, eid, sid) => nil
4278
+ * Process::Sys.setresgid(rid, eid, sid) -> nil
3906
4279
  *
3907
4280
  * Sets the (integer) real, effective, and saved user IDs of the
3908
4281
  * current process to <em>rid</em>, <em>eid</em>, and <em>sid</em>
@@ -3914,19 +4287,19 @@ p_sys_setregid(VALUE obj, VALUE rid, VALUE eid)
3914
4287
  static VALUE
3915
4288
  p_sys_setresgid(VALUE obj, VALUE rid, VALUE eid, VALUE sid)
3916
4289
  {
3917
- #if defined HAVE_SETRESGID
3918
4290
  check_gid_switch();
3919
4291
  if (setresgid(NUM2GIDT(rid),NUM2GIDT(eid),NUM2GIDT(sid)) != 0) rb_sys_fail(0);
3920
- #else
3921
- rb_notimplement();
3922
- #endif
3923
4292
  return Qnil;
3924
4293
  }
4294
+ #else
4295
+ #define p_sys_setresgid rb_f_notimplement
4296
+ #endif
3925
4297
 
3926
4298
 
4299
+ #if defined HAVE_ISSETUGID
3927
4300
  /*
3928
4301
  * call-seq:
3929
- * Process::Sys.issetugid => true or false
4302
+ * Process::Sys.issetugid -> true or false
3930
4303
  *
3931
4304
  * Returns +true+ if the process was created as a result
3932
4305
  * of an execve(2) system call which had either of the setuid or
@@ -3939,25 +4312,23 @@ p_sys_setresgid(VALUE obj, VALUE rid, VALUE eid, VALUE sid)
3939
4312
  static VALUE
3940
4313
  p_sys_issetugid(VALUE obj)
3941
4314
  {
3942
- #if defined HAVE_ISSETUGID
3943
4315
  rb_secure(2);
3944
4316
  if (issetugid()) {
3945
4317
  return Qtrue;
3946
4318
  } else {
3947
4319
  return Qfalse;
3948
4320
  }
4321
+ }
3949
4322
  #else
3950
- rb_notimplement();
3951
- return Qnil; /* not reached */
4323
+ #define p_sys_issetugid rb_f_notimplement
3952
4324
  #endif
3953
- }
3954
4325
 
3955
4326
 
3956
4327
  /*
3957
4328
  * call-seq:
3958
- * Process.gid => fixnum
3959
- * Process::GID.rid => fixnum
3960
- * Process::Sys.getgid => fixnum
4329
+ * Process.gid -> fixnum
4330
+ * Process::GID.rid -> fixnum
4331
+ * Process::Sys.getgid -> fixnum
3961
4332
  *
3962
4333
  * Returns the (real) group ID for this process.
3963
4334
  *
@@ -3972,9 +4343,10 @@ proc_getgid(VALUE obj)
3972
4343
  }
3973
4344
 
3974
4345
 
4346
+ #if defined(HAVE_SETRESGID) || defined(HAVE_SETREGID) || defined(HAVE_SETRGID) || defined(HAVE_SETGID)
3975
4347
  /*
3976
4348
  * call-seq:
3977
- * Process.gid= fixnum => fixnum
4349
+ * Process.gid= fixnum -> fixnum
3978
4350
  *
3979
4351
  * Sets the group ID for this process.
3980
4352
  */
@@ -3987,7 +4359,7 @@ proc_setgid(VALUE obj, VALUE id)
3987
4359
  check_gid_switch();
3988
4360
 
3989
4361
  gid = NUM2GIDT(id);
3990
- #if defined(HAVE_SETRESGID) && !defined(__CHECKER__)
4362
+ #if defined(HAVE_SETRESGID)
3991
4363
  if (setresgid(gid, -1, -1) < 0) rb_sys_fail(0);
3992
4364
  #elif defined HAVE_SETREGID
3993
4365
  if (setregid(gid, -1) < 0) rb_sys_fail(0);
@@ -4002,19 +4374,21 @@ proc_setgid(VALUE obj, VALUE id)
4002
4374
  rb_notimplement();
4003
4375
  }
4004
4376
  }
4005
- #else
4006
- rb_notimplement();
4007
4377
  #endif
4008
4378
  return GIDT2NUM(gid);
4009
4379
  }
4380
+ #else
4381
+ #define proc_setgid rb_f_notimplement
4382
+ #endif
4010
4383
 
4011
4384
 
4012
- static size_t maxgroups = 32;
4385
+ static int maxgroups = 32;
4013
4386
 
4014
4387
 
4388
+ #ifdef HAVE_GETGROUPS
4015
4389
  /*
4016
4390
  * call-seq:
4017
- * Process.groups => array
4391
+ * Process.groups -> array
4018
4392
  *
4019
4393
  * Get an <code>Array</code> of the gids of groups in the
4020
4394
  * supplemental group access list for this process.
@@ -4026,11 +4400,9 @@ static size_t maxgroups = 32;
4026
4400
  static VALUE
4027
4401
  proc_getgroups(VALUE obj)
4028
4402
  {
4029
- #ifdef HAVE_GETGROUPS
4030
4403
  VALUE ary;
4031
- size_t ngroups;
4404
+ int i, ngroups;
4032
4405
  rb_gid_t *groups;
4033
- int i;
4034
4406
 
4035
4407
  groups = ALLOCA_N(rb_gid_t, maxgroups);
4036
4408
 
@@ -4043,16 +4415,16 @@ proc_getgroups(VALUE obj)
4043
4415
  rb_ary_push(ary, GIDT2NUM(groups[i]));
4044
4416
 
4045
4417
  return ary;
4418
+ }
4046
4419
  #else
4047
- rb_notimplement();
4048
- return Qnil;
4420
+ #define proc_getgroups rb_f_notimplement
4049
4421
  #endif
4050
- }
4051
4422
 
4052
4423
 
4424
+ #ifdef HAVE_SETGROUPS
4053
4425
  /*
4054
4426
  * call-seq:
4055
- * Process.groups= array => array
4427
+ * Process.groups= array -> array
4056
4428
  *
4057
4429
  * Set the supplemental group access list to the given
4058
4430
  * <code>Array</code> of group IDs.
@@ -4066,21 +4438,19 @@ proc_getgroups(VALUE obj)
4066
4438
  static VALUE
4067
4439
  proc_setgroups(VALUE obj, VALUE ary)
4068
4440
  {
4069
- #ifdef HAVE_SETGROUPS
4070
- size_t ngroups;
4441
+ size_t ngroups, i;
4071
4442
  rb_gid_t *groups;
4072
- int i;
4073
4443
  struct group *gr;
4074
4444
 
4075
4445
  Check_Type(ary, T_ARRAY);
4076
4446
 
4077
4447
  ngroups = RARRAY_LEN(ary);
4078
- if (ngroups > maxgroups)
4079
- rb_raise(rb_eArgError, "too many groups, %lu max", (unsigned long)maxgroups);
4448
+ if (ngroups > (size_t)maxgroups)
4449
+ rb_raise(rb_eArgError, "too many groups, %u max", maxgroups);
4080
4450
 
4081
4451
  groups = ALLOCA_N(rb_gid_t, ngroups);
4082
4452
 
4083
- for (i = 0; i < ngroups && i < RARRAY_LEN(ary); i++) {
4453
+ for (i = 0; i < ngroups && i < (size_t)RARRAY_LEN(ary); i++) {
4084
4454
  VALUE g = RARRAY_PTR(ary)[i];
4085
4455
 
4086
4456
  if (FIXNUM_P(g)) {
@@ -4094,29 +4464,30 @@ proc_setgroups(VALUE obj, VALUE ary)
4094
4464
  }
4095
4465
  else {
4096
4466
  gr = getgrnam(RSTRING_PTR(tmp));
4097
- if (gr == NULL)
4467
+ if (gr == NULL) {
4468
+ RB_GC_GUARD(tmp);
4098
4469
  rb_raise(rb_eArgError,
4099
4470
  "can't find group for %s", RSTRING_PTR(tmp));
4471
+ }
4100
4472
  groups[i] = gr->gr_gid;
4101
4473
  }
4102
4474
  }
4103
4475
  }
4104
4476
 
4105
- i = setgroups(ngroups, groups);
4106
- if (i == -1)
4477
+ if (setgroups((int)ngroups, groups) == -1) /* ngroups <= maxgroups */
4107
4478
  rb_sys_fail(0);
4108
4479
 
4109
4480
  return proc_getgroups(obj);
4481
+ }
4110
4482
  #else
4111
- rb_notimplement();
4112
- return Qnil;
4483
+ #define proc_setgroups rb_f_notimplement
4113
4484
  #endif
4114
- }
4115
4485
 
4116
4486
 
4487
+ #ifdef HAVE_INITGROUPS
4117
4488
  /*
4118
4489
  * call-seq:
4119
- * Process.initgroups(username, gid) => array
4490
+ * Process.initgroups(username, gid) -> array
4120
4491
  *
4121
4492
  * Initializes the supplemental group access list by reading the
4122
4493
  * system group database and using all groups of which the given user
@@ -4134,21 +4505,19 @@ proc_setgroups(VALUE obj, VALUE ary)
4134
4505
  static VALUE
4135
4506
  proc_initgroups(VALUE obj, VALUE uname, VALUE base_grp)
4136
4507
  {
4137
- #ifdef HAVE_INITGROUPS
4138
4508
  if (initgroups(StringValuePtr(uname), NUM2GIDT(base_grp)) != 0) {
4139
4509
  rb_sys_fail(0);
4140
4510
  }
4141
4511
  return proc_getgroups(obj);
4512
+ }
4142
4513
  #else
4143
- rb_notimplement();
4144
- return Qnil;
4514
+ #define proc_initgroups rb_f_notimplement
4145
4515
  #endif
4146
- }
4147
4516
 
4148
4517
 
4149
4518
  /*
4150
4519
  * call-seq:
4151
- * Process.maxgroups => fixnum
4520
+ * Process.maxgroups -> fixnum
4152
4521
  *
4153
4522
  * Returns the maximum number of gids allowed in the supplemental
4154
4523
  * group access list.
@@ -4165,7 +4534,7 @@ proc_getmaxgroups(VALUE obj)
4165
4534
 
4166
4535
  /*
4167
4536
  * call-seq:
4168
- * Process.maxgroups= fixnum => fixnum
4537
+ * Process.maxgroups= fixnum -> fixnum
4169
4538
  *
4170
4539
  * Sets the maximum number of gids allowed in the supplemental group
4171
4540
  * access list.
@@ -4174,7 +4543,7 @@ proc_getmaxgroups(VALUE obj)
4174
4543
  static VALUE
4175
4544
  proc_setmaxgroups(VALUE obj, VALUE val)
4176
4545
  {
4177
- size_t ngroups = FIX2INT(val);
4546
+ int ngroups = FIX2UINT(val);
4178
4547
 
4179
4548
  if (ngroups > 4096)
4180
4549
  ngroups = 4096;
@@ -4184,10 +4553,11 @@ proc_setmaxgroups(VALUE obj, VALUE val)
4184
4553
  return INT2FIX(maxgroups);
4185
4554
  }
4186
4555
 
4556
+ #if defined(HAVE_DAEMON) || (defined(HAVE_FORK) && defined(HAVE_SETSID))
4187
4557
  /*
4188
4558
  * call-seq:
4189
- * Process.daemon() => fixnum
4190
- * Process.daemon(nochdir=nil,noclose=nil) => fixnum
4559
+ * Process.daemon() -> 0
4560
+ * Process.daemon(nochdir=nil,noclose=nil) -> 0
4191
4561
  *
4192
4562
  * Detach the process from controlling terminal and run in
4193
4563
  * the background as system daemon. Unless the argument
@@ -4195,15 +4565,14 @@ proc_setmaxgroups(VALUE obj, VALUE val)
4195
4565
  * working directory to the root ("/"). Unless the argument
4196
4566
  * noclose is true, daemon() will redirect standard input,
4197
4567
  * standard output and standard error to /dev/null.
4568
+ * Return zero on success, or raise one of Errno::*.
4198
4569
  */
4199
4570
 
4200
4571
  static VALUE
4201
4572
  proc_daemon(int argc, VALUE *argv)
4202
4573
  {
4203
4574
  VALUE nochdir, noclose;
4204
- #if defined(HAVE_DAEMON) || defined(HAVE_FORK)
4205
4575
  int n;
4206
- #endif
4207
4576
 
4208
4577
  rb_secure(2);
4209
4578
  rb_scan_args(argc, argv, "02", &nochdir, &noclose);
@@ -4218,11 +4587,11 @@ proc_daemon(int argc, VALUE *argv)
4218
4587
  #elif defined(HAVE_FORK)
4219
4588
  switch (rb_fork(0, 0, 0, Qnil)) {
4220
4589
  case -1:
4221
- return INT2FIX(-1);
4590
+ rb_sys_fail("daemon");
4222
4591
  case 0:
4223
4592
  break;
4224
4593
  default:
4225
- _exit(0);
4594
+ _exit(EXIT_SUCCESS);
4226
4595
  }
4227
4596
 
4228
4597
  proc_setsid();
@@ -4230,11 +4599,11 @@ proc_daemon(int argc, VALUE *argv)
4230
4599
  /* must not be process-leader */
4231
4600
  switch (rb_fork(0, 0, 0, Qnil)) {
4232
4601
  case -1:
4233
- return INT2FIX(-1);
4602
+ rb_sys_fail("daemon");
4234
4603
  case 0:
4235
4604
  break;
4236
4605
  default:
4237
- _exit(0);
4606
+ _exit(EXIT_SUCCESS);
4238
4607
  }
4239
4608
 
4240
4609
  if (!RTEST(nochdir))
@@ -4248,10 +4617,11 @@ proc_daemon(int argc, VALUE *argv)
4248
4617
  (void)close (n);
4249
4618
  }
4250
4619
  return INT2FIX(0);
4251
- #else
4252
- rb_notimplement();
4253
4620
  #endif
4254
4621
  }
4622
+ #else
4623
+ #define proc_daemon rb_f_notimplement
4624
+ #endif
4255
4625
 
4256
4626
  /********************************************************************
4257
4627
  *
@@ -4263,7 +4633,7 @@ proc_daemon(int argc, VALUE *argv)
4263
4633
  *
4264
4634
  */
4265
4635
 
4266
- static int SAVED_GROUP_ID = -1;
4636
+ static rb_gid_t SAVED_GROUP_ID = -1;
4267
4637
 
4268
4638
  #ifdef BROKEN_SETREGID
4269
4639
  int
@@ -4282,7 +4652,7 @@ setregid(rb_gid_t rgid, rb_gid_t egid)
4282
4652
 
4283
4653
  /*
4284
4654
  * call-seq:
4285
- * Process::GID.change_privilege(integer) => fixnum
4655
+ * Process::GID.change_privilege(integer) -> fixnum
4286
4656
  *
4287
4657
  * Change the current process's real and effective group ID to that
4288
4658
  * specified by _integer_. Returns the new group ID. Not
@@ -4435,9 +4805,9 @@ p_gid_change_privilege(VALUE obj, VALUE id)
4435
4805
 
4436
4806
  /*
4437
4807
  * call-seq:
4438
- * Process.euid => fixnum
4439
- * Process::UID.eid => fixnum
4440
- * Process::Sys.geteuid => fixnum
4808
+ * Process.euid -> fixnum
4809
+ * Process::UID.eid -> fixnum
4810
+ * Process::Sys.geteuid -> fixnum
4441
4811
  *
4442
4812
  * Returns the effective user ID for this process.
4443
4813
  *
@@ -4451,7 +4821,7 @@ proc_geteuid(VALUE obj)
4451
4821
  return UIDT2NUM(euid);
4452
4822
  }
4453
4823
 
4454
-
4824
+ #if defined(HAVE_SETRESUID) || defined(HAVE_SETREUID) || defined(HAVE_SETEUID) || defined(HAVE_SETUID) || defined(_POSIX_SAVED_IDS)
4455
4825
  /*
4456
4826
  * call-seq:
4457
4827
  * Process.euid= integer
@@ -4468,7 +4838,7 @@ proc_seteuid(VALUE obj, VALUE euid)
4468
4838
  check_uid_switch();
4469
4839
 
4470
4840
  uid = NUM2UIDT(euid);
4471
- #if defined(HAVE_SETRESUID) && !defined(__CHECKER__)
4841
+ #if defined(HAVE_SETRESUID)
4472
4842
  if (setresuid(-1, uid, -1) < 0) rb_sys_fail(0);
4473
4843
  #elif defined HAVE_SETREUID
4474
4844
  if (setreuid(-1, uid) < 0) rb_sys_fail(0);
@@ -4486,6 +4856,13 @@ proc_seteuid(VALUE obj, VALUE euid)
4486
4856
  #endif
4487
4857
  return euid;
4488
4858
  }
4859
+ #endif
4860
+
4861
+ #if defined(HAVE_SETRESUID) || defined(HAVE_SETREUID) || defined(HAVE_SETEUID) || defined(HAVE_SETUID)
4862
+ #define proc_seteuid_m proc_seteuid
4863
+ #else
4864
+ #define proc_seteuid_m rb_f_notimplement
4865
+ #endif
4489
4866
 
4490
4867
  static rb_uid_t
4491
4868
  rb_seteuid_core(rb_uid_t euid)
@@ -4496,7 +4873,7 @@ rb_seteuid_core(rb_uid_t euid)
4496
4873
 
4497
4874
  uid = getuid();
4498
4875
 
4499
- #if defined(HAVE_SETRESUID) && !defined(__CHECKER__)
4876
+ #if defined(HAVE_SETRESUID)
4500
4877
  if (uid != euid) {
4501
4878
  if (setresuid(-1,euid,euid) < 0) rb_sys_fail(0);
4502
4879
  SAVED_USER_ID = euid;
@@ -4524,8 +4901,8 @@ rb_seteuid_core(rb_uid_t euid)
4524
4901
 
4525
4902
  /*
4526
4903
  * call-seq:
4527
- * Process::UID.grant_privilege(integer) => fixnum
4528
- * Process::UID.eid= integer => fixnum
4904
+ * Process::UID.grant_privilege(integer) -> fixnum
4905
+ * Process::UID.eid= integer -> fixnum
4529
4906
  *
4530
4907
  * Set the effective user ID, and if possible, the saved user ID of
4531
4908
  * the process to the given _integer_. Returns the new
@@ -4546,9 +4923,9 @@ p_uid_grant_privilege(VALUE obj, VALUE id)
4546
4923
 
4547
4924
  /*
4548
4925
  * call-seq:
4549
- * Process.egid => fixnum
4550
- * Process::GID.eid => fixnum
4551
- * Process::Sys.geteid => fixnum
4926
+ * Process.egid -> fixnum
4927
+ * Process::GID.eid -> fixnum
4928
+ * Process::Sys.geteid -> fixnum
4552
4929
  *
4553
4930
  * Returns the effective group ID for this process. Not available on
4554
4931
  * all platforms.
@@ -4564,10 +4941,10 @@ proc_getegid(VALUE obj)
4564
4941
  return GIDT2NUM(egid);
4565
4942
  }
4566
4943
 
4567
-
4944
+ #if defined(HAVE_SETRESGID) || defined(HAVE_SETREGID) || defined(HAVE_SETEGID) || defined(HAVE_SETGID) || defined(_POSIX_SAVED_IDS)
4568
4945
  /*
4569
4946
  * call-seq:
4570
- * Process.egid = fixnum => fixnum
4947
+ * Process.egid = fixnum -> fixnum
4571
4948
  *
4572
4949
  * Sets the effective group ID for this process. Not available on all
4573
4950
  * platforms.
@@ -4581,7 +4958,7 @@ proc_setegid(VALUE obj, VALUE egid)
4581
4958
  check_gid_switch();
4582
4959
 
4583
4960
  gid = NUM2GIDT(egid);
4584
- #if defined(HAVE_SETRESGID) && !defined(__CHECKER__)
4961
+ #if defined(HAVE_SETRESGID)
4585
4962
  if (setresgid(-1, gid, -1) < 0) rb_sys_fail(0);
4586
4963
  #elif defined HAVE_SETREGID
4587
4964
  if (setregid(-1, gid) < 0) rb_sys_fail(0);
@@ -4599,6 +4976,13 @@ proc_setegid(VALUE obj, VALUE egid)
4599
4976
  #endif
4600
4977
  return egid;
4601
4978
  }
4979
+ #endif
4980
+
4981
+ #if defined(HAVE_SETRESGID) || defined(HAVE_SETREGID) || defined(HAVE_SETEGID) || defined(HAVE_SETGID)
4982
+ #define proc_setegid_m proc_setegid
4983
+ #else
4984
+ #define proc_setegid_m rb_f_notimplement
4985
+ #endif
4602
4986
 
4603
4987
  static rb_gid_t
4604
4988
  rb_setegid_core(rb_gid_t egid)
@@ -4609,7 +4993,7 @@ rb_setegid_core(rb_gid_t egid)
4609
4993
 
4610
4994
  gid = getgid();
4611
4995
 
4612
- #if defined(HAVE_SETRESGID) && !defined(__CHECKER__)
4996
+ #if defined(HAVE_SETRESGID)
4613
4997
  if (gid != egid) {
4614
4998
  if (setresgid(-1,egid,egid) < 0) rb_sys_fail(0);
4615
4999
  SAVED_GROUP_ID = egid;
@@ -4637,8 +5021,8 @@ rb_setegid_core(rb_gid_t egid)
4637
5021
 
4638
5022
  /*
4639
5023
  * call-seq:
4640
- * Process::GID.grant_privilege(integer) => fixnum
4641
- * Process::GID.eid = integer => fixnum
5024
+ * Process::GID.grant_privilege(integer) -> fixnum
5025
+ * Process::GID.eid = integer -> fixnum
4642
5026
  *
4643
5027
  * Set the effective group ID, and if possible, the saved group ID of
4644
5028
  * the process to the given _integer_. Returns the new
@@ -4659,7 +5043,7 @@ p_gid_grant_privilege(VALUE obj, VALUE id)
4659
5043
 
4660
5044
  /*
4661
5045
  * call-seq:
4662
- * Process::UID.re_exchangeable? => true or false
5046
+ * Process::UID.re_exchangeable? -> true or false
4663
5047
  *
4664
5048
  * Returns +true+ if the real and effective user IDs of a
4665
5049
  * process may be exchanged on the current platform.
@@ -4669,7 +5053,7 @@ p_gid_grant_privilege(VALUE obj, VALUE id)
4669
5053
  static VALUE
4670
5054
  p_uid_exchangeable(void)
4671
5055
  {
4672
- #if defined(HAVE_SETRESUID) && !defined(__CHECKER__)
5056
+ #if defined(HAVE_SETRESUID)
4673
5057
  return Qtrue;
4674
5058
  #elif defined(HAVE_SETREUID) && !defined(OBSOLETE_SETREUID)
4675
5059
  return Qtrue;
@@ -4681,7 +5065,7 @@ p_uid_exchangeable(void)
4681
5065
 
4682
5066
  /*
4683
5067
  * call-seq:
4684
- * Process::UID.re_exchange => fixnum
5068
+ * Process::UID.re_exchange -> fixnum
4685
5069
  *
4686
5070
  * Exchange real and effective user IDs and return the new effective
4687
5071
  * user ID. Not available on all platforms.
@@ -4701,7 +5085,7 @@ p_uid_exchange(VALUE obj)
4701
5085
  uid = getuid();
4702
5086
  euid = geteuid();
4703
5087
 
4704
- #if defined(HAVE_SETRESUID) && !defined(__CHECKER__)
5088
+ #if defined(HAVE_SETRESUID)
4705
5089
  if (setresuid(euid, uid, uid) < 0) rb_sys_fail(0);
4706
5090
  SAVED_USER_ID = uid;
4707
5091
  #elif defined(HAVE_SETREUID) && !defined(OBSOLETE_SETREUID)
@@ -4716,7 +5100,7 @@ p_uid_exchange(VALUE obj)
4716
5100
 
4717
5101
  /*
4718
5102
  * call-seq:
4719
- * Process::GID.re_exchangeable? => true or false
5103
+ * Process::GID.re_exchangeable? -> true or false
4720
5104
  *
4721
5105
  * Returns +true+ if the real and effective group IDs of a
4722
5106
  * process may be exchanged on the current platform.
@@ -4726,7 +5110,7 @@ p_uid_exchange(VALUE obj)
4726
5110
  static VALUE
4727
5111
  p_gid_exchangeable(void)
4728
5112
  {
4729
- #if defined(HAVE_SETRESGID) && !defined(__CHECKER__)
5113
+ #if defined(HAVE_SETRESGID)
4730
5114
  return Qtrue;
4731
5115
  #elif defined(HAVE_SETREGID) && !defined(OBSOLETE_SETREGID)
4732
5116
  return Qtrue;
@@ -4738,7 +5122,7 @@ p_gid_exchangeable(void)
4738
5122
 
4739
5123
  /*
4740
5124
  * call-seq:
4741
- * Process::GID.re_exchange => fixnum
5125
+ * Process::GID.re_exchange -> fixnum
4742
5126
  *
4743
5127
  * Exchange real and effective group IDs and return the new effective
4744
5128
  * group ID. Not available on all platforms.
@@ -4758,7 +5142,7 @@ p_gid_exchange(VALUE obj)
4758
5142
  gid = getgid();
4759
5143
  egid = getegid();
4760
5144
 
4761
- #if defined(HAVE_SETRESGID) && !defined(__CHECKER__)
5145
+ #if defined(HAVE_SETRESGID)
4762
5146
  if (setresgid(egid, gid, gid) < 0) rb_sys_fail(0);
4763
5147
  SAVED_GROUP_ID = gid;
4764
5148
  #elif defined(HAVE_SETREGID) && !defined(OBSOLETE_SETREGID)
@@ -4774,7 +5158,7 @@ p_gid_exchange(VALUE obj)
4774
5158
 
4775
5159
  /*
4776
5160
  * call-seq:
4777
- * Process::UID.sid_available? => true or false
5161
+ * Process::UID.sid_available? -> true or false
4778
5162
  *
4779
5163
  * Returns +true+ if the current platform has saved user
4780
5164
  * ID functionality.
@@ -4804,8 +5188,8 @@ p_uid_sw_ensure(rb_uid_t id)
4804
5188
 
4805
5189
  /*
4806
5190
  * call-seq:
4807
- * Process::UID.switch => fixnum
4808
- * Process::UID.switch {|| block} => object
5191
+ * Process::UID.switch -> fixnum
5192
+ * Process::UID.switch {|| block} -> object
4809
5193
  *
4810
5194
  * Switch the effective and real user IDs of the current process. If
4811
5195
  * a <em>block</em> is given, the user IDs will be switched back
@@ -4883,7 +5267,7 @@ p_uid_switch(VALUE obj)
4883
5267
 
4884
5268
  /*
4885
5269
  * call-seq:
4886
- * Process::GID.sid_available? => true or false
5270
+ * Process::GID.sid_available? -> true or false
4887
5271
  *
4888
5272
  * Returns +true+ if the current platform has saved group
4889
5273
  * ID functionality.
@@ -4912,8 +5296,8 @@ p_gid_sw_ensure(rb_gid_t id)
4912
5296
 
4913
5297
  /*
4914
5298
  * call-seq:
4915
- * Process::GID.switch => fixnum
4916
- * Process::GID.switch {|| block} => object
5299
+ * Process::GID.switch -> fixnum
5300
+ * Process::GID.switch {|| block} -> object
4917
5301
  *
4918
5302
  * Switch the effective and real group IDs of the current process. If
4919
5303
  * a <em>block</em> is given, the group IDs will be switched back
@@ -4926,7 +5310,7 @@ p_gid_sw_ensure(rb_gid_t id)
4926
5310
  static VALUE
4927
5311
  p_gid_switch(VALUE obj)
4928
5312
  {
4929
- int gid, egid;
5313
+ rb_gid_t gid, egid;
4930
5314
 
4931
5315
  check_gid_switch();
4932
5316
 
@@ -4941,7 +5325,8 @@ p_gid_switch(VALUE obj)
4941
5325
  } else {
4942
5326
  return GIDT2NUM(egid);
4943
5327
  }
4944
- } else if (egid != SAVED_GROUP_ID) {
5328
+ }
5329
+ else if (egid != SAVED_GROUP_ID) {
4945
5330
  proc_setegid(obj, GIDT2NUM(SAVED_GROUP_ID));
4946
5331
  if (rb_block_given_p()) {
4947
5332
  under_gid_switch = 1;
@@ -4949,7 +5334,8 @@ p_gid_switch(VALUE obj)
4949
5334
  } else {
4950
5335
  return GIDT2NUM(gid);
4951
5336
  }
4952
- } else {
5337
+ }
5338
+ else {
4953
5339
  errno = EPERM;
4954
5340
  rb_sys_fail(0);
4955
5341
  }
@@ -4987,9 +5373,10 @@ p_gid_switch(VALUE obj)
4987
5373
  #endif
4988
5374
 
4989
5375
 
5376
+ #if defined(HAVE_TIMES)
4990
5377
  /*
4991
5378
  * call-seq:
4992
- * Process.times => aStructTms
5379
+ * Process.times -> aStructTms
4993
5380
  *
4994
5381
  * Returns a <code>Tms</code> structure (see <code>Struct::Tms</code>
4995
5382
  * on page 388) that contains user and system CPU times for this
@@ -5002,7 +5389,6 @@ p_gid_switch(VALUE obj)
5002
5389
  VALUE
5003
5390
  rb_proc_times(VALUE obj)
5004
5391
  {
5005
- #if defined(HAVE_TIMES) && !defined(__CHECKER__)
5006
5392
  const double hertz =
5007
5393
  #ifdef HAVE__SC_CLK_TCK
5008
5394
  (double)sysconf(_SC_CLK_TCK);
@@ -5025,10 +5411,10 @@ rb_proc_times(VALUE obj)
5025
5411
  stime = DBL2NUM(buf.tms_stime / hertz),
5026
5412
  cutime = DBL2NUM(buf.tms_cutime / hertz),
5027
5413
  sctime = DBL2NUM(buf.tms_cstime / hertz));
5414
+ }
5028
5415
  #else
5029
- rb_notimplement();
5416
+ #define rb_proc_times rb_f_notimplement
5030
5417
  #endif
5031
- }
5032
5418
 
5033
5419
  VALUE rb_mProcess;
5034
5420
  VALUE rb_mProcUID;
@@ -5129,13 +5515,17 @@ Init_process(void)
5129
5515
  {
5130
5516
  VALUE inf = RLIM2NUM(RLIM_INFINITY);
5131
5517
  #ifdef RLIM_SAVED_MAX
5132
- VALUE v = RLIM_INFINITY == RLIM_SAVED_MAX ? inf : RLIM2NUM(RLIM_SAVED_MAX);
5133
- rb_define_const(rb_mProcess, "RLIM_SAVED_MAX", v);
5518
+ {
5519
+ VALUE v = RLIM_INFINITY == RLIM_SAVED_MAX ? inf : RLIM2NUM(RLIM_SAVED_MAX);
5520
+ rb_define_const(rb_mProcess, "RLIM_SAVED_MAX", v);
5521
+ }
5134
5522
  #endif
5135
5523
  rb_define_const(rb_mProcess, "RLIM_INFINITY", inf);
5136
5524
  #ifdef RLIM_SAVED_CUR
5137
- v = RLIM_INFINITY == RLIM_SAVED_CUR ? inf : RLIM2NUM(RLIM_SAVED_CUR);
5138
- rb_define_const(rb_mProcess, "RLIM_SAVED_CUR", v);
5525
+ {
5526
+ VALUE v = RLIM_INFINITY == RLIM_SAVED_CUR ? inf : RLIM2NUM(RLIM_SAVED_CUR);
5527
+ rb_define_const(rb_mProcess, "RLIM_SAVED_CUR", v);
5528
+ }
5139
5529
  #endif
5140
5530
  }
5141
5531
  #ifdef RLIMIT_CORE
@@ -5178,9 +5568,9 @@ Init_process(void)
5178
5568
  rb_define_module_function(rb_mProcess, "gid", proc_getgid, 0);
5179
5569
  rb_define_module_function(rb_mProcess, "gid=", proc_setgid, 1);
5180
5570
  rb_define_module_function(rb_mProcess, "euid", proc_geteuid, 0);
5181
- rb_define_module_function(rb_mProcess, "euid=", proc_seteuid, 1);
5571
+ rb_define_module_function(rb_mProcess, "euid=", proc_seteuid_m, 1);
5182
5572
  rb_define_module_function(rb_mProcess, "egid", proc_getegid, 0);
5183
- rb_define_module_function(rb_mProcess, "egid=", proc_setegid, 1);
5573
+ rb_define_module_function(rb_mProcess, "egid=", proc_setegid_m, 1);
5184
5574
  rb_define_module_function(rb_mProcess, "initgroups", proc_initgroups, 2);
5185
5575
  rb_define_module_function(rb_mProcess, "groups", proc_getgroups, 0);
5186
5576
  rb_define_module_function(rb_mProcess, "groups=", proc_setgroups, 1);