# frozen_string_literal: true require 'test_helper' class StaticRegistersUnitTest < Minitest::Test include Liquid def set static_register = StaticRegisters.new static_register[nil] = true static_register[1] = :one static_register[:one] = "one" static_register["two"] = "three" static_register["two"] = 3 static_register[false] = nil assert_equal({ nil => true, 1 => :one, :one => "one", "two" => 3, false => nil }, static_register.registers) static_register end def test_get static_register = set assert_equal true, static_register[nil] assert_equal :one, static_register[1] assert_equal "one", static_register[:one] assert_equal 3, static_register["two"] assert_nil static_register[false] assert_nil static_register["unknown"] end def test_delete static_register = set assert_equal true, static_register.delete(nil) assert_equal :one, static_register.delete(1) assert_equal "one", static_register.delete(:one) assert_equal 3, static_register.delete("two") assert_nil static_register.delete(false) assert_nil static_register.delete("unknown") assert_equal({}, static_register.registers) end def test_fetch static_register = set assert_equal true, static_register.fetch(nil) assert_equal :one, static_register.fetch(1) assert_equal "one", static_register.fetch(:one) assert_equal 3, static_register.fetch("two") assert_nil static_register.fetch(false) assert_nil static_register.fetch("unknown") end def test_fetch_default static_register = StaticRegisters.new assert_equal true, static_register.fetch(nil, true) assert_equal :one, static_register.fetch(1, :one) assert_equal "one", static_register.fetch(:one, "one") assert_equal 3, static_register.fetch("two", 3) assert_nil static_register.fetch(false, nil) end def test_key static_register = set assert_equal true, static_register.key?(nil) assert_equal true, static_register.key?(1) assert_equal true, static_register.key?(:one) assert_equal true, static_register.key?("two") assert_equal true, static_register.key?(false) assert_equal false, static_register.key?("unknown") assert_equal false, static_register.key?(true) end def set_with_static static_register = StaticRegisters.new(nil => true, 1 => :one, :one => "one", "two" => 3, false => nil) static_register[nil] = false static_register["two"] = 4 static_register[true] = "foo" assert_equal({ nil => true, 1 => :one, :one => "one", "two" => 3, false => nil }, static_register.static) assert_equal({ nil => false, "two" => 4, true => "foo" }, static_register.registers) static_register end def test_get_with_static static_register = set_with_static assert_equal false, static_register[nil] assert_equal :one, static_register[1] assert_equal "one", static_register[:one] assert_equal 4, static_register["two"] assert_equal "foo", static_register[true] assert_nil static_register[false] end def test_delete_with_static static_register = set_with_static assert_equal false, static_register.delete(nil) assert_equal 4, static_register.delete("two") assert_equal "foo", static_register.delete(true) assert_nil static_register.delete("unknown") assert_nil static_register.delete(:one) assert_equal({}, static_register.registers) assert_equal({ nil => true, 1 => :one, :one => "one", "two" => 3, false => nil }, static_register.static) end def test_fetch_with_static static_register = set_with_static assert_equal false, static_register.fetch(nil) assert_equal :one, static_register.fetch(1) assert_equal "one", static_register.fetch(:one) assert_equal 4, static_register.fetch("two") assert_equal "foo", static_register.fetch(true) assert_nil static_register.fetch(false) end def test_key_with_static static_register = set_with_static assert_equal true, static_register.key?(nil) assert_equal true, static_register.key?(1) assert_equal true, static_register.key?(:one) assert_equal true, static_register.key?("two") assert_equal true, static_register.key?(false) assert_equal false, static_register.key?("unknown") assert_equal true, static_register.key?(true) end def test_static_register_can_be_frozen static_register = set_with_static static = static_register.static.freeze assert_raises(RuntimeError) do static["two"] = "foo" end assert_raises(RuntimeError) do static["unknown"] = "foo" end assert_raises(RuntimeError) do static.delete("two") end end def test_new_static_retains_static static_register = StaticRegisters.new(nil => true, 1 => :one, :one => "one", "two" => 3, false => nil) static_register["one"] = 1 static_register["two"] = 2 static_register["three"] = 3 new_register = StaticRegisters.new(static_register) assert_equal({}, new_register.registers) new_register["one"] = 4 new_register["two"] = 5 new_register["three"] = 6 newest_register = StaticRegisters.new(new_register) assert_equal({}, newest_register.registers) newest_register["one"] = 7 newest_register["two"] = 8 newest_register["three"] = 9 assert_equal({ "one" => 1, "two" => 2, "three" => 3 }, static_register.registers) assert_equal({ "one" => 4, "two" => 5, "three" => 6 }, new_register.registers) assert_equal({ "one" => 7, "two" => 8, "three" => 9 }, newest_register.registers) assert_equal({ nil => true, 1 => :one, :one => "one", "two" => 3, false => nil }, static_register.static) assert_equal({ nil => true, 1 => :one, :one => "one", "two" => 3, false => nil }, new_register.static) assert_equal({ nil => true, 1 => :one, :one => "one", "two" => 3, false => nil }, newest_register.static) end def test_multiple_instances_are_unique static_register = StaticRegisters.new(nil => true, 1 => :one, :one => "one", "two" => 3, false => nil) static_register["one"] = 1 static_register["two"] = 2 static_register["three"] = 3 new_register = StaticRegisters.new(foo: :bar) assert_equal({}, new_register.registers) new_register["one"] = 4 new_register["two"] = 5 new_register["three"] = 6 newest_register = StaticRegisters.new(bar: :foo) assert_equal({}, newest_register.registers) newest_register["one"] = 7 newest_register["two"] = 8 newest_register["three"] = 9 assert_equal({ "one" => 1, "two" => 2, "three" => 3 }, static_register.registers) assert_equal({ "one" => 4, "two" => 5, "three" => 6 }, new_register.registers) assert_equal({ "one" => 7, "two" => 8, "three" => 9 }, newest_register.registers) assert_equal({ nil => true, 1 => :one, :one => "one", "two" => 3, false => nil }, static_register.static) assert_equal({ foo: :bar }, new_register.static) assert_equal({ bar: :foo }, newest_register.static) end def test_can_update_static_directly_and_updates_all_instances static_register = StaticRegisters.new(nil => true, 1 => :one, :one => "one", "two" => 3, false => nil) static_register["one"] = 1 static_register["two"] = 2 static_register["three"] = 3 new_register = StaticRegisters.new(static_register) assert_equal({}, new_register.registers) assert_equal({ nil => true, 1 => :one, :one => "one", "two" => 3, false => nil }, static_register.static) new_register["one"] = 4 new_register["two"] = 5 new_register["three"] = 6 new_register.static["four"] = 10 newest_register = StaticRegisters.new(new_register) assert_equal({}, newest_register.registers) assert_equal({ nil => true, 1 => :one, :one => "one", "two" => 3, false => nil, "four" => 10 }, new_register.static) newest_register["one"] = 7 newest_register["two"] = 8 newest_register["three"] = 9 new_register.static["four"] = 5 new_register.static["five"] = 15 assert_equal({ "one" => 1, "two" => 2, "three" => 3 }, static_register.registers) assert_equal({ "one" => 4, "two" => 5, "three" => 6 }, new_register.registers) assert_equal({ "one" => 7, "two" => 8, "three" => 9 }, newest_register.registers) assert_equal({ nil => true, 1 => :one, :one => "one", "two" => 3, false => nil, "four" => 5, "five" => 15 }, newest_register.static) assert_equal({ nil => true, 1 => :one, :one => "one", "two" => 3, false => nil, "four" => 5, "five" => 15 }, static_register.static) assert_equal({ nil => true, 1 => :one, :one => "one", "two" => 3, false => nil, "four" => 5, "five" => 15 }, new_register.static) end end