1defmodule Gettext.InterpolationTest do 2 use ExUnit.Case, async: true 3 doctest Gettext.Interpolation 4 alias Gettext.Interpolation 5 6 test "interpolate/2" do 7 interpolatable = Interpolation.to_interpolatable("%{a} %{b} %{c}") 8 9 assert Interpolation.interpolate(interpolatable, %{a: 1, b: :two, c: "thr ee"}) == 10 {:ok, "1 two thr ee"} 11 12 assert Interpolation.interpolate(interpolatable, %{a: "a"}) == 13 {:missing_bindings, "a %{b} %{c}", [:b, :c]} 14 15 interpolatable = Interpolation.to_interpolatable("%{a} %{a} %{a}") 16 17 assert Interpolation.interpolate(interpolatable, %{a: "foo"}) == {:ok, "foo foo foo"} 18 19 assert Interpolation.interpolate(interpolatable, %{b: "bar"}) == 20 {:missing_bindings, "%{a} %{a} %{a}", [:a]} 21 end 22 23 test "to_interpolatable/1" do 24 assert Interpolation.to_interpolatable("Hello %{name}") == ["Hello ", :name] 25 assert Interpolation.to_interpolatable("%{solo}") == [:solo] 26 assert Interpolation.to_interpolatable("%{foo}%{bar} %{baz}") == [:foo, :bar, " ", :baz] 27 assert Interpolation.to_interpolatable("%{Your name} is cool!") == [:"Your name", " is cool!"] 28 assert Interpolation.to_interpolatable("foo %{} bar") == ["foo %{} bar"] 29 assert Interpolation.to_interpolatable("%{") == ["%{"] 30 assert Interpolation.to_interpolatable("abrupt ending %{") == ["abrupt ending %{"] 31 32 assert Interpolation.to_interpolatable("incomplete %{ and then some") == 33 ["incomplete %{ and then some"] 34 35 assert Interpolation.to_interpolatable("first empty %{} then %{ incomplete") == 36 ["first empty %{} then %{ incomplete"] 37 38 assert Interpolation.to_interpolatable("") == [] 39 end 40 41 if :erlang.system_info(:otp_release) >= '20' do 42 test "to_interpolatable/1 with Unicode" do 43 assert Interpolation.to_interpolatable("%{Héllø} there") == 44 [String.to_atom("Héllø"), " there"] 45 end 46 end 47 48 test "keys/1" do 49 # With a string as its argument 50 assert Interpolation.keys("Hello %{name}") == [:name] 51 assert Interpolation.keys("It's %{time} here in %{state}") == [:time, :state] 52 assert Interpolation.keys("Hi there %{your name}") == [:"your name"] 53 assert Interpolation.keys("Hello %{name} in %{state} goodbye %{name}") == [:name, :state] 54 55 # With a list of segments as its argument 56 assert Interpolation.keys(["Hello ", :name, " it's ", :time, " goodbye ", :name]) == 57 [:name, :time] 58 end 59end 60