File: test_cref.rb

package info (click to toggle)
ruby-zeitwerk 2.7.3-1
  • links: PTS, VCS
  • area: main
  • in suites: forky
  • size: 732 kB
  • sloc: ruby: 6,240; makefile: 4
file content (88 lines) | stat: -rw-r--r-- 1,857 bytes parent folder | download | duplicates (2)
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
# frozen_string_literal: true

require "test_helper"

class TestCref < LoaderTest
  def klass
    self.class
  end

  def new_cref(mod = klass, cname = :Foo)
    Zeitwerk::Cref.new(mod, :Foo)
  end

  test "#cname" do
    assert_equal :Foo, new_cref.cname
  end

  test "#path for Object" do
    assert_equal "Foo", new_cref(Object).path
  end

  test "#path for another namespace" do
    assert_equal "#{self.class}::Foo", new_cref.path
  end

  test "#to_s is #path" do
    assert_equal Zeitwerk::Cref.instance_method(:to_s), Zeitwerk::Cref.instance_method(:path)
  end

  test "#autoload?" do
    on_teardown { remove_const :Foo, from: klass }

    klass.autoload(:Foo, "/foo")
    assert_equal "/foo", new_cref.autoload?
  end

  test "#autoload" do
    on_teardown { remove_const :Foo, from: klass }

    new_cref.autoload("/foo")
    assert_equal "/foo", klass.autoload?(:Foo)
  end

  test "#defined? finds a constant defined in mod" do
    on_teardown { remove_const :Foo, from: klass }

    klass.const_set(:Foo, 1)
    assert new_cref.defined?
  end

  test "#defined? ignores the ancestors" do
    cname = :TMP_DIR
    assert klass.superclass.const_defined?(cname) # precondition
    assert !new_cref(klass, cname).defined?
  end

  test "#set" do
    on_teardown { remove_const :Foo, from: klass }

    assert_equal 1, new_cref.set(1)
    assert_equal 1, klass::Foo
  end

  test "#get" do
    on_teardown { remove_const :Foo, from: klass }

    klass.const_set(:Foo, 1)
    assert_equal 1, new_cref.get
  end

  test "#get with unknown cname" do
    assert_raises(NameError) { new_cref.get }
  end

  test "#remove" do
    cref = new_cref

    cref.set(1)
    assert cref.defined? # precondition

    cref.remove
    assert !cref.defined?
  end

  test "#remove with unknown cname" do
    assert_raises(NameError) { new_cref.remove }
  end
end