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
@@ -0,0 +1,17 @@
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 InjectorError extends Error
11
+ {
12
+ public function InjectorError(message:*="", id:*=0)
13
+ {
14
+ super(message, id);
15
+ }
16
+ }
17
+ }
@@ -0,0 +1,95 @@
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 flash.system.ApplicationDomain;
11
+ import flash.utils.describeType;
12
+ import flash.utils.getDefinitionByName;
13
+ import flash.utils.getQualifiedClassName;
14
+
15
+ /**
16
+ * @author tschneidereit
17
+ */
18
+ public class Reflector
19
+ {
20
+ /*******************************************************************************************
21
+ * public methods *
22
+ *******************************************************************************************/
23
+ public function Reflector()
24
+ {
25
+ }
26
+
27
+ public function classExtendsOrImplements(classOrClassName : Object,
28
+ superclass : Class, application : ApplicationDomain = null) : Boolean
29
+ {
30
+ var actualClass : Class;
31
+
32
+ if (classOrClassName is Class)
33
+ {
34
+ actualClass = Class(classOrClassName);
35
+ }
36
+ else if (classOrClassName is String)
37
+ {
38
+ try
39
+ {
40
+ actualClass = Class(getDefinitionByName(classOrClassName as String));
41
+ }
42
+ catch (e : Error)
43
+ {
44
+ throw new Error("The class name " + classOrClassName +
45
+ " is not valid because of " + e + "\n" + e.getStackTrace());
46
+ }
47
+ }
48
+
49
+ if (!actualClass)
50
+ {
51
+ throw new Error("The parameter classOrClassName must be a valid Class " +
52
+ "instance or fully qualified class name.");
53
+ }
54
+
55
+ if (actualClass == superclass)
56
+ return true;
57
+
58
+ var factoryDescription : XML = describeType(actualClass).factory[0];
59
+
60
+ return (factoryDescription.children().(
61
+ name() == "implementsInterface" || name() == "extendsClass").(
62
+ attribute("type") == getQualifiedClassName(superclass)).length() > 0);
63
+ }
64
+
65
+ public function getClass(value : *, applicationDomain : ApplicationDomain = null) : Class
66
+ {
67
+ if (value is Class)
68
+ {
69
+ return value;
70
+ }
71
+ return getConstructor(value);
72
+ }
73
+
74
+ public function getFQCN(value : *, replaceColons : Boolean = false) : String
75
+ {
76
+ var fqcn:String;
77
+ if (value is String)
78
+ {
79
+ fqcn = value;
80
+ // Add colons if missing and desired.
81
+ if (!replaceColons && fqcn.indexOf('::') == -1)
82
+ {
83
+ var lastDotIndex:int = fqcn.lastIndexOf('.');
84
+ if (lastDotIndex == -1) return fqcn;
85
+ return fqcn.substring(0, lastDotIndex) + '::' + fqcn.substring(lastDotIndex + 1);
86
+ }
87
+ }
88
+ else
89
+ {
90
+ fqcn = getQualifiedClassName(value);
91
+ }
92
+ return replaceColons ? fqcn.replace('::', '.') : fqcn;
93
+ }
94
+ }
95
+ }
@@ -0,0 +1,33 @@
1
+ /*
2
+ * Copyright (c) 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.utils.Proxy;
11
+ import flash.utils.getDefinitionByName;
12
+ import flash.utils.getQualifiedClassName;
13
+
14
+ internal function getConstructor(value : Object) : Class
15
+ {
16
+ /*
17
+ There are several types for which the 'constructor' property doesn't work:
18
+ - instances of Proxy, XML and XMLList throw exceptions when trying to access 'constructor'
19
+ - int and uint return Number as their constructor
20
+ For these, we have to fall back to more verbose ways of getting the constructor.
21
+
22
+ Additionally, Vector instances always return Vector.<*> when queried for their constructor.
23
+ Ideally, that would also be resolved, but the SwiftSuspenders wouldn't be compatible with
24
+ Flash Player < 10, anymore.
25
+ */
26
+ if (value is Proxy || value is Number || value is XML || value is XMLList)
27
+ {
28
+ var fqcn : String = getQualifiedClassName(value);
29
+ return Class(getDefinitionByName(fqcn));
30
+ }
31
+ return value.constructor;
32
+ }
33
+ }
@@ -0,0 +1,94 @@
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.injectionpoints
9
+ {
10
+ import flash.utils.describeType;
11
+
12
+ import org.swiftsuspenders.Injector;
13
+
14
+ public class ConstructorInjectionPoint extends MethodInjectionPoint
15
+ {
16
+ /*******************************************************************************************
17
+ * public methods *
18
+ *******************************************************************************************/
19
+ public function ConstructorInjectionPoint(node : XML, clazz : Class, injector : Injector)
20
+ {
21
+ /*
22
+ In many cases, the flash player doesn't give us type information for constructors until
23
+ the class has been instantiated at least once. Therefore, we do just that if we don't get
24
+ type information for at least one parameter.
25
+ */
26
+ if (node.parameter.(@type == '*').length() == node.parameter.@type.length())
27
+ {
28
+ createDummyInstance(node, clazz);
29
+ }
30
+ super(node, injector);
31
+ }
32
+
33
+ override public function applyInjection(target : Object, injector : Injector) : Object
34
+ {
35
+ var p : Array = gatherParameterValues(target, injector);
36
+ //the only way to implement ctor injections, really!
37
+ switch (p.length)
38
+ {
39
+ case 0 : return (new target());
40
+ case 1 : return (new target(p[0]));
41
+ case 2 : return (new target(p[0], p[1]));
42
+ case 3 : return (new target(p[0], p[1], p[2]));
43
+ case 4 : return (new target(p[0], p[1], p[2], p[3]));
44
+ case 5 : return (new target(p[0], p[1], p[2], p[3], p[4]));
45
+ case 6 : return (new target(p[0], p[1], p[2], p[3], p[4], p[5]));
46
+ case 7 : return (new target(p[0], p[1], p[2], p[3], p[4], p[5], p[6]));
47
+ case 8 : return (new target(p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7]));
48
+ case 9 : return (new target(p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7], p[8]));
49
+ case 10 : return (new target(p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7], p[8], p[9]));
50
+ }
51
+ return null;
52
+ }
53
+
54
+ /*******************************************************************************************
55
+ * protected methods *
56
+ *******************************************************************************************/
57
+ override protected function initializeInjection(node : XML, injector : Injector) : void
58
+ {
59
+ var nameArgs : XMLList = node.parent().metadata.(@name == 'Inject').arg.(@key == 'name');
60
+ methodName = 'constructor';
61
+
62
+ gatherParameters(node, nameArgs, injector);
63
+ }
64
+
65
+ /*******************************************************************************************
66
+ * private methods *
67
+ *******************************************************************************************/
68
+ private function createDummyInstance(constructorNode : XML, clazz : Class) : void
69
+ {
70
+ try
71
+ {
72
+ switch (constructorNode.children().length())
73
+ {
74
+ case 0 : (new clazz()); break;
75
+ case 1 : (new clazz(null)); break;
76
+ case 2 : (new clazz(null, null)); break;
77
+ case 3 : (new clazz(null, null, null)); break;
78
+ case 4 : (new clazz(null, null, null, null)); break;
79
+ case 5 : (new clazz(null, null, null, null, null)); break;
80
+ case 6 : (new clazz(null, null, null, null, null, null)); break;
81
+ case 7 : (new clazz(null, null, null, null, null, null, null)); break;
82
+ case 8 : (new clazz(null, null, null, null, null, null, null, null)); break;
83
+ case 9 : (new clazz(null, null, null, null, null, null, null, null, null)); break;
84
+ case 10 : (new clazz(null, null, null, null, null, null, null, null, null, null)); break;
85
+ }
86
+ }
87
+ catch (error : Error)
88
+ {
89
+ trace(error);
90
+ }
91
+ constructorNode.setChildren(describeType(clazz).factory.constructor[0].children());
92
+ }
93
+ }
94
+ }
@@ -0,0 +1,35 @@
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.injectionpoints
9
+ {
10
+ import org.swiftsuspenders.Injector;
11
+
12
+ public class InjectionPoint
13
+ {
14
+ /*******************************************************************************************
15
+ * public methods *
16
+ *******************************************************************************************/
17
+ public function InjectionPoint(node : XML, injector : Injector)
18
+ {
19
+ initializeInjection(node, injector);
20
+ }
21
+
22
+ public function applyInjection(target : Object, injector : Injector) : Object
23
+ {
24
+ return target;
25
+ }
26
+
27
+
28
+ /*******************************************************************************************
29
+ * protected methods *
30
+ *******************************************************************************************/
31
+ protected function initializeInjection(node : XML, injector : Injector) : void
32
+ {
33
+ }
34
+ }
35
+ }
@@ -0,0 +1,122 @@
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.injectionpoints
9
+ {
10
+ import flash.utils.getDefinitionByName;
11
+ import flash.utils.getQualifiedClassName;
12
+
13
+ import org.swiftsuspenders.InjectionConfig;
14
+ import org.swiftsuspenders.Injector;
15
+ import org.swiftsuspenders.InjectorError;
16
+
17
+ public class MethodInjectionPoint extends InjectionPoint
18
+ {
19
+ /*******************************************************************************************
20
+ * private properties *
21
+ *******************************************************************************************/
22
+ protected var methodName : String;
23
+ protected var m_injectionConfigs : Array;
24
+ protected var requiredParameters : int = 0;
25
+
26
+
27
+ /*******************************************************************************************
28
+ * public methods *
29
+ *******************************************************************************************/
30
+ public function MethodInjectionPoint(node : XML, injector : Injector)
31
+ {
32
+ super(node, injector);
33
+ }
34
+
35
+ override public function applyInjection(target : Object, injector : Injector) : Object
36
+ {
37
+ var parameters : Array = gatherParameterValues(target, injector);
38
+ var method : Function = target[methodName];
39
+ method.apply(target, parameters);
40
+ return target;
41
+ }
42
+
43
+
44
+ /*******************************************************************************************
45
+ * protected methods *
46
+ *******************************************************************************************/
47
+ override protected function initializeInjection(node : XML, injector : Injector) : void
48
+ {
49
+ var nameArgs : XMLList = node.arg.(@key == 'name');
50
+ var methodNode : XML = node.parent();
51
+ methodName = methodNode.@name.toString();
52
+
53
+ gatherParameters(methodNode, nameArgs, injector);
54
+ }
55
+
56
+ protected function gatherParameters(
57
+ methodNode : XML, nameArgs : XMLList, injector : Injector) : void
58
+ {
59
+ m_injectionConfigs = [];
60
+ var i : int = 0;
61
+ for each (var parameter : XML in methodNode.parameter)
62
+ {
63
+ var injectionName : String = '';
64
+ if (nameArgs[i])
65
+ {
66
+ injectionName = nameArgs[i].@value.toString();
67
+ }
68
+ var parameterTypeName : String = parameter.@type.toString();
69
+ var parameterType : Class;
70
+ if (parameterTypeName == '*')
71
+ {
72
+ if (parameter.@optional.toString() == 'false')
73
+ {
74
+ //TODO: Find a way to trace name of affected class here
75
+ throw new Error('Error in method definition of injectee. Required ' +
76
+ 'parameters can\'t have type "*".');
77
+ }
78
+ else
79
+ {
80
+ parameterTypeName = null;
81
+ }
82
+ }
83
+ else
84
+ {
85
+ parameterType = Class(injector.getApplicationDomain().getDefinition(parameterTypeName));
86
+ }
87
+ m_injectionConfigs.push(injector.getMapping(parameterType, injectionName));
88
+ if (parameter.@optional.toString() == 'false')
89
+ {
90
+ requiredParameters++;
91
+ }
92
+ i++;
93
+ }
94
+ }
95
+
96
+ protected function gatherParameterValues(target : Object, injector : Injector) : Array
97
+ {
98
+ var parameters : Array = [];
99
+ var length : int = m_injectionConfigs.length;
100
+ for (var i : int = 0; i < length; i++)
101
+ {
102
+ var config : InjectionConfig = m_injectionConfigs[i];
103
+ var injection : Object = config.getResponse(injector);
104
+ if (injection == null)
105
+ {
106
+ if (i >= requiredParameters)
107
+ {
108
+ break;
109
+ }
110
+ throw(new InjectorError(
111
+ 'Injector is missing a rule to handle injection into target ' + target +
112
+ '. Target dependency: ' + getQualifiedClassName(config.request) +
113
+ ', method: ' + methodName + ', parameter: ' + (i + 1)
114
+ ));
115
+ }
116
+
117
+ parameters[i] = injection;
118
+ }
119
+ return parameters;
120
+ }
121
+ }
122
+ }
@@ -0,0 +1,24 @@
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.injectionpoints
9
+ {
10
+ import org.swiftsuspenders.Injector;
11
+
12
+ public class NoParamsConstructorInjectionPoint extends InjectionPoint
13
+ {
14
+ public function NoParamsConstructorInjectionPoint()
15
+ {
16
+ super(null, null);
17
+ }
18
+
19
+ override public function applyInjection(target : Object, injector : Injector) : Object
20
+ {
21
+ return new target();
22
+ }
23
+ }
24
+ }
@@ -0,0 +1,52 @@
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.injectionpoints
9
+ {
10
+ import org.swiftsuspenders.Injector;
11
+
12
+ public class PostConstructInjectionPoint extends InjectionPoint
13
+ {
14
+ /*******************************************************************************************
15
+ * private properties *
16
+ *******************************************************************************************/
17
+ protected var methodName : String;
18
+ protected var orderValue:int;
19
+
20
+
21
+ /*******************************************************************************************
22
+ * public methods *
23
+ *******************************************************************************************/
24
+ public function PostConstructInjectionPoint(node:XML, injector : Injector)
25
+ {
26
+ super(node, injector);
27
+ }
28
+
29
+ public function get order():int
30
+ {
31
+ return orderValue;
32
+ }
33
+
34
+ override public function applyInjection(target : Object, injector : Injector) : Object
35
+ {
36
+ target[methodName]();
37
+ return target;
38
+ }
39
+
40
+
41
+ /*******************************************************************************************
42
+ * protected methods *
43
+ *******************************************************************************************/
44
+ override protected function initializeInjection(node : XML, injector : Injector) : void
45
+ {
46
+ var orderArg : XMLList = node.arg.(@key == 'order');
47
+ var methodNode : XML = node.parent();
48
+ orderValue = int(orderArg.@value);
49
+ methodName = methodNode.@name.toString();
50
+ }
51
+ }
52
+ }