@@ -1868,4 +1868,51 @@ defmodule GenStageTest do
18681868 { :registered_name , :gen_stage_from_enumerable }
18691869 end
18701870 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
18711918end
0 commit comments