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