File: class_variables_test.rb

package info (click to toggle)
ruby-ruby-lsp 0.26.7-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 27,676 kB
  • sloc: ruby: 35,294; javascript: 29; sh: 7; makefile: 4
file content (140 lines) | stat: -rw-r--r-- 3,336 bytes parent folder | download
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
# typed: true
# frozen_string_literal: true

require_relative "test_case"

module RubyIndexer
  class ClassVariableTest < TestCase
    def test_class_variable_and_write
      index(<<~RUBY)
        class Foo
          @@bar &&= 1
        end
      RUBY

      assert_entry("@@bar", Entry::ClassVariable, "/fake/path/foo.rb:1-2:1-7")

      entry = @index["@@bar"]&.first #: as Entry::ClassVariable
      owner = entry.owner #: as !nil
      assert_instance_of(Entry::Class, owner)
      assert_equal("Foo", owner.name)
    end

    def test_class_variable_operator_write
      index(<<~RUBY)
        class Foo
          @@bar += 1
        end
      RUBY

      assert_entry("@@bar", Entry::ClassVariable, "/fake/path/foo.rb:1-2:1-7")
    end

    def test_class_variable_or_write
      index(<<~RUBY)
        class Foo
          @@bar ||= 1
        end
      RUBY

      assert_entry("@@bar", Entry::ClassVariable, "/fake/path/foo.rb:1-2:1-7")
    end

    def test_class_variable_target_node
      index(<<~RUBY)
        class Foo
          @@foo, @@bar = 1
        end
      RUBY

      assert_entry("@@foo", Entry::ClassVariable, "/fake/path/foo.rb:1-2:1-7")
      assert_entry("@@bar", Entry::ClassVariable, "/fake/path/foo.rb:1-9:1-14")

      entry = @index["@@foo"]&.first #: as Entry::ClassVariable
      owner = entry.owner #: as !nil
      assert_instance_of(Entry::Class, owner)
      assert_equal("Foo", owner.name)

      entry = @index["@@bar"]&.first #: as Entry::ClassVariable
      owner = entry.owner #: as !nil
      assert_instance_of(Entry::Class, owner)
      assert_equal("Foo", owner.name)
    end

    def test_class_variable_write
      index(<<~RUBY)
        class Foo
          @@bar = 1
        end
      RUBY

      assert_entry("@@bar", Entry::ClassVariable, "/fake/path/foo.rb:1-2:1-7")
    end

    def test_empty_name_class_variable
      index(<<~RUBY)
        module Foo
          @@ = 1
        end
      RUBY

      refute_entry("@@")
    end

    def test_top_level_class_variable
      index(<<~RUBY)
        @@foo = 123
      RUBY

      entry = @index["@@foo"]&.first #: as Entry::ClassVariable
      assert_nil(entry.owner)
    end

    def test_class_variable_inside_self_method
      index(<<~RUBY)
        class Foo
          def self.bar
            @@bar = 123
          end
        end
      RUBY

      entry = @index["@@bar"]&.first #: as Entry::ClassVariable
      owner = entry.owner #: as !nil
      assert_instance_of(Entry::Class, owner)
      assert_equal("Foo", owner.name)
    end

    def test_class_variable_inside_singleton_class
      index(<<~RUBY)
        class Foo
          class << self
            @@bar = 123
          end
        end
      RUBY

      entry = @index["@@bar"]&.first #: as Entry::ClassVariable
      owner = entry.owner #: as !nil
      assert_instance_of(Entry::Class, owner)
      assert_equal("Foo", owner.name)
    end

    def test_class_variable_in_singleton_class_method
      index(<<~RUBY)
        class Foo
          class << self
            def self.bar
              @@bar = 123
            end
          end
        end
      RUBY

      entry = @index["@@bar"]&.first #: as Entry::ClassVariable
      owner = entry.owner #: as !nil
      assert_instance_of(Entry::Class, owner)
      assert_equal("Foo", owner.name)
    end
  end
end