File: END_spec.rb

package info (click to toggle)
ruby3.3 3.3.8-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 153,620 kB
  • sloc: ruby: 1,244,308; ansic: 836,474; yacc: 28,074; pascal: 6,748; sh: 3,913; python: 1,719; cpp: 1,158; makefile: 742; asm: 712; javascript: 394; lisp: 97; perl: 62; awk: 36; sed: 23; xml: 4
file content (33 lines) | stat: -rw-r--r-- 925 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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