Skip to content

Commit 1666a0f

Browse files
committed
Made sure aliases are removed upon destroy of a PBObject, added unit test for registerAlias functionality
1 parent ea29a5b commit 1666a0f

File tree

3 files changed

+90
-2
lines changed

3 files changed

+90
-2
lines changed

src/com/pblabs/engine/core/NameManager.as

+34-2
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,9 @@ package com.pblabs.engine.core
7474
_objects[object.name] = null;
7575
delete _objects[object.name];
7676
}
77+
78+
79+
unregisterAliasses(object);
7780
}
7881

7982

@@ -94,6 +97,11 @@ package com.pblabs.engine.core
9497
}
9598

9699
_objects[alias] = object;
100+
101+
//Store the alias in the registeredAliases map
102+
if(!_registeredAliases[object])
103+
_registeredAliases[object] = [];
104+
_registeredAliases[object].push(alias);
97105
}
98106

99107
/**
@@ -102,14 +110,34 @@ package com.pblabs.engine.core
102110
* @param alias The alias to unregister
103111
**/
104112
public function unregisterAlias(object:IPBObject, alias:String):void{
105-
if(_objects[alias] && _objects[alias] == object){
113+
// Check if the alias excists, points to the IPBObject and is an alias
114+
if(_objects[alias] && _objects[alias] == object && _registeredAliases[object] && _registeredAliases[object].indexOf(alias) > -1){
106115
_objects[alias] = null;
107116
delete _objects[alias];
117+
118+
_registeredAliases[object].splice(_registeredAliases[object].indexOf(alias), 1);
119+
if(_registeredAliases[object].length < 1)
120+
delete _registeredAliases[object];
121+
108122
} else {
109-
Logger.warn(this, "unregisterAlias", "Attempt made to unregister alias '"+alias+"' but the object registered is not the same");
123+
Logger.warn(this, "unregisterAlias", "Attempt made to unregister alias '"+alias+"' but the object registered is not the same or the alias is not a registered alias");
110124
return;
111125
}
112126
}
127+
/**
128+
* Unregister all aliasses for an IPBObject
129+
* @param object The IPBObject to unregister al aliasses for
130+
**/
131+
public function unregisterAliasses(object:IPBObject):void{
132+
if(!_registeredAliases[object])
133+
return;
134+
135+
for each(var alias:String in _registeredAliases[object]){
136+
_objects[alias] = null;
137+
delete _objects[alias];
138+
}
139+
delete _registeredAliases[object];
140+
}
113141

114142
/**
115143
* Looks up a PBObject with the specified name.
@@ -200,5 +228,9 @@ package com.pblabs.engine.core
200228
}
201229

202230
private var _objects:Dictionary = new Dictionary();
231+
232+
//Map from PBObject -> String[] that contains all registered aliasses
233+
private var _registeredAliases:Dictionary = new Dictionary();
234+
203235
}
204236
}

test/src/com/pblabs/PBEngineTestSuite.as

+2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ package com.pblabs
1717
import com.pblabs.engine.tests.ResourceTests;
1818
import com.pblabs.engine.tests.SanityTests;
1919
import com.pblabs.engine.tests.UtilTests;
20+
import com.pblabs.engine.tests.RegisterAliasTests;
2021
import com.pblabs.rendering2D.tests.Rendering2DTests;
2122

2223
/**
@@ -39,5 +40,6 @@ package com.pblabs
3940
public var inputTests:InputTests;
4041
public var entityRegistrationTests:EntityRegistrationTests;
4142
public var groupAndSetTests:GroupAndSetTests;
43+
public var registerAliasTests:RegisterAliasTests;
4244
}
4345
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package com.pblabs.engine.tests
2+
{
3+
import com.pblabs.engine.PBE;
4+
import com.pblabs.engine.entity.IEntity;
5+
import com.pblabs.engine.entity.allocateEntity;
6+
7+
import flexunit.framework.Assert;
8+
9+
import mx.core.UIComponent;
10+
11+
import org.fluint.uiImpersonation.UIImpersonator;
12+
13+
/**
14+
* Unit test for registerAlias and unregisterAlias functionality on NameManager
15+
**/
16+
public class RegisterAliasTests
17+
{
18+
19+
20+
[Test]
21+
public function testRegisterAlias():void{
22+
var entity:IEntity = allocateEntity();
23+
entity.initialize("testEntity");
24+
25+
Assert.assertNull(PBE.nameManager.lookup("testAlias"));
26+
27+
//Register the alias and check if lookups work ok
28+
PBE.nameManager.registerAlias(entity, "testAlias");
29+
PBE.nameManager.registerAlias(entity, "testAlias2");
30+
Assert.assertEquals(entity, PBE.nameManager.lookup("testAlias"));
31+
Assert.assertEquals(entity, PBE.nameManager.lookup("testAlias2"));
32+
33+
//Unregister the alias
34+
PBE.nameManager.unregisterAlias(entity, "testAlias");
35+
Assert.assertNull(PBE.nameManager.lookup("testAlias"));
36+
Assert.assertEquals(entity, PBE.nameManager.lookup("testAlias2"));
37+
PBE.nameManager.unregisterAlias(entity, "testAlias2");
38+
Assert.assertNull(PBE.nameManager.lookup("testAlias2"));
39+
40+
//Try to unregister the entityname, this should not remove the entity registration
41+
PBE.nameManager.unregisterAlias(entity, "testEntity");
42+
Assert.assertEquals(entity, PBE.nameManager.lookup("testEntity"));
43+
44+
//Re-register the alias and destroy the entity
45+
PBE.nameManager.registerAlias(entity, "testAlias");
46+
PBE.nameManager.registerAlias(entity, "testAlias2");
47+
Assert.assertEquals(entity, PBE.nameManager.lookup("testAlias"));
48+
Assert.assertEquals(entity, PBE.nameManager.lookup("testAlias2"));
49+
entity.destroy();
50+
Assert.assertNull(PBE.nameManager.lookup("testAlias"));
51+
Assert.assertNull(PBE.nameManager.lookup("testAlias2"));
52+
}
53+
}
54+
}

0 commit comments

Comments
 (0)