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
|