summaryrefslogtreecommitdiffhomepage
path: root/spec/entity_manager_spec.rb
blob: 78300c2f46283f7f31fadc6baa6cfa000ab8ce63 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
require 'felflame'

#class EntitiesTest < Minitest::Test

describe 'Entities' do

  #let :component_manager do
  #  @component_manager ||= FelFlame::Components.new('Test', :param1, param2: 'def')
  #end

  before :all do
    @component_manager ||= FelFlame::Components.new('TestEntity', :param1, param2: 'def')
  end


  before :each do
    @ent0 = FelFlame::Entities.new
    @ent1 = FelFlame::Entities.new
    @ent2 = FelFlame::Entities.new
    @cmp0 = @component_manager.new
    @cmp1 = @component_manager.new
    @cmp2 = @component_manager.new
  end

  after :each do
    FelFlame::Entities.each(&:delete)
    @component_manager.each(&:delete)
  end

  it 'won\'t add duplicate entities' do
    @ent0.add @cmp0, @cmp0, @cmp1, @cmp1
    expect(@ent0.components[@component_manager].count).to eq(2)
  end

  it 'has correct ID\'s' do
    expect(@ent0.id).to eq(0)
    expect(@ent1.id).to eq(1)
    expect(@ent2.id).to eq(2)
  end

  it 'can be accessed' do
    expect(@ent0).to eq(FelFlame::Entities[0])
    expect(@ent1).to eq(FelFlame::Entities[1])
    expect(@ent2).to eq(FelFlame::Entities[2])
  end

  it 'can have components attached' do
    @ent0.add @cmp0
    expect(@ent0.components[@component_manager][0]).to eq(@cmp0.id)

    @ent1.add @cmp1, @cmp2
    expect(@ent1.components[@component_manager].length).to eq(2)
    expect(@ent1.components[@component_manager].include?(@cmp1.id)).to be true
    expect(@ent1.components[@component_manager].include?(@cmp2.id)).to be true
  end

  it 'can get id from to_i' do
    expect(@ent0.id).to eq(@ent0.to_i)
    expect(@ent1.id).to eq(@ent1.to_i)
    expect(@ent2.id).to eq(@ent2.to_i)
  end

  it 'can have components removed' do
    @ent0.add @cmp0
    expect(@ent0.remove @cmp0).to be true
    expect(@cmp0.entities.empty?).to be true
    expect(@ent0.components[@component_manager].empty?).to be true
  end

  it 'can have many components added then removed' do
    @ent0.add @cmp0, @cmp1, @cmp2
    @ent1.add @cmp0, @cmp1
    @ent2.add @cmp1, @cmp2
    expect(@ent0.components).to eq({@component_manager => [0,1,2]})
    expect(@cmp0.entities).to eq([0,1])
    expect(@cmp1.entities).to eq([0,1,2])
    expect(@cmp2.entities).to eq([0,2])
    @ent1.delete
    expect(@cmp0.entities).to eq([0])
    expect(@cmp1.entities).to eq([0,2])
    expect(@cmp2.entities).to eq([0,2])
    @cmp1.delete
    expect(@ent0.components).to eq({@component_manager => [0,2]})
    @component_manager.each(&:delete)
    expect(@component_manager.each.to_a).to eq([])
    expect(@ent0.components).to eq({@component_manager => []})
    expect(@ent2.components).to eq({@component_manager => []})
    FelFlame::Entities.each(&:delete)
    expect(FelFlame::Entities.each.to_a).to eq([])
  end
end