require File.expand_path(File.dirname(__FILE__)) + '/helpers.rb' context "a game" do setup do game = a_small_game("my game") 10.times do |i| game.scene "scene_#{i}".to_sym do always { exit! } end end game end asserts(:title).equals "my game" asserts(:scenes).kind_of Ray::SceneList asserts("the scene list is empty") { topic.scenes.empty? } denies :running? asserts(:event_runner).equals { topic.registered_scene(:scene_0).event_runner } context "with one scene" do hookup { topic.scenes << :scene_0 } asserts :running? asserts("current scene") { topic.scenes.current }.equals { topic.registered_scene(:scene_0) } context "run once" do hookup do [:scene_0, :scene_1].each do |name| scene = topic.registered_scene name stub(scene).run { scene.exit! } end stub(topic).register topic.run end asserts_topic.received :register asserts("its scene") { topic.registered_scene(:scene_0) }.received :run denies("other scenes") { topic.registered_scene(:scene_1) }.received :run denies :running? asserts("the scene list is empty") { topic.scenes.empty? } end context "after #pop_scene" do hookup { topic.pop_scene } denies :running? asserts("the scene list is empty") { topic.scenes.empty? } end end context "with several scenes" do hookup { topic.scenes << :scene_0 << :scene_1 << :scene_2 } asserts :running? asserts("current_scene") { topic.scenes.current }.equals { topic.registered_scene(:scene_2) } context "after removing a few scenes" do hookup { topic.pop_scene_while { |scene| scene.name != :scene_0 } } asserts :running? asserts("current_scene") { topic.scenes.current }.equals { topic.registered_scene(:scene_0) } end end context "after changing event_runner" do hookup do topic.event_runner = @runner = Ray::DSL::EventRunner.new end asserts(:event_runner).equals { @runner } asserts(:event_runner).equals { topic.registered_scene(:scene_0).event_runner } end end run_tests if __FILE__ == $0