diff options
Diffstat (limited to 'test/prism/constant_path_node_test.rb')
-rw-r--r-- | test/prism/constant_path_node_test.rb | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/test/prism/constant_path_node_test.rb b/test/prism/constant_path_node_test.rb new file mode 100644 index 0000000000..dffb55c0ff --- /dev/null +++ b/test/prism/constant_path_node_test.rb @@ -0,0 +1,91 @@ +# frozen_string_literal: true + +require_relative "test_helper" + +module Prism + class ConstantPathNodeTest < TestCase + def test_full_name_for_constant_path + source = <<~RUBY + Foo:: # comment + Bar::Baz:: + Qux + RUBY + + constant_path = Prism.parse(source).value.statements.body.first + assert_equal("Foo::Bar::Baz::Qux", constant_path.full_name) + end + + def test_full_name_for_constant_path_with_self + source = <<~RUBY + self:: # comment + Bar::Baz:: + Qux + RUBY + + constant_path = Prism.parse(source).value.statements.body.first + assert_raise(ConstantPathNode::DynamicPartsInConstantPathError) do + constant_path.full_name + end + end + + def test_full_name_for_constant_path_with_variable + source = <<~RUBY + foo:: # comment + Bar::Baz:: + Qux + RUBY + + constant_path = Prism.parse(source).value.statements.body.first + + assert_raise(ConstantPathNode::DynamicPartsInConstantPathError) do + constant_path.full_name + end + end + + def test_full_name_for_constant_path_target + source = <<~RUBY + Foo:: # comment + Bar::Baz:: + Qux, Something = [1, 2] + RUBY + + node = Prism.parse(source).value.statements.body.first + assert_equal("Foo::Bar::Baz::Qux", node.lefts.first.full_name) + end + + def test_full_name_for_constant_path_with_stovetop_start + source = <<~RUBY + ::Foo:: # comment + Bar::Baz:: + Qux, Something = [1, 2] + RUBY + + node = Prism.parse(source).value.statements.body.first + assert_equal("::Foo::Bar::Baz::Qux", node.lefts.first.full_name) + end + + def test_full_name_for_constant_path_target_with_non_constant_parent + source = <<~RUBY + self::Foo, Bar = [1, 2] + RUBY + + constant_target = Prism.parse(source).value.statements.body.first + dynamic, static = constant_target.lefts + + assert_raise(ConstantPathNode::DynamicPartsInConstantPathError) do + dynamic.full_name + end + + assert_equal("Bar", static.full_name) + end + + def test_full_name_for_constant_read_node + source = <<~RUBY + Bar + RUBY + + constant = Prism.parse(source).value.statements.body.first + assert_equal("Bar", constant.full_name) + end + end +end |