Runtime assertions for Ruby literal.fun
ruby
at main 130 lines 3.2 kB view raw
1# frozen_string_literal: true 2 3class Person < Literal::Struct 4 prop :name, String 5end 6 7class Student < Person 8 prop :final_grade, Integer 9end 10 11test do 12 person = Person.new(name: "Joel") 13 assert_equal person.name, "Joel" 14end 15 16test do 17 person = Person.new(name: "Joel") 18 person.name = "Jill" 19 20 assert_equal person.name, "Jill" 21end 22 23test do 24 person = Person.new(name: "Joel") 25 assert_equal person.to_h, { name: "Joel" } 26end 27 28test do 29 a = Person.new(name: "Joel") 30 b = Person.new(name: "Joel") 31 32 assert_equal a, b 33end 34 35test do 36 a = Person.new(name: "Joel") 37 b = Person.new(name: "Jill") 38 39 refute_equal a, b 40end 41 42test do 43 a = Person.new(name: "Joel") 44 b = Student.new(name: "Joel", final_grade: 90) 45 46 refute_equal a, b 47end 48 49# Marshal doesn't work with anonymous classes 50class ::RootStruct < Literal::Struct 51 prop :name, String 52end 53 54test "marshalling" do 55 a = RootStruct.new(name: "Joel") 56 b = Marshal.load(Marshal.dump(a)) 57 58 assert_equal b, a 59end 60 61test "marshalling a frozen struct" do 62 a = RootStruct.new(name: "Joel") 63 a.freeze 64 65 b = Marshal.load(Marshal.dump(a)) 66 67 assert_equal b, a 68 assert b.frozen? 69end 70 71test "as_pack/from_pack" do 72 a = RootStruct.new(name: "Joel") 73 a.freeze 74 75 b = RootStruct.from_pack(a.as_pack) 76 77 assert_equal b, a 78 assert b.frozen? 79end 80 81test "can be deconstructed" do 82 person = Person.new(name: "Joel") 83 assert_equal person.deconstruct, ["Joel"] 84end 85 86test "can be deconstructed with keys" do 87 person = Person.new(name: "Joel") 88 89 assert_equal person.deconstruct_keys([:name]), { name: "Joel" } 90 assert_equal person.deconstruct_keys(nil), { name: "Joel" } 91end 92 93test "can be indexed" do 94 person = Person.new(name: "Joel") 95 assert_equal person[:name], "Joel" 96end 97 98test "returns nil for unknown keys" do 99 person = Person.new(name: "Joel") 100 101 assert_raises(NameError) { person[:age] } 102 assert_equal "Joel", person["name"] 103 assert_raises(TypeError) { person[0] } 104end 105 106class WithKeywordPropertyNames < Literal::Struct 107 prop :begin, String 108 prop :end, String 109 prop :module, _Nilable(Module) 110end 111 112test do 113 with_keyword_property_names = WithKeywordPropertyNames.new(begin: "start", end: "finish") 114 assert_equal(with_keyword_property_names.to_h, { :begin => "start", :end => "finish", :module => nil }) 115 assert_equal(with_keyword_property_names, with_keyword_property_names) 116 assert_equal(with_keyword_property_names, with_keyword_property_names.dup) 117 assert_equal(with_keyword_property_names.hash, with_keyword_property_names.dup.hash) 118 assert_equal(with_keyword_property_names[:begin], "start") 119 assert_equal(with_keyword_property_names[:end], "finish") 120 assert_equal(with_keyword_property_names[:module], nil) 121 assert_equal(with_keyword_property_names["begin"], "start") 122 assert_equal(with_keyword_property_names["end"], "finish") 123 assert_equal(with_keyword_property_names["module"], nil) 124 assert_equal(with_keyword_property_names.begin, "start") 125 assert_equal(with_keyword_property_names.end, "finish") 126 assert_equal(with_keyword_property_names.module, nil) 127 with_keyword_property_names[:begin] = "start2" 128 with_keyword_property_names.end = "finish2" 129 assert_equal(with_keyword_property_names.to_h, { :begin => "start2", :end => "finish2", :module => nil }) 130end