summaryrefslogtreecommitdiff
path: root/test/-ext-/box/test_load_ext.rb
blob: ea3744375ea38f40219697cb9623556d2ba18cec (plain)
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# frozen_string_literal: true
require 'test/unit'

class Test_Load_Extensions < Test::Unit::TestCase
  ENV_ENABLE_BOX = {'RUBY_BOX' => '1'}

  def test_load_extension
    pend
    assert_separately([], "#{<<~"begin;"}\n#{<<~'end;'}")
    begin;
      require '-test-/box/yay1'
      assert_equal "1.0.0", Yay.version
      assert_equal "yay", Yay.yay
    end;
  end

  def test_extension_contamination_in_global
    pend
    assert_separately([], "#{<<~"begin;"}\n#{<<~'end;'}", ignore_stderr: true)
    begin;
      require '-test-/box/yay1'
      yay1 = Yay
      assert_equal "1.0.0", Yay.version
      assert_equal "yay", Yay.yay

      require '-test-/box/yay2'
      assert_equal "2.0.0", Yay.version
      v = Yay.yay
      assert(v == "yay" || v == "yaaay") # "yay" on Linux, "yaaay" on macOS, Win32
    end;
  end

  def test_load_extension_in_box
    pend
    assert_separately([ENV_ENABLE_BOX], "#{<<~"begin;"}\n#{<<~'end;'}")
    begin;
      ns = Ruby::Box.new
      ns.require '-test-/box/yay1'
      assert_equal "1.0.0", ns::Yay.version
      assert_raise(NameError) { Yay }
    end;
  end

  def test_different_version_extensions
    pend
    assert_separately([ENV_ENABLE_BOX], "#{<<~"begin;"}\n#{<<~'end;'}")
    begin;
      ns1 = Ruby::Box.new
      ns2 = Ruby::Box.new
      ns1.require('-test-/box/yay1')
      ns2.require('-test-/box/yay2')

      assert_raise(NameError) { Yay }
      assert_not_nil ns1::Yay
      assert_not_nil ns2::Yay
      assert_equal "1.0.0", ns1::Yay::VERSION
      assert_equal "2.0.0", ns2::Yay::VERSION
      assert_equal "1.0.0", ns1::Yay.version
      assert_equal "2.0.0", ns2::Yay.version
    end;
  end

  def test_loading_extensions_from_global_to_local
    pend
    assert_separately([ENV_ENABLE_BOX], "#{<<~"begin;"}\n#{<<~'end;'}")
    begin;
      require '-test-/box/yay1'
      assert_equal "1.0.0", Yay.version
      assert_equal "yay", Yay.yay

      ns = Ruby::Box.new
      ns.require '-test-/box/yay2'
      assert_equal "2.0.0", ns::Yay.version
      assert_equal "yaaay", ns::Yay.yay

      assert_equal "yay", Yay.yay
    end;
  end

  def test_loading_extensions_from_local_to_global
    pend
    assert_separately([ENV_ENABLE_BOX], "#{<<~"begin;"}\n#{<<~'end;'}")
    begin;
      ns = Ruby::Box.new
      ns.require '-test-/box/yay1'
      assert_equal "1.0.0", ns::Yay.version
      assert_equal "yay", ns::Yay.yay


      require '-test-/box/yay2'
      assert_equal "2.0.0", Yay.version
      assert_equal "yaaay", Yay.yay

      assert_equal "yay", ns::Yay.yay
    end;
  end
end