test/test_characterizable.rb in characterizable-0.0.9 vs test/test_characterizable.rb in characterizable-0.0.10

- old
+ new

@@ -60,26 +60,39 @@ end should "survive as a certain kind of hash" do a = SimpleAutomobile.new - assert_equal Characterizable::SurvivorHash, SimpleAutomobile.characteristics.class - assert_equal Characterizable::SurvivorHash, SimpleAutomobile.characteristics.select { false }.class - assert_equal Characterizable::SurvivorHash, SimpleAutomobile.characteristics.slice(:hello).class - assert_equal Characterizable::SurvivorHash, SimpleAutomobile.characteristics.merge({:hi => 'there'}).class + assert_equal Characterizable::BetterHash, SimpleAutomobile.characteristics.class + assert_equal Characterizable::BetterHash, SimpleAutomobile.characteristics.select { false }.class + assert_equal Characterizable::BetterHash, SimpleAutomobile.characteristics.slice(:hello).class + assert_equal Characterizable::BetterHash, SimpleAutomobile.characteristics.merge({:hi => 'there'}).class - assert_equal Characterizable::SurvivorHash, a.characteristics.effective.class - assert_equal Characterizable::SurvivorHash, a.characteristics.effective.select { false }.class - assert_equal Characterizable::SurvivorHash, a.characteristics.effective.slice(:hello).class - assert_equal Characterizable::SurvivorHash, a.characteristics.effective.merge({:hi => 'there'}).class + assert_equal Characterizable::BetterHash, a.characteristics.effective.class + assert_equal Characterizable::BetterHash, a.characteristics.effective.select { false }.class + assert_equal Characterizable::BetterHash, a.characteristics.effective.slice(:hello).class + assert_equal Characterizable::BetterHash, a.characteristics.effective.merge({:hi => 'there'}).class + assert_equal Characterizable::BetterHash, a.characteristics.select { false }.class + assert_equal Characterizable::BetterHash, a.characteristics.slice(:hello).class + assert_equal Characterizable::Snapshot, a.characteristics.class - assert_equal Characterizable::Snapshot, a.characteristics.select { false }.class - assert_equal Characterizable::Snapshot, a.characteristics.slice(:hello).class assert_equal Characterizable::Snapshot, a.characteristics.merge({:hi => 'there'}).class end + should "not be annoying to work with characteristics on a particular instance" do + a = SimpleAutomobile.new + a.make = 'Nissan' + assert_same_contents [:make], a.characteristics.effective.keys + assert_same_contents [:make], a.characteristics.effective.select { true }.keys + end + + should "not be annoying to work with characteristics hashes on a class level" do + assert_same_contents [:make, :model, :variant], SimpleAutomobile.characteristics.keys + assert_same_contents [:make, :model, :variant], SimpleAutomobile.characteristics.select { true }.keys + end + should "tell you what characteristics are effective" do a = SimpleAutomobile.new a.make = 'Ford' assert_same_contents [:make], a.characteristics.effective.keys end @@ -227,12 +240,12 @@ a.make = 'Ford' a.model_year = 1999 snapshot = a.characteristics assert_same_contents [:make, :model_year], snapshot.effective.keys a.make = nil - assert_same_contents [], a.characteristics.effective.keys - assert_same_contents [:make, :model_year], snapshot.effective.keys + assert_same_contents [], a.characteristics.effective.keys # up to date! + assert_same_contents [:make, :model_year], snapshot.effective.keys # frozen in time! end should "work when passed around as a snapshot" do a = Automobile.new a.make = 'Ford' @@ -321,7 +334,33 @@ should 'allow characterizations to be sliced' do a = Automobile.new a.make = 'Ford' assert_equal({ :make => 'Ford' }, a.characteristics) assert_equal({}, a.characteristics.slice(:dummy)) + assert_equal({ :make => 'Ford' }, a.characteristics.slice(:make)) end + + should 'allow characterizations to be selected' do + a = Automobile.new + a.make = 'Ford' + assert_equal({ :make => 'Ford' }, a.characteristics.select { |k, v| k == :make }) + assert_equal({}, a.characteristics.select { |k, v| k == :dummy }) + end + + should 'allow characterizations to be rejected' do + a = Automobile.new + a.make = 'Ford' + assert_equal({ :make => 'Ford' }, a.characteristics.reject { |k, v| k == :dummy }) + assert_equal({}, a.characteristics.reject { |k, v| k == :make }) + end + + should 'not reset snapshot after slicing' do + a = Automobile.new + a.make = 'Ford' + snapshot = a.characteristics.slice(:dummy) + assert_equal({}, snapshot) + a.make = 'Nissan' + assert_equal({}, snapshot) + assert_equal({}, snapshot.slice(:make)) + end + end