summaryrefslogtreecommitdiffhomepage
path: root/spec/system_manager_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/system_manager_spec.rb')
-rw-r--r--spec/system_manager_spec.rb317
1 files changed, 266 insertions, 51 deletions
diff --git a/spec/system_manager_spec.rb b/spec/system_manager_spec.rb
index c2b8cf6..783b1a7 100644
--- a/spec/system_manager_spec.rb
+++ b/spec/system_manager_spec.rb
@@ -3,41 +3,44 @@ require_relative '../felflame.rb'
describe 'Components' do
before :all do
- @component_manager ||= FelFlame::Components.new('TestSystems', health: 10, name: 'imp')
+ @component_manager ||= FelFlame::Components.new('TestSystems', health: 10, name: 'imp', mana: 10)
+ @@testitr = 999
end
before :each do
+ @@testitr += 1
+ @system = FelFlame::Systems.new "Test#{@@testitr}" do
+ @component_manager.each do |component|
+ component.health += 5
+ end
+ end
end
after :each do
- #TODO: order breaks it
@component_manager.each(&:delete)
FelFlame::Entities.each(&:delete)
FelFlame::Systems.each(&:clear_triggers)
end
it 'can create a system' do
- FelFlame::Systems.new('Test100') do
+ FelFlame::Systems.new('Test99') do
'Works'
end
- expect(FelFlame::Systems::Test100.call).to eq('Works')
+ expect(FelFlame::Systems::Test99.call).to eq('Works')
end
it 'can be redefined' do
- FelFlame::Systems.new('Test101') do
- 'neat'
- end
- FelFlame::Systems::Test101.redefine do
+ @system.redefine do
'very neat'
end
- expect(FelFlame::Systems::Test101.call).to eq('very neat')
+ expect(@system.call).to eq('very neat')
end
it 'can iterate over the sorted systems by priority' do
- FelFlame::Systems.new('Test102', priority: 1) {}
- FelFlame::Systems.new('Test103', priority: 50) {}
- FelFlame::Systems.new('Test104', priority: 7) {}
- answer_key = ['Test103', 'Test104', 'Test102']
+ FelFlame::Systems.new('Test2', priority: 1) {}
+ FelFlame::Systems.new('Test3', priority: 50) {}
+ FelFlame::Systems.new('Test4', priority: 7) {}
+ answer_key = ['Test3', 'Test4', 'Test2']
test = FelFlame::Systems.each.to_a
# converts the system name to the constant, compares their positions making sure they are sorted
# higher priority should be placed first
@@ -55,29 +58,25 @@ describe 'Components' do
multiple = 3
first = @component_manager.new(health: init1)
second = @component_manager.new(health: init2)
- FelFlame::Systems.new('Test105') do
+ @system.redefine do
@component_manager.each do |component|
component.health -= multiple
end
end
- FelFlame::Systems::Test105.call
+ @system.call
expect(first.health).to eq(init1 -= multiple)
expect(second.health).to eq(init2 -= multiple)
10.times do
- FelFlame::Systems::Test105.call
+ @system.call
end
expect(first.health).to eq(init1 - (multiple * 10))
expect(second.health).to eq(init2 - (multiple * 10))
end
+
it 'can trigger when a single Component is added' do
- FelFlame::Systems.new 'Test107' do
- @component_manager.each do |component|
- component.health += 5
- end
- end
@cmp0 = @component_manager.new
@cmp1 = @component_manager.new health: 20
- FelFlame::Systems::Test107.trigger_when_added @cmp0
+ @system.trigger_when_added @cmp0
expect(@cmp0.health).to eq(10)
expect(@cmp1.health).to eq(20)
@entity0 = FelFlame::Entities.new
@@ -90,35 +89,25 @@ describe 'Components' do
end
it 'can trigger when a Component from a manager is added' do
- FelFlame::Systems.new 'Test106' do
- @component_manager.each do |component|
- component.health += 5
- end
- end
@cmp1 = @component_manager.new
@cmp2 = @component_manager.new health: 20
- FelFlame::Systems::Test106.trigger_when_added @component_manager
+ @system.trigger_when_added @component_manager
expect(@cmp1.health).to eq(10)
expect(@cmp2.health).to eq(20)
@entity1 = FelFlame::Entities.new
@entity2 = FelFlame::Entities.new @cmp2
expect(@cmp1.health).to eq(15)
expect(@cmp2.health).to eq(25)
- FelFlame::Systems::Test106.trigger_when_added @cmp1
+ @system.trigger_when_added @cmp1
@entity1.add @cmp1
expect(@cmp1.health).to eq(20)
expect(@cmp2.health).to eq(30)
end
it 'can trigger when a single Component is removed' do
- FelFlame::Systems.new 'Test108' do
- @component_manager.each do |component|
- component.health += 5
- end
- end
@cmp0 = @component_manager.new
@cmp1 = @component_manager.new health: 20
- FelFlame::Systems::Test108.trigger_when_removed @cmp0
+ @system.trigger_when_removed @cmp0
expect(@cmp0.health).to eq(10)
expect(@cmp1.health).to eq(20)
@entity0 = FelFlame::Entities.new
@@ -132,17 +121,17 @@ describe 'Components' do
@entity0.remove @cmp1
expect(@cmp0.health).to eq(15)
expect(@cmp1.health).to eq(25)
+ @system.clear_triggers(:removal_triggers, component_or_manager: @cmp0)
+ @entity1.add @cmp0
+ @entity1.remove @cmp0
+ expect(@cmp0.health).to eq(15)
+ expect(@cmp1.health).to eq(25)
end
it 'can trigger when a Component from a manager is removed' do
- FelFlame::Systems.new 'Test109' do
- @component_manager.each do |component|
- component.health += 5
- end
- end
@cmp0 = @component_manager.new
@cmp1 = @component_manager.new health: 20
- FelFlame::Systems::Test109.trigger_when_removed @component_manager
+ @system.trigger_when_removed @component_manager
expect(@cmp0.health).to eq(10)
expect(@cmp1.health).to eq(20)
@entity0 = FelFlame::Entities.new
@@ -152,22 +141,22 @@ describe 'Components' do
@entity1.remove @cmp0
expect(@cmp0.health).to eq(15)
expect(@cmp1.health).to eq(25)
- FelFlame::Systems::Test109.trigger_when_removed @cmp1
+ @system.trigger_when_removed @cmp1
@entity0.add @cmp1, @cmp0
@entity0.remove @cmp1
expect(@cmp0.health).to eq(20)
expect(@cmp1.health).to eq(30)
+ @system.clear_triggers(:removal_triggers)
+ @entity1.add @cmp0, @cmp1
+ @entity1.remove @cmp0, @cmp1
+ expect(@cmp0.health).to eq(20)
+ expect(@cmp1.health).to eq(30)
end
-=begin
- it 'can trigger when a single Component is added' do
- FelFlame::Systems.new 'Test110' do
- @component_manager.each do |component|
- component.health += 5
- end
- end
+
+ it 'can trigger when a single Component\'s attribute is changed' do
@cmp0 = @component_manager.new
@cmp1 = @component_manager.new health: 20
- FelFlame::Systems::Test110.trigger_when_is_changed @cmp0, :name
+ @system.trigger_when_is_changed @cmp0, :name
expect(@cmp0.health).to eq(10)
expect(@cmp1.health).to eq(20)
@entity0 = FelFlame::Entities.new
@@ -181,5 +170,231 @@ describe 'Components' do
expect(@cmp0.health).to eq(15)
expect(@cmp1.health).to eq(25)
end
-=end
+
+ it 'can clear all triggers' do
+ @cmp0 = @component_manager.new health: 10
+ @cmp1 = @component_manager.new health: 20
+ @entity1 = FelFlame::Entities.new
+ @system.trigger_when_added @cmp0
+ @system.trigger_when_added @component_manager
+ @system.trigger_when_removed @cmp0
+ @system.trigger_when_removed @component_manager
+ @system.trigger_when_is_changed @cmp0, :name
+ @system.trigger_when_is_changed @component_manager, :name
+ @system.clear_triggers
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ @entity1.add @cmp0, @cmp1
+ @entity1.remove @cmp0, @cmp1
+ @cmp0.name = 'something'
+ @cmp1.name = 'different'
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ end
+
+ it 'can clear individual attr_triggers, without component or manager' do
+ @cmp0 = @component_manager.new health: 10, mana: 10
+ @cmp1 = @component_manager.new health: 20, mana: 20
+ @entity1 = FelFlame::Entities.new
+ @system.trigger_when_is_changed @cmp0, :name
+ @system.trigger_when_is_changed @component_manager, :name
+ @system.trigger_when_is_changed @cmp0, :mana
+ @system.trigger_when_is_changed @component_manager, :mana
+ @system.clear_triggers :attr_triggers, :name
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ @cmp0.name = 'something'
+ @cmp1.name = 'different'
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ @cmp0.mana = 15
+ @cmp1.mana = 15
+ expect(@cmp0.health).to eq(20)
+ expect(@cmp1.health).to eq(30)
+ end
+
+ it 'can clear individual attr_triggers, with component' do
+ @cmp0 = @component_manager.new health: 10, mana: 10
+ @cmp1 = @component_manager.new health: 20, mana: 20
+ @entity1 = FelFlame::Entities.new
+ @system.trigger_when_is_changed @cmp0, :name
+ @system.trigger_when_is_changed @cmp0, :mana
+ #expect(@system.attr_triggers).to eq({@cmp0 => [:name, :mana]})
+ #expect(@cmp0.attr_triggers).to eq({:name => [@system], :mana => [@system]})
+ @system.clear_triggers :attr_triggers, :name, component_or_manager: @cmp0
+ #expect(@system.attr_triggers).to eq({@cmp0 => [:mana]})
+ #expect(@cmp0.attr_triggers).to eq({:name => [], :mana => [@system]})
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ @cmp0.name = 'something'
+ @cmp1.name = 'different'
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ @cmp0.mana = 15
+ @cmp1.mana = 15
+ expect(@cmp0.health).to eq(15)
+ expect(@cmp1.health).to eq(25)
+ end
+
+ it 'can clear individual attr_triggers, with manager' do
+ @cmp0 = @component_manager.new health: 10, mana: 10
+ @cmp1 = @component_manager.new health: 20, mana: 20
+ @entity1 = FelFlame::Entities.new
+ @system.trigger_when_is_changed @component_manager, :name
+ @system.trigger_when_is_changed @component_manager, :mana
+ @system.clear_triggers :attr_triggers, :name, component_or_manager: @component_manager
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ @cmp0.name = 'something'
+ @cmp1.name = 'different'
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ @cmp0.mana = 15
+ @cmp1.mana = 15
+ expect(@cmp0.health).to eq(20)
+ expect(@cmp1.health).to eq(30)
+ end
+
+ it 'can clear all attr_triggers, without component or manager' do
+ @cmp0 = @component_manager.new health: 10, mana: 10
+ @cmp1 = @component_manager.new health: 20, mana: 20
+ @entity1 = FelFlame::Entities.new
+ @system.trigger_when_is_changed @component_manager, :name
+ @system.trigger_when_is_changed @cmp1, :mana
+ @system.clear_triggers :attr_triggers
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ @cmp0.name = 'something'
+ @cmp1.name = 'different'
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ @cmp0.mana = 15
+ @cmp1.mana = 15
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ end
+
+ it 'can clear all attr_triggers, with component' do
+ @cmp0 = @component_manager.new health: 10, mana: 10
+ @cmp1 = @component_manager.new health: 20, mana: 20
+ @entity1 = FelFlame::Entities.new
+ @system.trigger_when_is_changed @component_manager, :name
+ @system.trigger_when_is_changed @cmp1, :mana
+ @system.clear_triggers :attr_triggers, component_or_manager: @cmp1
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ @cmp0.name = 'something'
+ @cmp1.name = 'different'
+ expect(@cmp0.health).to eq(20)
+ expect(@cmp1.health).to eq(30)
+ @cmp0.mana = 15
+ @cmp1.mana = 15
+ expect(@cmp0.health).to eq(20)
+ expect(@cmp1.health).to eq(30)
+ end
+
+ it 'can clear all attr_triggers, with manager' do
+ @cmp0 = @component_manager.new health: 10, mana: 10
+ @cmp1 = @component_manager.new health: 20, mana: 20
+ @entity1 = FelFlame::Entities.new
+ @system.trigger_when_is_changed @component_manager, :name
+ @system.trigger_when_is_changed @cmp1, :mana
+ @system.clear_triggers :attr_triggers, component_or_manager: @component_manager
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ @cmp0.name = 'something'
+ @cmp1.name = 'different'
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ @cmp0.mana = 15
+ @cmp1.mana = 15
+ expect(@cmp0.health).to eq(15)
+ expect(@cmp1.health).to eq(25)
+ end
+
+ it 'can clear addition_trigger, without component or manager' do
+ @cmp0 = @component_manager.new health: 10
+ @cmp1 = @component_manager.new health: 20
+ @entity1 = FelFlame::Entities.new
+ @system.trigger_when_added @cmp0
+ @system.trigger_when_added @component_manager
+ @system.clear_triggers(:addition_triggers)
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ @entity1.add @cmp0, @cmp1
+ @entity1.remove @cmp0, @cmp1
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ end
+
+ it 'can clear addition_trigger, with component' do
+ @cmp0 = @component_manager.new health: 10
+ @cmp1 = @component_manager.new health: 20
+ @entity1 = FelFlame::Entities.new
+ @system.trigger_when_added @cmp0
+ @system.clear_triggers :addition_triggers, component_or_manager: @cmp0
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ @entity1.add @cmp0, @cmp1
+ @entity1.remove @cmp0, @cmp1
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ end
+
+ it 'can clear addition_trigger, with manager' do
+ @cmp0 = @component_manager.new health: 10
+ @cmp1 = @component_manager.new health: 20
+ @entity1 = FelFlame::Entities.new
+ @system.trigger_when_added @component_manager
+ @system.clear_triggers :addition_triggers, component_or_manager: @component_manager
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ @entity1.add @cmp0, @cmp1
+ @entity1.remove @cmp0, @cmp1
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ end
+
+ it 'can clear removal_trigger, without component or manager' do
+ @cmp0 = @component_manager.new health: 10
+ @cmp1 = @component_manager.new health: 20
+ @entity1 = FelFlame::Entities.new
+ @system.trigger_when_removed @cmp0
+ @system.trigger_when_removed @component_manager
+ @system.clear_triggers(:removal_triggers)
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ @entity1.add @cmp0, @cmp1
+ @entity1.remove @cmp0, @cmp1
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ end
+
+ it 'can clear removal_trigger, with component' do
+ @cmp0 = @component_manager.new health: 10
+ @cmp1 = @component_manager.new health: 20
+ @entity1 = FelFlame::Entities.new
+ @system.trigger_when_removed @cmp0
+ @system.clear_triggers :removal_triggers, component_or_manager: @cmp0
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ @entity1.add @cmp0, @cmp1
+ @entity1.remove @cmp0, @cmp1
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ end
+
+ it 'can clear removal_trigger, with manager' do
+ @cmp0 = @component_manager.new health: 10
+ @cmp1 = @component_manager.new health: 20
+ @entity1 = FelFlame::Entities.new
+ @system.trigger_when_removed @component_manager
+ @system.clear_triggers :removal_triggers, component_or_manager: @component_manager
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ @entity1.add @cmp0, @cmp1
+ @entity1.remove @cmp0, @cmp1
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ end
end