diff options
Diffstat (limited to 'spec/ruby/language/END_spec.rb')
| -rw-r--r-- | spec/ruby/language/END_spec.rb | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/spec/ruby/language/END_spec.rb b/spec/ruby/language/END_spec.rb new file mode 100644 index 0000000000..c84f0cc9ac --- /dev/null +++ b/spec/ruby/language/END_spec.rb @@ -0,0 +1,33 @@ +require_relative '../spec_helper' +require_relative '../shared/kernel/at_exit' + +describe "The END keyword" do + it_behaves_like :kernel_at_exit, :END + + it "runs only once for multiple calls" do + ruby_exe("10.times { END { puts 'foo' }; } ").should == "foo\n" + end + + it "is affected by the toplevel assignment" do + ruby_exe("foo = 'foo'; END { puts foo }").should == "foo\n" + end + + it "warns when END is used in a method" do + ruby_exe(<<~ruby, args: "2>&1").should =~ /warning: END in method; use at_exit/ + def foo + END { } + end + ruby + end + + context "END blocks and at_exit callbacks are mixed" do + it "runs them all in reverse order of registration" do + ruby_exe(<<~ruby).should == "at_exit#2\nEND#2\nat_exit#1\nEND#1\n" + END { puts 'END#1' } + at_exit { puts 'at_exit#1' } + END { puts 'END#2' } + at_exit { puts 'at_exit#2' } + ruby + end + end +end |
