diff options
Diffstat (limited to 'legacy/test2.rb')
-rw-r--r-- | legacy/test2.rb | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/legacy/test2.rb b/legacy/test2.rb new file mode 100644 index 0000000..0a43d58 --- /dev/null +++ b/legacy/test2.rb @@ -0,0 +1,93 @@ +require 'state' +require 'set' +require 'test/unit' + +class TC_State < Test::Unit::TestCase + include UpState + + Tony = State.new_type("tony", [Event.new("tonyup", {:tony => "tony"})], [], [:tony]) + Mike = State.new_type("mike", [], [Dependency.new(Tony)]) + ChainTop = State.new_type("chaintop", [], [Dependency.new(Tony, {:tony => "tony"}, {:tony => :bob}), + Dependency.new(Mike)]) + #this state should never appear + Reversed = State.new_type("reversed", [Dependency.new(Tony)], [Event.new("tonyup", {:tony => "tony"})]) + + def put_states + foo = State.send(:class_variable_get, :@@states).map{ |x| x.to_s_color } + puts foo.sort.join(", ") + end + + def assert_have_states(*s) + assert_equal(s.sort, State.get_all.map{ |x| x.to_s }.sort) + end + + def assert_only_states(*s) + assert_have_states *s + assert_equal(State.get_all.size, s.size) + end + + def setup + assert_only_states( + 'TonyState{} (down)' + ) + end + + def teardown + State.release(:user) + State.release(:system) + end + + def test_reversed + #this should never ever come up + Reversed.hold(:user) + assert_only_states( + 'TonyState{} (down)' + ) + end + + def test_incomplete_hold + begin + Tony.hold(:user) + assert(false) + end + rescue AmbiguousRequest => e + assert(true) + end + + def test_bogus_hold + begin + Tony.hold(:cookies) + assert(false) + end + rescue TypeError => e + assert(true) + end + + def test_bogus_release + begin + State.process_event(Event.new("tonyup", {:tony => "tony"})) + Tony.release(:cookies) + assert(false) + end + rescue TypeError => e + assert(true) + end + + def test_chained_dependencies + State.process_event(Event.new("tonyup", {:tony => "tony"})) + Mike.hold(:user) + ChainTop.hold(:system, {:bob => "tony"}) + assert_only_states( + 'TonyState{} (down)', + 'ChaintopState{:bob=>"tony"} (up)', + 'MikeState{} (up)', + 'TonyState{:tony=>"tony"} (up)' + ) + end + + def test_chained_releases + test_chained_dependencies + ChainTop.release(:system) + Tony.release(:system) + end +end |