asunit4 4.2.2.pre → 4.2.3.pre

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. data/Gemfile.lock +26 -0
  2. data/bin/AsUnit-4.1.2.swc +0 -0
  3. data/bin/AsUnit-4.2.3.pre.swc +0 -0
  4. data/bin/AsUnitRunner.swf +0 -0
  5. data/bin/Flex4AsUnitRunner.swf +0 -0
  6. data/build.xml +42 -2
  7. data/lib/SwiftSuspenders-v1.5.1.swc +0 -0
  8. data/lib/flexUnitTasks.jar +0 -0
  9. data/pkg/sprout-asunit4-library-4.1.2.gem +0 -0
  10. data/rakefile.rb +4 -1
  11. data/sprout/lib/asunit4.rb +1 -1
  12. data/src/asunit/asserts/assertMatches.as +6 -0
  13. data/src/asunit/asserts/assertThrowsWithMessage.as +5 -0
  14. data/src/asunit/core/AsUnitCore.as +42 -88
  15. data/src/asunit/core/FlashBuilderCore.as +2 -2
  16. data/src/asunit/core/FlashDevelopCore.as +1 -1
  17. data/src/asunit/core/FlexUnitCICore.as +17 -0
  18. data/src/asunit/core/TextCore.as +36 -54
  19. data/src/asunit/framework/Assert.as +76 -11
  20. data/src/asunit/framework/Async.as +1 -1
  21. data/src/asunit/framework/IResult.as +1 -6
  22. data/src/asunit/framework/IRunListener.as +0 -3
  23. data/src/asunit/framework/IRunner.as +0 -3
  24. data/src/asunit/framework/IRunnerFactory.as +3 -3
  25. data/src/asunit/framework/ITestListener.as +1 -2
  26. data/src/asunit/framework/Method.as +82 -80
  27. data/src/asunit/framework/Result.as +3 -24
  28. data/src/asunit/framework/RunnerFactory.as +13 -34
  29. data/src/asunit/framework/SuiteIterator.as +28 -22
  30. data/src/asunit/framework/TestCase.as +8 -3
  31. data/src/asunit/printers/FlashBuilderPrinter.as +25 -83
  32. data/src/asunit/printers/FlashDevelopPrinter.as +1 -2
  33. data/src/asunit/printers/FlexUnitCIPrinter.as +181 -0
  34. data/src/asunit/printers/TextPrinter.as +17 -46
  35. data/src/asunit/printers/XMLPrinter.as +127 -0
  36. data/src/asunit/runners/LegacyRunner.as +6 -1
  37. data/src/asunit/runners/SuiteRunner.as +30 -66
  38. data/src/asunit/runners/TestRunner.as +90 -255
  39. data/test/AllTests.as +9 -4
  40. data/test/AsUnitCIRunner.as +18 -0
  41. data/test/AsUnitRunner.as +2 -0
  42. data/test/AsUnitRunnerCS3.fla +0 -0
  43. data/test/asunit/core/AsUnitCoreTest.as +33 -15
  44. data/test/asunit/framework/AssertEqualsArraysIgnoringOrderTest.as +14 -0
  45. data/test/asunit/framework/AssertThrowsWithMessageTest.as +50 -0
  46. data/test/asunit/framework/AsyncTest.as +0 -4
  47. data/test/asunit/framework/ProceedOnEventTest.as +1 -2
  48. data/test/asunit/framework/ResultObserverTest.as +61 -0
  49. data/test/asunit/framework/RunnerFactoryTest.as +7 -9
  50. data/test/asunit/framework/VisualTestCaseTest.as +2 -26
  51. data/test/asunit/printers/FlashBuilderPrinterTest.as +18 -0
  52. data/test/asunit/printers/XMLPrinterTest.as +131 -0
  53. data/test/asunit/runners/LegacyRunnerTest.as +4 -4
  54. data/test/asunit/runners/SuiteRunnerTest.as +10 -7
  55. data/test/asunit/runners/TestRunnerAsyncMethodTest.as +9 -7
  56. data/test/asunit/runners/TestRunnerErrorMethodTest.as +1 -1
  57. data/test/asunit/runners/TestRunnerExpectsErrorTest.as +2 -2
  58. data/test/asunit/runners/TestRunnerExpectsErrorWithMessageTest.as +125 -0
  59. data/test/asunit/runners/TestRunnerIgnoredMethodTest.as +2 -3
  60. data/test/asunit/runners/TestRunnerTest.as +4 -27
  61. data/test/asunit/support/{CustomTestRunner.as → CustomSuiteRunner.as} +7 -3
  62. data/test/asunit/support/InjectionVerification.as +2 -30
  63. data/test/asunit/support/SuiteWithCustomRunner.as +1 -1
  64. data/vendor/as3injection/org/swiftsuspenders/InjectionConfig.as +78 -0
  65. data/vendor/as3injection/org/swiftsuspenders/InjectionType.as +16 -0
  66. data/vendor/as3injection/org/swiftsuspenders/Injector.as +376 -0
  67. data/vendor/as3injection/org/swiftsuspenders/InjectorError.as +17 -0
  68. data/vendor/as3injection/org/swiftsuspenders/Reflector.as +95 -0
  69. data/vendor/as3injection/org/swiftsuspenders/getConstructor.as +33 -0
  70. data/vendor/as3injection/org/swiftsuspenders/injectionpoints/ConstructorInjectionPoint.as +94 -0
  71. data/vendor/as3injection/org/swiftsuspenders/injectionpoints/InjectionPoint.as +35 -0
  72. data/vendor/as3injection/org/swiftsuspenders/injectionpoints/MethodInjectionPoint.as +122 -0
  73. data/vendor/as3injection/org/swiftsuspenders/injectionpoints/NoParamsConstructorInjectionPoint.as +24 -0
  74. data/vendor/as3injection/org/swiftsuspenders/injectionpoints/PostConstructInjectionPoint.as +52 -0
  75. data/vendor/as3injection/org/swiftsuspenders/injectionpoints/PropertyInjectionPoint.as +62 -0
  76. data/vendor/as3injection/org/swiftsuspenders/injectionresults/InjectClassResult.as +33 -0
  77. data/vendor/as3injection/org/swiftsuspenders/injectionresults/InjectOtherRuleResult.as +34 -0
  78. data/vendor/as3injection/org/swiftsuspenders/injectionresults/InjectSingletonResult.as +43 -0
  79. data/vendor/as3injection/org/swiftsuspenders/injectionresults/InjectValueResult.as +33 -0
  80. data/vendor/as3injection/org/swiftsuspenders/injectionresults/InjectionResult.as +26 -0
  81. metadata +44 -19
  82. data/bin/AsUnit-4.2.1.pre.swc +0 -0
  83. data/bin/AsUnit-4.2.2.pre.swc +0 -0
  84. data/src/asunit/framework/CallbackBridge.as +0 -175
  85. data/src/asunit/framework/ITestResult.as +0 -21
  86. data/src/asunit/framework/InjectionDelegate.as +0 -96
  87. data/src/asunit/framework/MessageBridge.as +0 -24
  88. data/src/asunit/framework/TestObserver.as +0 -12
  89. data/test/asunit/framework/CallbackBridgeTest.as +0 -73
  90. data/test/asunit/framework/InjectionDelegateTest.as +0 -79
  91. data/test/asunit/support/AnnotatedSubClass.as +0 -18
  92. data/test/asunit/support/AnnotatedSuperClass.as +0 -15
  93. data/test/asunit/support/FakeRunner.as +0 -32
  94. data/test/asunit/support/InjectTimeoutOnAsync.as +0 -14
  95. data/test/asunit/support/TestForFakeRunner.as +0 -14
@@ -1,17 +1,21 @@
1
1
  package asunit.support {
2
2
 
3
- import asunit.framework.CallbackBridge;
4
3
  import asunit.framework.IResult;
5
- import asunit.runners.TestRunner;
4
+ import asunit.framework.IRunnerFactory;
5
+ import asunit.runners.SuiteRunner;
6
6
 
7
7
  import flash.display.DisplayObjectContainer;
8
8
 
9
- public class CustomTestRunner extends TestRunner {
9
+ public class CustomSuiteRunner extends SuiteRunner {
10
10
 
11
11
  // Used so that test cases can
12
12
  // verify that this custom runner
13
13
  // worked.
14
14
  public static var runCalledCount:int;
15
+
16
+ public function CustomSuiteRunner(factory:IRunnerFactory = null) {
17
+ super(factory);
18
+ }
15
19
 
16
20
  override public function run(testClass:Class, testMethod:String=null, visualContext:DisplayObjectContainer=null):void {
17
21
  runCalledCount++;
@@ -17,42 +17,14 @@ package asunit.support {
17
17
  [Inject]
18
18
  public var context:Sprite;
19
19
 
20
- [Inject(someString="stringValue", someBoolean=false, someNumber=23.4, someInt=-23, someUInt=25)]
21
- public var custom:CustomParameters;
22
-
23
- [Test]
24
- public function injectedShouldReceiveUIntValue():void {
25
- assertSame(25, custom.someUInt);
26
- }
27
-
28
- [Test]
29
- public function injectedShouldReceiveIntegerValue():void {
30
- assertSame(-23, custom.someInt);
31
- }
32
-
33
- [Test]
34
- public function injectedShouldReceiveNumberValue():void {
35
- assertSame(23.4, custom.someNumber);
36
- }
37
-
38
- [Test]
39
- public function injectedShouldReceiveBooleanValue():void {
40
- assertSame(false, custom.someBoolean);
41
- }
42
-
43
- [Test]
44
- public function injectedShouldReceiveStringValue():void {
45
- assertEquals("stringValue", custom.someString);
46
- }
47
-
48
20
  [Test]
49
21
  public function verifyDisplayObjectInjection():void {
50
- assertNotNull("DisplayObject should exiset", context);
22
+ assertNotNull("DisplayObject should exist", context);
51
23
  }
52
24
 
53
25
  [Test]
54
26
  public function verifyDisplayObjectAttachedToStage():void {
55
- assertNotNull("DisplayObjects hould be attached", context.stage);
27
+ assertNotNull("DisplayObjects should be attached to stage", context.stage);
56
28
  }
57
29
 
58
30
  [Test]
@@ -1,7 +1,7 @@
1
1
  package asunit.support {
2
2
 
3
3
  [Suite]
4
- [RunWith("asunit.support.CustomTestRunner")]
4
+ [RunWith("asunit.support.CustomSuiteRunner")]
5
5
  public class SuiteWithCustomRunner {
6
6
 
7
7
  public var succeedAssertTrue:SucceedAssertTrue;
@@ -0,0 +1,78 @@
1
+ /*
2
+ * Copyright (c) 2009 the original author or authors
3
+ *
4
+ * Permission is hereby granted to use, modify, and distribute this file
5
+ * in accordance with the terms of the license agreement accompanying it.
6
+ */
7
+
8
+ package org.swiftsuspenders
9
+ {
10
+ import org.swiftsuspenders.injectionresults.InjectionResult;
11
+
12
+ public class InjectionConfig
13
+ {
14
+ /*******************************************************************************************
15
+ * public properties *
16
+ *******************************************************************************************/
17
+ public var request : Class;
18
+ public var injectionName : String;
19
+
20
+
21
+ /*******************************************************************************************
22
+ * private properties *
23
+ *******************************************************************************************/
24
+ private var m_injector : Injector;
25
+ private var m_result : InjectionResult;
26
+
27
+
28
+ /*******************************************************************************************
29
+ * public methods *
30
+ *******************************************************************************************/
31
+ public function InjectionConfig(request : Class, injectionName : String)
32
+ {
33
+ this.request = request;
34
+ this.injectionName = injectionName;
35
+ }
36
+
37
+ public function getResponse(injector : Injector) : Object
38
+ {
39
+ if (m_result)
40
+ {
41
+ return m_result.getResponse(m_injector || injector);
42
+ }
43
+ var parentConfig : InjectionConfig =
44
+ (m_injector || injector).getAncestorMapping(request, injectionName);
45
+ if (parentConfig)
46
+ {
47
+ return parentConfig.getResponse(injector);
48
+ }
49
+ return null;
50
+ }
51
+
52
+ public function hasResponse(injector : Injector) : Boolean
53
+ {
54
+ if (m_result)
55
+ {
56
+ return true;
57
+ }
58
+ var parentConfig : InjectionConfig =
59
+ (m_injector || injector).getAncestorMapping(request, injectionName);
60
+ return parentConfig != null;
61
+ }
62
+
63
+ public function hasOwnResponse() : Boolean
64
+ {
65
+ return m_result != null;
66
+ }
67
+
68
+ public function setResult(result : InjectionResult) : void
69
+ {
70
+ m_result = result;
71
+ }
72
+
73
+ public function setInjector(injector : Injector) : void
74
+ {
75
+ m_injector = injector;
76
+ }
77
+ }
78
+ }
@@ -0,0 +1,16 @@
1
+ /*
2
+ * Copyright (c) 2009 the original author or authors
3
+ *
4
+ * Permission is hereby granted to use, modify, and distribute this file
5
+ * in accordance with the terms of the license agreement accompanying it.
6
+ */
7
+
8
+ package org.swiftsuspenders
9
+ {
10
+ public class InjectionType
11
+ {
12
+ public static const VALUE : int = 0;
13
+ public static const CLASS : int = 1;
14
+ public static const SINGLETON : int = 2;
15
+ }
16
+ }
@@ -0,0 +1,376 @@
1
+ /*
2
+ * Copyright (c) 2009-2010 the original author or authors
3
+ *
4
+ * Permission is hereby granted to use, modify, and distribute this file
5
+ * in accordance with the terms of the license agreement accompanying it.
6
+ */
7
+
8
+ package org.swiftsuspenders
9
+ {
10
+ import flash.system.ApplicationDomain;
11
+ import flash.utils.Dictionary;
12
+ import flash.utils.Proxy;
13
+ import flash.utils.describeType;
14
+ import flash.utils.getDefinitionByName;
15
+ import flash.utils.getQualifiedClassName;
16
+
17
+ import org.swiftsuspenders.injectionpoints.ConstructorInjectionPoint;
18
+ import org.swiftsuspenders.injectionpoints.InjectionPoint;
19
+ import org.swiftsuspenders.injectionpoints.MethodInjectionPoint;
20
+ import org.swiftsuspenders.injectionpoints.NoParamsConstructorInjectionPoint;
21
+ import org.swiftsuspenders.injectionpoints.PostConstructInjectionPoint;
22
+ import org.swiftsuspenders.injectionpoints.PropertyInjectionPoint;
23
+ import org.swiftsuspenders.injectionresults.InjectClassResult;
24
+ import org.swiftsuspenders.injectionresults.InjectOtherRuleResult;
25
+ import org.swiftsuspenders.injectionresults.InjectSingletonResult;
26
+ import org.swiftsuspenders.injectionresults.InjectValueResult;
27
+
28
+ public class Injector
29
+ {
30
+ /*******************************************************************************************
31
+ * private properties *
32
+ *******************************************************************************************/
33
+ private var m_parentInjector : Injector;
34
+ private var m_applicationDomain:ApplicationDomain;
35
+ private var m_mappings : Dictionary;
36
+ private var m_injectionPointLists : Dictionary;
37
+ private var m_constructorInjectionPoints : Dictionary;
38
+ private var m_attendedToInjectees : Dictionary;
39
+ private var m_xmlMetadata : XML;
40
+
41
+
42
+ /*******************************************************************************************
43
+ * public methods *
44
+ *******************************************************************************************/
45
+ public function Injector(xmlConfig : XML = null)
46
+ {
47
+ m_mappings = new Dictionary();
48
+ m_injectionPointLists = new Dictionary();
49
+ m_constructorInjectionPoints = new Dictionary();
50
+ m_attendedToInjectees = new Dictionary(true);
51
+ m_xmlMetadata = xmlConfig;
52
+ }
53
+
54
+ public function mapValue(whenAskedFor : Class, useValue : Object, named : String = "") : *
55
+ {
56
+ var config : InjectionConfig = getMapping(whenAskedFor, named);
57
+ config.setResult(new InjectValueResult(useValue));
58
+ return config;
59
+ }
60
+
61
+ public function mapClass(
62
+ whenAskedFor : Class, instantiateClass : Class, named : String = "") : *
63
+ {
64
+ var config : InjectionConfig = getMapping(whenAskedFor, named);
65
+ config.setResult(new InjectClassResult(instantiateClass));
66
+ return config;
67
+ }
68
+
69
+ public function mapSingleton(whenAskedFor : Class, named : String = "") : *
70
+ {
71
+ return mapSingletonOf(whenAskedFor, whenAskedFor, named);
72
+ }
73
+
74
+ public function mapSingletonOf(
75
+ whenAskedFor : Class, useSingletonOf : Class, named : String = "") : *
76
+ {
77
+ var config : InjectionConfig = getMapping(whenAskedFor, named);
78
+ config.setResult(new InjectSingletonResult(useSingletonOf));
79
+ return config;
80
+ }
81
+
82
+ public function mapRule(whenAskedFor : Class, useRule : *, named : String = "") : *
83
+ {
84
+ var config : InjectionConfig = getMapping(whenAskedFor, named);
85
+ config.setResult(new InjectOtherRuleResult(useRule));
86
+ return useRule;
87
+ }
88
+
89
+ public function getMapping(whenAskedFor : Class, named : String = "") : InjectionConfig
90
+ {
91
+ var requestName : String = getQualifiedClassName(whenAskedFor);
92
+ var config : InjectionConfig = m_mappings[requestName + '#' + named];
93
+ if (!config)
94
+ {
95
+ config = m_mappings[requestName + '#' + named] =
96
+ new InjectionConfig(whenAskedFor, named);
97
+ }
98
+ return config;
99
+ }
100
+
101
+ public function injectInto(target : Object) : void
102
+ {
103
+ if (m_attendedToInjectees[target])
104
+ {
105
+ return;
106
+ }
107
+ m_attendedToInjectees[target] = true;
108
+
109
+ //get injection points or cache them if this target's class wasn't encountered before
110
+ var injectionPoints : Array;
111
+
112
+ var ctor : Class = getConstructor(target);
113
+
114
+ injectionPoints = m_injectionPointLists[ctor] || getInjectionPoints(ctor);
115
+
116
+ var length : int = injectionPoints.length;
117
+ for (var i : int = 0; i < length; i++)
118
+ {
119
+ var injectionPoint : InjectionPoint = injectionPoints[i];
120
+ injectionPoint.applyInjection(target, this);
121
+ }
122
+
123
+ }
124
+
125
+ public function instantiate(clazz:Class):*
126
+ {
127
+ var injectionPoint : InjectionPoint = m_constructorInjectionPoints[clazz];
128
+ if (!injectionPoint)
129
+ {
130
+ getInjectionPoints(clazz);
131
+ injectionPoint = m_constructorInjectionPoints[clazz];
132
+ }
133
+ var instance : * = injectionPoint.applyInjection(clazz, this);
134
+ injectInto(instance);
135
+ return instance;
136
+ }
137
+
138
+ public function unmap(clazz : Class, named : String = "") : void
139
+ {
140
+ var mapping : InjectionConfig = getConfigurationForRequest(clazz, named);
141
+ if (!mapping)
142
+ {
143
+ throw new InjectorError('Error while removing an injector mapping: ' +
144
+ 'No mapping defined for class ' + getQualifiedClassName(clazz) +
145
+ ', named "' + named + '"');
146
+ }
147
+ mapping.setResult(null);
148
+ }
149
+
150
+ public function hasMapping(clazz : Class, named : String = '') : Boolean
151
+ {
152
+ var mapping : InjectionConfig = getConfigurationForRequest(clazz, named);
153
+ if (!mapping)
154
+ {
155
+ return false;
156
+ }
157
+ return mapping.hasResponse(this);
158
+ }
159
+
160
+ public function getInstance(clazz : Class, named : String = '') : *
161
+ {
162
+ var mapping : InjectionConfig = getConfigurationForRequest(clazz, named);
163
+ if (!mapping || !mapping.hasResponse(this))
164
+ {
165
+ throw new InjectorError('Error while getting mapping response: ' +
166
+ 'No mapping defined for class ' + getQualifiedClassName(clazz) +
167
+ ', named "' + named + '"');
168
+ }
169
+ return mapping.getResponse(this);
170
+ }
171
+
172
+ public function createChildInjector(applicationDomain:ApplicationDomain=null) : Injector
173
+ {
174
+ var injector : Injector = new Injector();
175
+ injector.setApplicationDomain(applicationDomain);
176
+ injector.setParentInjector(this);
177
+ return injector;
178
+ }
179
+
180
+ public function setApplicationDomain(applicationDomain:ApplicationDomain):void
181
+ {
182
+ m_applicationDomain = applicationDomain;
183
+ }
184
+
185
+ public function getApplicationDomain():ApplicationDomain
186
+ {
187
+ return m_applicationDomain ? m_applicationDomain : ApplicationDomain.currentDomain;
188
+ }
189
+
190
+ public function setParentInjector(parentInjector : Injector) : void
191
+ {
192
+ //restore own map of worked injectees if parent injector is removed
193
+ if (m_parentInjector && !parentInjector)
194
+ {
195
+ m_attendedToInjectees = new Dictionary(true);
196
+ }
197
+ m_parentInjector = parentInjector;
198
+ //use parent's map of worked injectees
199
+ if (parentInjector)
200
+ {
201
+ m_attendedToInjectees = parentInjector.attendedToInjectees;
202
+ }
203
+ }
204
+
205
+ public function getParentInjector() : Injector
206
+ {
207
+ return m_parentInjector;
208
+ }
209
+
210
+
211
+ /*******************************************************************************************
212
+ * internal methods *
213
+ *******************************************************************************************/
214
+ internal function getAncestorMapping(
215
+ whenAskedFor : Class, named : String = null) : InjectionConfig
216
+ {
217
+ var parent : Injector = m_parentInjector;
218
+ while (parent)
219
+ {
220
+ var parentConfig : InjectionConfig =
221
+ parent.getConfigurationForRequest(whenAskedFor, named, false);
222
+ if (parentConfig && parentConfig.hasOwnResponse())
223
+ {
224
+ return parentConfig;
225
+ }
226
+ parent = parent.getParentInjector();
227
+ }
228
+ return null;
229
+ }
230
+
231
+ internal function get attendedToInjectees() : Dictionary
232
+ {
233
+ return m_attendedToInjectees;
234
+ }
235
+
236
+
237
+ /*******************************************************************************************
238
+ * private methods *
239
+ *******************************************************************************************/
240
+ private function getInjectionPoints(clazz : Class) : Array
241
+ {
242
+ var description : XML = describeType(clazz);
243
+ var injectionPoints : Array = [];
244
+ m_injectionPointLists[clazz] = injectionPoints;
245
+ m_injectionPointLists[description.@name.toString()] = injectionPoints;
246
+ var node : XML;
247
+
248
+ // This is where we have to wire in the XML...
249
+ if(m_xmlMetadata)
250
+ {
251
+ createInjectionPointsFromConfigXML(description);
252
+ addParentInjectionPoints(description, injectionPoints);
253
+ }
254
+
255
+ var injectionPoint : InjectionPoint;
256
+ //get constructor injections
257
+ node = description.factory.constructor[0];
258
+ if (node)
259
+ {
260
+ m_constructorInjectionPoints[clazz] =
261
+ new ConstructorInjectionPoint(node, clazz, this);
262
+ }
263
+ else
264
+ {
265
+ m_constructorInjectionPoints[clazz] = new NoParamsConstructorInjectionPoint();
266
+ }
267
+ //get injection points for variables
268
+ for each (node in description.factory.*.
269
+ (name() == 'variable' || name() == 'accessor').metadata.(@name == 'Inject'))
270
+ {
271
+ injectionPoint = new PropertyInjectionPoint(node, this);
272
+ injectionPoints.push(injectionPoint);
273
+ }
274
+
275
+ //get injection points for methods
276
+ for each (node in description.factory.method.metadata.(@name == 'Inject'))
277
+ {
278
+ injectionPoint = new MethodInjectionPoint(node, this);
279
+ injectionPoints.push(injectionPoint);
280
+ }
281
+
282
+ //get post construct methods
283
+ var postConstructMethodPoints : Array = [];
284
+ for each (node in description.factory.method.metadata.(@name == 'PostConstruct'))
285
+ {
286
+ injectionPoint = new PostConstructInjectionPoint(node, this);
287
+ postConstructMethodPoints.push(injectionPoint);
288
+ }
289
+ if (postConstructMethodPoints.length > 0)
290
+ {
291
+ postConstructMethodPoints.sortOn("order", Array.NUMERIC);
292
+ injectionPoints.push.apply(injectionPoints, postConstructMethodPoints);
293
+ }
294
+
295
+ return injectionPoints;
296
+ }
297
+
298
+ private function getConfigurationForRequest(
299
+ clazz : Class, named : String, traverseAncestors : Boolean = true) : InjectionConfig
300
+ {
301
+ var requestName : String = getQualifiedClassName(clazz);
302
+ var config:InjectionConfig = m_mappings[requestName + '#' + named];
303
+ if(!config && traverseAncestors &&
304
+ m_parentInjector && m_parentInjector.hasMapping(clazz, named))
305
+ {
306
+ config = getAncestorMapping(clazz, named);
307
+ }
308
+ return config;
309
+ }
310
+
311
+ private function createInjectionPointsFromConfigXML(description : XML) : void
312
+ {
313
+ var node : XML;
314
+ //first, clear out all "Inject" metadata, we want a clean slate to have the result
315
+ //work the same in the Flash IDE and MXMLC
316
+ for each (node in description..metadata.(@name=='Inject' || @name=='PostConstruct'))
317
+ {
318
+ delete node.parent().metadata.(@name=='Inject' || @name=='PostConstruct')[0];
319
+ }
320
+
321
+ //now, we create the new injection points based on the given xml file
322
+ var className:String = description.factory.@type;
323
+ for each (node in m_xmlMetadata.type.(@name == className).children())
324
+ {
325
+ var metaNode : XML = <metadata/>;
326
+ if (node.name() == 'postconstruct')
327
+ {
328
+ metaNode.@name = 'PostConstruct';
329
+ if (node.@order.length())
330
+ {
331
+ metaNode.appendChild(<arg key='order' value={node.@order}/>);
332
+ }
333
+ }
334
+ else
335
+ {
336
+ metaNode.@name = 'Inject';
337
+ if (node.@injectionname.length())
338
+ {
339
+ metaNode.appendChild(<arg key='name' value={node.@injectionname}/>);
340
+ }
341
+ for each (var arg : XML in node.arg)
342
+ {
343
+ metaNode.appendChild(<arg key='name' value={arg.@injectionname}/>);
344
+ }
345
+ }
346
+ var typeNode : XML;
347
+ if (node.name() == 'constructor')
348
+ {
349
+ typeNode = description.factory[0];
350
+ }
351
+ else
352
+ {
353
+ typeNode = description.factory.*.(attribute('name') == node.@name)[0];
354
+ if (!typeNode)
355
+ {
356
+ throw new InjectorError('Error in XML configuration: Class "' + className +
357
+ '" doesn\'t contain the instance member "' + node.@name + '"');
358
+ }
359
+ }
360
+ typeNode.appendChild(metaNode);
361
+ }
362
+ }
363
+
364
+ private function addParentInjectionPoints(description : XML, injectionPoints : Array) : void
365
+ {
366
+ var parentClassName : String = description.factory.extendsClass.@type[0];
367
+ if (!parentClassName)
368
+ {
369
+ return;
370
+ }
371
+ var parentInjectionPoints : Array = m_injectionPointLists[parentClassName] ||
372
+ getInjectionPoints(Class(getDefinitionByName(parentClassName)));
373
+ injectionPoints.push.apply(injectionPoints, parentInjectionPoints);
374
+ }
375
+ }
376
+ }