@@ -1868,4 +1868,51 @@ defmodule GenStageTest do
1868
1868
{ :registered_name , :gen_stage_from_enumerable }
1869
1869
end
1870
1870
end
1871
+
1872
+ describe "subscribe_to names" do
1873
+ test "can be pid" do
1874
+ { :ok , producer } = Counter . start_link ( { :producer , 0 } )
1875
+ { :ok , _ } = Forwarder . start_link ( { :consumer , self ( ) , subscribe_to: [ producer ] } )
1876
+ assert_receive { :consumed , _ }
1877
+ end
1878
+
1879
+ test "can be an atom name" do
1880
+ producer_name = :producer_atom_name
1881
+ { :ok , _ } = Counter . start_link ( { :producer , 0 } , name: producer_name )
1882
+ { :ok , _ } = Forwarder . start_link ( { :consumer , self ( ) , subscribe_to: [ producer_name ] } )
1883
+ assert_receive { :consumed , _ }
1884
+ end
1885
+
1886
+ test "can be a via name if passed with options to avoid ambiguity" do
1887
+ producer_name = { :via , :global , { :producer , :name } }
1888
+ { :ok , _ } = Counter . start_link ( { :producer , 0 } , name: producer_name )
1889
+ { :ok , _ } = Forwarder . start_link ( { :consumer , self ( ) , subscribe_to: [ { producer_name , [ ] } ] } )
1890
+ assert_receive { :consumed , _ }
1891
+ end
1892
+
1893
+ test "can be a global name if passed with options to avoid ambiguity" do
1894
+ producer_name = { :global , { :producer , :name } }
1895
+ { :ok , _ } = Counter . start_link ( { :producer , 0 } , name: producer_name )
1896
+ { :ok , _ } = Forwarder . start_link ( { :consumer , self ( ) , subscribe_to: [ { producer_name , [ ] } ] } )
1897
+ assert_receive { :consumed , _ }
1898
+ end
1899
+
1900
+ test "logs warning about ambiguity if global name is passed without options" do
1901
+ producer_name = { :global , { :producer , :name } }
1902
+ { :ok , _ } = Counter . start_link ( { :producer , 0 } , name: producer_name )
1903
+
1904
+ assert capture_log ( fn ->
1905
+ { :ok , _ } = Forwarder . start_link ( { :consumer , self ( ) , subscribe_to: [ producer_name ] } )
1906
+ end ) =~ ":subscribe_to value with type {:global, term()} is deprecated."
1907
+ end
1908
+
1909
+ test "logs warning about ambiguity if via name is passed without options" do
1910
+ producer_name = { :via , :global , { :producer , :name } }
1911
+ { :ok , _ } = Counter . start_link ( { :producer , 0 } , name: producer_name )
1912
+
1913
+ assert capture_log ( fn ->
1914
+ { :ok , _ } = Forwarder . start_link ( { :consumer , self ( ) , subscribe_to: [ producer_name ] } )
1915
+ end ) =~ ":subscribe_to value with type {:via, module(), term()} is deprecated."
1916
+ end
1917
+ end
1871
1918
end
0 commit comments