Bug #5197
closedat_exit order has changed in 1.9.3dev32413
Description
I could have sworn I filed or mailed this before, but I can't find it. Sorry if this is a dupe.
#!/usr/bin/ruby -w
happy = false
at_exit { happy = true }                                # test runner
at_exit { at_exit { abort "not happy!" unless happy } } # after test hook
multiruby produces:¶
VERSION = mri_trunk¶
CMD = ~/.multiruby/install/mri_trunk/bin/ruby -v -Ilib bug4.rb¶
ruby 1.9.3dev (2011-07-05 trunk 32413) [x86_64-darwin10.8.0]¶
not happy!¶
RESULT = 256¶
VERSION = 1.8.7-p330¶
CMD = ~/.multiruby/install/1.8.7-p330/bin/ruby -v -Ilib bug4.rb¶
ruby 1.8.7 (2010-12-23 patchlevel 330) [i686-darwin10.5.0]¶
RESULT = 0¶
VERSION = 1.9.2-p136¶
CMD = ~/.multiruby/install/1.9.2-p136/bin/ruby -v -Ilib bug4.rb¶
ruby 1.9.2p136 (2010-12-25 revision 30365) [x86_64-darwin10.5.0]¶
RESULT = 0¶
TOTAL RESULT = 1 failures out of 3¶
        
           Updated by kosaki (Motohiro KOSAKI) about 14 years ago
          Updated by kosaki (Motohiro KOSAKI) about 14 years ago
          
          
        
        
      
      Hi Ryan,
Can you please see following discussion at first?
http://redmine.ruby-lang.org/issues/4400
And then, can you please explain why you are unhappy? Now at_exit() is consistent with JRuby and MacRuby. Then, fixing your unhappiness need to change three Ruby implementation at least.
Thanks.
        
           Updated by kosaki (Motohiro KOSAKI) about 14 years ago
          Updated by kosaki (Motohiro KOSAKI) about 14 years ago
          
          
        
        
      
      - Status changed from Open to Feedback
- Assignee set to zenspider (Ryan Davis)
        
           Updated by zenspider (Ryan Davis) about 14 years ago
          Updated by zenspider (Ryan Davis) about 14 years ago
          
          
        
        
      
      - Assignee changed from zenspider (Ryan Davis) to kosaki (Motohiro KOSAKI)
That discussion makes my head hurt.
What I need is this:
- 
minitest, like test/unit before it, runs its tests via at_exit. 
- 
Users need to be able to register code to run AFTER the tests run (for extra reporting, or resource cleanup). This was usually done with: at_exit { at_exit { codes } } 
which I wrapped up in a method called #after_tests(&b).
Now that doesn't work. I need some mechanism to make this work as its been available this way for 10+ years. I don't care what mechanism I wind up using, as long as it works.
See https://github.com/seattlerb/minitest/issues/25 for more info.
        
           Updated by kosaki (Motohiro KOSAKI) about 14 years ago
          Updated by kosaki (Motohiro KOSAKI) about 14 years ago
          
          
        
        
      
      - Status changed from Feedback to Rejected
What I need is this:
minitest, like test/unit before it, runs its tests via at_exit.
Users need to be able to register code to run AFTER the tests run (for extra reporting, or > resource cleanup). This was usually done with:
at_exit { at_exit { codes } }
Yeah, It's clearly bad code.
quote from [ruby-core:35254]. Matz wrote,
OK, I choose C's behavior. Although I don't recommend to rely too
much on the atexit order. Motohiro, could you check in?
I'm stand aside matz. don't do that.
which I wrapped up in a method called #after_tests(&b).
Now that doesn't work.
Not now. It has been broken long time.
Even if I revert MRI change, It doesn't work on other ruby implementation.
So, I don't understand why we need revert the code even if it doesn't solve the problem.
I need some mechanism to make this work as its been available this way for 10+ years.
I don't care what mechanism I wind up using, as long as it works.
I pity the 10+ years broken code.
And one correction. This behavior was introduced following commit. see date.
commit a3e1b1ce7ed7e7ffac23015fc2fde56511b30681
Author: ko1 ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Date:   Sun Dec 31 15:02:22 2006 +0000
    * Merge YARV
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@11439 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Last of all.
But, as far as that a revert solve a issue, I'd like to choose a revert. Please remember it.
Thanks.