Skip to content

Commit 4e96624

Browse files
committed
Add compiler specs for case/when forms weakly covered elsewhere.
See #2423.
1 parent 8a84610 commit 4e96624

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

spec/compiler/general_spec.rb

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -962,5 +962,30 @@ def foo(str: "bar", num: 45, **opts)
962962
]
963963
end
964964
end
965+
966+
it "handles dynamic case/when elements" do
967+
# These use a global so IR does not inline it from a local var
968+
run('$case_str = "z"; case "xyz"; when /#{$case_str}/; true; else; false; end') do |x|
969+
expect(x).to eq(true)
970+
end
971+
run('$case_str = "xyz"; case "xyz"; when "#{$case_str}"; true; else; false; end') do |x|
972+
expect(x).to eq(true)
973+
end
974+
run('$case_str = "xyz"; case :xyz; when :"#{$case_str}"; true; else; false; end') do |x|
975+
expect(x).to eq(true)
976+
end
977+
end
978+
979+
it "handles lists of conditions in case/when" do
980+
run('$case_str = "z"; case "xyz"; when /#{$$}/, /#{$case_str}/; true; else; false; end') do |x|
981+
expect(x).to eq(true)
982+
end
983+
end
984+
985+
it "handles literal arrays in case/when" do
986+
run('$case_ary = [1,2,3]; case $case_ary; when [1,2,3]; true; else; false; end') do |x|
987+
expect(x).to eq(true)
988+
end
989+
end
965990
end
966991
end

0 commit comments

Comments
 (0)